2015-10-23 75 views
5

我有Ansible角色 「DB」 與簡單的任務:爲什麼Ansible沒有在變量中看到屬性?

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

在/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 } 

當我嘗試運行此ansible,劇本:

--- 
- hosts: test 
    roles: 
    - db 

我看到錯誤:

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

FATAL: all hosts have already failed -- aborting 

但我有另一個作用相同的任務和變量,它的工作完美。怎麼了?

回答

6

你想要做的:

with_items: apt_repos 

apt_repos是一個列表。通過將其引用爲- "{{ apt_repos }}",額外的-將它變成列表清單。在這種情況下,您也不需要引號或大括號 - 在這種情況下,這些只是多餘的。

+5

在Ansible 2.1和更早的版本中,這可以工作,但由於使用「裸露變量」apt_repos而給出了棄用警告。爲避免出現這種情況,請使用'with_items:「{{apt_repos}}」'。 – RichVel

相關問題