Извлечение многокомпонентных zip-файлов с помощью Ansible (пример: установка WebSphere)

Для соединений HCL нам по-прежнему нужен WebSphere, и я хочу автоматизировать этот сложный и медленный процесс с помощью Ansible. WebSphere необходимо загрузить вручную с различными ZIP-файлами для каждого компонента, например:

      ├── CIK1VML.zip
├── CIK1WML.zip
└── CIK1XML.zip

Символ после CIK1идентифицирует часть. В командной строке я могу разархивировать их, заменив идентификатор этой части знаком вопроса:

       unzip '/cnx-smb/was/supplements/CIK1?ML.zip' -d /tmp/was-suppl-manual

я хотел бы использовать unarchiveмодуль, потому что он поддерживает такие функции, как remote_srcчто было бы полезно для меня, поэтому я попробовал простую книгу POC:

      - hosts: 127.0.0.1
  connection: local
  tasks:
    - name: Unpack test
      become: yes
      unarchive:
        src: "/cnx-smb/was/supplements/CIK1?ML.zip"
        remote_src: no
        dest: "/tmp/was-extracted"

Но это не работает:

      TASK [Unpack test] **********************************************************************************************************************************************************************************************************************************************************
Wednesday 10 February 2021  16:17:25 +0000 (0:00:00.637)       0:00:00.651 ****
fatal: [127.0.0.1]: FAILED! => changed=false
  msg: |-
    Could not find or access '/cnx-smb/was/supplements/'CIK1?ML.zip'' on the Ansible Controller.
    If you are using a module and expect the file to exist on the remote, see the remote_src option

я тоже пробовал разные srcпути, как /cnx-smb/was/supplements/'CIK1?ML.zip', вызвать unzipВызов CLI работает только тогда, когда хотя бы имя файла заключено в кавычки или, как вариант, весь путь. Ansible принимает только тогда, когда имя файла заключено в кавычки, '/cnx-smb/was/supplements/CIK1?ML.zip'кажется, интерпретируется как относительный путь (который, очевидно, терпит неудачу).

1 ответ

Кажется, что эти составные zip-архивы на самом деле не являются «составными» архивами, как я знаю из форматов сжатия, таких как 7zip, где у нас есть File.partX.7z, которые используются только вместе. 7zip проверяет их и выдает ошибку, если, например, часть отсутствует.

С этими zip-файлами ситуация иная. Я заглянул в них и заметил, что могу распаковать каждый zip-файл без других. Каждый zip-файл содержит часть установочного архива. Кажется, сам zip не делит большую папку на части. Именно IBM по какой-то причине поместила некоторые папки, такие как disk2 , в отдельный файл архива.

Это означает, что я могу сделать то же самое с ansible: просто извлечь каждый файл отдельно, но в тот же каталог:

      - hosts: 127.0.0.1
  connection: local
  vars:
    base_dir: /cnx-smb/was/supplements/

  tasks:
    - name: Unpack
      become: yes
      unarchive:
        src: "{{ base_dir }}/{{ item }}"
        remote_src: no
        dest: "/tmp/was-extracted"
      with_items: 
        - CIK1VML.zip
        - CIK1WML.zip
        - CIK1XML.zip

Обе извлеченные папки (Ansible + вручную с помощью zipкоманда с ?заполнитель) были одного размера и содержали одни и те же данные:

      vagrant@ansible:/cnx-repo$ du -hs /tmp/was-extracted/
3.0G    /tmp/was-extracted/
vagrant@ansible:/cnx-repo$ du -hs /tmp/was-suppl-manual
3.0G    /tmp/was-suppl-manual
Другие вопросы по тегам