《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》
AAP 支持从 VMware vCenter、OpenStack、红帽虚拟化、AWS、AZure、Google Cloud、红帽卫星、外部文件等源头批量导入主机清单。
{
"dyngroup":{
"hosts":[
"cloud1.cloud.example.com",
"cloud2.cloud.example.com",
"cloud3.cloud.example.com",
"cloud4.cloud.example.com"
],
"vars":{
"var1": true
}
},
"_meta":{
"hostvars":{
"cloud1.cloud.example.com":{
"type":"lb"
},
"cloud2.cloud.example.com":{
"type":"web"
},
"cloud3.cloud.example.com":{
"type":"web"
},
"cloud4.cloud.example.com":{
"type":"database"
}
}
}
}
#!/bin/bash
if [ "$1" == "--list" ] ; then
curl -sS https://gitee.com/dawnskyliu/playbooks_adv_summit2021/raw/master/inventory/inventory_list
elif [ "$1" == "--host" ]; then
echo '{"_meta": {"hostvars": {}}}'
else
echo "{ }"
fi
$ ansible-navigator inventory -i inventory-script --list -m stdout
。。。
。。。
{
"_meta": {
"hostvars": {
"cloud1.cloud.example.com": {
"type": "lb",
"var1": true
},
"cloud2.cloud.example.com": {
"type": "web",
"var1": true
},
"cloud3.cloud.example.com": {
"type": "web",
"var1": true
},
"cloud4.cloud.example.com": {
"type": "database",
"var1": true
}
}
},
"all": {
"children": [
"dyngroup",
"ungrouped"
]
},
"dyngroup": {
"hosts": [
"cloud1.cloud.example.com",
"cloud2.cloud.example.com",
"cloud3.cloud.example.com",
"cloud4.cloud.example.com"
]
}
}
$ ansible-navigator inventory -i inventory-script --host cloud1.cloud.example.com -m stdout
。。。
。。。
{
"type": "lb",
"var1": true
}
参照上一节的方法,将清单 “源” 设为 Git 项目的 “inventory/inventory.ini” 文件。
[group_a]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
[group_b]
server3 ansible_host=203.0.113.113
server4 ansible_host=server_hostname
[group_a:vars]
ansible_user=sammy
[group_b:vars]
ansible_user=myuser
在同步后可以看到导入的主机列表:
参照上一节的方法,将清单 “源” 设为 Git 项目的 “inventory/inventory.yaml” 文件,在同步后可以看到导入的主机列表。
ll: # keys must be unique, i.e. only one 'hosts' per group
hosts:
test1:
test2:
host_var: value
vars:
group_all_var: value
children: # key order does not matter, indentation does
other_group:
children:
group_x:
hosts:
test5 # Note that one machine will work without a colon
group_y:
hosts:
test6: # So always use a colon
vars:
g2_var2: value3
hosts:
test4:
ansible_host: 127.0.0.1
last_group:
hosts:
test1 # same host as above, additional group membership
vars:
group_last_var: value
可以将 “智能清单” 看成是 “主机” 的视图,因此创建新的 “智能清单” 前需要 AAP 中至少先有一个 “主机”。
在 AAP 的清单中创建一个 “智能清单”。
进入 “智能主机过滤器” 的 “放大镜” 图标,此时在对话框中应该显示当前 AAP 的所有主机。
在弹出对话框中将 “名称” 改为 “高级”,然后按照下图查找 name,查找类型为 regex ,查找内容为 cloud[2-4].cloud.example.com,最后点击 “放大镜” 图标。
此时对话框可之显示过滤后的主机,最后点击 “选择” 按钮。
查看新创建的 “智能清单” 对应的 “主机”,即为上一步过滤出的主机。
导入外部主机清单和智能清动态清单
使用 Playbook 向 Ansible 导入主机清单
https://ansible-labs-crew.github.io/ansible-controller-advanced/7-advanced-inventories/
https://www.digitalocean.com/community/tutorials/how-to-set-up-ansible-inventories