diff --git a/roles/sap_ha_pacemaker_cluster/README.md b/roles/sap_ha_pacemaker_cluster/README.md index b214afbdb..fbfbe6f4a 100644 --- a/roles/sap_ha_pacemaker_cluster/README.md +++ b/roles/sap_ha_pacemaker_cluster/README.md @@ -89,7 +89,7 @@ It is recommended to execute this role together with other roles in this collect #### SAP Netweaver cluster 1. [sap_general_preconfigure](https://github.com/sap-linuxlab/community.sap_install/tree/main/roles/sap_general_preconfigure) -2. [sap_netweaver_preconfigure](https://github.com/sap-linuxlab/community.sap_install/tree/main/roles/sap_netweaver_preconfigure) +2. [sap_netweaver_preconfigure](https://github.com/sap-linuxlab/community.sap_install/tree/main/roles/sap_netweaver_preconfigure) 3. [sap_install_media_detect](https://github.com/sap-linuxlab/community.sap_install/tree/main/roles/sap_install_media_detect) 4. [sap_swpm](https://github.com/sap-linuxlab/community.sap_install/tree/main/roles/sap_swpm) 5. *`sap_ha_pacemaker_cluster`* @@ -146,6 +146,22 @@ It is recommended to execute this role together with other roles in this collect ## Further Information + +### sap_ha_pacemaker_cluster_*_append variables +`*EXPERIMENTAL*`
+This role inherits pre-defined `ha_cluster*` variables and merges them with role specific parameters.
+However, in some cases the order in which the resources are created is important. The `*_append` variables allow you to append a specific cluster configuration AFTER the configuration generated by this role.
+ +The order in which cluster configuration is generated before it's passed to `ha_cluster` role is: +1. `ha_cluster*` variables (if defined). +2. Configuration created by this role based on provided parameters. +3. The content of `sap_ha_pacemaker_*_append` variables is appended. +
+ +NOTE: There is no check to validate the content of the `*_append` variables. You must append your configuration in a way that it doesn't break the configuration generated by this role.
+NOTE: The config in the `*_append` variables is appended only if this role has created entries in the equivalent HA cluster variable e.g. `ha_cluster_constraints_colocation` during the run. If nothing has been defined by this role, there is no reason to append anything. In this case just use the appropriate `ha_cluster*` variable (step 1. above). +
+ For more examples on how to use this role in different installation scenarios, refer to the [ansible.playbooks_for_sap](https://github.com/sap-linuxlab/ansible.playbooks_for_sap) playbooks. Cluster can be further customized with inputs available from underlying role [ha_cluster](https://github.com/linux-system-roles/ha_cluster/blob/main/README.md), which will take precedence over `sap_ha_pacemaker_cluster` inputs. diff --git a/roles/sap_ha_pacemaker_cluster/meta/argument_specs.yml b/roles/sap_ha_pacemaker_cluster/meta/argument_specs.yml index 8f699c35d..917209027 100644 --- a/roles/sap_ha_pacemaker_cluster/meta/argument_specs.yml +++ b/roles/sap_ha_pacemaker_cluster/meta/argument_specs.yml @@ -361,6 +361,89 @@ argument_specs: no_log: true required: true + ########################################################################## + # Parameters that are optionally appended to 'sap_ha_pacemaker' parameters + ########################################################################## + + sap_ha_pacemaker_cluster_constraints_colocation_append: + type: dict + description: + - EXPERIMENTAL + - Additional colocation constraints to be appended to the constraints generated by this role.. + - Equivalent to `ha_cluster_constraints_colocation` in the `ha_cluster` Linux System Role. + - Supported options can be reviewed in the `ha_cluster` Linux System Role + [https://github.com/linux-system-roles/ha_cluster/blob/master/README.md]. + + example: + sap_ha_pacemaker_cluster_constraints_location_append: + - resource: + id: "grp_{{ sap_system_sid }}_ASCS{{ sap_ha_pacemaker_cluster_nwas_abap_ascs_instance_nr }}" + rule: "ethmonitor-ens192 ne 1" + id: "location-grp_{{ sap_system_sid }}_ASCS{{ sap_ha_pacemaker_cluster_nwas_abap_ascs_instance_nr }}" + options: + - name: score + value: -INFINITY + + sap_ha_pacemaker_cluster_constraints_location_append: + type: dict + description: + - EXPERIMENTAL + - Additional location constraints to be appended to the constraints generated by this role. + - Equivalent to `ha_cluster_constraints_location` in the `ha_cluster` Linux System Role. + - Supported options can be reviewed in the `ha_cluster` Linux System Role + [https://github.com/linux-system-roles/ha_cluster/blob/master/README.md]. + + + sap_ha_pacemaker_cluster_constraints_order_append: + type: dict + description: + - EXPERIMENTAL + - Additional order constraints to be appended to the constraints generated by this role. + - Equivalent to `ha_cluster_constraints_order` in the `ha_cluster` Linux System Role. + - Supported options can be reviewed in the `ha_cluster` Linux System Role + [https://github.com/linux-system-roles/ha_cluster/blob/master/README.md]. + + sap_ha_pacemaker_cluster_resource_clones_append: + type: dict + description: + - EXPERIMENTAL + - Additional resource clones to be appended to the resource clones generated by this role. + - Equivalent to `ha_cluster_resource_clones` in the `ha_cluster` Linux System Role. + - Supported options can be reviewed in the `ha_cluster` Linux System Role + [https://github.com/linux-system-roles/ha_cluster/blob/master/README.md]. + + example: + sap_ha_cluster_resource_clones_append: + - resource_id: ethmonitor-ens192 + + sap_ha_pacemaker_cluster_resource_groups_append: + type: dict + description: + - EXPERIMENTAL + - Additional resource clones to be appended to the resource clones generated by this role. + - Equivalent to `ha_cluster_resource_groups` in the `ha_cluster` Linux System Role. + - Supported options can be reviewed in the `ha_cluster` Linux System Role + [https://github.com/linux-system-roles/ha_cluster/blob/master/README.md]. + + sap_ha_pacemaker_cluster_resource_primitives_append: + type: dict + description: + - EXPERIMENTAL + - Additional resource primitives to be appended to the resource primitives generated by this role. + - Equivalent to `ha_cluster_resource_primitives` in the `ha_cluster` Linux System Role. + - Supported options can be reviewed in the `ha_cluster` Linux System Role + [https://github.com/linux-system-roles/ha_cluster/blob/master/README.md]. + + example: + sap_ha_cluster_resource_primitives_append: + - id: ethmonitor-ens192 + agent: ocf:heartbeat:ethmonitor + instance_attrs: + - attrs: + - name: interface + value: ens192 + - name: link_status_only + value: 'true' ########################################################################## # HANA specific parameters diff --git a/roles/sap_ha_pacemaker_cluster/tasks/construct_final_hacluster_vars.yml b/roles/sap_ha_pacemaker_cluster/tasks/construct_final_hacluster_vars.yml index 9c9af77f4..46e685622 100644 --- a/roles/sap_ha_pacemaker_cluster/tasks/construct_final_hacluster_vars.yml +++ b/roles/sap_ha_pacemaker_cluster/tasks/construct_final_hacluster_vars.yml @@ -69,17 +69,17 @@ - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_constraints_colocation'" when: __sap_ha_pacemaker_cluster_constraints_colocation is defined ansible.builtin.set_fact: - ha_cluster_constraints_colocation: "{{ __sap_ha_pacemaker_cluster_constraints_colocation }}" + ha_cluster_constraints_colocation: "{{ __sap_ha_pacemaker_cluster_constraints_colocation + sap_ha_pacemaker_cluster_constraints_colocation_append | d([]) }}" - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_constraints_location'" when: __sap_ha_pacemaker_cluster_constraints_location is defined ansible.builtin.set_fact: - ha_cluster_constraints_location: "{{ __sap_ha_pacemaker_cluster_constraints_location }}" + ha_cluster_constraints_location: "{{ __sap_ha_pacemaker_cluster_constraints_location + sap_ha_pacemaker_cluster_constraints_location_append | d([]) }}" - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_constraints_order'" when: __sap_ha_pacemaker_cluster_constraints_order is defined ansible.builtin.set_fact: - ha_cluster_constraints_order: "{{ __sap_ha_pacemaker_cluster_constraints_order }}" + ha_cluster_constraints_order: "{{ __sap_ha_pacemaker_cluster_constraints_order + sap_ha_pacemaker_cluster_constraints_order_append | d([]) }}" - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_extra_packages'" when: __sap_ha_pacemaker_cluster_extra_packages is defined @@ -105,17 +105,17 @@ - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_resource_clones'" when: __sap_ha_pacemaker_cluster_resource_clones is defined ansible.builtin.set_fact: - ha_cluster_resource_clones: "{{ __sap_ha_pacemaker_cluster_resource_clones }}" + ha_cluster_resource_clones: "{{ __sap_ha_pacemaker_cluster_resource_clones + sap_ha_pacemaker_cluster_resource_clones_append | d([]) }}" - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_resource_groups'" when: __sap_ha_pacemaker_cluster_resource_groups is defined ansible.builtin.set_fact: - ha_cluster_resource_groups: "{{ __sap_ha_pacemaker_cluster_resource_groups }}" + ha_cluster_resource_groups: "{{ __sap_ha_pacemaker_cluster_resource_groups + sap_ha_pacemaker_cluster_resource_groups_append | d([]) }}" - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_resource_primitives'" when: __sap_ha_pacemaker_cluster_resource_primitives is defined ansible.builtin.set_fact: - ha_cluster_resource_primitives: "{{ __sap_ha_pacemaker_cluster_resource_primitives }}" + ha_cluster_resource_primitives: "{{ __sap_ha_pacemaker_cluster_resource_primitives + sap_ha_pacemaker_cluster_resource_primitives_append | d([]) }}" no_log: true # be paranoid, there could be credentials in it - name: "SAP HA Prepare Pacemaker - (ha_cluster) Define parameter 'ha_cluster_totem'"