Ansible: проверьте, содержит ли переменная список или словарь - PullRequest
1 голос
/ 17 марта 2020

Иногда для ролей нужны разные обязательные переменные, которые должны быть определены при их вызове. Например,

- hosts: localhost
  remote_user: root

  roles:
    - role: ansible-aks
      name: myaks
      resource_group: myresourcegroup

Внутри роли можно управлять следующим образом:

- name: Assert AKS Variables
  assert:
    that: "{{ item }} is defined"
    msg: "{{ item  }} is not defined"
  with_items:
    - name
    - resource_group

Я хочу передать список или словарь моей роли вместо строки. Как я могу утверждать, что переменная содержит словарь или список?

1 Ответ

1 голос
/ 17 марта 2020

Пример:

В случае со словарем это просто:

---
- name: Assert if variable is list or dict
  hosts: localhost
  connection: local
  gather_facts: false

  vars:
    mydict: {}
    mylist: []

  tasks:

  - name: Assert if dictionary
    assert:
      that: ( mydict is defined ) and ( mydict is mapping )

Но при проверке списка мы должны быть уверены, что это не отображение, а не строка и итерируемый:

  - name: Assert if list
    assert:
      that: >
           ( mylist is defined ) and ( mylist is not mapping )
           and ( mylist is iterable ) and ( mylist is not string )

Если вы тестируете со строкой, логическим значением или цифрой c, утверждение будет ложным.

Еще один хороший вариант:

  - name: Assert if dictionary
    assert:
      that: ( mydict is defined ) and ( mydict | type_debug == "dict" )

  - name: Assert if list
    assert:
      that: ( mylist is defined ) and ( mylist | type_debug == "list" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...