尝试在ansible中基于var类型设置条件

尝试在ansible中基于var类型设置条件,ansible,Ansible,我似乎找不到匹配字符串、列表和字典的筛选器。我的目标是根据给定的变量运行不同的任务块。下面是如何写的: - name: BLOCK of stuff based on our var is a string when: var | type == 'string' block: # bunch of tasks - name: BLOCK of stuff based on our var is a list when: var | type == 'array' bl

我似乎找不到匹配字符串、列表和字典的筛选器。我的目标是根据给定的变量运行不同的任务块。下面是如何写的:

- name: BLOCK of stuff based on our var is a string
  when: var | type == 'string'
  block:
    # bunch of tasks

- name: BLOCK of stuff based on our var is a list
  when: var | type == 'array'
  block:
    # bunch of tasks

- name: BLOCK of stuff based on our var is a dictionary
  when: var | type == 'dict'
  block:
    # bunch of tasks

你可以看一看。有了这些列表,唯一的困难是没有专门查找列表的测试。因此,您必须检查变量是否为序列,并排除字符串和dict

以下是一个示例剧本:

--
-主机:本地主机
收集事实:错误
变量:
测试变量:
-“我是一根绳子”
-[‘我’、‘是’、‘a’、‘名单’]
-{this:is,a:dict}
-这是一个整数
-2.34#这里有一个浮球
任务:
-名称:检查var是否为字符串
调试:
这是一个字符串
当:项为字符串时
循环:“{test_vars}}”
-名称:检查var是否为列表
调试:
这是一个列表
什么时候:
-项目是顺序
-项不是字符串
-项目未映射
循环:“{test_vars}}”
-名称:检查var是否为dict
调试:
味精:这是一个口述
何时:项正在映射
循环:“{test_vars}}”
其中:

PLAY [localhost] ***********************************************************************************************************************************************************************************************************************

TASK [Check if var is a string] ********************************************************************************************************************************************************************************************************
ok: [localhost] => (item=I'm a string) => {
    "msg": "this is a string"
}
skipping: [localhost] => (item=['I', 'am', 'a', 'list']) 
skipping: [localhost] => (item={'this': 'is', 'a': 'dict'}) 
skipping: [localhost] => (item=10) 
skipping: [localhost] => (item=2.34) 

TASK [Check if var is a list] **********************************************************************************************************************************************************************************************************
skipping: [localhost] => (item=I'm a string) 
ok: [localhost] => (item=['I', 'am', 'a', 'list']) => {
    "msg": "this is a list"
}
skipping: [localhost] => (item={'this': 'is', 'a': 'dict'}) 
skipping: [localhost] => (item=10) 
skipping: [localhost] => (item=2.34) 

TASK [Check if var is a dict] **********************************************************************************************************************************************************************************************************
skipping: [localhost] => (item=I'm a string) 
skipping: [localhost] => (item=['I', 'am', 'a', 'list']) 
ok: [localhost] => (item={'this': 'is', 'a': 'dict'}) => {
    "msg": "this is a dict"
}
skipping: [localhost] => (item=10) 
skipping: [localhost] => (item=2.34) 

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0