Manage dict with empty keys

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

Nobody has an idea :frowning: ?

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.

Thanks it works with:

when: "item.value is defined and item.value"