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


    如 动态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_Oracle
    from pprint import pprint
    import csv
    import time
    import re
    import binascii
    import json
    a={
        "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
    ", 
        "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
    ", 
        "unreachable": true
    }
    
    
    ansible -i  /etc/ansible/p2.py webservers  -m raw -a "hostname" 调用webservers 组

  • 相关阅读:
    jquery mobile
    可能用到的负边距应用
    兼容性问题
    less和scss
    函数的继承
    关于canvas
    html5表单属性
    html代码
    git 拉取远程分支 --本地分支不存在
    git 删除分支
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349486.html
Copyright © 2020-2023  润新知