如何检查在Ansible手册中定义的变量是否包含字符串值?
问题描述:
我想验证输入值作为extra_args传递给变量。如何检查在Ansible手册中定义的变量是否包含字符串值?
我想运行一个前置任务,如果该变量包含字符串值,则会传递,否则会失败,如果它包含其他任何东西。
这些值在执行剧本时作为extra_args传递给它们。
答
这里有一些过滤器和ansible测试,你会发现它有用
http://docs.ansible.com/ansible/latest/playbooks_filters.html http://docs.ansible.com/ansible/latest/playbooks_tests.html
进行验证如下您可以使用它:
tasks:
- fail: msg="Variable '{{ item }}' is not a string"
when: string | search("^[a-zA-Z]*$")
答
我想运行如果变量包含字符串值,则传递前置任务;如果包含其他任何内容,则失败。
- fail: when: variable is not string
但要注意,作为额外瓦尔通过了所有的值将是字符串,因为这是它们是什么 - 任何你输入:如果
variable
不是字符串对象
此任务将失败在你的键盘上是一个有效的字符串。由于没有类型声明,即使变量包含一个数值,它也会存储在一个字符串对象中。
这与YAML中定义的变量值不同,后者通过YAML解析器执行类型自动检测。例如,如果在YAML中键入myvar: true
,它将被视为布尔对象true
,但是如果您通过与--extra-vars "myvar:true"
相同的值,它将是一个字符串对象true
。
您需要指定其他条件。
太好了。工作得很好。 另外,我通过从json文件加载extra_args,该文件将数字值作为数字本身而不是字符串对象。 –
只是为了确保每次都不失败。 – techraf
已检查。每次都不会失败。 –