一、編寫第一條命令
Ansible 安裝配置完畢,下面學習如何使用 Ansible。
就像學習程式設計語言那樣,先寫一個 hello world 樣本程式。我們也寫一個 Ansible 的 “hello world”:
ansible 192.168.128.83 -m ping
這條命令的意思是通過管理主機 ping 192.168.128.83
命令中的”-m ping”表示調用 ping 模組。由00節可知,Ansible 有很多模組,包括核心模組和自訂模組,不同的模組可以協助我們完成不同的工作。我們會根據實際情況使用各種模組,Ansible 基於這些模組完成實際的任務。
如果想要讓上述命令正常執行,則必須同時滿足兩個最基本的條件:
(1)Ansible 所在的管理主機可以通過ssh串連到被管理主機;
(2)被管理主機的IP地址等資訊已經添加到 Ansible 的”管理清單(Inventory)”中。
條件(1)是因為 Ansible 不用在管理主機上安裝 agent,但是它需要依賴ssh串連到被管理主機。條件(2)表明,即使 Ansible 所在的主機能夠通過 ssh 串連到被管理主機,仍然需要將被管理主機的 IP 位址、ssh 連接埠號碼等資訊添加到一個被稱作為”管理清單(Inventory)”的設定檔中,如果對應的主機資訊在 Ansible 的”清單”中不存在,那麼 Ansible 則無法操作對應主機。 二、執行第一條命令
在01節我們已經安裝好 Ansible 了,現在執行這個命令,看看效果:
[root@ansible-manager ~]# ansible 192.168.128.83 -m ping [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' [WARNING]: Could not match supplied host pattern, ignoring: 192.168.128.83
警告顯示,主機列表是空的。也就是上面說的第二個基本條件沒有滿足,雖然我們可以從管理節點 ping 通被管理節點,但是 Inventory 裡面沒有配置這一IP地址,Ansible 就無法正確執行。
下面在把 192.168.128.83 主機和 ssh 驗證資訊加入到 /etc/ansible/hosts (Inventory 檔案的位置)中:
192.168.128.83 ansible_port=22 ansible_user=root ansible_ssh_pass=root
ansible_port :用於配置被管理主機上的sshd服務連接埠號碼,如果是預設的22,則可以省略。
ansible_user :用於配置串連到被管理主機時所使用的使用者名稱稱。
ansible_ssh_pass :用於配置被管理主機使用者的串連密碼。
再試一次,操作成功:
[root@ansible-manager ~]# ansible 192.168.128.83 -m ping192.168.128.83 | SUCCESS => { "changed": false, "ping": "pong"}
Ansible 還支援對主機添加別名,當主機存在別名時,我們可以通過主機的”別名”管理對應主機。
比如,192.168.128.83 這台主機的別名為 ansible-demo3,那麼,我們在配置清單時,可以進行如下配置:
ansible-demo3 anible_host=192.168.128.83 ansible_port=22 ansible_user=root ansible_ssh_pass=root
當為主機配置別名時,主機的IP地址必須使用 anible_host 關鍵字進行指明,否則 Ansible將無法正確的識別對應的主機。下面使用主機的別名管理對應主機:
[root@ansible-manager ~]# ansible ansible-demo3 -m pingansible-demo3 | SUCCESS => { "changed": false, "ping": "pong"} 三、組態管理節點免密登陸
為了安全考慮,一般會採用密鑰驗證方式登入主機。通過認證簽名達到 ssh 無密碼訪問。使用 ssh-keygen 與 ssh-copy-id 來實現快速認證的產生及公開金鑰下發。
[root@ansible-manager ~]# ssh-keygen......[root@ansible-manager ~]# ssh-copy-id root@192.168.128.83......
既然已經能夠免密碼建立 ssh 串連,那麼在配置”管理清單”時,就沒有必要再提供對應主機的使用者名稱和密碼了,所以,可以將清單中的配置精簡為如下(連接埠預設為22也可以省略):
ansible-demo3 anible_host=192.168.128.83
再次執行:
[root@ansible-manager ~]# ansible ansible-demo3 -m pingansible-demo3 | SUCCESS => { "changed": false, "ping": "pong"}
如果 192.168.128.83 的 hostname 為 ansible-demo3,則清單中的配置更可以精簡為:
ansible-demo3
在後續的樣本中,預設使用密鑰認證的方式串連到被管理主機。 四、總結
本節我們學習了第一條 Ansible 命令,瞭解了命令能夠成功執行的前提條件。下節我們對 Ansible 管理命令做簡單介紹。
參考文檔:
http://www.zsythink.net/archives/2481