爲了運行Ansible的第一個命令,咱們前期作了大量的配置工做, 在controller主機和各個node主機上。爲何這麼作,就是爲了可以直接使用ansible,遠程指揮一堆一堆的服務器,copy文件,安裝軟件包,更新軟件,更改配置文件等等等等。。。node
若是你查看了ansible官方文檔,人家也是要讓你從最最基礎的命令開始,就像你學任何編程語言,第一個例子永遠都是打印一句:hello world!web
對於ansible而言,我查了一些教程,也聽同事介紹過,那第一條命令就是ping。要想使用任何工具,那第一個動做就是要查看一下help,就是看看使用說明書,以確保你的打開姿式是正確的。編程
輸入:ansible --help,就會出來不少信息,主要看Usage這一行,其實這個usage我的以爲寫的不是太好,若是有個實例就更完美了。服務器
針對ansible的參數,簡單的說明一下 吧,也參考了網上的說明async
ansible -h 參數解析 Usage: ansible <host-pattern> [options] Options: ** -a MODULE_ARGS, --args=MODULE_ARGS 下面-m模塊的參數,這個參數很重要,這個參數很重要,這個參數很重要!重要的事情說三遍。若是執行默認COMMAND的模塊,便是命令參數,如:「date」,"pwd"等等** -k, --ask-pass ask for SSH password 登陸密碼,提示輸入SSH密碼而不是假設基於密鑰的驗證 --ask-su-pass ask for su password su切換密碼 -K, --ask-sudo-pass ask for sudo password 提示密碼使用sudo,sudo表示提權操做 --ask-vault-pass ask for vault password -B SECONDS, --background=SECONDS 後臺運行超時時間 run asynchronously, failing after X seconds (default=N/A) -C, --check don't make any changes; instead, try to predict some 只是測試一下會改變什麼內容,不會真正去執行;相反,試圖預測一些可能發生的變化 of the changes that may occur -c CONNECTION, --connection=CONNECTION 鏈接類型使用。可能的選項是paramiko(SSH),SSH和地方。當地主要是用於crontab或啓動。 connection type to use (default=smart) -f FORKS, --forks=FORKS 並行任務數。NUM被指定爲一個整數,默認是5 specify number of parallel processes to use (default=5) -h, --help show this help message and exit 打開幫助文檔API -i INVENTORY, --inventory-file=INVENTORY 指定庫存主機文件的路徑,默認爲/etc/ansible/hosts specify inventory host file (default=/etc/ansible/hosts) -l SUBSET, --limit=SUBSET 進一步限制所選主機/組模式 --limit=192.168.91.135 只對這個ip執行 further limit selected hosts to an additional pattern --list-hosts outputs a list of matching hosts; does not execute anything else
** -m MODULE_NAME, --module-name=MODULE_NAME 執行模塊的名字,默認使用 command 模塊,因此若是是隻執行單一命令能夠不用 -m參數。這個參數很重要,這個參數很重要!重要的事情說三遍。**
module name to execute (default=command) -M MODULE_PATH, --module-path=MODULE_PATH 要執行的模塊的路徑,默認爲/usr/share/ansible/ specify path(s) to module library (default=/usr/share/ansible/) -o, --one-line condense output 壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。 -P POLL_INTERVAL, --poll=POLL_INTERVAL 調查背景工做每隔數秒。須要- b set the poll interval if using -B (default=15) --private-key=PRIVATE_KEY_FILE 私鑰路徑,使用這個文件來驗證鏈接 use this file to authenticate the connection -S, --su run operations with su 用 su 命令 -R SU_USER, --su-user=SU_USER 指定SU的用戶,默認是root用戶 run operations with su as this user (default=root) -s, --sudo run operations with sudo (nopasswd) -U SUDO_USER, --sudo-user=SUDO_USER sudo到哪一個用戶,默認爲 root desired sudo user (default=root) -T TIMEOUT, --timeout=TIMEOUT 指定SSH默認超時時間, 默認是10S override the SSH timeout in seconds (default=10) -t TREE, --tree=TREE log output to this directory 將日誌內容保存在該輸出目錄,結果保存在一個文件中在每臺主機上。 -u REMOTE_USER, --user=REMOTE_USER 遠程用戶, 默認是root用戶 connect as this user (default=root) --vault-password-file=VAULT_PASSWORD_FILE vault password file -v, --verbose verbose mode (-vvv for more, -vvvv to enable 若是命令執行成功,輸出詳細的結果。輸出執行過程的詳細信息:-v<-vv<-vvv<-vvvv,單間的說就是v越多,輸出的信息就越詳細。 connection debugging)( - vv –vvv - vvvv) --version show program's version number and exit 輸出ansible的版本
好了,上面的幫助信息,看看就好,知道大概怎麼用了,可是還不夠具體。要想運行ansible命令,還有一個前提條件,就是要把受控的主機,加到ansible的hosts文件裏,這樣ansible才知道它受控的主機有哪些。hosts文件路徑在:/etc/ansible/hosts下。咱們來cat一下,看看裏面的內容:編程語言
如上圖所示,這個hosts文件裏已經給出了3個例子,怎麼寫受控主機你應該知道了吧。
第一種:簡單粗暴,直接寫受控主機的hostname或者IP地址。
第二種和第三種:相似,都是以分組的方式——[組名],這個組名就是能夠跟在ansible命令行後的。因此,能夠這麼理解:ide
因此我如今先用簡單第一種簡單粗暴的方式,把node1,node2和node3都加進去,並且只加他們的主機名,更改以後保存,退出。工具
因爲咱們沒有分組,因此直接執行下面的命令:測試
ansible node1 -m pingthis
ansible:命令關鍵字,必需要有
node1:就是你要遠程控制的主機名稱,這裏也可使用IP地址,效果相同
-m:這個就是指你想用ansible的哪一個模塊,後面跟上就行,如今這個 例子是用ping的模塊。注意這個是Linux上面的ping模塊,若是目前主機是Windows,是有一個Win_ping對應的模塊。最好帶上吧!若是不帶這個-m參數,默認是使用command這個模塊。
以上就是一個最簡單的ansible ad-hoc命令了。
下面咱們在執行ansible命令時,把node1這個主機名稱,換成IP地址看看:
從上圖能夠看到,是不行滴。爲何呢?回顧一下ansible執行的過程,它會先去倉庫裏找目標啊,很顯然,咱們沒有 把這個IP地址加入到hosts這個倉庫裏,它固然就找不到了。那咱們如今把這個IP地址加入進去,而後再運行一下:ansible 192.168.137.101 -m ping,看看會不會報錯。
加入IP地址到ansible hosts文件中:
再運行命令:ansible 192.168.137.101 -m ping
完美,你發起了ping,它給你個pong。沒毛病。
那如今咱們用第2、第三種方法,把不一樣的server,分紅不一樣的組。
假如node1和node2是web服務器,那我就把這兩臺主機放到[webservers]組,那node3就當作database服務器吧,放到[dbservers]
調整ansible的hosts文件以下:
注意一下,我在[dbservers]這個組下,放了node3主機名和node1的IP地址。
讓咱們來ansible一下,對象是咱們新建的組,先來webservers組吧:
兩個ping,連個pong,都顯示SUCCESS,沒毛病。
那咱們再來看看dbservers這個組,由於這個組裏包含了主機名和主機IP地址兩種格式:
如上圖所示,兩個ping,連個pong,都顯示SUCCESS,沒毛病。
好了,這個就先扯到這裏吧!下篇再加個參數,你猜是哪一個?