Ansible的inventory文件定义了它要操作的一些主机,它可以通过inventory对这些主机进行操控。默认的inventory文件是/etc/ansible/hosts 。也可通过-i选项,来指定不同的inventory文件。

Ansible也支持从云中拉取inventory文件执行,拉取的文件可以试YMAL,ini,etc等格式。 这个是在ansbible 的 2.4版本新引入的功能,Ansible也有inventory的插件来让inventory变的更灵活和自定义化。

inventory的格式一般如下:

mail.example.com[webservers]
foo.example.com
bar.example.com[dbservers]
one.example.com
two.example.com
three.example.com

关于inventory的详细描述,参考我早期参与的翻译项目,Ansible 中文权威

动态inventory

静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表,并按照 ansible 所要求的格式返回给 ansilbe 命令的。这部分一般会结合 CMDB 资管系统、云计算平台等获取主机信息。

看到一段很不错的代码,参考下。

#!/usr/bin/python
#!/Users/aihe/.pyenv/shims/python
#coding : utf-8import json
import sysdef group():host1 = ['192.168.0.112']host2 = ['192.168.0.112','192.168.0.109']group1 = 'test1'group2 = 'test2'hostdata = {group1:{"hosts":host1},group2:{"hosts":host2}}print(json.dumps(hostdata,indent=4))def host(ip):info_dict = {"192.168.0.112": {"ansible_ssh_host":"192.168.0.112","ansible_ssh_port":22,"ansible_ssh_user":"root","ansible_ssh_pass":"123457"},"192.168.0.109": {"ansible_ssh_host":"192.168.0.109","ansible_ssh_port":22,"ansible_ssh_user":"root","ansible_ssh_pass":"xxxx"}}# 判断key是否在字典中,在的话打印出来,不在的话打印空字典。if ip in info_dict:print(json.dumps(info_dict[ip],indent=4))else:print(json.dumps({},indent=4))if len(sys.argv) == 2 and (sys.argv[1] == '--list'):group()
elif len(sys.argv) == 3 and (sys.argv[1] == '--host'):host(sys.argv[2])
else:print("Usage: %s --list or --host <hostname>" % sys.argv[0])sys.exit(1)
  1. 单独执行的时候

    image.png

  2. 结合Ansible执行。虽然连接报错误了,但是这因为主机是随便定义的,如果是可以连接的主机则是正常工作的。

    image.png

到这里,其实我们的动态inventory大体框架已经出来了,剩下的则是将代码中的硬编码变为动态获取,数据库或其它持久存储的地方获取即可。

问题

在写这段代码的时候遇到几个问题,很有意思,解决问题的过程就是让我们成长的过程...
另外报的错误实在也是有点迷惑人啊。

inventory插件问题
  1. 错误截图,看到因为ini的插件无法解析json数据

    image.png

查看所有可用的插件列表

ansible-doc -t inventory -l
image.png

  1. 更改ansible的inventory可用插件。启用Ansible插件的配置在/etc/ansible/ansible.cfg文件中,具体是那个文件在起作用,执行执行ansible --version命令就可以看到。

    image.png

修改插件的位置在。

image.png

执行格式问题

错误中还有关于执行格式错误的信息。

image.png

  1. 错误原因
    刚开始一直报执行格式错误问题,这个问题有点荒唐,因为我安装了pyenv,python执行的路径在开头写成了
#!/Users/aihe/.pyenv/shims/python

而这个文件是sh文件,普通的可执行文本文件了,导致出错,晕掉...

  1. 解决方案

将开头的#!修改为python的解释器。然后就执行成功了。

#!/usr/bin/python

最后

要知道inventory的格式,inventory在ansible中可以理解为主机清单。动态的inventory可以给我们提供很多便利的操作,我们可以更灵活的控制主机了。

如果你的数据格式,在已有的inventory插件中,你也可以自己尝试开发一个,具体开发参考下面的参考部分。

参考

  • Ansible 进阶 | 动态 Inventory
  • 开发Ansible inventory

