ansible проверка обязательных параметров через цикл - PullRequest
2 голосов
/ 17 апреля 2020

Я работаю над созданием роли ansible и в качестве первой задачи хочу убедиться, что все соответствующие обязательные параметры определены, а не пустые.

Количество обязательных параметров равно Dynami c и изменено. на основе конфигурации. например, если флаг равен true, то для него потребуются дополнительные обязательные параметры.

, чтобы решить параметры динамического c, я создаю файл шаблона 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 }}"

Как я могу проверить и для словаря типа?

Я пытался также через поиск, но безуспешно.

1 Ответ

1 голос
/ 18 апреля 2020

Задача ниже делает работу

  - 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='')) }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...