Ansible - group_vars a host_vars

Ansible - group_vars a host_vars
« kdy: 20. 06. 2019, 10:07:34 »
Ahoj,

mam takovouhle syntaxi:

Kód: [Vybrat]
group_vars/groupname
parameter:
 option1: "value"
 option2: "value"

host_vars/hostname
parameter:
 option3: "value"

V cem je problem - playbook nespoji tyto parametry, defakto pokud dobre chapu, tak definovanim "parameter" na urovni host_vars zmizela option1 a option2. Rad bych, kdyby to slo nejak takhle doplnovat, jinak musim mit ruzne nazvy promennych pro to same.

Jde to nejak?


ETNyx

Re:Ansible - group_vars a host_vars
« Odpověď #1 kdy: 20. 06. 2019, 16:10:10 »
V tomhle konkrétním případě půjde upravit kód asi nějak takhle
Kód: [Vybrat]
group_vars/groupname
group_parameter:
 option1: "value"
 option2: "value"

host_vars/hostname
host_parameter:
 option3: "value"

a pak na začátek playbooku:

Kód: [Vybrat]
- name: Merge parametr
  set_fact:
    parametr: '{{ group_parameter + item }}'
  loop:
    - '{{ host_parameter | default(null) }}'

Re:Ansible - group_vars a host_vars
« Odpověď #2 kdy: 20. 06. 2019, 19:11:12 »
Celý problém je v tom zanoření do parameter. Ansible nadefinuje a přepíše vždy celé proměnné. Proto je typické použití podtržítek místo slovníku:

Kód: [Vybrat]
group_vars/groupname
parameter_option1: "value"
parameter_option2: "value"

host_vars/hostname
parameter_option3: "value"

Re:Ansible - group_vars a host_vars
« Odpověď #3 kdy: 21. 06. 2019, 09:20:55 »
Prvni metoda je prilis komplikovana, druha zase komplikuje cykly. No, aspon uz nebudu ztracet cas hledanim neceho, co neni.

Re:Ansible - group_vars a host_vars
« Odpověď #4 kdy: 21. 06. 2019, 22:22:49 »
Možná hledáte konfigurační parametr hash_behaviour, který určuje chování při předefinování proměnné typu hash/dictionary. Výchozí nastavení má hodnotu "replace". Se změnou na "merge" bude vícenásobné definice stejné proměnné slučovat dohromady.
Krom toho je možné používat u použití proměnné filtr "combine", který dělá totéž pro konkrétní proměnnou na konkrétním místě a je autory Ansbile více doporučované.
Viz: https://docs.ansible.com/ansible/latest/reference_appendices/config.html?highlight=hash_behaviour#default-hash-behaviour


Re:Ansible - group_vars a host_vars
« Odpověď #5 kdy: 24. 06. 2019, 14:04:46 »
Možná hledáte konfigurační parametr hash_behaviour, který určuje chování při předefinování proměnné typu hash/dictionary. Výchozí nastavení má hodnotu "replace". Se změnou na "merge" bude vícenásobné definice stejné proměnné slučovat dohromady.
Krom toho je možné používat u použití proměnné filtr "combine", který dělá totéž pro konkrétní proměnnou na konkrétním místě a je autory Ansbile více doporučované.
Viz: https://docs.ansible.com/ansible/latest/reference_appendices/config.html?highlight=hash_behaviour#default-hash-behaviour

Dik, ten combine by sel, ted uz to mam prepsane, zvazim pozdeji, zda se mi vyplati to zmenit zpatky.

Re:Ansible - group_vars a host_vars
« Odpověď #6 kdy: 24. 06. 2019, 17:58:18 »
Da sa urobit merge dvoch poli napr takto:

Kód: [Vybrat]
- name: merging hash_a and hash_b into hash_c
  set_fact: hash_c="{{ hash_a|combine(hash_b) }}"