【问题标题】:Unable to get correct behaviour from Ansible boolean variable无法从 Ansible 布尔变量中获得正确的行为
【发布时间】:2021-01-13 15:03:15
【问题描述】:

Jenkins 有一个布尔参数 mycheck,它被传递给 ansible playbook,如下所示:

ansible-playbook -i /var/myserver.hosts /var/testplay.yml -e mycheck=$mycheck

当复选框未选中时,上述内容将转换为以下内容:

ansible-playbook -i /var/myserver.hosts /var/testplay.yml -e mycheck=False

cat /var/testplay.yml

- debug:
    msg: "mycheck is True"
  when: not mycheck

但是,当我期望 when 条件为真并打印时,上面的调试被跳过了。

您能否建议为什么not mycheck 没有被翻译成“真”并且满足when 条件?

【问题讨论】:

    标签: ansible boolean conditional-statements case-when negation


    【解决方案1】:

    原因: 这是由于数据类型问题引起的,默认情况下,ansible 将通过额外变量传递的任何变量视为 Unicode 字符串,而不是将布尔类与传递的文本相关联。

    解决方案: 您的初始执行命令应修改为以下 ansible-playbook -i /var/myserver.hosts /var/testplay.yml -e '{ mycheck: True }'

    【讨论】:

    • 已通过 -e '{ mycheck=false }' 但现在它给了我以下错误:fatal: [localhost]: FAILED! => {"msg": "The conditional check 'not mycheck and file_perm == \"\"' failed. The error was: error while evaluating conditional (not mycheck and file_perm == \"\"): 'mycheck' is undefined
    • -e '{ mycheck: false }' 一起工作,而与-e '{ mycheck=false }' 一起失败。你能为-e '{ mycheck=false }' 提出一个解决方案吗?
    • 就语法而言,我不认为它是这样工作的
    猜你喜欢
    • 2011-12-27
    • 2020-08-07
    • 2013-08-22
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多