Ansible 點對點命令快速入門指南示例
之前,我們寫了一篇有關 Ansible 安裝和配置 的文章。在那個教程中只包含了一些使用方法的示例。如果你是 Ansible 新手,建議你閱讀上篇文章。一旦你熟悉了,就可以繼續閱讀本文了。
默認情況下,Ansible 僅使用 5 個並行進程。如果要在多個主機上執行任務,需要通過添加 -f [進程數]
選項來手動設置進程數。
什麼是 點對點 命令?
點對點命令用於在一個或多個受控節點上自動執行任務。它非常簡單,但是不可重用。它使用 /usr/bin/ansible
二進位文件執行所有操作。
點對點命令最適合運行一次的任務。例如,如果要檢查指定用戶是否可用,你可以使用一行命令而無需編寫劇本。
為什麼你要了解點對點命令?
點對點命令證明了 Ansible 的簡單性和強大功能。從 2.9 版本開始,它支持 3389 個模塊,因此你需要了解和學習要定期使用的 Ansible 模塊列表。
如果你是一個 Ansible 新手,可以藉助點對點命令輕鬆地練習這些模塊及參數。
你在這裡學習到的概念將直接移植到劇本中。
點對點命令的一般語法:
ansible [模式] -m [模塊] -a "[模塊選項]"
點對點命令包含四個部分,詳細信息如下:
部分 | 描述 |
---|---|
ansible |
命令 |
模式 | 輸入清單或指定組 |
模塊 | 運行指定的模塊名稱 |
模塊選項 | 指定模塊參數 |
如何使用 Ansible 清單文件
如果使用 Ansible 的默認清單文件 /etc/ansible/hosts
,你可以直接調用它。否則你可以使用 -i
選項指定 Ansible 清單文件的路徑。
什麼是模式以及如何使用它?
Ansible 模式可以代指某個主機、IP 地址、清單組、一組主機或者清單中的所有主機。它允許你對它們運行命令和劇本。模式非常靈活,你可以根據需要使用它們。
例如,你可以排除主機、使用通配符或正則表達式等等。
下表描述了常見的模式以及用法。但是,如果它不能滿足你的需求,你可以在 ansible-playbook
中使用帶有 -e
參數的模式中的變數。
描述 | 模式 | 目標 |
---|---|---|
所有主機 | all (或 * ) |
對清單中的所有伺服器運行 Ansible |
一台主機 | host1 |
只針對給定主機運行 Ansible |
多台主機 | host1:host2 (或 host1,host2 ) |
對上述多台主機運行 Ansible |
一組 | webservers |
在 webservers 群組中運行 Ansible |
多組 | webservers:dbservers |
webservers 中的所有主機加上 dbservers 中的所有主機 |
排除組 | webservers:!atlanta |
webservers 中除 atlanta 以外的所有主機 |
組之間的交集 | webservers:&staging |
webservers 中也在 staging 的任何主機 |
什麼是 Ansible 模塊,它幹了什麼?
模塊,也稱為「任務插件」或「庫插件」,它是一組代碼單元,可以直接或通過劇本在遠程主機上執行指定任務。
Ansible 在遠程目標節點上執行指定模塊並收集其返回值。
每個模塊都支持多個參數,可以滿足用戶的需求。除少數模塊外,幾乎所有模塊都採用 key=value
參數。你可以一次添加帶有空格的多個參數,而 command
或 shell
模塊會直接運行你輸入的字元串。
我們將添加一個包含最常用的「模塊選項」參數的表。
列出所有可用的模塊,運行以下命令:
$ ansible-doc -l
運行以下命令來閱讀指定模塊的文檔:
$ ansible-doc [模塊]
1)如何在 Linux 上使用 Ansible 列出目錄的內容
可以使用 Ansible command
模塊來完成這項操作,如下所示。我們列出了 node1.2g.lab
和 nod2.2g.lab
* 遠程伺服器上 daygeek
用戶主目錄的內容。
$ ansible web -m command -a "ls -lh /home/daygeek"
node1.2g.lab | CHANGED | rc=0 >>
total 12K
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Desktop
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Documents
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Downloads
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Music
-rwxr-xr-x. 1 daygeek daygeek 159 Mar 4 2019 passwd-up.sh
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Pictures
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Public
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Templates
-rwxrwxr-x. 1 daygeek daygeek 138 Mar 10 2019 user-add.sh
-rw-rw-r--. 1 daygeek daygeek 18 Mar 10 2019 user-list1.txt
drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Videos
node2.2g.lab | CHANGED | rc=0 >>
total 0
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Desktop
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Documents
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Downloads
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Music
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Pictures
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Public
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Templates
drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Videos
2)如何在 Linux 使用 Ansible 管理文件
Ansible 的 copy
模塊將文件從本地系統複製到遠程系統。使用 Ansible command
模塊將文件移動或複製到遠程計算機。
$ ansible web -m copy -a "src=/home/daygeek/backup/CentOS7.2daygeek.com-20191025.tar dest=/home/u1" --become
node1.2g.lab | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c",
"dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar",
"gid": 0,
"group": "root",
"md5sum": "ee8e778646e00456a4cedd5fd6458cf5",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 30720,
"src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.474042-118186643704900/source",
"state": "file",
"uid": 0
}
node2.2g.lab | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c",
"dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar",
"gid": 0,
"group": "root",
"md5sum": "ee8e778646e00456a4cedd5fd6458cf5",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 30720,
"src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.4793239-237229399335623/source",
"state": "file",
"uid": 0
}
我們可以運行以下命令進行驗證:
$ ansible web -m command -a "ls -lh /home/u1" --become
node1.2g.lab | CHANGED | rc=0 >>
total 36K
-rw-r--r--. 1 root root 30K Jan 22 14:56 CentOS7.2daygeek.com-20191025.tar
-rw-r--r--. 1 root root 25 Dec 9 03:31 user-add.sh
node2.2g.lab | CHANGED | rc=0 >>
total 36K
-rw-r--r--. 1 root root 30K Jan 23 02:26 CentOS7.2daygeek.com-20191025.tar
-rw-rw-r--. 1 u1 u1 18 Jan 23 02:21 magi.txt
要將文件從一個位置複製到遠程計算機上的另一個位置,使用以下命令:
$ ansible web -m command -a "cp /home/u2/magi/ansible-1.txt /home/u2/magi/2g" --become
移動文件,使用以下命令:
$ ansible web -m command -a "mv /home/u2/magi/ansible.txt /home/u2/magi/2g" --become
在 u1
用戶目錄下創建一個名為 ansible.txt
的新文件,運行以下命令:
$ ansible web -m file -a "dest=/home/u1/ansible.txt owner=u1 group=u1 state=touch" --become
在 u1
用戶目錄下創建一個名為 magi
的新目錄,運行以下命令:
$ ansible web -m file -a "dest=/home/u1/magi mode=755 owner=u2 group=u2 state=directory" --become
將 u1
用戶目錄下的 ansible.txt
* 文件許可權更改為 777
,運行以下命令:
$ ansible web -m file -a "dest=/home/u1/ansible.txt mode=777" --become
刪除 u1
用戶目錄下的 ansible.txt
文件,運行以下命令:
$ ansible web -m file -a "dest=/home/u2/magi/ansible-1.txt state=absent" --become
使用以下命令刪除目錄,它將遞歸刪除指定目錄:
$ ansible web -m file -a "dest=/home/u2/magi/2g state=absent" --become
3)用戶管理
你可以使用 Ansible 輕鬆執行用戶管理活動。例如創建、刪除用戶以及向一個組添加用戶。
$ ansible all -m user -a "name=foo password=[crypted password here]"
運行以下命令刪除用戶:
$ ansible all -m user -a "name=foo state=absent"
4)管理包
使用合適的 Ansible 包管理器模塊可以輕鬆地管理安裝包。例如,我們將使用 yum
模塊來管理 CentOS 系統上的軟體包。
安裝最新的 Apache(httpd):
$ ansible web -m yum -a "name=httpd state=latest"
卸載 Apache(httpd) 包:
$ ansible web -m yum -a "name=httpd state=absent"
5)管理服務
使用以下 Ansible 模塊命令可以在 Linux 上管理任何服務。
停止 httpd 服務:
$ ansible web -m service -a "name=httpd state=stopped"
啟動 httpd 服務:
$ ansible web -m service -a "name=httpd state=started"
重啟 httpd 服務:
$ ansible web -m service -a "name=httpd state=restarted"
via: https://www.2daygeek.com/ansible-ad-hoc-command-quick-start-guide-with-examples/
作者:Magesh Maruthamuthu 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive