2015-10-23 13 views
5

Ho Ansible ruolo "db" con semplice compito:Perché Ansible non ha visto l'attributo nella variabile?

- name: Check repos 
    apt_repository: repo="{{ item.repo }}" state={{ item.state }} 
    with_items: 
    - "{{ apt_repos }}" 

In /defaults/mail.yml:

apt_repos:

# Percona 
- { state: present, repo: 'deb http://repo.percona.com/apt wheezy main', keyserver: 'keyserver.ubuntu.com', key: '1C4CBDCDCD2EFD2A', needkey: True } 
- { state: present, repo: 'deb-src http://repo.percona.com/apt wheezy main', needkey: False } 

Quando provo a eseguire questo ansible-playbook :

--- 
- hosts: test 
    roles: 
    - db 

vedo errore:

fatal: [10.10.10.10] => One or more undefined variables: 'unicode object' has no attribute 'repo' 

FATAL: all hosts have already failed -- aborting 

Ma ho un altro ruolo con lo stesso compito e variabile e funziona perfettamente. Cosa c'è che non va?

risposta

6

Si vuole fare questo:

with_items: apt_repos 

apt_repos è una lista. Facendolo riferimento come - "{{ apt_repos }}", l'ulteriore - lo trasforma in un elenco di elenchi. Inoltre, in questo caso non sono necessarie le virgolette o le parentesi graffe: quelle sono praticamente ridondanti in questo tipo di situazione.

+5

In Ansible 2.1 e forse prima, funziona ma fornisce un avviso di deprecazione dovuto all'utilizzo della 'variabile nuda' 'apt_repos'. Per evitare ciò, usa 'with_items:" {{apt_repos}} "'. – RichVel

Problemi correlati