如何检查Ansible playbook中定义的变量是否包含字符串值?

如何检查Ansible playbook中定义的变量是否包含字符串值?,ansible,Ansible,我想验证输入值是否作为额外参数传递给变量 我想运行一个预任务,如果变量包含字符串值,则该任务将通过;如果变量包含任何其他值,则该任务将失败 在执行playbook时,这些值会作为额外参数传递给它们。在ansible中有一些过滤器和测试,您可能会发现它们很有用 对于验证,您可以按如下方式使用它: tasks: - fail: msg="Variable '{{ item }}' is not a string" when: string | search("^[a-zA-Z

我想验证输入值是否作为额外参数传递给变量

我想运行一个预任务,如果变量包含字符串值,则该任务将通过;如果变量包含任何其他值,则该任务将失败


在执行playbook时,这些值会作为额外参数传递给它们。

在ansible中有一些过滤器和测试,您可能会发现它们很有用

对于验证,您可以按如下方式使用它:

tasks: 
   - fail: msg="Variable '{{ item }}' is not a string" 
     when: string | search("^[a-zA-Z]*$")
我想运行一个预任务,如果变量包含字符串值,则该任务将通过;如果变量包含任何其他值,则该任务将失败

如果
变量
不是字符串对象,则此任务失败:

- fail:
  when: variable is not string
但请注意,作为额外变量传递的所有值都将是字符串,因为它们就是字符串——您在键盘上键入的任何内容都是有效字符串。由于没有类型声明,即使变量包含数值,它也将存储在string对象中

它与YAML中定义的变量值不同,YAML解析器执行类型自动检测。例如,如果您在YAML中键入
myvar:true
,它将被视为布尔对象
true
,但如果您使用
--额外变量“myvar:true”
传递相同的值,它将是一个字符串对象
true


您需要指定另一个条件。

对于这种情况,我更喜欢使用“断言”模块

- name: Test if the type of 'variable' is string
  assert:
    that:
      - variable is defined
      - variable is string
    fail_msg: |
      variable: {{ variable | d() | to_nice_json }}
另请参见:类型检查示例:


顺便说一句,如果您想使用--extra vars(-e)选项定义类型的变量,您需要准备yaml文件来定义这些变量,并让它们使用'@'例如'-e@/path/to/the/yaml_file'加载。

。很好。另外,我通过从json文件加载来传递额外的参数,该文件将数值本身作为数值而不是字符串对象。不会每次都失败。上面的方法对于字符串输入很有效。我是否可以同样检查变量是否不是布尔值、字典或对象?