Ansible Inventory actually consists of two parts: static Inventory and dynamic Inventory. Static Inventory refers to the hosts and groups specified in the file /etc/ansible/hosts. Dynamic Inventory refers to obtaining the host list through external scripts and following the requirements of ansible The format returned to the ansilbe command. This part generally combines the CMDB asset management system, zabbix monitoring system, crobble installation system, cloud computing platform, etc. to obtain host information. Since host resources generally increase or decrease dynamically, these systems generally update intelligently. We can return the host list through the API or access library query provided by these tools.
Since Ansible supports json format when accepting scripts to dynamically obtain host information, I will not take it from other systems here, and print a segment of host information in json format through a piece of code:
#!/usr/bin/env python # coding=utf-8 import json host1ip = ['10.212.52.252','10.212.52.14'] host2ip = ['10.212.52.16'] group = 'test1' group2 = 'test2' hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}} print json.dumps(hostdata,indent=4)
Note:
1. The host part must be in list format;
2. In the hostdata line, the "hosts" part can be omitted, but if used, it must be "hosts" and cannot be other strings such as ‘‘hostlist’’.
After omitting, you can write it like this:
hostdata = {group:host1ip,group2:host2ip}
The result of executing this code directly is as follows:
[root@361way.com ~]# python twogroup.py { "test1": { "hosts": [ "10.212.52.252", "10.212.52.14" ] }, "test2": { "hosts": [ "10.212.52.16" ] } }
Two host groups are defined above. The test1 group contains hosts 10.212.52.252 and 10.212.52.14, and the test2 group contains host 10.212.52.16. ansible can be called through the following methods:
[root@361way.com ~]# ansible -i twogroup.py test1 -m command -a 'uptime' -k SSH password: 10.212.52.252 | success | rc=0 >> 23:01pm up 24 days 8:24, 2 users, load average: 0.21, 0.35, 0.39 10.212.52.14 | success | rc=0 >> 23:08pm up 332 days 5:23, 2 users, load average: 0.00, 0.01, 0.05 [root@361way.com ~]# ansible -i twogroup.py test2 -m command -a 'uptime' -k SSH password: 10.212.52.16 | success | rc=0 >> 23:09pm up 332 days 6:00, 2 users, load average: 0.08, 0.06, 0.05
In the static host configuration file example, there will be group variables (vars), including between groups, as shown below:
If you want the above part, get the implementation through the script. The json format returned after implementation should be as shown below:
Complex return formats like the above are generally not used in ad-hoc environments. Most of them are used in ansible-playbook. This is because the playbook file sometimes involves the passing of vars parameters.
This was mentioned at the beginning of this article. We obtained examples from platforms such as cobbler and cmdb. Since the initiator (author) of ansible is also the creator of cobbler software, the official document gives us an example of cobbler and an example of obtaining host information from AWS. As follows:
Get host information code on cobbler
Get host information code on aws cloud
Regarding how to obtain host information from AWS and put it into the database, I have written a related chapter before. For details, you can also refer to my previous blog post - AWS Host Asset Management (this article is also implemented in pure python).
Get host information through zabbix api. I also wrote a zabbix summary (8) Zabbix api. If you want to get host list information through zabbix platform, you can also refer to it.
1. The script called after the ansible -i parameter is not necessarily a py file, it can also be the output result of other scripts. Here is a simple test:
[root@361way.com yaml]# ansible -i group.sh test1 -m command -a 'uptime' -k SSH password: 10.212.52.16 | success | rc=0 >> 00:18am up 332 days 7:10, 2 users, load average: 0.00, 0.01, 0.05 10.212.52.14 | success | rc=0 >> 00:17am up 332 days 6:32, 2 users, load average: 0.01, 0.03, 0.05 10.212.52.252 | success | rc=0 >> 00:11am up 24 days 9:33, 2 users, load average: 0.49, 0.42, 0.41 [root@localhost yaml]# cat group.sh #!/bin/bash groups=''' { "test1": { "hosts": [ "10.212.52.252", "10.212.52.14", "10.212.52.16" ] } } ''' echo $groups
2. The script specified by the -i parameter needs to have executable permission, otherwise an error will be reported, as follows:
[root@361way.com yaml]# ansible -i hostjson.py AA -a 'uptime' ERROR: The file hostjson.py looks like it should be an executable inventory script, but is not marked executable. Perhaps you want to correct this with `chmod +x hostjson.py`?
The above is the detailed content of Introduction to Ansible Dynamic Inventory. For more information, please follow other related articles on the PHP Chinese website!