Ansible(二) - 配置及命令简介
Ⅰ. Ansible Inventory Hosts文件配置
# mkdir /etc/ansible # touch /etc/ansible/hosts # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 :: localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.137.6 client 192.168.137.5 server 192.168.137.7 web1 192.168.137.8 web2 # cat /etc/ansible/hosts [local] server client [web] web[1:2]192.168.13.14:52022jumpter ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50 # 其他ansible inventory参数举例ansible_ssh_user=xxxxansible_ssh_pass=xxxx ansible_sudo_pass=xxxxansible_sudo_exe=xxxx(sudo执行的路径)ansible_connection=xxx(与主机连接的类型,如local,ssh,paramiko)ansible_ssh_private_key_file=xxxansible_shell_type=xxx(目标系统的shell类型)ansible_python_interpreter=xxx
我这里就添加了两个主机组:local、web,local主机组两台主机,web主机组4台主机。
这里你可以把同一类主机或者是想统一管理的主机放在一个主机组里。
Ⅱ. Ansible配置及命令详解
· module_name
Ansible将管理功能分成一个个模块,默认是'command'模块,但是command模块不支持shell变量、管道、配额。所以,执行带有管道的命令,可以使用'shell'模块。
· pattern
如果没有提供'hosts'节点,这是playbook要通信的默认主机组,默认值是对所有主机通信。
1. 指定一组连续的机器:ansible 192.168.1.* -m ping (指定192.168.1/28网段所有机器)
2. 指定一组不相关机器:ansible abcd.com:efgh.com -m ping (同样适用于组连接)
3. 指定在local组,不在web组的机器: local:!web (从左到右依次匹配)
4. 指定在local组,也在web组的机器:local:&web
-a 指定传入模块的参数
-C -D 一起使用,检查hosts规则文件的修改
-l 限制匹配规则的主机数
--list-hosts 显示所有匹配规则的主机
-m -M指定所使用的模块和模块的路径
--syntax-check 检查语法
-v 显示详细日志
Ⅲ. Ansible命令举例
1> 执行第一条ansible命令
# ansible local -m ping #使用ping模块 server | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", } client | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", }
由于ansible是基于ssh,这里我们先要配置公钥。
# ssh-keygen -t rsa # ssh-copy-id -i [email protected] #为ansible管理的主机安装server的公钥
再次运行上一条命令:
# ansible local -m ping server | SUCCESS => { "changed": false, "ping": "pong" } client | SUCCESS => { "changed": false, "ping": "pong" }
2> 其他命令简介
查看local组主机内存使用情况:
# ansible local -a "free -m" server | SUCCESS | rc=0 >> total used free shared buff/cache available Mem: 1496 540 325 10 630 751 Swap: 2047 0 2047 client | SUCCESS | rc=0 >> total used free shared buff/cache available Mem: 1496 453 91 6 951 844 Swap: 2047 3 2044
若要执行带有管道的命令,可使用shell模块:
# ansible local -m shell -a "df -h | grep /home" server | SUCCESS | rc=0 >> /dev/mapper/cl-home 16G 187M 16G 2% /home client | SUCCESS | rc=0 >> /dev/mapper/cl-home 16G 187M 16G 2% /home
限定命令只在一台client主机生效:
# ansible -a "df -h" --limit "client"
执行一个耗时任务:(-B 3600表示最多运行60分钟,-P 60表示每隔60s获取一次状态)
ansible all -B 3600 -P 60 -a "/usr/bin/long_running-operation --do-stuff"
其他ansible参数可使用ansible -h查看。
3> 常用模块命令举例
①file模块
创建文件符链接:
# ansible local -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
更改文件权限为755,属组为root:root:
ansible local -m file -a "dest=/tmp/resolv.conf mode=755 owner=root group=root"
②service模块
启动NTP服务:
# ansible local -m service -a "name=ntpd state=started enabled=yes"
③copy模块
将本地文件拷贝到远程服务器:
# ansible local -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
更多模块请参考命令ansible-doc -l
模块官网 http://docs.ansible.com/ansible/latest/list_of_all_modules.html