Parameterized include statements can see top level variables and also be passed specific variables!
Code needs cleanup, but works
This commit is contained in:
parent
fb3bfa1c51
commit
4ee4ddcd7c
3 changed files with 18 additions and 3 deletions
|
@ -3,3 +3,5 @@
|
|||
action: command /usr/sbin/setenforce 0
|
||||
- name: no iptables
|
||||
action: service name=iptables state=stopped
|
||||
- name: this is just to show variables work here, favcolor={{ favcolor }}
|
||||
action: command /bin/true
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
http_port: 80
|
||||
max_clients: 200
|
||||
tasks:
|
||||
- include: base.yml
|
||||
- include: base.yml favcolor=blue
|
||||
- name: write the apache config file using vars set above
|
||||
action: template src=/srv/httpd.j2 dest=/etc/httpd.conf
|
||||
notify:
|
||||
|
|
|
@ -23,6 +23,7 @@ from ansible.utils import *
|
|||
import yaml
|
||||
import shlex
|
||||
import os
|
||||
import jinja2
|
||||
|
||||
SETUP_CACHE={ 'foo' : {} }
|
||||
|
||||
|
@ -92,8 +93,20 @@ class PlayBook(object):
|
|||
new_tasks = []
|
||||
for task in tasks:
|
||||
if 'include' in task:
|
||||
path = path_dwim(dirname, task['include'])
|
||||
included = yaml.load(file(path).read())
|
||||
# FIXME: refactor
|
||||
# an include line looks like:
|
||||
# include: some.yml a=2 b=3 c=4
|
||||
include_tokens = task['include'].split()
|
||||
path = path_dwim(dirname, include_tokens[0])
|
||||
inject_vars = play.get('vars', {})
|
||||
for i,x in enumerate(include_tokens):
|
||||
if x.find("=") != -1:
|
||||
(k,v) = x.split("=")
|
||||
inject_vars[k] = v
|
||||
included = file(path).read()
|
||||
template = jinja2.Template(included)
|
||||
included = template.render(inject_vars)
|
||||
included = yaml.load(included)
|
||||
for x in included:
|
||||
new_tasks.append(x)
|
||||
else:
|
||||
|
|
Loading…
Reference in a new issue