Как построить условную команду в Ansible? - PullRequest
1 голос
/ 08 февраля 2020

В настоящее время моя задача выглядит следующим образом:

- name: Create snapshot
  command: nodetool -u foo -pw bar snapshot

-u (имя пользователя) и -pw (пароль) являются учетными данными для использования nodetool. Однако не во всех средах есть аутентификация для nodetool. В случае, если у них нет аутентификации, мне нужно будет использовать задачу без -u и -pw, например:

- name: Create snapshot
  command: nodetool snapshot

Я не хочу иметь две пьесы (одна для аутентификации необходимые условия, и один без него). Поэтому я ищу что-то в этом роде:

- name: Create snapshot
  command: nodetool [IF(auth_required){-u foo -pw bar}] snapshot

с auth_required в качестве логической переменной в моем файле vars. Как я могу сделать что-то подобное в Ansible?

1 Ответ

2 голосов
/ 08 февраля 2020

С помощью модуля set_fact можно создать переменную my_command и использовать фильтр ternary для разделения потока управления. Например,

$ cat playbook.yml
- hosts: localhost
  tasks:
    - set_fact:
        my_command: "{{ 'nodetool' ~
                        auth_required|bool|ternary(' -u foo -pw bar ', ' ') ~
                        'snapshot' }}"
    - debug:
        var: my_command

дает

$ ansible-playbook playbook.yml -e 'auth_required=false'
    "my_command": "nodetool snapshot"

$ ansible-playbook playbook.yml -e 'auth_required=true'
    "my_command": "nodetool -u foo -pw bar snapshot"

Проверьте это. Затем используйте команду

- name: Create snapshot
  command: "{{ my_command }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...