{# '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 %}
