2014-12-06 18 views
14

Ich habe eine ansible Variable auf der Kommandozeile als solche übergeben:ansible: überprüfen, ob die Variable gleich String

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

Ich möchte in einigen Variablen in meiner Rolle laden auf den Wert der Umwelt dependeing. Ich habe viele verschiedene Methoden ausprobiert, wie:

- 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?

Details:

  • I ansible 1.7.2

Antwort

21

Seien Sie vorsichtig mit einem variablen environment, es kann zu Problemen führen, weil ansible es intern verwendet, genannt verwenden. Ich kann mich nicht daran erinnern, ob es in der Dokumentation ist, aber hier ist ein Mailing-Liste Thema:

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

wir eine Variable stage genannt verwenden.

Es sieht aus wie Sie mit einem Bündel von ihnen in einer Reihe am Ende dann:

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

Aber man könnte auch nur Ihre Umgebung:

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

Oder verwenden Sie die vars_files auf ein playbook level:

vars_files: 
    - vars/{{ stage }}_vars.yml 
+2

Umgebung funktioniert, aber Umgebung, wie Sie sagen, wird intern verwendet und Ansible sagen in der docs es nicht zu benutzen. Fall ist wichtig :) – PhillipHolmes

Verwandte Themen