Hello,
I'm actually making a role for managing  bind configuration but i'm stuck 
with what *seems to be a regression*  in my role.

*briefly :*
Using ansible 2.1.1.0.
 The role user should be able to give a yml file containing a dict of 
ressource records named "records" for each zone
Each zone is declared in a list named "zones"

for keeping the code DRY and reusable, I divided the tasks in multiple 
files using include in main.yml and blocks

The problem appears during the zone data generation.
this step is an include task.yml with_items :

extract of main.yml :
 # generate/copy zones data
- include: create_zone_db.yml
  with_items: "{{ zones }}"
  tags: setup_zones


extract of create_zone_db.yml
---
- block:
  - set_fact: "zone_filename=db.{{ item.name }}"

  - name: Loading zone content for {{ item.name }} from {{ item.ymlfile }}
    include_vars: "{{ item.ymlfile }}"
 
  - name: Setup zones files for {{ item.name }} and verify 
    template:
    src: db.zones.template.j2
    dest: "{{ bind_zones_dir }}/{{ zone_filename }}"
    owner: "{{ bind_user }}"
    group: "{{ bind_group }}"
    mode: 0644
    validate: "/usr/sbin/named-checkzone {{ item.name }} %s"
  notify: reload bind
  when: item.ymlfile is defined


It works fine on the first loop with the first element in the "zones" list
but, if another element contains another *ymlfile* field,

on the next loop, the include_vars pass over the correct file but
the *records* dict is* not overrided* with the dict provided in the second 
and therefore the next zone has incorrect zone data.

*example : *
*in the user playbook :*
---
 host: localhost
 roles:
 - role: manage-bind
   zones:
     - name: example.com
       type: master
       ymlfile: example.com.yml
     - name: test.org
       type: master
       ymlfile: test.org.yml


*in example.com.yml*
---
records:
  ttl: 3d
  SOA:
    serial: 2016080401
    ns: srvdns01.example.com.
    email: admin.example.com.
    refresh: 12h
    retry: 30m
    expire: 3w
   negative: 2h30m
  NS:
    - srvdns01.example.com.
  A:
    127.0.0.1:
    - '@'
    - srvdns01.example.com.


*in test.org.yml*
---
records:
  ttl: 3d
  SOA:
    serial: 2016080401
    ns: host.test.org.
    email: root.test.org.
  NS:
    - host.test.org.
  A:
    127.0.0.1:
      - '@'
      - host.test.org.

*expected result for the second loop : *

records:
  ttl: 3d
  SOA:
    serial: 2016080401
    ns: host.test.org.
    email: root.test.org.
  NS:
    - host.test.org.
  A:
    127.0.0.1:
      - '@'
      - host.test.org.

*actual result : *
records:
  ttl: 3d
  SOA:
    serial: 2016080401
    ns: host.test.org.
    email: root.test.org.
    refresh: 12h
    retry: 30m
    expire: 3w
    negative: 2h30m
  NS:
    - host.test.org.
  A:
    127.0.0.1:
      - '@'
      - host.test.org.

It worked a month ago with records being a list instead of dict but when 
roll-backed to list type, I had the same issue.
I have tested with and without blocks and without include with same results
I looked over Variable Precedence in ansible doc without fiding anything 
explicit.

At this point I am clueless.
I don't know if i messed up with something, or if a found an issue with 
ansible or if my design is bad...

Any help Ansible experts ?
Thanks.
Aalaesar/

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/e28063b1-34d8-4313-b978-df495b95cfde%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to