我正在尝试使用vars动态创建一个apache配置文件;
language_domains:
en_gb:
- domains:
- domain.co.uk
- www.domain.co.uk
site_root: "/var/www/domain"
ssl_certificate_file: "/etc/ssl/certs/www.domain.co.uk.crt"
ssl_key_file: "/etc/ssl/private/www.domain.co.uk.key"
ssl_chain_file: "/etc/ssl/ca/www.domain.co.uk.ca"
ro_ro:
- domains:
- domain2.ro
site_root: "/var/www/domain"
ssl_certificate_file: "/etc/ssl/certs/www.domain2.ro.crt"
ssl_key_file: "/etc/ssl/private/www.domain2.ro.key"
ssl_chain_file: "/etc/ssl/ca/www.domain2.ro.ca"
所以我想遍历language_domains,然后为每个语言环境创建一个文件,如下所示;
tasks:
- name: Apply loop to each task in role
become: true
import_role:
name: multilingual_domains
loop_control:
index_var: language_domains
角色main.yml文件具有以下内容;
- name: Loop over domains
template: src=templates/apache.conf.j2 dest=/etc/apache2/sites-available/{{ansible_date_time.iso8601}}.conf
但是,当我尝试访问域时,会显示以下内容;
TASK [multilingual_domains : Loop over domains] *************************************************************************************************************************************************************************************
fatal: [192.168.34.15]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'domains' is undefined"}
有什么想法可以在语言环境下访问变量吗?
答案 0 :(得分:0)
您正在混合2个概念。要遍历集合并使用其他变量导入/包含,必须使用loop_var
。 index_var
用于在循环中使用以获取数字索引。
tasks:
- name: Apply loop to each task in role
become: true
import_role: multilingual_domains.yml
loop_control:
loop_var: language_domain <- use this variable name in the imported role
从ansible docs说:
使用 loop_var
定义内部和外部变量名称您可以使用include_tasks嵌套两个循环任务。