{#- 'infra_config_classes' list object is dynamically generated from 'roles' to add on the cfg node #}
{%- set infra_config_classes = [] %}
{#- 'global_metadata' is a global collection of objects shared between nodes #}
{%- set global_metadata = {} %}
{%- set common_roles = ['_linux_network_interface', '_metadata_process', '_overrides'] %}
parameters:
  _param:
    _esc: $
  reclass:
    storage:
      node:
      {%- for inventory_node_name, node in nodes.items()|sort %}
        {%- set node_name = inventory_node_name.split('.')[0] %}

        {{ node['reclass_storage_name'] }}:
          {#-#}
          {#- 'local_metadata' is to collect the data from different roles in a single place inside the node #}
          {%- set local_metadata = {} %}
          {#- 'params' dict object is dynamically generated from 'roles' to add on the node #}
          {%- set params = {} %}
          {#-#}
          {%- macro register_metaparam(param_name, role_name) %}
          {#- Add the <role_name> into the list attached to <param_name> #}
          {#- to control that the <param_name> is not spreaded across incompatible roles #}
            {%- set _ = local_metadata.update({param_name: local_metadata.get(param_name, []) + [role_name]}) %}
          {%- endmacro %}
          {#-#}
          {%- macro set_param(param_name, param_value) %}
          {#- Set a parameter for '_param' dict for the node #}
            {%- set _ = params.update({param_name: param_value}) %}
          {%- endmacro %}
          {#-#}
          classes:
          {#- Default roles are added to each node #}
          {#- 'overrides' must be the very last role for each node #}
          {%- for role in node.get('roles', []) + common_roles %}
            {%- include ("{# roles #}/" + role) %}
          {%- endfor %}

        {%- if params %}
          params:
          {%- for param_name, param in params.items() %}
            {{ param_name }}: {{ param }}
          {%- endfor %}
        {%- endif %}
          name: {{ node_name }}
          domain: ${_param:cluster_domain}
      {%- endfor %}

classes:
# Enable root and *ALL* users access
- system.openssh.server.team.all
{%- for infra_config_class in infra_config_classes %}
- {{ infra_config_class }}
{%- endfor %}
