8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何根据 ansible 中的条件仅使用 3 个变量中的一个?

JaredPar 2月前

21 0

我有三个变量需要根据条件进行注册,它将运行一个任务并注册一个变量,我怎样才能对相应的任务使用测试变量?----名称:Test1 命令:\'ech...

我有三个变量需要根据条件进行注册,它将运行一项任务并注册一个变量,我怎样才能对相应的任务使用测试变量?

---
- name: Test1
  command: "echo HAHA"
  register: testing
  when: HAHA is defined

- name: Test2
  command: "echo BLABLA"
  register: testing
  when: BLABLA is defined

- name: Test3
  command: "echo DODO"
  register: testing
  when: DODO is defined
  
- name: Verify Tests
  command: "execute {{ testing.stdout }}"
  when: TEST is defined

我收到类似以下未定义变量的错误:

{"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout'\n\nThe error appears to be in '/home/ubuntu/tests/': line 3, 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: Verify Tests \n  ^ here\n"

您能提出建议吗?

帖子版权声明 1、本帖标题:如何根据 ansible 中的条件仅使用 3 个变量中的一个?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由JaredPar在本站《linux》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 使用 debug 任务来验证变量是否包含您认为的内容始终是一个好主意。

    当您 register 在任务中使用时, 无论任务是否运行, 始终 DODO 未设置变量,则在您的最终任务中,变量 testing 将包含:

    ok: [localhost] => {
        "testing": {
            "changed": false,
            "false_condition": "DODO is defined",
            "skip_reason": "Conditional result was False",
            "skipped": true
        }
    }
    

    如您所见,这里没有 stdout 属性。对于您想要的行为,您可以像这样重写剧本:

    - hosts: localhost
      gather_facts: false
      tasks:
      - name: Test1
        command: "echo HAHA"
        register: testing1
        when: HAHA is defined
    
      - name: Test2
        command: "echo BLABLA"
        register: testing2
        when: BLABLA is defined
    
      - name: Test3
        command: "echo DODO"
        register: testing3
        when: DODO is defined
    
      - set_fact:
          testing: >-
            {{
              [testing1, testing2, testing3] | selectattr("stdout", "defined")
            }}
        
      - name: Verify Tests
        when: testing
        debug:
          msg: "execute {{ testing[0].stdout }}"
    

    在没有定义变量的情况下运行此命令会导致:

    TASK [Verify Tests] *************************************************************************************************************************
    skipping: [localhost]
    

    但如果我们定义目标变量:

    $ ansible-playbook playbook.yaml -e DODO=1
    .
    .
    .
    TASK [Verify Tests] *************************************************************************************************************************
    ok: [localhost] => {
        "msg": "execute DODO"
    }
    

    或者:

    $ ansible-playbook playbook.yaml -e HAHA=1
    .
    .
    .
    TASK [Verify Tests] *************************************************************************************************************************
    ok: [localhost] => {
        "msg": "execute HAHA"
    }
    

    如果设置了多个变量,您将从第一个执行的任务中获取值:

    $ ansible-playbook playbook.yaml -e HAHA=1 -e DODO=1
    .
    .
    .
    TASK [Verify Tests] *************************************************************************************************************************
    ok: [localhost] => {
        "msg": "execute HAHA"
    }
    
返回
作者主题