Ansible when语句包含来自另一个任务的变量

Ansible when语句包含来自另一个任务的变量,ansible,.when,Ansible,.when,有人能帮我吗? 我想在主机“cfme_tester-0”上创建一个文件夹。 为此,我从“undercloud-0”主机中检查变量“osp\u version”,并根据结果在“cfme\u tester-0”主机上创建一个文件夹 这是我的剧本: - name: take openstack version hosts: undercloud-0 become: true become_user: stack tasks: - name: creating flavor

有人能帮我吗? 我想在主机“cfme_tester-0”上创建一个文件夹。 为此,我从“undercloud-0”主机中检查变量“osp\u version”,并根据结果在“cfme\u tester-0”主机上创建一个文件夹

这是我的剧本:

- name: take openstack version
  hosts: undercloud-0
  become: true
  become_user: stack
  tasks:
    - name: creating flavor
      shell: |
        source /home/stack/stackrc
        cat /etc/rhosp-release | egrep -o '[0-9]+' | head -1
      register: osp_version
      ignore_errors: True
    - debug: msg="{{ osp_version.stdout }}"


- name: set up CFME tester
  hosts: cfme_tester-0
  become: yes
  become_user: root
  tasks:
    - name: Run prepare script for OSP10
      debug:
        shell: |
          cd /tmp/cfme/ && mkdir osp10
      when: "'10' in osp_version.stdout"

    - name: Run prepare script for OSP13
      debug:
        shell: |
          cd /tmp/cfme/ && mkdir osp13
      when: "'13' in osp_version.stdout"
但出现了一个错误:

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [undercloud-0] => {
    "msg": "10"
}

PLAY [set up CFME tester] *****************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [cfme_tester-0]

TASK [Run prepare script for OSP10] *******************************************************************************************************************************************************************************
fatal: [cfme_tester-0]: FAILED! => {"msg": "The conditional check ''10' in osp_version.stdout' failed. The error was: error while evaluating conditional ('10' in osp_version.stdout): 'osp_version' is undefined\n\nThe error appears to have been in '/root/infrared/rhos-qe-core-installer/playbooks/my_setup.yaml': line 20, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  tasks:\n    - name: Run prepare script for OSP10\n      ^ here\n"}
    to retry, use: --limit @/root/infrared/rhos-qe-core-installer/playbooks/my_setup.retry

PLAY RECAP ********************************************************************************************************************************************************************************************************
cfme_tester-0              : ok=1    changed=0    unreachable=0    failed=1   
undercloud-0               : ok=3    changed=1    unreachable=0    failed=0   
变量是每个主机的(否则,在多个主机上运行任务并注册变量时会发生什么情况?)。在第一个任务中,您正在为主机
undercloud-0
设置
osp\u版本
变量

如果您想在第二个重头戏中使用此变量,该重头戏在
cfme\u tester-0
上运行,那么您应该阅读Ansible文档的一节。您需要通过
hostvars
字典引用变量,因此您的第二个重头戏如下所示:

- name: set up CFME tester
  hosts: cfme_tester-0
  become: yes
  become_user: root
  tasks:
    - name: Run prepare script for OSP10
      shell: |
        cd /tmp/cfme/ && mkdir osp10
      when: "'10' in hostvars['undercloud-0'].osp_version.stdout"

    - name: Run prepare script for OSP13
      shell: |
        cd /tmp/cfme/ && mkdir osp13
      when: "'13' in hostvars['undercloud-0'].osp_version.stdout"
…但请注意,如果只是创建目录,最好使用
文件
模块:

    - name: Run prepare script for OSP10
      file:
        path: /tmp/cfme/osp10
        state: directory
      when: "'10' in hostvars['undercloud-0'].osp_version.stdout"

很乐意帮忙!如果你对这个答案感到满意,你应该点击上面和左边的复选标记,将其标记为接受。我现在对变量没问题,但另一个问题来了。所以我需要做更多的调查。致命:[cfme\U tester-0]:失败!=>{“changed”:false,“msg”:“'shell'在调试中不是有效选项”}好吧,它告诉了你真相<代码>shell不是
调试
的有效选项
debug
仅接受
var
msg
;请参阅文档:。我想你只是想要一个
shell
任务(见更新我的答案)。拉尔克斯,你是最好的。你干了我的晚会。再次非常感谢!