ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于Python开发的动态inventory脚本

2019-06-29 17:02:35  阅读:259  来源: 互联网

标签:脚本 10.0 Python self specific host inventory var


动态Inventory脚本的Python实现,简单方便清晰,可根据环境自己随机定制。

 

1. 直接上代码:

#!/usr/bin/python3

'''
给予Python的动态Inventory脚本举例
'''

import json
import argparse


class ExampleInventory:
    def __init__(self):
        self.inventory = {}
        self.read_cli_args()
        # 定义--list选项
        if self.args.list:
            self.inventory = self.example_inventory()
        # 定义--host选项
        elif self.args.host:
            self.inventory = self.empty_inventory()
        # 如果没有就返回一个空的Inventory
        else:
            self.inventory = self.empty_inventory()
        print(json.dumps(self.inventory))

    def example_inventory(self):
        return {
            'group': {
                'hosts': ['10.0.10.35', '10.0.10.36'],
                'vars': {
                    'ansible_ssh_user': 'root',
                    'ansible_ssh_private_key_file': '/root/.ssh/id_rsa',
                    'example_variable': 'value'
                }
            },
            '_meta': {
                'hostvars': {
                    '10.0.10.35': {
                        'host_specific_var': 'foo'
                    },
                    '10.0.10.36': {
                        'host_specific_var': 'bar'
                    }
                }
            }
        }

    # 测试所用的空的Inventory
    def empty_inventory(self):
        return {'_meta': {'hostvars': {}}}

    # 参数解析
    def read_cli_args(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('--list', action='store_true')
        parser.add_argument('--host', action='store')
        self.args = parser.parse_args()


ExampleInventory()

执行:

./inventory.py --list

结果:

{
    "group": {
        "hosts": ["10.0.10.35", "10.0.10.36"],
        "vars": {
            "ansible_ssh_user": "root",
            "ansible_ssh_private_key_file": "/root/.ssh/id_rsa",
            "example_variable": "value"
        }
    },
    "_meta": {
        "hostvars": {
            "10.0.10.35": {
                "host_specific_var": "foo"
            },
            "10.0.10.36": {
                "host_specific_var": "bar"
            }
        }
    }
}
View Code

2. 使用Ansible来调用这个脚本来测试这两台虚拟机的网络是否正常

 ansible all -i inventory.py -m ping

运行结果如下:

10.0.10.36 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.10.35 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

3. 验证主机所设置变量是否生效:

ansible all -i inventory.py -m debug -a 'var=host_specific_var'

运行结果如下:

10.0.10.35 | SUCCESS => {
    "host_specific_var": "foo"
}
10.0.10.36 | SUCCESS => {
    "host_specific_var": "bar"

 

总结:

生产环境中我们只需要根据业务特性修改example_inventory()函数,既可以通过调用外部API也可以给予CMDB系统去数据库查询所需主机信息,将其最终转化为JSON格式代码,供Ansible使用

 

标签:脚本,10.0,Python,self,specific,host,inventory,var
来源: https://www.cnblogs.com/xiao-xiong/p/11107066.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有