Ansible导入角色,循环var,如何访问它们

时间:2019-06-04 14:41:29

标签: ansible

我正在尝试使用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"}

有什么想法可以在语言环境下访问变量吗?

1 个答案:

答案 0 :(得分:0)

您正在混合2个概念。要遍历集合并使用其他变量导入/包含,必须使用loop_varindex_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嵌套两个循环任务。