When specifying a role to use in a playbook, is it possible to target a different file other than main.yml? I ask because I’m struggling to find the proper way to layout a playbook and role for my project.
Currently I have roles created for common tasks like nginx, mysql, varnish, etc. I also have a role created specifically for my project. Inside that role I handle things like installing project specific things like APC, memcache, etc. These are each handled by a separate file that is included in the main.yml. I also have a file for deployment that is also included in the main.yml. However, I don’t really want to have code deploy each time I provision a server.
My thought was to create a deploy.yml file in the root and somehow include the role for the project, but just the deploy portion.
I’m aware that I can do that, and have been thinking I might try to implement some sort of variable to determine if I include my deploy.yml file. This solution would work in that code wouldn’t deploy unless I explicitly set that variable via the command line. The problem with that is that code deployment would be accompanied by all of the other tasks for provisioning the server, which is no bueno.
I’d like to be able to run a role and, by default, exclude the code deployment portion. I’d also like to be able to deploy the code without running any other tasks.
I could include a line in the main.yml file for my project role that would only include the deploy.yml file when the deploy_code variable is true. Something similar to below:
include: deploy.yml
when: “deploy_code”
To deploy code, I would run a command like the following:
The problem with this is that my site.yml file has several other entries besides just my project role. The same is true for my project role’s main.yml – it contains other includes besides the deploy.yml. So if run the above command, yes my code will deploy, but every other task will also run, which I don’t want to have happen.
ansible-playbook example.yml --skip-tags "deployment"
The downside is you have to explicitly disable deployment tag for default run. Probably not much of an issue if used in script.