Как пропустить задачу, если файл был изменен - PullRequest
0 голосов
/ 11 октября 2019

Я работаю над ansible-playbook, если, конечно, я новичок в этом. В любом случае, в ansible playbook я изменил файл, и при повторном запуске playbook я не хочу, чтобы этот файл снова был изменен.

- name: Check if the domain config.xml has been edited
  stat: path={{ domainshome }}/{{ domain_name }}/config/config.xml
  register: config

- name: Config.xml modified
  debug: msg="The Config.xml has been modified"
  when: config.changed

- name: Edit the config.xml - remove extra file-store bad tag
  shell: "sed -i '776,780d' {{ domainshome }}/{{ domain_name }}/config/config.xml"
  when: config.changed

При первом запуске он пропускает этот файл. шаг.

Мне нужно выполнить этот шаг один раз и пропустить, если playbook перезапустится.

Я пытаюсь написать ansible-playbook и удалить записи из конфигурационного файла, только когда он выполняется в первый раз, поэтомучто он может запустить JVM.

1 Ответ

0 голосов
/ 11 октября 2019

Q: "Удалить записи из файла конфигурации только при первом его запуске."

A: Возможно использовать creates параметр shell модуля, чтобы убедиться, что файл конфигурации был отредактирован только один раз. Например

- name: Edit the config.xml - remove extra file-store bad tag
  shell: "sed -i '776,780d' {{ domainshome }}/{{ domain_name }}/config/config.xml"
  args:
    creates: "{{ domainshome }}/{{ domain_name }}/config/config.xml.lock"
- name: Create lock file
  file:
    state: touch
    path: "{{ domainshome }}/{{ domain_name }}/config/config.xml.lock"


Примечания
  • Цитирование: creates: A filename, when it already exists, this step will not be run.
  • Укажите путь и имя файла блокировкик вашим потребностям
  • stat модуль возвращает информацию только о файле и никогда не изменяет файл. Зарегистрированная переменная register: config в этой задаче никогда не сообщит об изменении файла.
  • file module и state: touchне идемпотент. Цитата: an existing file or directory will receive updated file access and modification times (similar to the way touch works from the command line).
  • Лучшим решением было бы изменить команду и создать файл блокировки вместе с sed. Например "sed -i ... && touch /path-to-lockfile/lockfile".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...