Ansible: не может вызвать задачу с условием когда при передаче переменных через CLI - PullRequest
1 голос
/ 11 января 2020

В Ansible Я хочу использовать, когда условие выполнения некоторых команд оболочки на удаленных машинах зависит от соответствия условия или нет. Я посылаю переменные с параметрами -e (--extra-var), как показано ниже. Но никакие задачи не совпадают с моими переменными и пропускаются всегда, хотя должны совпадать. Я что-то пропустил ? Кто-нибудь мне поможет?

Ansible версия;

ansible 2.9.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

Команда:

ansible-playbook -i hosts test.yml  -e environment=test -e  type=react

hosts-файл:

[first]
localhost ansible_connection=ssh user=root

Моя книга игр :

cat  test.yml
------------------------------------------
- name : Conditional Test
  hosts: all
  gather_facts: no
  tasks:
    - name: mkdir react prod environments
      shell: cd /etc && mkdir ProdReact
      when:
        - environment == "prod"
        - type == "react"

    - name: mkdir react  for test environments
      shell: cd /etc && mkdir React
      when:
        - environment == "test"
        - type == "react"

    - name: mkdir nodejs  for prod environments
      shell: cd /etc && mkdir ProdNodejs
      when:
        - environment == "prod"
        - type == "nodejs"

    - name: mkdir nodejs  for test environments
      shell: cd /etc && mkdir Nodejs
      when:
        - environment == "test"
        - type == "nodejs"

Результат выполнения:



[WARNING]: Found variable using reserved name: environment


PLAY [Deploy] ***************************************************************************************************************************

TASK [mkdir react prod environments] ****************************************************************************************************
skipping: [localhost]

TASK [mkdir react  for test environments] ***********************************************************************************************
skipping: [localhost]

TASK [mkdir nodejs  for prod environments] **********************************************************************************************
skipping: [localhost]

TASK [mkdir nodejs  for test environments] **********************************************************************************************
skipping: [localhost]

PLAY RECAP ******************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=0    skipped=4    rescued=0    ignored=0

Спасибо, теперь!

1 Ответ

0 голосов
/ 11 января 2020

Причина проблемы в вашей первой выходной строке

[WARNING]: Found variable using reserved name: environment

Вы используете имя переменной, которое сталкивается с , зарезервированным для ansible (предполагается, что удерживайте env vars для задачи, игры, роли ...)

Просто переименуйте что-то другое, и оно будет работать как положено.

Пример исправленной книги воспроизведения:

---
- name: Conditional Test
  hosts: localhost
  gather_facts: false
  tasks:
    - name: mkdir react prod app_envs
      debug:
        msg: prod and react
      when:
        - app_env == "prod"
        - app_type == "react"

    - name: mkdir react  for test app_envs
      debug:
        msg: test and react
      when:
        - app_env == "test"
        - app_type == "react"

    - name: mkdir nodejs  for prod app_envs
      debug:
        msg: prod and nodejs
      when:
        - app_env == "prod"
        - app_type == "nodejs"

    - name: mkdir nodejs  for test app_envs
      debug:
        msg: test and nodejss
      when:
        - app_env == "test"
        - app_type == "nodejs"

Что дает:

$ ansible-playbook play.yml -e app_env=test -e app_type=nodejs

PLAY [Conditional Test] *******************************************************************************************************************************************************************************************

TASK [mkdir react prod app_envs] **********************************************************************************************************************************************************************************
skipping: [localhost]

TASK [mkdir react  for test app_envs] *****************************************************************************************************************************************************************************
skipping: [localhost]

TASK [mkdir nodejs  for prod app_envs] ****************************************************************************************************************************************************************************
skipping: [localhost]

TASK [mkdir nodejs  for test app_envs] ****************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "test and nodejss"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0
...