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

相关推荐