2016-09-30 4 views
2

Я пытаюсь выработать способ сократить строки кода для различных модулей, повторяя строфы, кажется бессмысленным. Я хотел бы использовать поиск csvfile, чтобы заполнить пробелы. Возьмем, например, следующие CSV:Ansible - используя {{item}} с поиском csvfile

# groups.csv 
# name, gid [optional - leave blank], state [present|absent], system [yes|no] 

accounts,502,present,no 
engineering,504,present,no 

Итак, у меня есть все определения моей группы в формате csv. Проблема в том, что, обрабатывая его, независимо от того, что я пытаюсь, я не могу заставить поиск работать внутри модуля групп. Так первоначально, я хотел бы сделать это:

--- 

- hosts: localhost 

    become: True 
    become_user: root 

    tasks: 

    - name: get groups 
    command: /usr/bin/awk -F',' '!/^#/ && !/^$/ { print $1 }' groups.csv 
    register: groups_out 

    - debug: var=groups_out.stdout_lines 


    - name: Process groups 
    group: > 
     name="{{ lookup('csvfile', 'item file=groups.csv col=0') }}" 
     gid="{{ lookup('csvfile', 'item file=groups.csv col=1') }}" 
     state="{{ lookup('csvfile', 'item file=groups.csv col=2') }}" 
     system="{{ lookup('csvfile', 'item file=groups.csv col=3') }}" 
    # with_lines: "/usr/bin/awk -F',' '!/^#/ && !/^$/ { print $1 }' groups.csv" 
    # with_items: "{{ groups_out.stdout_lines }}" 
    with_lines: "{{ groups_out.stdout_lines }}" 

Результат, который заключается в следующем:

TASK [Process groups] ********************************************************** 
/bin/sh: accounts: command not found 
fatal: [localhost]: FAILED! => {"failed": true, "msg": "lookup_plugin.lines(accounts) returned 127"} 

Как видно из кода, я также попытался с помощью with_items и with_lines с помощью awk, но, похоже, группам не нравится, как я это делаю.

анзибль 2.1.1.0 на Centos 7. Python 2.7.5 Дзиндзя 2,8

Любые идеи, как я мог бы достичь этого?

Спасибо заранее,

R

+0

Каковы права доступа к файлу «/var/tmp/ansible.csv», и делает это джайв с тем, что пользователь работает с «анзибль» или «анзибль-сборник пьес» или что пользователь команда является беги как? –

+0

В этом-то - нет файла с именем /var/tmp/ansible.csv./var/tmp - мой cwd. – Rowley

+0

Изменен файл 'item + '-...' to '' item file = ... '' – Rowley

ответ

0

Ответ ниже. Спасибо Jon и Kai за помощь в помощи googlegroup.

--- 

- hosts: localhost 

    become: True 
    become_user: root 

    tasks: 

    - name: get groups 
    command: /usr/bin/awk -F',' '!/^#/ && !/^$/ { print $1 }' /var/tmp/groups.csv 
    register: groups_out 

    - name: Process groups one 
    group: > 
     name={{ lookup('csvfile', item + ' file=groups.csv col=0 delimiter=,') }} 
     gid={{ lookup('csvfile', item + ' file=groups.csv col=1 delimiter=,') }} 
     state={{ lookup('csvfile', item + ' file=groups.csv col=2 delimiter=,') }} 
     system={{ lookup('csvfile', item + ' file=groups.csv col=3 delimiter=,') }} 
    with_items: "{{ groups_out.stdout_lines }}" 
    ignore_errors: True 

    - name: Process groups two 
    group: > 
     name={{ lookup('csvfile', item + ' file=groups.csv col=0 delimiter=,') }} 
     gid={{ lookup('csvfile', item + ' file=groups.csv col=1 delimiter=,') }} 
     state={{ lookup('csvfile', item + ' file=groups.csv col=2 delimiter=,') }} 
     system={{ lookup('csvfile', item + ' file=groups.csv col=3 delimiter=,') }} 
    with_lines: /usr/bin/awk -F',' '!/^#/ && !/^$/ { print $1 }' /var/tmp/groups.csv