Создание списка каталогов с ansible с файловым модулем идет медленно - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть роль, которая должна создать список каталогов. Какие каталоги окажутся в списке, зависит от нескольких условий, которые оцениваются во время выполнения.

Когда я использую модуль file, как показано на рисунке, это очень медленно. Создание и даже проверка существования каждого каталога занимает около полсекунды, что легко подводит итог минутам, с которыми я сталкиваюсь.

Конвейер включен.

- name: Create directories
  file:
    path:   "{{ item }}"
    state:  directory
  with_items:
    - "{{ dirs }}"
  when:
    - dirs is defined

Подобный вопрос был задан здесь , однако использование synchronize или unarchive, как предлагается там, кажется очень неудобным для каталогов, которые не известны заранее, так как структура каталогов, которая должна быть синхронизирована, сначала где-то должен быть создан на локальном хосте.

Есть ли другие варианты решения этой проблемы, я мог бы пропустить?

EDIT: Я знаю, что shell и command и mkdir -p оказываются идемпотентными. Тем не менее, я бы предпочел способ, где ansible управляет состоянием каталогов.

1 Ответ

0 голосов
/ 12 сентября 2018

Можно использовать конструкцию "команда создает".

- name: Create directories
  command: mkdir -p "{{ item }}"
  args:
    creates: "{{ item }}"
  loop: "{{ dirs }}"

Идемпотентность, командный модуль и «инструменты без политики».

Как в комментариях к этому ответу, так и в теме , упомянутой в вопросе, обсуждается идемпотентность командного модуля и предпочтительна собственная идемпотентность ответных модулей.

«Мне известны оболочки и команды, и mkdir -p оказывается идемпотентом. Тем не менее, я бы предпочел способ, где ansible управляет состоянием каталогов».

«Вы должны упомянуть, что эта свободная идемпотентная особенность использования собственного файлового модуля.»

Команда создает конструкцию идемпотентна. Команда выполняется только в том случае, если элемент не существует. Более того, по моему мнению, эта конструкция должна быть предпочтительнее в подобных ситуациях, потому что она делает именно то, что нужно, делает это быстро и легко понять. Это соответствует нормам минималистской модульной разработки программного обеспечения , необходимым для устойчивого развития.

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