Ansible Inventory指北进阶
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)
单独执行的时候
image.png结合Ansible执行。虽然连接报错误了,但是这因为主机是随便定义的,如果是可以连接的主机则是正常工作的。
image.png
到这里,其实我们的动态inventory大体框架已经出来了,剩下的则是将代码中的硬编码变为动态获取,数据库或其它持久存储的地方获取即可。
问题
在写这段代码的时候遇到几个问题,很有意思,解决问题的过程就是让我们成长的过程...
另外报的错误实在也是有点迷惑人啊。
inventory插件问题
错误截图,看到因为ini的插件无法解析json数据
image.png
查看所有可用的插件列表
ansible-doc -t inventory -l
- 更改ansible的inventory可用插件。启用Ansible插件的配置在/etc/ansible/ansible.cfg文件中,具体是那个文件在起作用,执行执行
ansible --version
命令就可以看到。image.png
修改插件的位置在。
执行格式问题
错误中还有关于执行格式错误的信息。
- 错误原因
刚开始一直报执行格式错误问题,这个问题有点荒唐,因为我安装了pyenv,python执行的路径在开头写成了
#!/Users/aihe/.pyenv/shims/python
而这个文件是sh文件,普通的可执行文本文件了,导致出错,晕掉...
- 解决方案
将开头的#!修改为python的解释器。然后就执行成功了。
#!/usr/bin/python
最后
要知道inventory的格式,inventory在ansible中可以理解为主机清单。动态的inventory可以给我们提供很多便利的操作,我们可以更灵活的控制主机了。
如果你的数据格式,在已有的inventory插件中,你也可以自己尝试开发一个,具体开发参考下面的参考部分。
参考
- Ansible 进阶 | 动态 Inventory
- 开发Ansible inventory
Ansible Inventory指北进阶相关推荐
- Android进阶三部曲 第三部《Android进阶指北》已完稿
今天说两件事,一个是第三本书完稿,一个是本公众号改名. 1.第三本书<进阶指北>今天完稿了 耗时1年半,我的第三本书<进阶指北>终于在今天完稿了.前两本书每本都是耗时1年左右, ...
- 《Android进阶指北》进阶必备,今日送出8本
有段时间没做赠书活动了,正巧最近由刘皇叔编写的Android进阶三部曲最终章:<Android进阶指北>正式出版,作为小福利,今日抽取 本送给大家. 1.Android进阶三部曲知识体系 ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- Ansible inventory文件详解
我们知道inventory主要用来管理managed nodes(host),定义playbook要在哪些远程机器上执行.如果不熟悉inventory的角色的,可以参考ansible playbook ...
- ansible Inventory
什么是 Inventory? Ansible 可同时操作属于一个组的多台主机,组合主机之间的关系通过 Inventory 文件配置,默认的路径为 /etc/ansible/hosts 案例: 19 ...
- 新司机的黑裙战斗机 篇四:新司机的黑群晖指北—软件篇(下)
原文网址:https://post.smzdm.com/p/awxl3d44/ 各位剁友好,我是身在长沙的一只小剁,因为ID的缘故长沙剁友赐雅号--姐夫 本文是我的首个系列<新司机的黑裙战斗机& ...
- 新司机的黑裙战斗机 篇二:入门—新司机的黑群晖指北——软件篇(上)
原文网址:https://post.smzdm.com/p/alpkmoge/ 各位剁友好,我是身在长沙的一只小剁,因为ID的缘故长沙剁友赐雅号--姐夫 上一篇关于硬件配置和装机的晒单,引发了大量评论 ...
- Markdown 标记语言指北 - 源码
这是上一篇博客的源代码. 这是班刊约稿的一篇文章.全文约6000字, 预计需要 60 分钟读完.# Markdown 标记语言指北 #### TOC 1. [什么是 Markdown?](#%E4%B ...
- Python 简单入门指北(试读版)
本文是我小专栏中 Python 简单入门指北 一文的前半部分,如果你能坚持读完并且觉得有一定收获,建议阅读原文,只需一杯咖啡钱就可以阅读更精彩的部分,也可以订阅小专栏或者加入我的知识星球,价格都是 6 ...
最新文章
- 分布的matlab实现_图像相似度---灰度分布算法---用matlab实现
- 第十一章:Java_多线程
- c语言教程的辅导书,清华大学出版社-图书详情-《C语言程序设计案例教程学习辅导》...
- 开放医疗交通大数据技术 服务于公共便民领域
- AAAI 2021 | 视频超分中的可变形对齐解读
- Git使用总结-so easy
- 关于使用CAD文件预览的使用
- GridView 样式
- IOS免签网站封装工具PJ版
- MATLAB代码:基于分时电价条件下家庭能量管理策略研究
- maven clean Process terminated
- 大端模式和小端模式之“终极记忆”
- 2016上半年高项项目经理考试培训考试感想
- 二叉平衡树的算法复杂度笔记
- 镭速(Raysync)文件传输对比Filezilla测试!
- Flutter学习之Dart语言基础(内置类型)
- autocad2014点击保存闪退_AutoCAD2014闪退的具体原因和解决方法介绍
- 2013年Google PR不会再更新了
- 区块链拓宽实验艺术边界 新技术如何重塑现代美学想象?
- 2023最新Ypay源支付系统源码V6.9.9版+兼容易支付和码支付API