Edit: Actually I have looked back, in horror and disbelief that I put up with Puppet for so long.
Edit: Actually I have looked back, in horror and disbelief that I put up with Puppet for so long.
Happy to answer any questions too.
PS. Bit of a disclaimer: The screencast is a four part series, the first episode is free, and the remain three parts require a subscription. Did not want to bait and switch you. The first episode will give you enough to know what Ansible is all about though.
[1] https://sysadmincasts.com/episodes/43-19-minutes-with-ansibl...
I am a bit stumped as to how to "call" a role from other roles with different variables, so as to deploy the same template with different parameters.
Currently I am putting the template in a separate role (with a task to deploy it), and then including it several times from other roles, e.g.
# role X
- include: ../../common/tasks/foo.yml # deploys ../../common/templates/my.conf.j2
- vars: x=33
# role Y- include: ../../common/tasks/foo.yml # deploys ../../common/templates/my.conf.j2
- vars: x=42
Is there a better way to do this? It would be nice to be able to "call" a role/task with parameters, to be able to reuse common elements like templates and task logic.I want to be able to execute a role (or task within a role), much like calling a function, that will be executed at the point it is called (dependencies are all executed before the role executes.
I may also want to call the "function" multiple times within a role, with different parameters, to, for example, deploy a template several times to different named files. And yes, dependencies can execute roles multiple times, but this is business logic that belongs in the main role file, not in a meta file. And from what I can see, dependencies can only call a role as a whole, not a part (or task) therein.
Basically what I have with "include" does exactly what I want, but it would be nice if it was a bit more explicit that I was calling a role component, something like:
# Role X
- name: deploy conf files
callrole: common::deployconf
args: name={{ item.name }} val={{ item.val }}
with_items:
- { name: 'conf1', val: 33 }
- { name: 'conf2', val: 42 }
Where callrole::conf corresponds to roles/common/tasks/deployconf.yml. This might allow for more powerful constructs than is available by simply using include.It might be possible to write a plugin of some sort that adds the functionality you want.
This particular link is sort of hard to comment on, because it doesn't really say anything about what's different in Puppet 4.0. So there's not really a way to comment on the substance.