Ansible之模塊參數(一)

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

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

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

輸入:ansible --help,就會出來很多信息,主要看Usage這一行,其實這個usage個人覺得寫的不是太好,如果有個實例就更完美了。

Ansible之模塊參數(一)

針對ansible的參數,簡單的說明一下 吧,也參考了網上的說明

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命令行後的。所以,可以這麼理解:

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

所以我現在先用簡單第一種簡單粗暴的方式,把node1,node2和node3都加進去,而且只加他們的主機名,更改之後保存,退出。

由於我們沒有分組,所以直接執行下面的命令:

ansible node1 -m ping

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。沒毛病。

那現在我們用第二、第三種方法,把不同的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,沒毛病。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章