2015-10-23 14 views
5

Tôi có Ansible vai trò "db" với nhiệm vụ đơn giản:Tại sao Ansible không thấy thuộc tính trong biến?

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

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

Khi tôi cố gắng chạy ansible-playbook này :

--- 
- hosts: test 
    roles: 
    - db 

tôi thấy lỗi:

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

FATAL: all hosts have already failed -- aborting 

Nhưng tôi có một vai trò khác có cùng nhiệm vụ và biến số và hoạt động hoàn hảo. Chuyện gì vậy?

Trả lời

6

Bạn muốn được làm điều này:

with_items: apt_repos 

apt_repos là một danh sách. Bằng cách tham chiếu nó là - "{{ apt_repos }}", thêm - sẽ biến nó thành danh sách các danh sách. Bạn cũng không cần dấu ngoặc kép hoặc dấu ngoặc ôm trong trường hợp này - những thứ này khá dư thừa trong loại tình huống này.

+5

Trong Ansible 2.1 và có thể sớm hơn, điều này hoạt động nhưng đưa ra cảnh báo không dùng nữa do sử dụng 'biến trống' 'apt_repos'. Để tránh điều này, hãy sử dụng 'with_items:" {{apt_repos}} "'. – RichVel

Các vấn đề liên quan