Manage dict with empty keys

1,493 views
Skip to first unread message

Pierre Mavro

unread,
Jan 13, 2016, 8:04:03 AM1/13/16
to Ansible Project
Hi,

I'm trying to find a way to grab RabbitMQ plugins when an URL is specified as value of a key (because some of them are include but not activated with RabbitMQ, while others are not included).

I'd like to have a single dict containing both and in the case where a value is not specified, it's implicitly included in RabiitMQ. Here is what I've got:

rabbitmq_plugins
:
  rabbitmq_management
:
  rabbitmq_delayed_message_exchange
: 'http://www.rabbitmq.com/community-plugins/v3.6.x/rabbitmq_delayed_message_exchange-0.0.1.ez'



And in the role I've:

- name: download and install additionnal plugins
  get_url
: url={{item.value}} dest={{rabbitmq_plugins_folder}} owner=root group=root mode=0644
  with_dict
: rabbitmq_plugins
 
when: "item.key is defined"



Unfortunately it fails like this:
ok: [10.200.0.18] => (item={'key': 'rabbitmq_delayed_message_exchange', 'value': 'http://www.rabbitmq.com/community-plugins/v3.6.x/rabbitmq_delayed_message_exchange-0.0.1.ez'})
failed
: [10.200.0.18] => (item={'key': 'rabbitmq_management', 'value': 'None'}) => {"failed": true, "item": {"key": "rabbitmq_management", "value": "None"}}
msg
: unknown url type: None



If I modify the when statement like this: when: "item.key is defined or item.value is not Null", I got:

fatal: [10.200.0.18] => Failed to template {% if item.key is defined or item.value is not Null %} True {% else %} False {% endif %}: template error while templating string: no test named 'Null'

Any idea how I can make it work properly ?

Thanks

Pierre Mavro

unread,
Jan 17, 2016, 9:36:34 AM1/17/16
to Ansible Project
Nobody has an idea :-( ?

Matt Martz

unread,
Jan 17, 2016, 9:58:20 AM1/17/16
to ansible...@googlegroups.com
I think your problem is that you are checking item.key.  Item.key is always defined, as that is the name of the key.  You want to check if item.value is something.

I would check something like:

when: item.value

That should be sufficient.
--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/b7af98f6-3fae-4556-919b-fc0b26c20b8d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
Matt Martz
@sivel
sivel.net

Pierre Mavro

unread,
Jan 25, 2016, 9:01:29 AM1/25/16
to Ansible Project
Thanks it works with:

 when: "item.value is defined and item.value"
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages