You're headed in the right direction, but there are a couple of issues:
Bad YAML syntax in your datafile.
In your example, you show:
- 'Bay: "ENT0005, bay 11", Profilename: "test_profile01"'
- 'Bay: "ENT0005, bay 12", Profilename: "test_profile02"'
That's a list of strings (because you have each list item enclosed in single quotes). If you want to reproduce the data you've shown in your playbook, you want a list of dictionaries. You probably want this instead:
- Bay: "ENT0005, bay 11"
Profilename: "test_profile01"
- Bay: "ENT0005, bay 12"
Profilename: "test_profile02"
The following is identical, just using a slightly different syntax:
- {Bay: "ENT0005, bay 11", Profilename: "test_profile01"}
- {Bay: "ENT0005, bay 12", Profilename: "test_profile02"}
Nested jinja2 template markers
You never nest {{...}}
markers; you only need the outermost set...everything inside is already in a Jinja template context. Rather than:
loop: "{{ lookup('file', '{{ bayfile.yml }}') }}"
You would write:
loop: "{{ lookup('file', 'bayfile.yml') }}"
Convert data to YAML
Lastly, when you use a file
lookup like that, the result is simply a string (the contents of the file). You want to de-serialize that into Ansible data structures, so you'll need the from_yaml
filter:
loop: "{{ lookup('file', 'bayfile.yml') | from_yaml }}"
Putting that all together, we get something like this:
- hosts: localhost
gather_facts: false
tasks:
- name: Create server profile
debug:
msg:
- "{{ item.Bay }}"
- "{{ item.Profilename }}"
loop: "{{ lookup('file', 'bayfile.yml') | from_yaml }}"
Using include_vars
Note that instead of using the file
lookup and the from_yaml
filter, you could use an include_vars
task in your playbook. You would first need to reformat your datafile so that it's a dictionary instead of a list, like this:
oneview_servers:
- Bay: "ENT0005, bay 11"
Profilename: "test_profile01"
- Bay: "ENT0005, bay 12"
Profilename: "test_profile02"
And then you could write your playbook like this:
- hosts: localhost
gather_facts: false
tasks:
- name: Read data
include_vars:
file: bayfile.yml
name: data
- name: Create server profile
debug:
msg:
- "{{ item.Bay }}"
- "{{ item.Profilename }}"
loop: "{{ data.oneview_servers }}"