Ansible之模塊參數(一)

爲了運行Ansible的第一個命令,咱們前期作了大量的配置工做, 在controller主機和各個node主機上。爲何這麼作,就是爲了可以直接使用ansible,遠程指揮一堆一堆的服務器,copy文件,安裝軟件包,更新軟件,更改配置文件等等等等。。。node

若是你查看了ansible官方文檔,人家也是要讓你從最最基礎的命令開始,就像你學任何編程語言,第一個例子永遠都是打印一句:hello world!web

對於ansible而言,我查了一些教程,也聽同事介紹過,那第一條命令就是ping。要想使用任何工具,那第一個動做就是要查看一下help,就是看看使用說明書,以確保你的打開姿式是正確的。編程

輸入:ansible --help,就會出來不少信息,主要看Usage這一行,其實這個usage我的以爲寫的不是太好,若是有個實例就更完美了。服務器

Ansible之模塊參數(一)

針對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一下,看看裏面的內容:編程語言

Ansible之模塊參數(一)

如上圖所示,這個hosts文件裏已經給出了3個例子,怎麼寫受控主機你應該知道了吧。
第一種:簡單粗暴,直接寫受控主機的hostname或者IP地址。
第二種和第三種:相似,都是以分組的方式——[組名],這個組名就是能夠跟在ansible命令行後的。因此,能夠這麼理解:ide

  1. ansible命令後面必需要跟目標主機
  2. 這個目標主機的寫法有多種,能夠是目標主機的hostname,也能夠是IP,也能夠是你定義在ansible hosts文件裏的組名。
  3. 可是不管是什麼名字,那都要加入到ansible的hosts文件裏,不然是沒用的,ansible是不識別的。因此這個hosts文件,是ansile的倉庫,你讓ansible作什麼事情,它得先找到目標,那它每次都是先去這個倉庫裏找目標,而後再下手。

因此我如今先用簡單第一種簡單粗暴的方式,把node1,node2和node3都加進去,並且只加他們的主機名,更改以後保存,退出。工具

因爲咱們沒有分組,因此直接執行下面的命令:測試

ansible node1 -m pingthis

ansible:命令關鍵字,必需要有
node1:就是你要遠程控制的主機名稱,這裏也可使用IP地址,效果相同
-m:這個就是指你想用ansible的哪一個模塊,後面跟上就行,如今這個 例子是用ping的模塊。注意這個是Linux上面的ping模塊,若是目前主機是Windows,是有一個Win_ping對應的模塊。最好帶上吧!若是不帶這個-m參數,默認是使用command這個模塊。

Ansible之模塊參數(一)

以上就是一個最簡單的ansible ad-hoc命令了。

下面咱們在執行ansible命令時,把node1這個主機名稱,換成IP地址看看:

Ansible之模塊參數(一)

從上圖能夠看到,是不行滴。爲何呢?回顧一下ansible執行的過程,它會先去倉庫裏找目標啊,很顯然,咱們沒有 把這個IP地址加入到hosts這個倉庫裏,它固然就找不到了。那咱們如今把這個IP地址加入進去,而後再運行一下:ansible 192.168.137.101 -m ping,看看會不會報錯。

加入IP地址到ansible hosts文件中:
Ansible之模塊參數(一)
再運行命令:ansible 192.168.137.101 -m ping
Ansible之模塊參數(一)

完美,你發起了ping,它給你個pong。沒毛病。

那如今咱們用第2、第三種方法,把不一樣的server,分紅不一樣的組。

假如node1和node2是web服務器,那我就把這兩臺主機放到[webservers]組,那node3就當作database服務器吧,放到[dbservers]
調整ansible的hosts文件以下:

Ansible之模塊參數(一)

注意一下,我在[dbservers]這個組下,放了node3主機名和node1的IP地址。

讓咱們來ansible一下,對象是咱們新建的組,先來webservers組吧:
Ansible之模塊參數(一)

兩個ping,連個pong,都顯示SUCCESS,沒毛病。

那咱們再來看看dbservers這個組,由於這個組裏包含了主機名和主機IP地址兩種格式:
Ansible之模塊參數(一)
如上圖所示,兩個ping,連個pong,都顯示SUCCESS,沒毛病。

好了,這個就先扯到這裏吧!下篇再加個參數,你猜是哪一個?

相關文章
相關標籤/搜索