當你希望通過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.