在Ansible中的变量分为内置变量与自定义变量,通过在主机清单中添加一些变量能简化主机清单的设置。1.3.2小节在主机清单中添加客户机的用户名与密码,其实就是在向主机清单中添加变量。
Ansible常用的内置变量如表1.2所示。
表1.1 Ansible常用内置变量
变量 | 说明 |
---|---|
ansible_ssh_host | 定义hosts ssh地址 |
ansible_ssh_port | 定义hosts ssh端口 |
ansible_ssh_user | 定义hosts ssh认证用户 |
ansible_ssh_pass | 定义hosts ssh认证密码 |
ansible_sudo | 定义hosts sudo用户 |
ansible_sudo_pass | 定义hosts sudo密码 |
ansible_sudo_exe | 定义hosts sudo路径 |
当需要对一个主机组添加一些变量时,可以为这个主机组配置一个专属的变量组,具体代码如下所示。
[root@ansible ~]# vim /etc/ansible/hosts
[root@ansible ~]# cat /etc/ansible/hosts
#主机组
[webserver]
host[1:3]
#变量组
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='f'
读者可根据需要设置不同的变量信息。这里需要注意的是,Ansible变量组的格式必须是“[主机组名:vars]”,否则系统将会报错。
Ansible可以将不同的分组进行组合,达到便捷管理的目的,示例如下所示。
[root@ansible ~]# cat /etc/ansible/hosts
#子分组
[apache]
Host[1:2]
#子分组
[nginx]
Host3
#主机组
[webserver:children]
apache
nginx
#主机组变量
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='1'
上述代码中,webserver组中包含了apache组和nginx组,三个组名可以随意调用。此处需要注意的是,当分组中包含子分组时,分组名称的格式必须是“[分组名:children]”。此处尝试连接3个主机组,测试其连通性,实验代码及结果如下所示。
l 测试apache组
[root@ansible ~]# ansible apache -m ping
host1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
l 测试nginx组
[root@ansible ~]# ansible nginx -m ping
host3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
l 测试webserver组
[root@ansible ~]# ansible webserver -m ping
host2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
host1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
从代码的反馈结果可以看到,三个主机组均可以连通。当客户机机数量过多,且部分主机功能一致时,可以采取创建子分组的形式进行管理。
当客户机数量增大时,可以创建多个主机清单进行管理,或将其存放到不同的路径下。下面在/root下创建一个主机清单hostlist,具体代码如下所示。
[root@ansible ~]# vim hostlist
[root@ansible ~]# cat hostlist
[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='f'
此处创建的主机清单hostlist中仅包含一个主机组与一个变量组。创建完成后,通过该主机清单对客户机进行连接(-i参数可以用户指定主机清单),结果如下所示。
[root@ansible ~]# ansible -i hostlist dockers -m ping
host2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
host1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
通过代码的反馈结果可以看到,系统通过指定自定义的主机清单对客户机进行了连接,并且连接成功。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。