it-swarm.com.de

Ansible: Überprüfen Sie, ob die Variable gleich string ist

Ich habe eine ansible Variable in der Befehlszeile als solche übergeben:

ansible-playbook -e environment=staging ansible/make_server.yml

Ich möchte in meiner Rolle einige Variablen laden, die vom Wert der Umgebung abhängen. Ich habe viele verschiedene Methoden ausprobiert, wie zum Beispiel:

- include_vars: staging_vars.yml
  when: environment | staging

und

- include_vars: staging_vars.yml
  when: "{{environment}} == "staging"

und

- include_vars: staging_vars.yml
  when: "{{environment}} | match('staging')"

aber nichts scheint zu funktionieren. Wie mache ich das?

Einzelheiten:

  • Ich verwende Ansible 1.7.2
24
Jordan Ell

Seien Sie vorsichtig mit einer Variablen mit dem Namen environment, da Ansible sie intern verwendet. Dies kann zu Problemen führen. Ich kann mich nicht erinnern, ob es in den Dokumenten ist, aber hier ist ein Mailinglisten-Thread:

https://groups.google.com/forum/#!topic/ansible-project/fP0hX2Za4I

Wir verwenden eine Variable namens stage.

Es sieht so aus, als ob Sie am Ende eine Reihe von Dingen in Folge haben werden:

- include_vars: testing_vars.yml
  when: stage == "testing"
- include_vars: staging_vars.yml
  when: stage == "staging"
- include_vars: production_vars.yml
  when: stage == "production"

Sie können aber auch nur Ihre Umgebung einbeziehen:

- include_vars: "{{ stage }}_vars.yml"

Oder verwenden Sie das vars_files auf Playbook-Ebene:

vars_files:
  - vars/{{ stage }}_vars.yml
32