ansible組件——Inventory


當你希望通過ansible來配置管理一台的機器的時候,你只需要將這台機器的ip寫入到inventory組件里面。
一般inventory默認的地址是:
  inventory = /etc/ansible/hosts

 

1.定義主機和主機組

一般ansible默認的配置文件是/etc/ansible/ansible.cfg,
主機信息配置文件是/etc/ansible/hosts.
如果機器數量不多,你只需要將ip以及密碼寫入到hosts文件里面,這樣就可以使用了

 

如果你是用的是密鑰登錄,那么直接下面這樣就可以了:

關於如何通過密鑰來無密碼登錄,可以參考博客:https://www.cnblogs.com/yangmingxianshen/p/10159539.html

在最新版本中,默認是適用密鑰來登錄,所以需要將host_key_checking = False,也就是不通過密鑰認證。
但是在生產環境中,機器的數量非常多,我們希望進行一個分組管理:

上面配置了servers這個大組,還有webservers和dbservers這兩個小組,之所以這樣配置,是有些操作希望所有的機器都可以配置到。
然乎就有下面這幾種操作方式:

方式1:直接操作ip

方式2:操作組名

操作小組也可以:

-m:指定模塊名;
-a:指定模塊的參數;
這樣就可以區別對待了。

 

2.多個Inventory

如果你面對的機器群的量非常大,一個hosts配置這些機器信息,那么這個文件最后將將非常大。
此時你可以將hosts文件進行拆分,這樣更加方便。
此時你在ansible.cfg需要指定inventory是一個目錄:
  inventory = /etc/ansible/inventory
目錄結構:

配置內容:

這里你定義的多個hosts文件,不論你定義什么名字都可以,ansible會直接掃描inventory目錄下所有文件中的組:

 

3.動態Inventory

  在實際應用中會部署大量的主機列表,如果手動維護將是一件非常繁瑣的事情。
Ansible還支持動態的Inventory,也就是Ansible所有的Inventory文件里的主機列表和變量信息都可以從外部拉取。
ansible會根據腳本信息,然后選擇對應的方式執行腳本,動態獲取主機信息。
此時我們只需要將inventory的值設置成一個腳本就可以了。
  inventory = /etc/ansible/pro.py
對於這個腳本的編寫會有兩個要求,必須支持兩個參數:
  --list或者-L:顯示所有主機和主機組的信息,JSON格式。

  

  --host或者-H:返回某台主機的信息,JSON格式。

  

腳本信息:

#!/usr/bin/python
#coding:utf-8

import sys
import json

hosts = {"hosts":["129.28.86.57","148.70.122.28"]}
r = {}
r["servers"] = hosts
argv_1 = None

try:
    argv_1 = sys.argv[1]
except IndexError as e:
    raise ValueError("請輸入參數")


if argv_1 and argv_1 in ["--list","-L","--host","-H"]:
    if argv_1 in ["--list","-L"]:
        print(json.dumps(r))
    else:
        print(json.dumps({"ansible_ssh_pass":"467661568cx."}))
else:
    print("please enter --list or -L or --host or -H")

最后我們就可以動態操作服務器:

通過-i指定腳本也可以:

 

4.Inventory內置參數

Ansible中有一些內置參數,比如我們之前看到的ansible_ssh_pass.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM