Bối cảnh: trong Puppet có thể thực thi một lệnh trừ khi nó đã được thực thi:
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', }
Mục đích: để thực thi một lệnh trừ khi nó đã được chạy trong Ansible
Phương pháp
nhiệm vụ / main.yml
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
Các kết quả
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": []}
Thảo luận
Googling unless ansible
cho thấy tài liệu này vềwhen
. Dựa trên tài liệu đó, một when
tuyên bố đã được thêm vào:
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
when: rabbitmqctl list_vhosts | grep sensu
chạy mã dẫn đến:
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"}
- Trước hết, hãy tưởng tượng rằng
when
đã thành công thì lệnh sẽ không chạy và sau đó nó trông giống nhưonlyif
trong Puppet . - Thứ hai, nếu khi nào thành công thì nên sử dụng dấu leo thang để mô phỏng trừ khi?
- Sử dụng
register
. Điều gì xảy ra nếu tập tin đó bị mất hoặc vhost đã bị xóa ví dụ như con người? Con rốiunless
luôn thực thi các lệnh để rõ ràng liệu lệnh có cần được thực thi hay không.
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": []}