问题
I'm trying to set up a server with ansible and I'd like to use this galaxy role.
It defines a template that I'd like to customize, but I don't know how.
Right now I defined the role into requirements.yml
and I installed it using:
ansible-galaxy install -r requirements.yml
which installed the role somewhere on my system.
I tried by recreating the folder tree into my repository where I store my playbooks:
roles
|- ansible-role-passenger
|- templates
|- passenger.j2
but it does not work. When I run my playbook, ansible uses the passenger.j2
file from inside the galaxy role.
I think I can fork the galaxy role on github and just edit the file passenger.j2
like I want, but I don't know if this is there is a "better" way to do it :)
回答1:
Your findings are unfortunately true. Overriding a hardcoded template in a role from a calling playbook is merely impossible unless the role's author implemented that as a feature. Note that this is also true for simple files in the files
directory.
The best way I have found so far: given that the role contains the default template in templates/passenger.j2
, add a var in default/main.yml
such as passenger_config_template: passenger.j2
and use that var in the role. The user can then override that var in its playbook/inventory and use a different name for the template which will be fetched in an other role or directly in a templates
directory at playbook level.
You can have a look at a similar issue and an accepted PR I once made to @geerlingguy on his ansible-role-gitlab. He might consider doing the same thing on his passenger role (or might accept your PR if you propose one).
回答2:
The reply from @Zeitounator above is totally legit.
But in the case where the author of an Ansible role is not responsive or playing dumb, there is another simpler approach.
Steps:
1) Execute the role as you would do, don't change anything
2) Write a small piece of Ansible code to simply override any file or template yourself.
Simple approach and is a no-brainer for all.
cheers
来源:https://stackoverflow.com/questions/55742881/is-there-a-way-to-override-a-template-defined-into-an-ansible-galaxy-role