Hello everyone,
My team has developed some useful macros that I now would like to make available for new roles I'm writing.
Here is a simple mockup:
$ tree
.
├── roles
│ ├── common
│ │ └── echo.sls
│ └── default
│ └── init.sls
└── top.sls
$ cat roles/common/echo.sls
{% macro echo(str) -%}
main:
cmd.run:
- name: "echo 'Common echo: {{ str }}'"
{% endmacro %}
$ cat roles/default/init.sls
{% from slspath + '/../../common/echo.sls' import echo as echo %}
{{ echo(2 + 2) }}
$ cat top.sls
base:
'*':
- roles/default
I would like to make use of the macro defined under roles/common/echo.sls from roles/default/init.sls
However, I'm currently getting this error:
$ sudo salt-call state.apply
[WARNING ] Discarded template path 'roles/default/../../common/echo.sls', relative paths are prohibited
[ERROR ] Rendering exception occurred: Jinja error: roles/default/../../common/echo.sls
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/salt/utils/templates.py", line 368, in render_jinja_tmpl
output = template.render(**decoded_context)
File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "<template>", line 1, in top-level template code
File "/usr/lib/python2.7/site-packages/salt/utils/jinja.py", line 102, in get_source
raise TemplateNotFound(template)
TemplateNotFound: roles/default/../../common/echo.sls
Salt version: 2016.11.1 (Carbon) I am running salt masterless on this minion node for testing (so I symlinked /srv/salt to the test directory above in my home directory)
I'm still very new to Salt, so I am not sure if this is the way to go. What is the best way to re-use macros in a given repository? I've also heard of modules, but not sure what to use.
Any help would be much appreciated! :")
Regards,
Tong