天天看點

02-第一條Ansible指令

一、編寫第一條指令

Ansible 安裝配置完畢,下面學習如何使用 Ansible。

就像學習程式設計語言那樣,先寫一個 hello world 示例程式。我們也寫一個 Ansible 的 “hello world”:

ansible 192.168.128.83 -m ping

ansible -i 清單 組(主機) -m 子產品 -a 參數

1

這條指令的意思是通過管理主機 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 ping
192.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 ping
ansible-demo3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
           

三、配置管理節點免密登陸

為了安全考慮,一般會采用密鑰驗證方式登入主機。通過證書簽名達到 ssh 無密碼通路。使用 ssh-keygen 與 ssh-copy-id 來實作快速證書的生成及公鑰下發。

[root@ansible-manager ~]# ssh-keygen
......
[root@ansible-manager ~]# ssh-copy-id [email protected]
......
           

既然已經能夠免密碼建立 ssh 連接配接,那麼在配置”管理清單”時,就沒有必要再提供對應主機的使用者名和密碼了,是以,可以将清單中的配置精簡為如下(端口預設為22也可以省略):

ansible-demo3 anible_host=192.168.128.83

再次執行:

[root@ansible-manager ~]# ansible ansible-demo3 -m ping
ansible-demo3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
           

如果 192.168.128.83 的 hostname 為 ansible-demo3,則清單中的配置更可以精簡為:

ansible-demo3

在後續的示例中,預設使用密鑰認證的方式連接配接到被管理主機。

繼續閱讀