1、需求:
需要在多臺主機上,發送文件、執行命令,進行快速部署
2、ansible 遠程複製文件
例子:在當前節點(20.88.14.7) 上向其他指定的節點發送文件
(1)創建host---基於密碼連接其他節點
vim host
[ip_list]
20.88.14.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="root"
20.88.14.9 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="root"
(2)創建測試文件
vim test_ansible.sh
(3)遠程複製文件到各個節點
ansible ip_list -i ./host -m copy -a "src=./test_ansible.sh dest=/root/"
解釋:
-i :指定hosts文件路徑, 默認default=/etc/ansible/hosts
-m :要執行的模塊,默認爲command(這裏使用的是copy模塊,更多模塊見 後文,4(3)ansible常用模塊)
-a:指定模塊的參數 (可增加權限參數:owner=root mode=777)
copy模塊:
[root@node1 ~]# ansible-doc -s copy - name: 將文件複製到被管理主機 action: copy backup # 創建一個備份文件包括時間戳信息,如果以某種方式重創錯了,還可以拿回原始文件 content # 取代src=,表示直接用此處指定的信息生成爲目標文件內容; dest= # 遠程節點存放文件的路徑,必須是絕對路徑 directory_mode # 遞歸複製設置目錄權限,默認爲系統默認權限 force # 如果目標主機包含該文件,但內容不同,如果設置爲yes,則強制覆蓋,如果設置爲no,則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes group # 複製到遠程主機後,指定文件或目錄的屬 mode # 複製到遠程主機後,指定文件或目錄權限,類似與 'chmod' 指明如 0644 owner # 複製到遠程主機後,指定文件或目錄屬主 src # 要複製到遠程主機的文件在本地的地址,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸複製。 在這種情況下,如果路徑使用"/"來結尾,則只複製目錄裏的內容,如果沒有使用"/"來結尾,則包含目錄在內的整個內容全部複製,類似於rsync。
(4)執行結果:
當前節點執行成功的結果:
其他節點:
3、ansible 遠程執行命令,修改 test_ansible.sh 的名字爲 test_ansible_new.sh
(1)創建host---基於密碼連接其他節點
同前
(2)遠程執行命令,改名
ansible ip_list -i ./host -m command -a "mv /root/test_ansible.sh /root/test_ansible_new.sh"
解釋:
command模塊(命令模塊,默認模塊,用於在遠程主機執行命令,缺點:運行的命令中無法使用變量,管道。如果需要使用管道、變量,請使用raw模塊,或者shell模塊)
[root@node1 ~]# ansible-doc -s command
chdir # 在執行命令之前,先切換到該目錄
creates # 一個文件名,當這個文件存在,則該命令不執行,可以用來做判斷
executable # 切換shell來執行命令,需要使用命令的絕對路徑
free_form= #要執行的Linux指令,一般使用Ansible的-a參數代替。
removes #一個文件名,這個文件不存在,則該命令不執行,與creates相反的判斷
(3)執行結果
本節點(20.88.14.7):
其他節點:
4、參考:
(1)ansible的安裝和連接
https://www.cnblogs.com/yanjieli/p/10969089.html
(2)ansible常用參數
https://www.cnblogs.com/tyk3201/p/12383081.html
(3)ansible常用模塊
https://www.cnblogs.com/ccorz/p/ansible-chang-yong-mo-kuai.html