一、编写第一条命令
Ansible 安装配置完毕,下面学习如何使用 Ansible。
就像学习编程语言那样,先写一个 hello world 示例程序。我们也写一个 Ansible 的 “hello world”:
ansible 192.168.128.83 -m ping
ansible -i 清单 组(主机) -m 模块 -a 参数
1
这条命令的意思是通过管理主机 ping 192.168.128.83
命令中的”-m ping”表示调用 ping 模块。由00节可知,Ansible 有很多模块,包括核心模块和自定义模块,不同的模块可以帮助我们完成不同的工作。我们会根据实际情况使用各种模块,Ansible 基于这些模块完成实际的任务。
如果想要让上述命令正常执行,则必须同时满足两个最基本的条件:
(1)Ansible 所在的管理主机可以通过ssh连接到被管理主机;
(2)被管理主机的IP地址等信息已经添加到 Ansible 的”管理清单(Inventory)”中。
条件(1)是因为 Ansible 不用在管理主机上安装 agent,但是它需要依赖ssh连接到被管理主机。条件(2)表明,即使 Ansible 所在的主机能够通过 ssh 连接到被管理主机,仍然需要将被管理主机的 IP 地址、ssh 端口号等信息添加到一个被称作为”管理清单(Inventory)”的配置文件中,如果对应的主机信息在 Ansible 的”清单”中不存在,那么 Ansible 则无法操作对应主机。
二、执行第一条命令
在01节我们已经安装好 Ansible 了,现在执行这个命令,看看效果:
[root@ansible-manager ~]# ansible 192.168.128.83 -m ping
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.128.83
警告显示,主机列表是空的。也就是上面说的第二个基本条件没有满足,虽然我们可以从管理节点 ping 通被管理节点,但是 Inventory 里面没有配置这一IP地址,Ansible 就无法正确执行。
下面在把 192.168.128.83 主机和 ssh 验证信息加入到 /etc/ansible/hosts (Inventory 文件的位置)中:
192.168.128.83 ansible_port=22 ansible_user=root ansible_ssh_pass=root
1
ansible_port :用于配置被管理主机上的sshd服务端口号,如果是默认的22,则可以省略。
ansible_user :用于配置连接到被管理主机时所使用的用户名称。
ansible_ssh_pass :用于配置被管理主机用户的连接密码。
再试一次,操作成功:
[root@ansible-manager ~]# ansible 192.168.128.83 -m ping
192.168.128.83 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Ansible 还支持对主机添加别名,当主机存在别名时,我们可以通过主机的”别名”管理对应主机。
比如,192.168.128.83 这台主机的别名为 ansible-demo3,那么,我们在配置清单时,可以进行如下配置:
ansible-demo3 anible_host=192.168.128.83 ansible_port=22 ansible_user=root ansible_ssh_pass=root
1
当为主机配置别名时,主机的IP地址必须使用 anible_host 关键字进行指明,否则 Ansible将无法正确的识别对应的主机。下面使用主机的别名管理对应主机:
[root@ansible-manager ~]# ansible ansible-demo3 -m ping
ansible-demo3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
三、配置管理节点免密登陆
为了安全考虑,一般会采用密钥验证方式登录主机。通过证书签名达到 ssh 无密码访问。使用 ssh-keygen 与 ssh-copy-id 来实现快速证书的生成及公钥下发。
[root@ansible-manager ~]# ssh-keygen
......
[root@ansible-manager ~]# ssh-copy-id root@192.168.128.83
......
既然已经能够免密码创建 ssh 连接,那么在配置”管理清单”时,就没有必要再提供对应主机的用户名和密码了,所以,可以将清单中的配置精简为如下(端口默认为22也可以省略):
ansible-demo3 anible_host=192.168.128.83
1
再次执行:
[root@ansible-manager ~]# ansible ansible-demo3 -m ping
ansible-demo3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
如果 192.168.128.83 的 hostname 为 ansible-demo3,则清单中的配置更可以精简为:
ansible-demo3
1
在后续的示例中,默认使用密钥认证的方式连接到被管理主机。