【问题标题】:How to skip task when condition is not satisfied条件不满足时如何跳过任务
【发布时间】:2019-03-18 17:14:27
【问题描述】:

如果 my_environment var 是 "prod",则具有以下任务的角色,该任务应该创建一个 cron 作业。

当条件不满足时,我希望剧本跳过此任务而不是失败:

---
- name: Configure cron job to export patch logs
  cron:
    name: export patch logs daily
    minute: 0
    hour: 0
    user: root
    cron_file: patch_logs
    job: "/usr/local/bin/aws s3 cp /var/log/dpkg.log s3://{{ patch_logs_bucket }}/dpkg.log.$(hostname).$(date +\\%F)"
  when: my_environment == "prod"

失败信息:

TASK [ansible-contxt-base : Configure cron job to export patch logs] ***********
    fatal: [ubuntu-1604]: FAILED! => {"msg": "The conditional check 'scx_environment == \"prod\"' failed. The error was: error while evaluating conditional (scx_environment == \"prod\"): 'my_environment' is undefined\n\nThe error appears to have been in '/**<path>**/tasks/base.yml': line 125, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Configure cron job to export patch logs\n  ^ here\n"}

【问题讨论】:

    标签: python ansible yaml conditional-statements


    【解决方案1】:

    我们可以使用 jinja2 的快捷方式来表示 'default(False) ': 'd(False)'。

    when: my_environment|d(False) == "prod"
    

    【讨论】:

      【解决方案2】:
      when:
      
      my_environment is defined
      
      my_environment != ”prod”
      

      【讨论】:

      • 请解释一下
      【解决方案3】:

      在这里找到https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/playbooks_conditionals.html#the-when-statement

      - shell: echo "This certainly isn't epic!"
        when: not epic
      

      - fail: msg="Bailing out. this play requires 'bar'"
        when: bar is undefined
      

      【讨论】:

        猜你喜欢
        • 2017-08-29
        • 2016-04-13
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 1970-01-01
        相关资源
        最近更新 更多