2016-05-11 7 views
3

In meinem Textbuch, ich habe dies:Überprüfen Sie, ob Strings sind equals und ternäre Operator in ansible

#More things 
- include: deploy_new.yml 
    vars: 
    service_type: "{{ expose_service == 'true' | ternary('NodePort', 'ClusterIP') }}" 
    when: service_up|failed 

Wenn expose_service wahr ist, ich will service_type sonst zu "NodePort" und "ClusterIP" gesetzt werden.

In allen Fällen ist service_type jedoch auf False eingestellt.

Was mache ich falsch?

Antwort

7

Gelöst!

service_type: "{{ 'NodePort' if expose_service == 'true' else 'ClusterIP' }}" 
3

In Ihrem Beispiel Sie die Anwendung des ternären Filter auf die 'true' String. Effektiv vergleichen Sie den Wert von expose_service mit der Zeichenfolge 'NodePort' und erhalten immer false im Ergebnis.

Sie müssen den Gleichheitsoperator-Klausel in Klammern einzuschließen:

- include: deploy_new.yml 
    vars: 
    service_type: "{{ (expose_service == true) | ternary('NodePort', 'ClusterIP') }}" 
    when: service_up|failed 

Die anderen beiden anderen Punkte in dieser Antwort adressiert:

  • Sie die Zeichenfolge verwenden 'true' statt Boolean
  • when Direktive ist auf falscher Einrückungsebene (Sie übergeben effektiv die Variable mit dem Namen when)
Verwandte Themen