2016-07-19 2 views
0

В моей нынешней PlayBook, у меня есть что-то вроде следующего:анзибль - Как использовать регистр имя из with_items

- name: Copy cov-analysis-linux64-8.0.0.tgz 
    copy: src=/home/devops/chroot/cov-analysis-linux64-8.0.0.tgz      dest=/var/tmp/cov-analysis.tgz owner=devops 
    register: coverity 

- name: Copy fortidev-2.02.chroot.tar.bz2 
    copy: src=/home/devops/chroot/fortidev-2.02.chroot.tar.bz2 
    dest=/var/tmp/fortidev2.chroot.tar.bz2 owner=devops 
    register: fortidev2 

Список становится все длиннее и длиннее и читаемость кода, я хочу использовать with_items сделать Это. Я обновил его на что-то вроде:

- name: copy chroot tarball to the servers 
    copy: src={{ item.src }} dest={{ item.dest }} owner=devops 
    register: "{{ item.register }}" 
    with_items: 
    - { src: /home/devops/chroot/cov-analysis-linux64-8.0.0.tgz, 
     dest: /var/tmp/cov-analysis.tgz, 
     register: coverity 
     } 
    - { src: /home/devops/chroot/fortidev-2.02.chroot.tar.bz2, 
     dest: /var/tmp/fortidev2.chroot.tar.bz2, 
     register: fortidev2 
     } 
    - { src: /home/devops/chroot/fmdev-6.0.tar.xz, 
     dest: /var/tmp/fmdev6.tar.xz, 
     register: fmdev6 
     } 

Проблема теперь, когда я хочу обратиться к одному из регистров в последующих задач, он не может найти переменную. Код для обозначения это:

- name: umount fortidev2 /proc|/dev|/tmp|/cov-analysis 
    command: umount {{ item }} 
    become: yes 
    when: fortidev2.changed 
    with_items: 
      - /home/devops/fortidev2/proc 
      - /home/devops/fortidev2/dev 
      - /home/devops/fortidev2/tmp 
    ignore_errors: yes 

ошибка { «не»: правда, «сообщение»:. «Условная проверка„fortidev2.changed“не удалась ошибка: ошибка при оценке условных (fortidev2 .changed): 'fortidev2' не определен \ n \ nПроизошла ошибка в '/var/lib/jenkins/jobs/Devops/jobs/update_chroot/workspace/roles/chroot/tasks/main.yml': строка 70 , столбец 3, но может \ n быть в другом месте в файле в зависимости от точной проблемы синтаксиса. \ n \ nДля удаления папки \ n- name: \ n \ n # unmount/proc и/dev перед \ umount fortidev2/proc |/dev |/tmp |/cov-analysis \ n^here \ n "}

ответ

2

Попробуйте следующее:

- name: copy chroot tarball to the servers 
    copy: src={{ item.src }} dest={{ item.dest }} owner=devops 
    register: tarballs 
    with_items: 
    - { src: /home/devops/chroot/cov-analysis-linux64-8.0.0.tgz, 
     dest: /var/tmp/cov-analysis.tgz, 
     name: coverity 
     } 
    - { src: /home/devops/chroot/fortidev-2.02.chroot.tar.bz2, 
     dest: /var/tmp/fortidev2.chroot.tar.bz2, 
     name: fortidev2 
     } 
    - { src: /home/devops/chroot/fmdev-6.0.tar.xz, 
     dest: /var/tmp/fmdev6.tar.xz, 
     name: fmdev6 
     } 

- name: umount fortidev2 /proc|/dev|/tmp|/cov-analysis 
    command: umount {{ item }} 
    become: yes 
    when: tarballs.results | selectattr('item.name','equalto','fortidev2') | join('',attribute='changed') | bool 
    with_items: 
    - /home/devops/fortidev2/proc 
    - /home/devops/fortidev2/dev 
    - /home/devops/fortidev2/tmp 
Смежные вопросы