首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在任务条件中使用不可变量

在任务条件中使用不可变量
EN

Stack Overflow用户
提问于 2019-12-02 19:43:54
回答 1查看 313关注 0票数 1
  1. 当我在failed_when条件中使用Ansible变量时,Ansible会抱怨并失败,因为它告诉我不能在failed_when中使用Jinja2表达式。

下面的代码片段不起作用:

代码语言:javascript
复制
  vars:
  var1: "var"
  tasks:
    - name: "sth"
      raw: "anothersth"
      register: status
      failed_when: var1 in status.stdout
  1. 我想在上面的例子中使用regex,并在regex中使用变量var1。这也失败了。如果var1在stdout_lines的开头和结尾重复,我希望失败。我在想这样的事情: failed_when: regex(“^{{var1}}/.*/{var1}}$”),在status.stdout中

我不知道是否有办法达到我打算做的事情?

===============================================================

准确的剧本和描述:

让我解释一下我想做的事:

  • 运行带有"raw“模块的命令并注册stdout_lines。
  • 迭代项列表,其中列表是当前不可接受主机的事实
  • 使用failed_when在已注册的标准输出中搜索模式,如果找不到任务,则失败

peers_underlay是在主机文件中定义的列表:

peers_underlay: - ip: "172.16.1.2" - ip: "172.16.1.6"

这是一出戏:

- hosts: leaf-2, spine-1 gather_facts: no tags: [ verify ] vars: bgp_underlay: "show ip bgp summary"

代码语言:javascript
复制
`tasks:      - name: "underlay bgp test"        raw: "{{ bgp_underlay }}"        register: underlay_status        with_items: "{{ peers_underlay }}"        failed_when: not regex(".*/{{ item['ip'] }}/.*/Estab/.*") in underlay_status.stdout_lines`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-02 20:30:03

问:“如果在开始和结束时重复var1,任务就失败了。”

答:测试字符串是可能的。例如,使用regex

代码语言:javascript
复制
    - hosts: localhost
      vars:
        my_stdout1: 'ABC dlkjfsldkfjsldkfj ABC'
        my_stdout2: 'alkdjflaksdjflakdjflaksjdflaksdjflasj'
        var1: 'ABC'
        my_regex: '^{{ var1 }}(.*){{ var1 }}$'
      tasks:
        - debug:
            msg: my_regex match my_stdout1
          when: my_stdout1 is regex(my_regex)
        - debug:
            msg: my_regex match my_stdout2
          when: my_stdout2 is regex(my_regex)

给出

代码语言:javascript
复制
    "msg": "my_regex match my_stdout1"

特定的任务序列将是

代码语言:javascript
复制
      vars:
        var1: "var"
        my_regex: '^{{ var1 }}(.*){{ var1 }}$'
      tasks:
        - name: "sth"
          raw: "anothersth"
          register: status
          failed_when: status.stdout is regex(my_regex)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59145673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档