Fórum Root.cz

Hlavní témata => Software => Téma založeno: kolega 24. 08. 2018, 09:40:18

Název: Ansible - spojování proměnných
Přispěvatel: kolega 24. 08. 2018, 09:40:18
Ahoj mam takovy problem s Ansible
Defacto hledam neco jako "this" z OOP.

Jde mi o to, ze tento inventory variable file prozenu pres template, a chci abych nemusel vsechno vypisovat, tak aby se to predalo z objektu '.domain' vzdycky do jeho 'challenge.http_dir'. Toliko teorie.

Kód: [Vybrat]
benocs_certificates:
- domain: 'foo.bar'
  #...
  challenge:
    # O tohle misto mi jde :] Item je /definovany/ diky loop v template file.
    # Ale to asi nedava smysl protoze promenne se vyhodnocuji drive.
    # Jak to vyresit?
    http_dir: '{{item.domain}}'
    http_path: '/var/www/{{item.challenge.http_dir}}'

  - domain: 'anotherfoo.bar'
    # ...
    challenge:
      # What the directory of the webserver is
      # Default item.domain
      http_dir: '{{item.domain}}'
      # Whole path to the web folder
      # default: '/var/www/{{item.challenge.http_dir}}'
      http_path: '/var/www/{{item.challenge.http_dir}}'

Vystup:

Kód: [Vybrat]
benocs.com;/var/www/{{item.challenge.http_dir}};dummy_web1
Chtel bych

Kód: [Vybrat]
benocs.com;/var/www/benocs.com;dummy_web1
Pro sichr prikladam sablonu:

Kód: [Vybrat]
{% for host in groups['benocs_certificates'] %}
{% for item in hostvars[host].benocs_certificates %}
{{item.domain}};{{item.challenge.http_path}};{{host}}
{% endfor %}
{% endfor %}

a odpovidajici task:

Kód: [Vybrat]
  - name: 'Build the http challenge config file on controller'
    template:
      src: templates/benocs_certificates/challenge_paths.csv.j2
      dest: '{{benocs_certificates_master_dehydrated_path}}/challenge_paths.csv'

Mozna uvazuju naprosto mimo, diky za hinty smerem k reseni.
Ondra
Název: Re:Ansible - spojovani promennych
Přispěvatel: kolega 24. 08. 2018, 10:59:57
Vymyslel jsem řešení, že jsem do proměnné dosadil by default: False, což v šabloně ošetřuje podmínka if, která udělá to, že se tam použije item.domain. Nevím jestli to je košér, nelíbí se mi to, ale možná to je správně