2017-05-05 1 views
0

나는 이상한 행동을하고 있습니다. 나는 여전히 Anabilities 초심자이므로 사전에 사과드립니다.변수를 기반으로 역할을 실행

내가 여기서 본 예에 따라, 조건부 역할을 수행하기 위해 노력하고있어 : 내 최상위 site.yml에서

has_thing: true 

, 내가 가진 : 어쨌든 https://github.com/atomicobject/ansible-laptop-playbook-example/blob/1785f25014fa5a7776de5b332d093b60bf59c8e0/laptop.yml

, 나는 host_vars/localhost이 :

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing is defined and has_thing == "true" } 

이렇게하면 역할을 건너 뜁니다.

나는이 대신 할 경우 :

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing is defined } 

역할을 수행한다. 내가 이렇게하면

:

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing == "true" } 

이 작동하지 않습니다.

내가 할 경우 : 그것은 여전히 ​​작동하지

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing != "true" } 

. 왜 그 값을 테스트하지 않는 한 변수 has_thing이 명확하게 정의 되었기 때문에 왜 그런지 이해하지 못합니다.

무엇이 여기에 있습니까?

답변

0

has_thing: true은 부울입니다. has_thing: 'true'으로 테스트 할 수 있습니다.

그러나 더 나은 when 문을 변경하여 부울 값을 처리하십시오.

P. 그리고 은 조건부로 역할을 롤으로 실행할 수 없습니다. 롤은 항상 실행되지만 when 문은 출력에서 ​​많은 생략 된 작업을 생성하는이 역할의 모든 작업에 추가됩니다.

+0

고마워요 콘스탄틴. 나는'- {role : myrole, when : has_thing이 정의되고 has_thing : 'true'}'를 시도했지만'has_thing : 'true'}'에 구문에 대한 오류가 발생했습니다. 왜 그런가? – prelic

+0

'debug : var = has_thing'을 사용합니다. 따옴표로 묶지 않은 따옴표 붙은 출력 의미 문자열 - 다른 유형. 뭔가'when : has_thing | 기본값 (false) | bool'은 당신이 원하는 것을해야합니다. –

+0

닌자 편집을 위해 죄송합니다. 나는 네가 지금 무엇을 말하고 있는지 이해한다. 도와 주셔서 정말로 고맙습니다. – prelic

관련 문제