What is the equivalent of Puppet's `unless` in Ansible?
I think what you're looking do is this:
- 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"
register does not create a file. If you're capturing the output of
rabbitmqctl list_vhosts via
register, the contents will be as valid as the system's current state.
The problem is the line
when: rabbitmqctl list_vhosts | grep sensu. It is not possible to use bash here.
You need to put the
rabbitmqctl list_vhosts | grep sensu in a separate task and register the result to use it in the when clause. You can use
not filter to get
unless like behavior.
Something like this should work:
- name: Get rabbitmq vhosts. command: rabbitmqctl list_vhosts | grep sensu register: rabbitmq_vhosts - name: add vhost sensu command: rabbitmqctl add_vhost /sensu when: not 'sensu' in rabbitmq_vhosts.stdout
Get rabbitmq vhosts. in this example will always be executed. The
add vhost sensu only if the string sensu is not in the registered
Consult the documentation on conditionals and jinja filters for more information.