开发动态的Inventory数据源

如动态 Inventory 所介绍,ansible可以从一个动态的数据源获取到inventory信息,包含云端数据源,怎么写一个自己的数据源?很简单!我们仅仅需要创建一个在适当参数下,能够返回正确JSON格式数据的脚本或者程序,你可以使用任何语言来实现.

脚本规范

 

当我们在外部使用``–list``参数调用这个脚本时,这个脚本必须返回一个JSON散列/字典,它包含所管理的所有组.每个组的value应该是一个关于其包含的主机/IP哈希/字典,它可能是一个子组或者组的变量或者仅仅是一个主机/IP的列表, 例如:

{

    "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" ]

}

New in version 1.0.

在版本1.0之前,每一个组只能是一个包含hostnames/IP Address的列表,像上面的webservers, marietta, 5points组

当我们使用``–host <hostname>``(这里的<hostname>只指相对上面数据中的host)参数调用时,这个脚本必须返回一条空的JSON 哈希/字典, 或者关于变量的JSON哈希/字典,这些变量将被用来模板或者playbooks. 返回变量是可选的,如果脚本不希望这样做,返回一条空的哈希/字典即可:

{

    "favcolor"   : "red",

    "ntpserver"  : "wolf.example.com",

    "monitoring" : "pack.example.com"

}

 

开启调用外部Inventory脚本

New in version 1.3.

这个inventory脚本系统在所有的Ansible版本中都将会被调用,但是当使用``–host``参数操作每一台主机时,这将是十分麻烦(低效率),尤其是当它用在调用远程子系统时.在Ansible 1.3以后的版本(包含1.3),如果inventory脚本返回的顶级元素为”_meta”,它可能会返回所有主机的变量.如果这个元素中包含一个名为”hostvars”的value,这个inventory脚本对每一台主机使用``–host``时将不会被调用.这将大大增加主机的执行效率,并且也使客户端更容易实现这个脚本的数据缓存.

这个数据将会被添加到JSON字典的顶级,像下面的格式:

{

    # results of inventory script asabove go here

    # inventory脚本将到此终止

    # ...

    "_meta" : {

       "hostvars" : {

          "moocow.example.com"     : { "asdf" : 1234 },

          "llama.example.com"      : { "asdf" : 5678 },

       }

    }

}

  • 发表于 2022-07-29 14:37
  • 阅读 ( 3026 )
  • 分类:Ansible

0 条评论

请先 登录 后评论
乐维君
乐维君

397 篇文章

作家榜 »

  1. 乐维君 397 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章