답변:
로부터 ansible 문서 : 필요한 변수가 설정되어 있지 않은 경우, 당신은 건너 뛰거나 Jinja2의 정의 된 테스트를 사용하여 실패 할 수 있습니다. 예를 들면 :
tasks:
- shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is not defined
따라서 귀하의 경우에는 when: deployed_revision is not defined
작동해야합니다.
when: item.sudo is defined and item.sudo == true
when: foo is defined
(예 : 작동하지 않음 :when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
. 이것은 Ansible 때문이 아니지만 Yaml은 이것을 객체로 해석합니다. 변수 확장으로 시작해야하는 경우 전체를 큰 따옴표 (예 "{{ foo }}"
:)로 묶어 Yaml이 문자열로 인식하고 그대로 Ansible에 전달하도록합니다.
최신 Ansible 버전 2.5에 따라 변수가 정의되어 있는지 확인하고 이에 따라 작업을 실행하려면 다음을 사용하십시오. undefined
키워드를 .
tasks:
- shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is undefined
엄밀히 말하면 정의 됨, 비어 있지 않음 및 없음 없음을 모두 확인해야합니다.
"정상"변수의 경우 정의되고 설정되거나 설정되지 않으면 차이가 있습니다. 참조 foo
및 bar
아래의 예이다. 둘 다 정의되었지만 foo
설정 만 되어 있습니다.
다른 쪽에서 등록 된 변수는 실행 명령의 결과로 설정되며 모듈마다 다릅니다. 대부분 json 구조입니다. . 당신은 아마 당신이 볼에 관심이있는 하위 요소 확인해야 xyz
하고 xyz.msg
예 아래에를 :
cat > test.yml <<EOF
- hosts: 127.0.0.1
vars:
foo: "" # foo is defined and foo == '' and foo != None
bar: # bar is defined and bar != '' and bar == None
tasks:
- debug:
msg : ""
register: xyz # xyz is defined and xyz != '' and xyz != None
# xyz.msg is defined and xyz.msg == '' and xyz.msg != None
- debug:
msg: "foo is defined and foo == '' and foo != None"
when: foo is defined and foo == '' and foo != None
- debug:
msg: "bar is defined and bar != '' and bar == None"
when: bar is defined and bar != '' and bar == None
- debug:
msg: "xyz is defined and xyz != '' and xyz != None"
when: xyz is defined and xyz != '' and xyz != None
- debug:
msg: "{{ xyz }}"
- debug:
msg: "xyz.msg is defined and xyz.msg == '' and xyz.msg != None"
when: xyz.msg is defined and xyz.msg == '' and xyz.msg != None
- debug:
msg: "{{ xyz.msg }}"
EOF
ansible-playbook -v test.yml
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''