Как запустить задачу только один раз за всю Ansible Playbook? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть Ansible playbook, который делает несколько вещей, как показано ниже -

  1. Загрузка артефактов с Nexus на локальный сервер (Ansible Master).
  2. Копирование этих артефактов на несколько удаленных машин, скажем, server1 / 2/3 et c ..

И я использовал роли в моей пьесе и роль (repodownload), которая загружает артефакты, которые я хочу запустить только один раз потому что почему я хочу скачать то же самое снова. Я попытался использовать run_once: true, но, думаю, это не сработает, потому что это работает только для одного прогона playbook, но мой playbook запускается несколько раз для нескольких хостов.

--- - name: Deploy my Application to tomcat nodes hosts: '{{ target_env }}' serial: 1 roles: - role: repodownload tags: - repodownload - role: copyrepo tags: - copyrepo - role: stoptomcat tags: - stoptomcat - role: deploy tags: - deploy

Здесь target_env передается из командной строки, и это удаленная группа хостов. Любая помощь приветствуется.

Ниже приведен код из main.yml из роли repodownload -

- connection: local name: Downloading files from Nexus to local server get_url: url="{{ nexus_url }}/{{item}}/{{ myvm_release_version }}/{{item}}-{{ release_ver }}.war" dest={{ local_server_location }} with_items: - "{{ temps }}"

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Это действительно простой вопрос, с которым я тоже боролся.

Попробуйте:

- connection: local
   name: Downloading files from Nexus to local server
   get_url:
     url:  "{{ nexus_url }}/{{item}}/{{ myvm_release_version }}/{{item}}-{{ release_ver }}.war"
     dest: "{{ local_server_location }}"
   with_items:
    - "{{ temps }}"
   run_once: true

Просто что-то еще, не связанное с вашим основным вопросом;

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

0 голосов
/ 31 марта 2020

Хорошо, продолжая разговор с Zeitounator . Следующий обходной путь будет работать без изменения ваших файлов vars. Просто помните, что это обходной путь, возможно, не самый эффективный способ выполнить работу.

---
- name: Download my repo to localhost
  # Executes only for first host in target_env and has visibility to group vars of target_env
  hosts: '{{ target_env }}[0]'
  serial: 1
  roles:
    - role: repodownload
      tags:
        - repodownload

- name: Deploy my Application to tomcat nodes
  # Executes for all hosts in target_env
  hosts: '{{ target_env }}'
  serial: 1
  roles:
    - role: copyrepo
      tags:
        - copyrepo
    - role: stoptomcat
      tags:
        - stoptomcat
    - role: deploy
      tags:
        - deploy
...