diff --git "a/\173\043 roles \043\175/_metadata_process" "b/\173\043 roles \043\175/_metadata_process"
new file mode 100644
index 0000000..5809398
--- /dev/null
+++ "b/\173\043 roles \043\175/_metadata_process"
@@ -0,0 +1,124 @@
+{#-
+1. Check if 'local_metadata' matches to something in 'global_metadata'.
+   If yes, fetch and process the data.
+   If no, initialize necessary data.
+   If partially intersects (keepalived roles for different clusters): add a fail-state warning to the YAML to avoid using the wrong config
+2. Set necessary 'params' using the 'local_metadata'
+3. Store the 'local_metadata' to the 'global_metadata' if required.
+4. Increment/decrement the 'global_metadata' objects if necessary (next IP address, next vrouter ID, master->slave, etc)
+
+global_metadata keep states across the nodes
+local_metadata keep states for the current node only
+
+Example of local_metadata and global_metadata runtime content:
+
+    local_metadata:
+      keepalived_vip_priority:
+       - openstack_control
+       - openstack_database
+       - openstack_message_queue
+      rabbitmq_cluster_role:
+       - openstack_message_queue
+
+    global_metadata:
+      keepalived_vip_priority:  # Separate counters
+        openstack_control|openstack_database|openstack_message_queue: 254
+        cicd_control|infra_kvm: 254
+      keepalived_vip_virtual_router_id: # Common counter
+        __latest: 11
+        openstack_control|openstack_database|openstack_message_queue: 10
+        cicd_control|infra_kvm: 11
+      mysql_cluster_role:
+        openstack_database: master
+#}
+
+{%- macro stateful_roles_check(counter_name) %}
+{#- ####################################### -#}
+
+  {#- 1. Check that there is no intersections between different groups of roles for the <counter_name> #}
+  {%- for names, counter in global_metadata.get(counter_name, {}).items() %}
+    {%- set global_roles = names.split('|') %}
+    {%- for local_counter_role_name in local_metadata.get(counter_name, []) %}
+      {%- if local_counter_role_name in global_roles %}
+        {%- set adding_names = local_metadata.get(counter_name, [])|sort|join('|') %}
+        {%- if names != adding_names %}
+          {#- Found unexpected combination of roles, cause the template rendering exception #}
+          {%- include("======> NODE ROLES MAPPING ERROR! Please check the roles for the node '" + inventory_node_name + "' , metaparam '" + counter_name + "':\n======> Existing roles: " + names + "\n======> Adding roles: " + adding_names) %}
+        {%- endif %}
+      {%- endif %}
+    {%- endfor %}
+  {%- endfor %}
+{%- endmacro %}
+
+{%- macro stateful_counter(counter_name, counter_start, counter_end, counter_step, uniq_per_node=True) %}
+{#- ############################################################################# -#}
+{%- if counter_name in local_metadata %}
+  {{- stateful_roles_check(counter_name) }}
+
+  {%- if counter_name not in global_metadata %}
+    {%- set _ = global_metadata.update({counter_name: {}}) %}
+  {%- endif %}
+  {%- set counter_roles_name = local_metadata[counter_name]|sort|join('|') %}
+
+  {%- if uniq_per_node == True %}
+
+    {%- if counter_roles_name not in global_metadata[counter_name] %}
+      {#- Set default value for <counter_roles_name> = <counter_start> #}
+      {%- set _ = global_metadata[counter_name].update({counter_roles_name: counter_start}) %}
+    {%- else %}
+      {#- Increment or decrement value <counter_roles_name> #}
+      {%- set _ = global_metadata[counter_name].update({counter_roles_name: global_metadata[counter_name][counter_roles_name] + counter_step}) %}
+      {%- if global_metadata[counter_name][counter_roles_name] == counter_end %}
+        {# Cause a jinja render exception and make visible the message with correct counter_name #}
+        {%- include("======> VALUE_ERROR: " + counter_name + "=" + counter_end + " is out of bounds!" ) %}
+      {%- endif %}
+    {%- endif %}
+
+  {%- else %}
+
+    {%- if '__latest' not in global_metadata[counter_name] %}
+      {#- Set the value for __latest = <counter_start> #}
+      {%- set _ = global_metadata[counter_name].update({'__latest': counter_start}) %}
+    {%- endif %}
+    {%- if counter_roles_name not in global_metadata[counter_name] %}
+      {%- set _ = global_metadata[counter_name].update({'__latest': global_metadata[counter_name]['__latest'] + counter_step}) %}
+      {%- if global_metadata[counter_name]['__latest'] == counter_end %}
+        {# Cause a jinja render exception and make visible the message with correct counter_name #}
+        {%- include("======> VALUE_ERROR: " + counter_name + "=" + counter_end + " is out of bounds!" ) %}
+      {%- endif %}
+      {%- set _ = global_metadata[counter_name].update({counter_roles_name: global_metadata[counter_name]['__latest']}) %}
+    {%- endif %}
+
+  {%- endif %}
+  {%- set _ = params.update({counter_name: global_metadata[counter_name][counter_roles_name]}) %}
+{%- endif %}
+{%- endmacro %}
+
+{%- macro stateful_masterslave(masterslave_name, master_name='master', slave_name='slave') %}
+{#- ##################################################################################### -#}
+{%- if masterslave_name in local_metadata %}
+  {{- stateful_roles_check(masterslave_name) }}
+
+  {%- if masterslave_name not in global_metadata %}
+    {%- set _ = global_metadata.update({masterslave_name: {}}) %}
+  {%- endif %}
+  {%- set masterslave_roles_name = local_metadata[masterslave_name]|sort|join('|') %}
+
+  {%- if masterslave_roles_name not in global_metadata[masterslave_name] %}
+    {#- Set first value <masterslave_roles_name> = <master_name> #}
+    {%- set _ = global_metadata[masterslave_name].update({masterslave_roles_name: master_name}) %}
+  {%- else %}
+    {#- Set value <masterslave_roles_name> = <slave_name> #}
+    {%- set _ = global_metadata[masterslave_name].update({masterslave_roles_name: slave_name}) %}
+  {%- endif %}
+  {%- set _ = params.update({masterslave_name: global_metadata[masterslave_name][masterslave_roles_name]}) %}
+{%- endif %}
+{%- endmacro %}
+
+{{- stateful_counter('cicd_database_id', counter_start=1, counter_end=255, counter_step=1) }}
+{{- stateful_counter('opencontrail_database_id', counter_start=1, counter_end=255, counter_step=1) }}
+{{- stateful_counter('keepalived_vip_priority', counter_start=254, counter_end=1, counter_step=-1) }}
+{{- stateful_counter('keepalived_vip_virtual_router_id', counter_start=159, counter_end=250, counter_step=1, uniq_per_node=False) }}
+{{- stateful_masterslave('rabbitmq_cluster_role') }}
+{{- stateful_masterslave('mysql_cluster_role') }}
+{{- stateful_masterslave('redis_cluster_role') }}
\ No newline at end of file
