2016-10-11 50 views
-1

我正在嘗試使用ansible來完成任務。試圖使用ansible執行任務

的任務是::

  1. 查找存檔文件(壓縮.tar結尾)
  2. Unarcieve這些文件。
  3. 查找以.war結尾的所有文件並將它們移動到/ tmp。

使用簡單的shell命令,它是一個相當簡單的任務:

find . -name '*.tar' -exec tar -xf {} \; -exec rm -f {} \; 
find . -name "*.war" -exec scp {} /tmp/ \; 

現在我想寫一個劇本ansible,做上述任務。

我可以找到我想要的文件,但我無法弄清楚使用哪個模塊,它允許我使用以前的可行命令的輸出。

- find: paths="/var/tmp" patterns="^.*?\.(tar)$" use_regex=True 

但是,一旦此命令返回tar文件,我該如何利用它來運行unarchive模塊?

回答

0

您應該可以通過將find命令的結果註冊爲變量,然後使用unarchive模塊循環顯示字典值來完成此操作。

第4-6章:https://www.safaribooksonline.com/library/view/ansible-up-and/9781491915318/ch04.html

但是,你可以通過使用with_fileglob簡化您的工作流程?

- name: find/unarchive 
    unarchive: src="{{ item }}" dest=/path/to/dest 
    with_fileglob: 
    - /var/tmp/*.tar 

這個工作,並且個人來說,似乎遠不那麼複雜,而仍然完成你想要的。

0

您可以使用register module註冊任務輸出。

ansible documentation你可以檢查的結構找到返回的數據。

如果對任何返回的數據結構有任何疑問,可以使用調試模塊。

- name: Find .tar files 
    find: > 
    paths='/var/tmp' 
    patterns='^.*?\.(tar)$' 
    use_regex=True 
    register: find_tar 

- name: Unarchive tar files 
    unarchive: > 
    remote_src=True 
    src={{ item.path }} 
    dest=/path/to/dest 
    with_items: "{{ find_tar.files }}" 

- name: Remove tar files 
    file: > 
    path={{ item.path }} 
    state=absent 

- name: Find .war files 
    find: > 
    paths='/var/tmp' 
    patterns='^.*?\.(war)$' 
    use_regex=True 
    register: find_war 

- name: Move .war to /tmp 
    command: "mv {{ item.path }} /tmp/" 
    with_items: "{{ find_war.files }}"