1. 胖哥叨逼叨首页
  2. OpenSource
  3. Ansible

Ansible由浅入深 – 关于inventory

ansible同时操作多台主机的时候,可以通过inventory的主机清单与多台主机建立联系,默认的inventory文件路径是/etc/ansible/hosts。除了这个默认的文件 以外,在ansible环境中可以存在多个inventory文件也可以动态从云端获取inventory配置信息。

inventory参数说明

参数参数解释
ansible_ssh_host将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_portssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user默认的 ssh 用户名
ansible_ssh_passssh 密码(这种方式不安全,我们后面会分享如何通过SSH密钥进行连接)
ansible_sudo_passsudo 密码(这种方式不安全,我们后面会分享如何通过SSH密钥进行连接)
ansible_sudo_exesudo 命令路径
ansible_connection与主机的连接类型
ansible_ssh_private_key_filessh 使用的私钥文件.适用于有多个密钥,
ansible_shell_type目标系统的shell类型.默认情况下,命令的执行使用 ‘sh’ 语法,可设置为 ‘csh’ 或 ‘fish’.
ansible_python_interpreter目标主机的 python 路径.
inventory参数说明

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注