Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
How to validate Ansible role dictionary argument's "additionalProperties"
In JSON Schema one can use the additionalProperties key to validate properties whose names are not know. You can still impose restrictions on their type.
How to do this in an Ansible role argument spec?
This doesn't work:
argument_specs:
main:
options:
dictionary_argument:
description: A map from string to integers.
type: dict
required: true
options:
type: int
1 answer
Apparently there just isn't an equivalent of additionalProperties
in Ansible.
The way around this is to break the dictionary argument into a list of key/value pairs:
argument_specs:
main:
options:
dictionary_argument:
description: A map from string to integers.
type: list
required: true
elements: dict
options:
key:
type: str
required: true
value:
type: int
required: true
Just keep in mind that by doing this you loose dictionaries' implicit restriction of unique keys. If this is important, you will have to verify this manually in a task:
- name: Argument validation
vars:
original_length: "{{ dictionary_argument | length }}"
unique_length: "{{ dictionary_argument | unique(attribute='key') | length }}"
ansible.builtin.assert:
that:
- original_length == unique_length
0 comment threads