배경 : Puppet에서는 명령 이 이미 실행 되지 않은 경우 명령을 실행할 수 있습니다 .
exec { '/bin/echo root >> /usr/lib/cron/cron.allow': path => '/usr/bin:/usr/sbin:/bin', unless => 'grep root /usr/lib/cron/cron.allow 2>/dev/null', }
목표 : Ansible에서 이미 실행되지 않은 경우 명령 실행
행동 양식
tasks / main.yml
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
결과
TASK [ansible-rabbitmq : add vhost sensu] **************************************
fatal: [111.222.333.444]: FAILED! => {"changed": true, "cmd": ["rabbitmqctl",
"add_vhost", "/sensu"], "delta": "0:00:00.210140", "end":
"2016-07-29 12:55:19.384455", "failed": true, "rc": 2, "start":
"2016-07-29 12:55:19.174315", "stderr": "Error: vhost_already_exists: /sensu",
"stdout": "Creating vhost \"/sensu\" ...", "stdout_lines":
["Creating vhost \"/sensu\" ..."], "warnings": []}
토론
인터넷 검색 unless ansible
나타났다 에 대한이 문서를when
. 해당 문서를 기반으로 when
진술이 추가되었습니다.
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
when: rabbitmqctl list_vhosts | grep sensu
코드를 실행 한 결과 :
fatal: [192.168.0.9]: FAILED! => {"failed": true, "msg": "The conditional
check 'rabbitmqctl list_vhosts | grep sensu' failed. The error was: template
error while templating string: expected token 'end of statement block', got
'list_vhosts'. String: {% if rabbitmqctl list_vhosts | grep sensu %} True {%
else %} False {% endif %}\n\nThe error appears to have been in '/etc/ansible
/roles/ansible-rabbitmq/tasks/main.yml': line 10, column 3, but may\nbe
elsewhere in the file depending on the exact syntax problem.\n\nThe
offending line appears to be:\n\n\n- name: add vhost sensu\n ^ here\n"}
- 우선, 이것이
when
성공 했다고 가정 하면 명령이 실행되지 않고onlyif
Puppet에서 더 비슷하게 보입니다 . - 두 번째로, 언제 성공할 수 있는지 여부를 시뮬레이션하기 위해 에스컬레이션 마크를 사용해야합니까?
- 의 사용
register
. 해당 파일이 유실되거나 사람과 같은 가상 호스트가 제거 된 경우 어떻게됩니까? 꼭두각시는unless
항상 명령을 실행하여 명령을 실행해야하는지 명확하게합니다.
fatal: [IP]: FAILED! => {"changed": true, "cmd": ["rabbitmqctl", "add_vhost", "/sensu"], "delta": "0:00:00.198681", "end": "2016-07-29 13:43:00.870193", "failed": true, "rc": 2, "start": "2016-07-29 13:43:00.671512", "stderr": "Error: vhost_already_exists: /sensu", "stdout": "Creating vhost \"/sensu\" ...", "stdout_lines": ["Creating vhost \"/sensu\" ..."], "warnings": []}