Проверка параметров и использование ролей / тегов Ansible - PullRequest
0 голосов
/ 07 апреля 2020

Я пишу книгу, в которой я автоматизирую развертывание. В командной строке я передаю некоторые параметры, которые должны быть проверены в обязательном порядке. Я использую роли / теги для запуска моей книги. Ниже моя команда -

ansible-playbook -i my-inventory my-main.yml --tags=copy,deploy -e my_release_version=1.0.0 -e target_env=prod

В my-main.yml я сначала проверяю параметры, а затем выполняю роли. Теперь, если я передаю теги в команде, она не выполняет никакой проверки и непосредственно выполняет теги, что, как я думаю, работает ansible.

Есть ли способ предварительного выполнения шагов, как указано в my- main.yml перед выполнением тегов?

, а my-main.yml выглядит следующим образом -

- hosts: localhost
  connection: local
  gather_facts: no

  vars:
     _allowed_envs:
       - dev
       - preprod
       - prod

  pre_tasks:

     - name: Checking if the Target Environment is ok
       fail:
         msg: >-
           Environment "{{ target_env }}" is not allowed.
           Please choose a target environment from "{{ _allowed_envs | join(', ') }}"
       when: not target_env in _allowed_envs
       run_once: true

  roles:
     - role: copy
       tags:
         - copy
     - role: deploy
       tags:
         - deploy

ПРИМЕЧАНИЕ. Моя книга воспроизведения будет иметь роли / теги, такие как копирование, развертывание, а также stoptomcat, StartTomcat. Поэтому, когда пользователь упоминает только такие теги, как stoptomcat и starttomcat, я просто хочу, чтобы один входной параметр был проверен target_env, потому что в этом случае я бы не хотел my_release_version.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 апреля 2020

Нет ничего плохого в pre_tasks или в вашей игре; pre_tasks пропускаются, потому что вы передаете - -tags в строке команды при вызове playbook; следовательно, теги имеют наивысший приоритет при вызове игры, которая является причиной того, что ваша проверка каждый раз терпит неудачу; Если вы хотите запустить pre_tasks, вам не нужно упоминать опцию ---- tags в cli- и обрабатывать проверку ролей с предварительными заданиями, передавая только опции -e: что-то вроде

---
- name: test_play
  hosts: localhost
  connection: local
  gather_facts: false

  vars:
    _allowed_envs:
      - dev
      - preprod
      - prod

  pre_tasks:
    - name: Checking if the Target Environment is ok
      fail:
        msg: >-
         Environment "{{ target_env }}" is not allowed.
         Please choose a target environment from "{{ _allowed_envs | join(', ') }}"
      when: not target_env in _allowed_envs
      run_once: true

  tasks:
    - name: include the dynamic role
      include_role:
        name: "{{ ROLE }}"
      tags: "{{ tag_name }}"

и запустите его ansible -playbook -i my-инвентарь my-main.yml -e my_release_version = 1.0.0 -e target_env = dev -e ROLE = copy -e tag_name = copy

enter image description here

Надеюсь, это поможет! Приветствия

...