Избегайте неиспользуемых и неопределенных переменных в playbook - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть следующие данные в файле переменной

data: [
    {
        service: "ServiceName",
        var2: "file/path/value",
        var3: "{{ check_var }}",
    }, {
        service: "ServiceName",
        var2: "file/path/value",
        var3: "{{ check_var }}",
    }
]

У меня есть две книги воспроизведения, которые требуют одинаковых данных. Однако для одной пьесы не требуется var3 .

- debug: msg="{{ item['service'] }} uses - {{ item['var2'] }}"
with_items: "{{ data }}" 

Это выдает ошибку - "'check_var' не определен" .
TRIED:
Я не хочу заполнять книгу с плохими стандартами и использовать
, когда: check_var не определен
Или использовать ложные фиктивные данные в атрибуте vars playbook. Есть ли способ обойти это при сохранении стандартов. Кроме того, фактические данные довольно велики, поэтому я не хочу повторять их дважды для каждой пьесы.

1 Ответ

1 голос
/ 21 апреля 2020

В Ansible данные должны быть назначены хостам, а не плейбукам.

Необходимо создать две группы хостов. Те хосты, которым нужны только две переменные go в первую группу. И те хосты, которым нужно 3 переменные go в обе группы. Вы можете включить хосты первой группы во вторую группу.

Затем вы создаете две группы файлов var. В первой вы помещаете 2 переменные, а во вторую - третью переменную.

При этом каждый хост получает правильное количество информации. Playbook 1 использует 3 переменные, а playbook 2 использует только 2 переменные.

Обновление: Минимальный пример

$ diff -N -r none .
diff -N -r none/check_var.yaml ./check_var.yaml
0a1,4
> ---
> - hosts: localhost
>   tasks:
>     - debug: var=check_var
diff -N -r none/group_vars/myhosts.yaml ./group_vars/myhosts.yaml
0a1
> check_var: "Hello World!"
diff -N -r none/inventory ./inventory
0a1,2
> [myhosts]
> localhost
$ ansible-playbook -i inventory check_var.yaml

PLAY [localhost] ***************************************************************************

TASK [Gathering Facts] *********************************************************************
ok: [localhost]

TASK [debug] *******************************************************************************
ok: [localhost] => {
    "check_var": "Hello World!"
}

PLAY RECAP *********************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

...