当ansible同时操作多台主机的时候,可以通过inventory的主机清单与多台主机建立联系,默认的inventory文件路径是/etc/ansible/hosts
。除了这个默认的文件 以外,在ansible环境中可以存在多个inventory文件也可以动态从云端获取inventory配置信息。
inventory参数说明
参数 | 参数解释 |
---|---|
ansible_ssh_host | 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置. |
ansible_ssh_port | ssh端口号.如果不是默认的端口号,通过此变量设置. |
ansible_ssh_user | 默认的 ssh 用户名 |
ansible_ssh_pass | ssh 密码(这种方式不安全,我们后面会分享如何通过SSH密钥进行连接) |
ansible_sudo_pass | sudo 密码(这种方式不安全,我们后面会分享如何通过SSH密钥进行连接) |
ansible_sudo_exe | sudo 命令路径 |
ansible_connection | 与主机的连接类型 |
ansible_ssh_private_key_file | ssh 使用的私钥文件.适用于有多个密钥, |
ansible_shell_type | 目标系统的shell类型.默认情况下,命令的执行使用 ‘sh’ 语法,可设置为 ‘csh’ 或 ‘fish’. |
ansible_python_interpreter | 目标主机的 python 路径. |
inventory.ini变量
上篇我们分享了如何通过inventory.ini文件执行ansible ping,命令是ansible all -m ping -i inventory.ini
,此处我们会注意到,由于我们环境一共有三台机器(一台主控、两台受控),所以通过执行此命令的时候会将inventory.ini文件里面的信息都执行一遍。当我们只需要与其中某一台受控主机进行联系的时候,我们可以输入ansible ansible-node1 -m ping -i inventory.ini
来与ansible-node1进行联系。
分组
当然,inventory.ini也是支持分组的,我们现在的inventory.ini文件内容是下面这样的,可以通过分组来满足我们其他的实际需求,分组可以包含多个元素,由于环境限制我们就把两台受控主机分配成两个分组。
# 分组前 ansible-node1 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd ansible-node2 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd
# 分组后 [pangshare-01] ansible-node1 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd [pangshare-02] ansible-node2 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd
分组后我们可以将all
变换成组名进行命令执行
ansible pangshare-01 -m ping -i inventory.ini #执行命令返回结果 ansible-node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
变量
当我们inventory.ini中主机数量比较多的时候,一条一条主机的编写是没有问题的,但是效率很低。在做好受控主机命名标准化后,我们可以通过类似正则表达式的方式进行编写inventory.ini文件。
假设我们现在有3台受控主机,那么我们在编写inventory.ini文件的时候可以有以下两种方式进行编写
方式一
ansible-node1 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd ansible-node2 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd ansible-node3 ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd
方式二
ansible-node[1:3] ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd
怎么样注意到变化了么,是的。我们可以看到在做好主机命名标准化后,我们可以很方便的通过[1:3]这样的方式用1条命令代替3条命令。我们来测试一下效果。
[pangshare-01] ansible-node[1:3] ansible_connection=ssh ansible_user=root ansible_ssh_pass=ansible_pwd # 执行命令返回结果 ansible-node3 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname ansible-node3: Name or service not known", "unreachable": true } ansible-node1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } ansible-node2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
我们可以看到当执行完命令后,系统会返回无法与ansible-node3联系。通过上面简单的分享我们可以初步的了解了inventory.ini的简单写法。
此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/2379.htm