如何检查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文件加载来传递额外的参数,该文件将数值本身作为数值而不是字符串对象。不会每次都失败。上面的方法对于字符串输入很有效。我是否可以同样检查变量是否不是布尔值、字典或对象?