Ansible Inventory指北进阶相关推荐

  1. Android进阶三部曲 第三部《Android进阶指北》已完稿

    今天说两件事,一个是第三本书完稿,一个是本公众号改名. 1.第三本书<进阶指北>今天完稿了 耗时1年半,我的第三本书<进阶指北>终于在今天完稿了.前两本书每本都是耗时1年左右, ...

  2. 《Android进阶指北》进阶必备,今日送出8本

    有段时间没做赠书活动了,正巧最近由刘皇叔编写的Android进阶三部曲最终章:<Android进阶指北>正式出版,作为小福利,今日抽取 本送给大家. 1.Android进阶三部曲知识体系 ...

  3. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  4. Ansible inventory文件详解

    我们知道inventory主要用来管理managed nodes(host),定义playbook要在哪些远程机器上执行.如果不熟悉inventory的角色的,可以参考ansible playbook ...

  5. ansible Inventory

    什么是 Inventory? ​ Ansible 可同时操作属于一个组的多台主机,组合主机之间的关系通过 Inventory 文件配置,默认的路径为 /etc/ansible/hosts 案例: 19 ...

  6. 新司机的黑裙战斗机 篇四:新司机的黑群晖指北—软件篇(下)

    原文网址:https://post.smzdm.com/p/awxl3d44/ 各位剁友好,我是身在长沙的一只小剁,因为ID的缘故长沙剁友赐雅号--姐夫 本文是我的首个系列<新司机的黑裙战斗机& ...

  7. 新司机的黑裙战斗机 篇二:入门—新司机的黑群晖指北——软件篇(上)

    原文网址:https://post.smzdm.com/p/alpkmoge/ 各位剁友好,我是身在长沙的一只小剁,因为ID的缘故长沙剁友赐雅号--姐夫 上一篇关于硬件配置和装机的晒单,引发了大量评论 ...

  8. Markdown 标记语言指北 - 源码

    这是上一篇博客的源代码. 这是班刊约稿的一篇文章.全文约6000字, 预计需要 60 分钟读完.# Markdown 标记语言指北 #### TOC 1. [什么是 Markdown?](#%E4%B ...

  9. Python 简单入门指北(试读版)

    本文是我小专栏中 Python 简单入门指北 一文的前半部分,如果你能坚持读完并且觉得有一定收获,建议阅读原文,只需一杯咖啡钱就可以阅读更精彩的部分,也可以订阅小专栏或者加入我的知识星球,价格都是 6 ...

最新文章

  1. 分布的matlab实现_图像相似度---灰度分布算法---用matlab实现
  2. 第十一章:Java_多线程
  3. c语言教程的辅导书,清华大学出版社-图书详情-《C语言程序设计案例教程学习辅导》...
  4. 开放医疗交通大数据技术 服务于公共便民领域
  5. AAAI 2021 | 视频超分中的可变形对齐解读
  6. Git使用总结-so easy
  7. 关于使用CAD文件预览的使用
  8. GridView 样式
  9. IOS免签网站封装工具PJ版
  10. MATLAB代码:基于分时电价条件下家庭能量管理策略研究
  11. maven clean Process terminated
  12. 大端模式和小端模式之“终极记忆”
  13. 2016上半年高项项目经理考试培训考试感想
  14. 二叉平衡树的算法复杂度笔记
  15. 镭速(Raysync)文件传输对比Filezilla测试!
  16. Flutter学习之Dart语言基础(内置类型)
  17. autocad2014点击保存闪退_AutoCAD2014闪退的具体原因和解决方法介绍
  18. 2013年Google PR不会再更新了
  19. 区块链拓宽实验艺术边界 新技术如何重塑现代美学想象?
  20. 2023最新Ypay源支付系统源码V6.9.9版+兼容易支付和码支付API

热门文章

  1. 机器学习经典书籍小结
  2. 常见数学符号:等号、不等号、算术运算符号、几何符号、三角函数、指数、对数、微分、积分符号、集合符号、逻辑符号
  3. TCP 的那些事儿(上)
  4. 易天光通信ETU 25G SFP28光模块规格参数
  5. SimpleDateFormat-时间格式化中的大小写字符
  6. SQLMAP使用笔记
  7. 说说 XSRF 防范
  8. 定域性和实在性之矛盾的世界
  9. Hive2.1.0集成Tez
  10. 优秀ASP.NET程序员修炼之路