ANSIBLE "разархивировать" модуль не работает, как ожидалось - PullRequest
0 голосов
/ 27 ноября 2018

Моя цель состоит в том, чтобы извлечь файл .zip в контроллере в определенную папку на серверах приложений (потому что у меня есть другой сценарий с указанным путем для вызова пакета).

Я пытался выполнить 2 условия

1) проверить наличие или отсутствие каталога целевых серверов (например, / opt / mypack).если он есть, пропустите создание каталога.

2) проверьте, что в указанном выше каталоге уже есть извлеченный файл или нет.если нет извлечения, если да, пропустите извлечение.

Я попытался с нижеприведенной таблицей воспроизведения, где я хочу извлечь 2 .zip-пакета во все определенные целевые серверы (/ opt / mypack и / opt / mypack2)

 ---

   - name: Extract CLM-Web Package into /opt/mypack
     hosts: localhost,IHS,CCM,RM
     vars:
       source_dir: /etc/ansible/roles/IBM2/files/mypack.zip
       dest_dir: /opt/mypack
     tasks:
       - name: check the folder existance
         stat: path=/opt/mypack
         register: folder_exist

       - name: create directory
         command: mkdir /opt/mypack
         when: folder_exist.stat.exists == False

       - name: extract the .zip file
         unarchive:
           src: "{{ source_dir }}"
           dest: "{{ dest_dir }}/"
         when: folder_exist.stat.exists == True

    - name: Extract CLM Installation Package to /opt/mypack
      hosts: localhost,CCM,RM
      vars:
        source_dir: /etc/ansible/roles/IBM2/files/mypack2.zip
         dest_dir: /opt/mypack2
      tasks:
        - name: check the folder existance
          stat: path=/opt/mypack2
          register: folder_exist

       - name: create directory
         command: mkdir /opt/mypack2
         When: folder_exist.stat.exists == False

       - name: extract the .zip file
         unarchive:
            src: "{{ source_dir }}"
            dest: "{{ dest_dir }}/"
         when: folder_exist.stat.exists == True

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете выполнить все, что вам нужно, с помощью файлового модуля и цикла.Я предпочитаю роли.Итак, я создал следующую структуру каталогов:

.
+ testunarchive.yml
+ unarchive
  + files
  | + foo1.zip
  | + foo2.tgz
  + tasks
    + main.yml
    + unarchive.yml

foo1.zip и foo2.tgz - это просто тестовые архивные файлы в формате zip и сжатый tar.

testunarchive.yml содержитсборник пьес.Я только что проверил это на локальном хосте.

---
- hosts: localhost
  roles:
    - unarchive
...

Задача main.yml приносит файл unarchive.yml и перебирает все задачи в этом файле.

---
- include: unarchive.yml
  loop:
    - { src: foo1.zip, dest: /tmp/foo1 }
    - { src: foo2.tgz, dest: /var/tmp/foo2 }
...

Unarchive.ymlФайл task выполняет фактическую работу по созданию каталога назначения, если он не существует, и разархивированию исходного архива в каталог назначения.

---
- name: "Creating {{ item.dest }}"
  file:
    path: "{{ item.dest }}"
    state: directory
- name: "Unarchiving {{ item.src }}"
  unarchive:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
...

Надеемся, что что-то подобное поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...