Архивируйте несколько папок в одной папке, используя Ansible - PullRequest
0 голосов
/ 14 июля 2020

Я использую приведенный ниже код ansible -playbook для архивации нескольких папок в папке IBM.

Ниже приведен мой абсолютный путь к структуре каталогов:

/app
   |-- /IBM
          |--/test
          |--/log
          |--/common
          |--/api
          |--/<unknown folders>

Количество папок а файлы под IBM folder неизвестны, поэтому кажется невозможным указать все файлы / папки под IBM под атрибутом exclude_path.

I wi sh для создания архива (gz), в котором есть только папка IBM содержащий только две папки, т.е. папки common и api, при этом игнорируя остальные папки и файлы.

Таким образом, я написал следующую книгу:

- name: Creating the archive
  archive:
    path: 
    - /was/IBM/common
    - /was/IBM/api
    dest: /var/backup/mysetup.tar.gz
    exclude_path:
    - /was/IBM/common/log
    - /was/IBM/api/tmp
    format: gz

Это дает мне архивный файл mysetup.tar.gz.

Я хочу, чтобы в файле mysetup.tar.gz была папка с именем IBM, в которой должны быть две папки common и api. Таким образом, я ожидаю, что ниже в mysetup.tar.gz, независимо от того, какие другие файлы находятся в папке IBM.

IBM
  |--/common
  |--/api

Но mysetup.tar.gz не имеет IBM папка, но имеет папки common и api.

Я не указывал c, поэтому здесь мой вопрос не получил ответа: Как заархивировать несколько папок в одной папке, используя Ansible

Не могли бы вы посоветовать мне, как я могу заставить архив иметь обе папки внутри папки IBM внутри mysetup.tar.gz?

1 Ответ

1 голос
/ 14 июля 2020

Требование, которое у вас есть, не может быть выполнено напрямую с помощью модуля archive. Две конкретные c причины перечислены ниже:

  1. Если вы укажете path, скажем, /app/IBM, то содержимое zip-файла будет иметь путь после IBM, например common/, api/. Чтобы получить IBM как каталог root внутри файла tar.gz, вам нужно указать path как /app. Это подводит нас к следующему пункту об использовании exclude_path.
  2. exclude_path работает не так, как вы ожидаете. Скажем, если path определяется как /app, и вы хотите исключить /app/IBM/test, это не сработает. exclude_path работает только с прямой подпапкой / файлом определенного path (с подстановочным знаком), что означает, что исключение /app/IBM/test будет работать, если path определено как /app/IBM/*, но это не то, что ожидается, и возвращает предыдущий пункт. Уже сообщается о проблеме на этом topi c.

Так что вам, вероятно, лучше использовать обычную команду tar с помощью модуля command / shell.

...