def jinja_format(data, template_file):
class GlobalFileLoader(jinja2.BaseLoader):
def get_source(self, environment, template):
if not os.path.exists(template):
raise jinja2.TemplateNotFound(template)
with open(template) as f:
source = f.read().decode('utf-8')
return source, template, lambda: False
combined_credentials = combined_credential_pair_format(data)
env = jinja2.Environment(
loader=GlobalFileLoader(),
keep_trailing_newline=True
)
template = env.get_template(template_file)
return template.render(secrets=combined_credentials['credentials'])
python类BaseLoader()的实例源码
def template_with_jinja2(text, variables):
"""
Template using jinja2 with the variables dictionary unpacked as keyword
arguments.
"""
jinja_environment = jinja2.Environment(
loader=jinja2.BaseLoader(),
undefined=jinja2.make_logging_undefined(logging.getLogger()),
comment_start_string='{##',
comment_end_string='##}',
)
template = jinja_environment.from_string(text)
return template.render(**variables)
def init_str(images):
init_template = textwrap.dedent(
"""
domains:
{% for vm_name, template in images.viewitems() %}
{{ vm_name }}:
memory: 1024
nics:
- net: net-02
- net: net-01
disks:
- template_name: {{ template }}
type: template
name: root
dev: sda
format: qcow2
metadata:
{{ vm_name }}: {{ vm_name }}
artifacts:
- /should/not/exist
- /root/custom
- /var/log
- /etc/hosts
- /etc/resolv.conf
- /etc/sysconfig
- /etc/NetworkManager
- /root/virt-sysprep-firstboot.log
- /root/extract-{{ vm_name }}-dead
- /root/extract-{{ vm_name }}-normal
groups: group{{ loop.index % 2 }}
{% endfor %}
nets:
net-01:
type: nat
dhcp:
start: 100
end: 254
management: true
dns_domain_name: lago.local
net-02:
type: nat
gw: 192.168.210.4
dhcp:
start: 100
end: 254
"""
)
template = Environment(loader=BaseLoader()).from_string(init_template)
return template.render(images=images)