Возможно, когда выписка с переменной из другой задачи - PullRequest
0 голосов
/ 26 июня 2018

Может кто-нибудь помочь мне, пожалуйста? Я хочу создать папку на хосте "cfme_tester-0". Для этого я проверяю переменную "osp_version" с хоста "undercloud-0" и на основании результата должен создать папку на хосте "cfme_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   

1 Ответ

0 голосов
/ 26 июня 2018

Переменные являются для каждого хоста (потому что иначе, что произойдет, когда вы запускаете задачу на нескольких хостах и ​​register переменная?). В первой задаче вы устанавливаете переменную osp_version для хоста undercloud-0.

Если вы хотите использовать эту переменную во второй игре, которая выполняется на cfme_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"

... но учтите, что если вы просто создаете каталог, вам лучше использовать модуль file:

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