背景:在 Puppet 中,可以执行命令,除非它已经被执行:
Run Code Online (Sandbox Code Playgroud)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 中运行过
方法
任务/main.yml
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
Run Code Online (Sandbox Code Playgroud)
结果
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": []}
Run Code Online (Sandbox Code Playgroud)
讨论
谷歌搜索unless ansible
显示了这个关于when
. 根据该文档,when
添加了一个声明:
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
when: rabbitmqctl list_vhosts | grep sensu
Run Code Online (Sandbox Code Playgroud)
运行代码导致:
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"}
Run Code Online (Sandbox Code Playgroud)
when
成功了然后命令将不会运行,然后它看起来更像是onlyif
在 Puppet 中。register
。如果该文件丢失或虚拟主机已被例如人类删除怎么办?Puppetunless
总是执行命令,以便清楚是否需要执行命令。我认为你正在寻找的是这样的:
- name: get vhosts
command: rabbitmqctl list_vhosts
register: vhosts
changed_when: false
- name: add vhost sensu
command: rabbitmqctl add_vhost /sensu
when: "'/sensu' not in vhosts.stdout"
Run Code Online (Sandbox Code Playgroud)
回复:#3register
不创建文件。如果您正在捕获rabbitmqctl list_vhosts
via的输出register
,则内容将与系统的当前状态一样有效。
归档时间: |
|
查看次数: |
3022 次 |
最近记录: |