changed_when模塊來(lái)實(shí)現。該模塊會(huì )在??任務(wù)執行后檢查文件或目錄的換目狀態(tài)是否發(fā)生變化,如果發(fā)生變化則標記為已更改。換目Ansi(??ヮ?)?*:???ble Playbook切換目錄
(圖片來(lái)源網(wǎng)絡(luò ),換目侵刪)Ansible Playbook是換目一種自動(dòng)化配置管理工具,用于在多臺主機上執行任務(wù),換目在使用Ansi??ble Playbook時(shí),??換目有時(shí)需要在不同的換目目錄之間切換,本文將介紹如何在(zai)Ansible Playbook中切換目錄。換目
1. 使用changed_when模塊
可??以使用chan??ged_when模塊來(lái)檢查文件或目錄是換目否存在,然后根據檢查結果執行相應的換目操作,以下是換目一個(gè)示例:
name: 切換目錄 hosts: al??l tasks: name: 檢查目錄是否存在 stat┐(′?`)┌: path: /path/to/your/directory register: directory_check name: 切換目錄 command: "cd??(′?`*) /path/to/your/directory" when: directory_check.stat.exists
在這(zhe)個(gè)示??例中,我們首先使用stat模塊檢查目標目錄是否存在,如果存在,我們將使用command??模(′▽?zhuān)?塊執行cd命令以切換到該目錄。when關(guān)鍵字用(yong)于指定僅在目錄存在時(shí)執行此操作。
2. 使用shell模塊和條件語(yǔ)句
另一種方法是使用shell模塊和條件語(yǔ)句(如if)來(lái)執行切換目錄的操作,以下是一個(gè)示例:
name: 切換目錄 hosts: all tasks: name: 切換目錄 shell: "cd /path/to/your/directory &am??p;& pwd" register: directory(′Д` )_check changed_when: false ignore_errors: true name: 輸出當??前目錄 debug: var: directory_check.stdout_lines[0] when(′?`): directory_check.rc == 0 and direcヾ(′▽?zhuān)??tory_check.stdout_lines[0] != "/path/to/your/director??y"在這個(gè)示例中,我們使用shell模塊執行(xing)cd命令并獲取當前目錄,我們將結果存儲在directory_ch??eck變量中,我們使用(′ω`)條ヽ(′ー`)ノ件語(yǔ)句檢查命令??的返回代碼(rc)是否為0(表示成功),以及輸出的當前目錄是否與目標目錄相同,如果滿(mǎn)足這些條件,我們將輸出當前目錄,注意,我們使用ignore_errors: true來(lái)忽略可能的錯誤,例如目標目錄不存在。
| 步驟 | 命令/操作 | 說(shuō)明 |
| 1 | cd 命令 | 使用comm??and 模塊執行cd 命令??切換目錄 |
| 2 | 修改目錄 | 使用script 模塊執行一個(gè)包含cd 命令的腳本 |
| 3 | 遞歸任務(wù) | 在block 或task 中使用become 或become_user 來(lái)切換用??戶(hù)和目錄 |
下面是如何在playbook中使用這些步驟的例子:
| 步驟 | Ansible Playbook 示例 |
| 1 | `` |
| 2 | `` (假設腳本中包含cd` 命令) |
| 3 | `` |
在步驟1中,cd 命令通常不會(huì )在遠程主機上實(shí)際改變目錄,因為command 模塊會(huì )為每個(gè)命令創(chuàng )建一個(gè)獨立的環(huán)境。
步驟2中,使用script 模塊可以執行一個(gè)包(°o°)含cd 的本地腳本在遠程主(′▽?zhuān)?機上。
步驟3中,使用become 和become_user 可以在執行任務(wù)時(shí)切換用戶(hù),同時(shí)通過(guò)chdir 參數來(lái)指定目錄。
在Playbook中經(jīng)常需要改變目錄的話(huà),最好是創(chuàng )建一個(gè)臨時(shí)目錄并使用它,或者確保ヽ(′ー`)ノ你的后(hou)續任務(wù)使用了正確的目錄參數。