日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ansible Inventory指北进阶

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 image.png
  • 更改ansible的inventory可用插件。啟用Ansible插件的配置在/etc/ansible/ansible.cfg文件中,具體是那個文件在起作用,執行執行ansible --version命令就可以看到。
    image.png
  • 修改插件的位置在。


    image.png
    執行格式問題

    錯誤中還有關于執行格式錯誤的信息。

    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指北进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。