LINUX.ORG.RU
ФорумAdmin

Ansible Хочу массив строк из пары массивов

 


0

1

Всем привет!

Как заставить этот код работать? Он должен собирать исходники либы и выкладывать их в определенные поддиректории. ИМХО, циклы здесь необходимы.

- hosts: localhost
  vars:
    tmp_dir: /tmp/botan
    install_dirs: "libbotan/{{ item[0] }}/{{ item[1] }}"
    qmakes : "/home/builder/mxe/usr/{{ item[0] }}-w64-mingw32.{{ item[1] }}/qt5/bin/qmake"
    loop   : "{{ lookup(['i686', 'x86_64'], ['static', 'shared']) }}"
  tasks:
    - name : create tmp dir
      file : path={{ tmp_dir }} state=directory
    - name : create install dirs
      file : path={{ item }} state=directory
      with_items: "{{ install_dirs }}"

Выдает fatal: [localhost]: FAILED! => {"failed": true, "msg": "libbotan/{{ item[0] }}/{{ item[1] }}: 'item' is undefined"}

Ansible версии 2.2.1

★★

Последнее исправление: aido (всего исправлений: 2)

Немного усложним задачу. На самом деле нужен словарь, сгенеренный из нескольких массивов. Вот код, который выдает FAILED! => {"failed": true, "msg": "'builds' is undefined"}

- hosts: localhost
  vars:
    tmp_dir: /tmp/botan
    set_fact:
        builds: "{{ 'libbotan/{{ item[0] }}/{{ item[1] }}' : '/home/builder/mxe/usr/{{ item[0] }}-w64-mingw32.{{ item[1] }}/qt5/bin/qmake' }}"
    with_nested:
        - [i686, x86_64]
        - [shared, static]
  tasks:
      - name : create tmp dir
        file : path={{ tmp_dir }} state=directory
      - name : create static install dirs
        file : path={{ item.key }} state=directory
        with_items: "{{ builds }}"
      - name : download or update botan
        git:
            repo: https://github.com/randombit/botan
            dest: "{{ tmp_dir }}"
aido ★★
() автор топика

Ansible версии 2.2.1

Откуда ты взял эту строчку:

loop   : "{{ lookup(['i686', 'x86_64'], ['static', 'shared']) }}"

и почему ты думаешь что она должна работать?

alpha ★★★★★
()
Ответ на: комментарий от alpha

Поправил. Теперь так, но все равно не робит:

- hosts: localhost
  vars:
    tmp_dir: /tmp/botan
  tasks:
      - name : create tmp dir
        file : path={{ tmp_dir }} state=directory
      - name: create needed dictionary
        set_fact:
            builds: "{{ builds|default({}) | combine( {'libbotan/{{item[0]}}/{{item[1]}}' : '/home/builder/mxe/usr/{{item[0]}}-w64-mingw32.{{item[1]}}/qt5/bin/qmake'}) }}"
        with_nested:
            - ['i686', 'x86_64']
            - ['shared', 'static']
      - name: show builds names
        debug:
            msg: "{{ builds }}"
      - name : create install dirs
        file : path={{ item.key }} state=directory
        with_items: "{{ builds }}"
      - name : download or update botan
        git:
            repo: https://github.com/randombit/botan
            dest: "{{ tmp_dir }}"
aido ★★
() автор топика

Чорт, до такого использования ансибла я ещё не догадался. Почему не использовать нормальный груви в дженкинсе?

stave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.