Home > System Tutorial > LINUX > body text

Introduction to Ansible Dynamic Inventory

王林
Release: 2024-08-24 10:44:02
Original
879 people have browsed it

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.

1. The simplest example

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)
Copy after login

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}
Copy after login

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"
]
}
}
Copy after login

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
Copy after login
2. Complex example

In the static host configuration file example, there will be group variables (vars), including between groups, as shown below:

Ansible Dynamic Inventory 介绍

If you want the above part, get the implementation through the script. The json format returned after implementation should be as shown below:

Ansible Dynamic Inventory 介绍

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.

3. Obtain host examples from third-party platforms

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.

4. Others

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
Copy after login

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`?
Copy after login

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!

source:linuxprobe.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template