条件:检查元素类型

Mun*_*kin 3 ansible

我正在寻找一种语法来检查变量是否包含任何子元素或只是一个字符串。假设我有一个文件vars/myvars.yml

myvars: {
  key1: {
    greeting: "hello"
  },
  key2: {
    greeting: {
      en: "hi",
      fr: "bonjour"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个只接受字符串而不接受对象的条件。所以在这种情况下,应key1.greeting符合条件,但key2.greeting应该不会

---
- name: test
  vars_files:
    - vars/myvars.yml
  hosts: all
  tasks:
  - debug: 
      msg: "greeting is '{{ item.value.greeting }}'"
    when: item.value.greeting ???is type string???
    with_dict: "{{ myvars }}"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

tec*_*raf 5

您可以使用type_debug过滤器

when: "item.value.greeting | type_debug == 'your_wanted_type'"
Run Code Online (Sandbox Code Playgroud)

对于字符串your_wanted_type可能是AnsibleUnicodeunicode,具体取决于您定义值的方式。