-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathcluster-hana.yaml
More file actions
182 lines (166 loc) · 6.46 KB
/
cluster-hana.yaml
File metadata and controls
182 lines (166 loc) · 6.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
---
- name: Get cluster status
ansible.builtin.command:
cmd: crm configure show
register: crm_conf_hana_show
changed_when: false
when: is_primary
- name: Set hana crm facts
ansible.builtin.set_fact:
crm_maintenance_mode: "{{ (crm_conf_hana_show.stdout | regex_search('maintenance-mode=([a-z]*)', '\\1'))[0] | default('unknown') }}"
stonith_timeout: "{{ crm_conf_hana_show.stdout | regex_search('stonith-timeout') }}" # this should be variable!
hana_resource: "{{ crm_conf_hana_show.stdout | regex_search('primitive rsc_SAPHanaCtl_') }}"
hana_clone: "{{ crm_conf_hana_show.stdout | regex_search('ms msl_SAPHanaCtl_') }}"
hana_topology_resource: "{{ crm_conf_hana_show.stdout | regex_search('primitive rsc_SAPHanaTpg') }}"
hana_topology_clone: "{{ crm_conf_hana_show.stdout | regex_search('clone cln_SAPHanaTpg') }}"
ip_resource: "{{ crm_conf_hana_show.stdout | regex_search('primitive rsc_ip_') }}"
ip_nc: "{{ crm_conf_hana_show.stdout | regex_search('primitive rsc_socat_') }}"
ip_grp: "{{ crm_conf_hana_show.stdout | regex_search('group g_ip_') }}"
ip_colo: "{{ crm_conf_hana_show.stdout | regex_search('colocation col_saphana_ip_') }}"
cluster_order: "{{ crm_conf_hana_show.stdout | regex_search('order ord_SAPHana') }}"
when: is_primary
changed_when: false
- name: Ensure maintenance mode is active
ansible.builtin.command:
cmd: crm configure property maintenance-mode=true
when: crm_maintenance_mode is false or crm_maintenance_mode == 'unknown'
- name: Create HANA topology resource
ansible.builtin.command:
cmd: >-
crm configure primitive
rsc_SAPHanaTpg_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
ocf:suse:SAPHanaTopology
operations
$id="rsc_sap2_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}-operations"
op monitor interval="10" timeout="600"
op start interval="0" timeout="600"
op stop interval="0" timeout="300"
params
SID="{{ sap_hana_install_sid }}"
InstanceNumber="{{ sap_hana_install_instance_number }}"
when:
- is_primary
- hana_topology_resource | length == 0
- name: Create HANA topology clone
ansible.builtin.command:
cmd: >-
crm configure clone
cln_SAPHanaTpg_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
rsc_SAPHanaTpg_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
meta
clone-node-max="1"
target-role="Started"
interleave="true"
when:
- is_primary
- hana_topology_clone | length == 0
- name: Create HANA resource
ansible.builtin.command:
cmd: >-
crm configure primitive
{{ rsc_saphanactl }}
ocf:suse:SAPHana
operations
$id="rsc_sap_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}-operations"
op start interval="0" timeout="3600"
op stop interval="0" timeout="3600"
op promote interval="0" timeout="3600"
op demote interval="0" timeout="3600"
op monitor interval="60" role="Master" timeout="700"
op monitor interval="61" role="Slave" timeout="700"
params
SID="{{ sap_hana_install_sid }}"
InstanceNumber="{{ sap_hana_install_instance_number }}"
PREFER_SITE_TAKEOVER="true"
DUPLICATE_PRIMARY_TIMEOUT="7200"
AUTOMATED_REGISTER="false"
when:
- is_primary
- hana_resource | length == 0
- name: Create HANA resource clone
ansible.builtin.command:
cmd: >-
crm configure ms
msl_SAPHanaCtl_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
{{ rsc_saphanactl }}
meta
notify="true"
clone-max="2"
clone-node-max="1"
target-role="Started"
interleave="true"
when:
- is_primary
- hana_clone | length == 0
- name: Configure colocation [aws]
ansible.builtin.command:
cmd: >-
crm configure colocation
col_saphana_ip_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
2000:
rsc_ip_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}:Started
msl_SAPHanaCtl_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}:Master
when:
- is_primary
- ip_colo | length == 0
- cloud_platform_is_aws
- name: Configure colocation [gcp]
ansible.builtin.command:
cmd: >-
crm configure colocation
col_saphana_ip_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
4000:
rsc_ip_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}:Started
msl_SAPHanaCtl_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}:Master
when:
- is_primary
- ip_colo | length == 0
- cloud_platform_is_gcp
# Order configured as documentation for both AWS and GCP dictates
# AWS: https://documentation.suse.com/sbp/sap-15/html/SLES4SAP-hana-sr-guide-perfopt-15-aws/index.html#id-constraints
# GCP: https://cloud.google.com/solutions/sap/docs/sap-hana-ha-config-sles#create_the_saphana_primitive_resource
- name: Configure order
ansible.builtin.command:
cmd: >-
crm configure order
ord_SAPHana
Optional:
cln_SAPHanaTpg_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
msl_SAPHanaCtl_{{ sap_hana_install_sid }}_HDB{{ sap_hana_install_instance_number }}
when:
- is_primary
- cluster_order | length == 0
# Get current maintenance state
- name: Refresh cluster status
ansible.builtin.command:
cmd: crm configure show
register: refreshed_crm_conf_show
changed_when: false
- name: Set crm facts
ansible.builtin.set_fact:
refreshed_crm_maintenance_mode: "{{ (refreshed_crm_conf_show.stdout | regex_search('maintenance-mode=([a-z]*)', '\\1'))[0] | default('unknown') }}"
changed_when: false
- name: Ensure maintenance mode is disabled
ansible.builtin.command:
cmd: crm configure property maintenance-mode=false
when:
- is_primary
- refreshed_crm_maintenance_mode is true or refreshed_crm_maintenance_mode == 'unknown'
- name: Get cluster state
ansible.builtin.command:
cmd: crm status
register: reg_crm_status
when: is_primary
- name: Cleanup if needed
ansible.builtin.command:
cmd: "crm resource cleanup {{ rsc_saphanactl }}"
retries: 3
delay: 10
when:
- reg_crm_status.stdout | regex_search('Failed Resource Actions') | trim | length != 0
- is_primary
# For debug purpose only
- name: Get cluster status at the end
ansible.builtin.command:
cmd: crm configure show
changed_when: false