1.安装ansible
如果没有版本和别的要求,这里直接使用yum安装
yum -y install ansible
查看版本
[root@0006 ~]#ansible --version
ansible 2.4.2.0
config file = /etc/ansible/ansible.cfg
executable location = /usr/bin/ansible
python version = 2.7.5
2.Ansible 功能详解
配置文件
配置文件或指令 | 描述 |
/etc/ansible/ansible.cfg | 主配置文件,配置ansible工作特性 |
/etc/ansible/hosts | 主机清单 |
/etc/ansible/roles/ | 存放角色的目录 |
/usr/bin/ansible | 主程序,临时命令执行工具 |
/usr/bin/ansible-doc | 查看配置文档,模块功能查看工具 |
/usr/bin/ansible-galaxy | 下载/上传优秀代码或Roles模块的官网平台 |
/usr/bin/ansible-playbook | 定制自动化任务,编排剧本工具 |
/usr/bin/ansible-pull | 远程执行命令的工具 |
/usr/bin/ansible-vault | 文件加密工具 |
/usr/bin/ansible-console | 基于Console界面与用户交互的执行工具 |
3.主机清单
Ansible必须通过Inventory 来管理主机。Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置。
语法格式:
//单台主机
green.example.com // FQDN
192.168.100.10 // IP地址
192.168.100.11:2222 // 非标准SSH端口
[webservers] // 定义了一个组名
alpha.example.org // 组内的单台主机
192.168.100.10
[dbservers]
192.168.100.10 // 一台主机可以是不同的组,这台主机同时属于[webservers]
[group:children] // 组嵌套组,group为自定义的组名,children是关键字,固定语法,必须填写。
dns // group组内包含的其他组名
db // group组内包含的其他组名
[webservers]
www[001:006].hunk.tech // 有规律的名称列表,
//这里表示相当于:
www001.hunk.tech
www002.hunk.tech
www003.hunk.tech
www004.hunk.tech
www005.hunk.tech
www006.hunk.tech
[databases]
db-[a:e].example.com // 定义字母范围的简写模式,
//这里表示相当于:
db-a.example.com
db-b.example.com
db-c.example.com
db-d.example.com
db-e.example.com
//以下这2条定义了一台主机的连接方式,而不是读取默认的配置设定
localhost ansible_connection=local
www.163.com ansible_connection=ssh ansible_ssh_user=hunk
//最后还有一个隐藏的分组,那就是all,代表全部主机,这个是隐式的,不需要写出来的。
4.ansible命令
[root@0006 ~]# ansible dns -m ping # 使用ansible对dns组内的主机进行ping模块测试
[root@0006 ~]# ansible dns -m ping -k #加上-k选项后,会提示输入ssh密码了。
[root@0006 ~]# ansible dns -m command -a 'free'
[root@0006 ~]# ansible mfs -m shell -a "curl 'http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS' > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS"
[root@0006 ~]# ansible wo -m shell -a "sed -i '/ntpdate/d' /var/spool/cron/root"
[root@0006 ~]# ansible wo -m shell -a "echo '0 20 * * * /usr/sbin/ntpdate 192.168.2.1 && /sbin/clock -w > /dev/null 2>&1' >>/var/spool/cron/root"
Ansible常用命令语法
ansible <host-pattern> [-m module_name] [options]
//指令 匹配规则的主机清单 -m 模块名 选项
--version //显示版本
-a //模块参数(如果有)
-m module //指定模块,默认为command
-v //详细过程 –vv -vvv更详细
--list-hosts //显示主机列表,可简写--list
-k, --ask-pass //提示连接密码,默认Key验证
-K,--ask-become-pass //提示使用sudo密码
-C, --check //检查,并不执行
-T, --timeout=TIMEOUT //执行命令的超时时间,默认10s
-u, --user=REMOTE_USER //执行远程执行的用户
-U, SUDO_USER, --sudo-user //指定sudu用户
-b, --become //代替旧版的sudo 切换
ansible-doc: //显示模块帮助
ansible-doc [options] [module...]
-a //显示所有模块的文档
-l, --list //列出可用模块
-s, --snippet //显示指定模块的简要说明
//例子:#ansible-doc ping
//由于ansible的模块有1378个(2.4.2.0),并且一直在持续更新。因此,这个指令必须要掌握的。
#ansible-doc -l |wc -l
1378