How to handle services with associated data changing with time ?

Apparently I need the concept of method or specific action on a role and I don’t how to implement it.

Consider a service with associated data changing in time on a remote host.

I need to perform three distinct actions on this service.

  1. install or update to code and configuration
  2. backup the associated data
  3. restore the associated data from the backup

All three actions can be implemented by ansible.

But I don’t see how to pack them in one role. This is because (as I understood) invoking a role executes only one action defined in roles/X/tasks/main.yml.

That’s Ok for Install let say. But how could I add the set of tasks to do a backup or a restore ?

I thought we could use tags for that, but the problem is that by default (without specifying a tag on the playbook invocation) the special tag ‘all’ is used which result in executing all tasks. This would be a mess if the install, backup and restore tasks are all called if the user forgot to specify a tag.

One thing that could save my day is if it was possible to define a default tag different from ‘all’ in the ansible configuration ? I could the define the default tag ass ‘install’ or ‘install,config’ that will ensure that the tasks tagged as ‘backup’ or ‘restore’ are not executed.
I couldn’t find such an option in the ansible configure documentation.

Otherwise is there a solution with the existing code ?

But I don't see how to pack them in one role. This is because (as I
understood) invoking a role executes only one action defined in
roles/X/tasks/main.yml.

not true, all tasks defined in main.yml get executed.

Yes sorry. That was what I mean. There is only one file main.yml that is always invoked and all tasks in it are executed.

tasks in that file can be conditional, you can also have includes

Apparently I’m not the first to ask this. I just found this stackoverfow question asking the exact same thing.

http://stackoverflow.com/questions/28789912/ansible-default-explicit-tags

It looks like allowing to override the default value of tags command line argument in the ansible configuration would be the simplest solution.