using subframeworks (playbook with roles and group_vars) in ansible

Hi!
I’m pretty used to ansible typical framework layout, which means:
a) I have few roles applying single function to undefined hosts
b) I have a playbook that applies roles to named groups of hosts
c) I have some group_vars for that playbook for some specific setup.
d) and of course I have hosts file defining my inventory where I map groups to physical hosts.

Now I have few of such frameworks implemented, where each as you see creates a whole infrastructure, a cluster of nodes. E.g. One is HDP hortonworks hadoop, the other one is Mesos and docker, the other one is Monitoring setup (graphite, grafana and others). Each of it can function on its own, completely separate of each other.

Now, I would like to reuse those frameworks, which mean bring in a framework that reuse those as subframeworks. What is a best practice in Ansible to do it?

The best I could come up with is to have this structure:

  • framework-1

  • roles

  • framework-1-role

  • group_vars

  • framework-1-group-1.yml

  • framework-1-group-2.yml

  • framework-1-site.yml

  • framework-2

  • roles

  • framework-2-role-1

  • framework-2-role-2

  • group_vars

  • framework-2-group-1.yml

  • framework-2-group-2.yml

  • framework-2-site.yml
    global-site.yml
    global-inventory
    group_vars

Where global-site.yml includes the sub-frameworks (e.g. - include: framework-1/framework-1-site.yml)
It isn’t the best design. What hits me the most is that group_vars for sub-framework is totally ignored. I have to create a group_vars on global level that copies all variables from the sub-frameworks. While I would like to have some good defaults on the level of groups of sub-framework already there.

Other than that, I’m not sure it’s the right approach to the problem. What do you think? Roles are for me of no use here, as I want to have a “higher level roles”, that configure how other roles are applied to the separate groups of nodes.

And the important part here is reusability. So that I can just put a sub-framework as a git submodule in the global framework, without modifying it at all.

I’ll be grateful for any advice you have.