第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Ansible Inventory指北進(jìn)階

標(biāo)簽:
Python

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-8

import json
import sys

def 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插件中,你也可以自己尝试开发一个,具体开发参考下面的参考部分。

参考

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 1
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消