管理动态清单
受控主机比较少的情况下,建议是使用静态主机清单的,但当我们处于一个大型的环境下,受控主机非常非常多的时候,而且受控主机更替非常快的时候,我们使用静态主机清单就很难来管理了,我们使用动态的主机清单更便于我们管理了。
Ansible支持动态清单脚本,这些脚本在每当ansible执行时从这些类型的来源检索当前的信息,使清单能够实时得到更新。这些清单脚本是可执行的程序,能够从一些外部来源收集信息,并以JSON格式输出清单。
可以通过ansible-inventory -i 主机清单文件 --list
命令,将主机清单以JSON的格式显示出来
[student@ansible ansible]$ vim inventory
node1 myvar=111
[net]
node2
[webserver:children]
net
[student@ansible ansible]$ ansible-inventory -i inventory --list
"_meta": { //_meta下记录着我们主机中是否定义变量
"hostvars": {
"node1": {
"myvar": "111"
}
}
},
"all": { // all:列出我们所有的主机组
"children": [
"ungrouped",
"webserver"
]
},
"net": { //net主机组下的成员
"hosts": [
"node2"
]
},
"ungrouped": { //ungrouped主机组就是不属于任何主机组的主机的
"hosts": [
"node1"
]
},
"webserver": {
"children": [
"net"
]
}
}
例:
[student@ansible ansible]$ vim inventory.py
#!/usr/bin/env python3
'''
Example custom dynamic inventory script for Ansible, in Python.
'''
import os
import sys
import argparse
import json
class ExampleInventory(object):
def __init__(self):
self.inventory = {}
self.read_cli_args()
# Called with `--list`.
if self.args.list:
self.inventory = self.example_inventory()
# Called with `--host [hostname]`.
elif self.args.host: