我正在创建一个角色,作为第一个任务,我想验证所有相关的强制性参数是否已定义并且不为空。
必需参数的数量是动态的,并根据配置进行更改。 例如如果flag为true,则将需要其他必需参数。
为了解决动态参数,我创建了mandatory_parameters.j2
模板文件,其中包含所有相关参数
required_vars:
- release_pipeline_bb_url
- release_mail_to
- dummy
{% if release_pipeline_credential_enabled %}
- release_pipeline_credential.private_key
{% endif %}
{% if release_descriptor_credential_enabled %}
- release_descriptor_credential.UserName
- release_descriptor_credential.Password
{% endif %}
之后,我将此文件加载为vars
- name: Create mandatory validation file
template:
dest: "{{ jenkins_casc_folder }}/{{ role_name }}/mandatory.yaml"
src: mandatory_parameters.j2
- name: Load mandatory parameter file as variable
include_vars:
file: "{{ jenkins_casc_folder }}/{{ role_name }}/mandatory.yaml"
我成功地检查了强制性参数是否已定义并且对于“常规”变量而言是否为空,但不适用于字典,例如release_descriptor_credential.Password
- name: Validate all mandatory parameters
fail: msg="The variable '{{ item }}' is not defined or empty"
when: ( vars[item] is not defined) or ( vars[item] |length == 0)
loop: "{{ required_vars }}"
我如何也可以验证字典类型?
我也通过查找尝试过,但是没有成功。
答案 0 :(得分:1)
下面的任务完成了任务
- name: Validate all mandatory parameters
fail:
msg: "The variable '{{ item }}' is not defined or empty"
loop: "{{ required_vars }}"
when: myvar|length == 0
vars:
mydict: "{{ item.split('.').0 }}"
myattr: "{{ item.split('.').1|default('') }}"
myvar: "{{ (myattr|length > 0)|
ternary( lookup('vars', mydict, default='')[myattr]|default(''),
lookup('vars', mydict, default='')) }}"