如 动态Inventory所介绍,ansibel可以从一个动态的数据源获取到inventory信息,包含元端数据源。

来源:互联网 发布:java做的小游戏 编辑:程序博客网 时间:2024/06/05 04:09
如 动态Inventory所介绍,ansibel可以从一个动态的数据源获取到inventory信息,包含元端数据源。怎么写一个自己的数据源?很简单! 我们仅仅需要创建一个在适当参数下,能够返回正确JSON格式数据的脚本或者程序,你可以使用任何语言来实现。脚本规范:当我们在外部使用-list 蚕食调用这个脚本时,[root@node01 ~]# python  /etc/ansible/inventory.py  -list{"all": ["192.168.137.3"]}这个脚本必须返回一个JSON散列/字典,它包含所管理的所有组,每个组的value应该是一个关于其包含的主机/IP哈希/字典,它可能是一个子组或者租的变量 或者仅仅是一个主机/IP的列表:[root@node01 ansible]# cat p2.py # !/usr/bin/env python# -*- coding: utf-8 -*-import cx_Oraclefrom pprint import pprintimport csvimport timeimport reimport binasciiimport jsona={    "databases"   : {        "hosts"   : [ "host1.example.com", "host2.example.com" ],        "vars"    : {            "a"   : 'true'        }    },    "webservers"  : [ "host2.example.com", "host3.example.com" ],    "atlanta"     : {        "hosts"   : [ "host1.example.com", "host4.example.com", "host5.example.com" ],        "vars"    : {            "b"   : 'false'        },        "children": [ "marietta", "5points" ]    },    "marietta"    : [ "host6.example.com" ],    "5points"     : [ "host7.example.com" ]}b=json.dumps(a)print b[root@node01 ansible]# python  /etc/ansible/p2.py  -list{"webservers": ["host2.example.com", "host3.example.com"], "atlanta": {"hosts": ["host1.example.com", "host4.example.com", "host5.example.com"], "children": ["marietta", "5points"], "vars": {"b": "false"}}, "marietta": ["host6.example.com"], "5points": ["host7.example.com"], "databases": {"hosts": ["host1.example.com", "host2.example.com"], "vars": {"a": "true"}}}[root@node01 ansible]# chmod +x p2.py[root@node01 ansible]#  ansible -i  /etc/ansible/p2.py webservers  -m raw -a "hostname"host2.example.com | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname host2.example.com: Name or service not known\r\n",     "unreachable": true}host3.example.com | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname host3.example.com: Name or service not known\r\n",     "unreachable": true}ansible -i  /etc/ansible/p2.py webservers  -m raw -a "hostname" 调用webservers 组

原创粉丝点击