2016-10-11 3 views
-1

Я пытаюсь выполнить задачу с помощью функции.Попытка выполнить задачу с помощью ansible

Задача ::

  1. Найти заархивированные файлы (заканчивая .tar)
  2. Unarcieve этих файлов.
  3. Найти все файлы, заканчивающиеся на .war, и переместить их в/tmp.

Используя простые команды оболочки, ее довольно прямо вперед задача:

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

Теперь я хочу написать анзибль Playbook, что делает выше задачи.

Я могу найти файлы, которые я хочу, но я не могу понять, какой модуль использовать, что позволяет мне работать с выводами предыдущих управляемых команд.

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

Но как только эта команда возвращает tar-файлы, как я могу использовать это для запуска модуля unarchive?

ответ

0

Вы должны быть в состоянии сделать это, зарегистрировав результаты своей команды find в качестве переменной, а затем перейдя по значениям dict с помощью модуля 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 }}" 
Смежные вопросы