deploy/ansible/roles-os/1.17-generic-pacemaker/tasks/1.17.1.2-sbd.yaml (188 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. --- # /*---------------------------------------------------------------------------8 # | | # +------------------------------------4--------------------------------------*/ # https://learn.microsoft.com/en-us/azure/sap/workloads/high-availability-guide-suse-pacemaker#overview # 1) Create and attach and Azure Shared Disk # 2) Set up an Azure shared disk SBD device # create SBD device # Edit SBD Config file # Softdog config file # Load Module # scs_high_availability = true is already assumed # /*---------------------------------------------------------------------------8 # | | # | Show important parameters | # | | # +------------------------------------4--------------------------------------*/ - name: "Parameters to be used..." ansible.builtin.debug: msg: # Best method for formatting output with Azure Devops Logs - "scs_cluster_type: {{ scs_cluster_type }}" - "database_cluster_type: {{ database_cluster_type }}" - "sbdDevices: {{ sbdDevices }}" verbosity: 2 when: - (database_cluster_type == "ASD") or (scs_cluster_type == "ASD") - name: "Parameters to be used..." ansible.builtin.debug: msg: # Best method for formatting output with Azure Devops Logs - "scs_cluster_type: {{ scs_cluster_type }}" - "database_cluster_type: {{ database_cluster_type }}" - "iscsi_servers: {{ iscsi_servers }}" verbosity: 2 when: - (database_cluster_type == "ISCSI") or (scs_cluster_type == "ISCSI") - name: "Parameters testing..." ansible.builtin.debug: msg: # Best method for formatting output with Azure Devops Logs - "item.host: {{ item.host }}" - "item.lun: {{ item.LUN }}" verbosity: 2 loop: "{{ sbdDevices }}" when: - (database_cluster_type == "ASD") or (scs_cluster_type == "ASD") # - name: "Parameters testing..." # ansible.builtin.debug: # var: hostvars[ansible_hostname] # verbosity: 2 # /*---------------------------------------------------------------------------8 # | | # | ASD | # | | # +------------------------------------4--------------------------------------*/ - name: 'SBD - ASD - discover and create SBD device(s)' block: # +------------------------------------ # Build List of Lists # sbdMap: [ # { # host: # lun: # blockDev: # diskByLun: # diskById: # } # ] - name: "ASD - Build SBD Dictionary" ansible.builtin.set_fact: sbdMap: "{{ sbdMap + sbdMap_update }}" vars: sbdMap_update: - { host: "{{ item.host }}" , lun: "{{ item.LUN }}" , blockDev: '' , diskByLun: '' , diskById: '' } loop: "{{ sbdDevices }}" when: - (database_cluster_type == "ASD") or (scs_cluster_type == "ASD") - item.host == ansible_hostname - name: "ISCSI - Build SBD Dictionary" ansible.builtin.set_fact: sbdMap: "{{ sbdMap + sbdMap_update }}" vars: sbdMap_update: - { host: "{{ item[0] }}" , lun: '' , blockDev: '{{ item[1] }}' , diskByLun: '' , diskById: '' } loop: "{{ iscsi_device_map }}" when: - (database_cluster_type == "ISCSI") or (scs_cluster_type == "ISCSI") - name: "SBD Dictionary..." ansible.builtin.debug: var: sbdMap verbosity: 2 when: - (database_cluster_type == "ASD") or (database_cluster_type == "ISCSI") or (scs_cluster_type == "ASD") or (scs_cluster_type == "ISCSI") - name: "SBD Dictionary..." ansible.builtin.debug: msg: # Best method for formatting output with Azure Devops Logs - "item.host: {{ item.host }}" - "item.blockDev: {{ item.blockDev }}" verbosity: 2 loop: "{{ sbdMap }}" when: - (database_cluster_type == "ISCSI") or (scs_cluster_type == "ISCSI") # +------------------------------------ # -------------------------------------+---------------------------------------8 # Step: 03 # Description: Dynamic Processing - Iterate over BOM dictionary to find Dynamic # entries. # - name: "Update Block Device" ansible.builtin.include_tasks: "1.17.1.3-sbd-deviceUpdate.yaml" loop: "{{ sbdMap }}" loop_control: loop_var: sdbMap_entry index_var: sdbMap_index # vars: # _step: "deviceUpdate" # Step: 03 - END # -------------------------------------+---------------------------------------8 - name: "Update Device Info: Show SBD Dictionary..." ansible.builtin.debug: var: sbdMap verbosity: 2 # /*------------------------------------ # | # | create sbd devices # | # +------------------------------------4 - name: "dump SBD Device(s)..." ansible.builtin.command: "sbd {%- for entry in sbdMap +%} -d {{ entry.diskById }} {%- endfor +%} dump " ignore_errors: true register: sbdDumpCommand_results run_once: true # run on only one host in play - name: "Show dump SBD device(s) results..." ansible.builtin.debug: var: sbdDumpCommand_results verbosity: 2 run_once: true # run on only one host in play - name: "create SBD Device(s)..." block: - name: "create SBD Device(s)..." ansible.builtin.command: "sbd {%- for entry in sbdMap +%} -d {{ entry.diskById }} {%- endfor +%} -1 60 -4 120 create " register: sbdCreateCommand_results - name: "Show block device results..." ansible.builtin.debug: var: sbdCreateCommand_results verbosity: 2 run_once: true # run on only one host in play when: sbdDumpCommand_results.rc == 1 # /*------------------------------------ # | # | sbd config file # | # +------------------------------------4 # Type: string # Default: "" # # SBD_DEVICE specifies the devices to use for exchanging sbd messages # and to monitor. If specifying more than one path, use ";" as # separator. # SBD_DEVICE="/dev/sdb1;/dev/sdc1;/dev/sdc2" # # SBD_DEVICE="" - name: "SBD config file" ansible.builtin.lineinfile: path: /etc/sysconfig/sbd regexp: "{{ item.regexp }}" line: "{{ item.line }}" owner: root group: root mode: '0644' backup: true loop: - { regexp: "^SBD_PACEMAKER=.*", line: 'SBD_PACEMAKER=yes' } - { regexp: "^SBD_STARTMODE=.*", line: 'SBD_STARTMODE=always' } # Format line as so: # SBD_DEVICE="/dev/disk/by-id/scsi-3600224804208a67da8073b2a9728af19" # SBD_DEVICE="/dev/disk/by-id/scsi-360022480ef971a6c5759f2dc3adf4c96;/dev/disk/by-id/scsi-360022480ea4064ac4952ea8452d66317" - { regexp: "^SBD_DEVICE=.*", line: 'SBD_DEVICE=" {%- for entry in sbdMap %} {%- if loop.index > 1 %};{% endif -%} {{ entry.diskById }} {%- endfor -%} "'} - name: "set fact sbd_device as list of entries in sbdMap" ansible.builtin.set_fact: sbd_device: "{{ sbdMap | map(attribute='diskById') | join(';') }}" - name: "Show sbd_device..." ansible.builtin.debug: var: sbd_device verbosity: 2 # /*------------------------------------ # | # | softdog config file # | # +------------------------------------4 - name: "softdog - Create config file" ansible.builtin.template: src: softdog.conf dest: /etc/modules-load.d/softdog.conf owner: root group: root mode: '0644' # /*------------------------------------ # | # | Load softdog kernel module # | # +------------------------------------4 - name: "softdog - load module" community.general.modprobe: name: softdog state: present # /*------------------------------------ # | # | systemctl enable sbd, iscsi, iscsid # | # +------------------------------------4 # - name: "systemctl enable sbd" # ansible.builtin.shell: | # systemctl enable sbd - name: "Ensure systemctl daemon is reloaded" ansible.builtin.systemd: daemon_reload: true - name: "systemctl enable sbd" ansible.builtin.systemd: name: sbd enabled: true daemon_reload: true when: - (database_cluster_type == "ASD") or (database_cluster_type == "ISCSI") or (scs_cluster_type == "ASD") or (scs_cluster_type == "ISCSI") # scs_high_availability = true is already assumed - name: "systemctl enable iscsi" ansible.builtin.systemd: name: iscsi enabled: true daemon_reload: true when: - (database_cluster_type == "ISCSI") or (scs_cluster_type == "ISCSI") - name: "systemctl enable iscsid" ansible.builtin.systemd: name: iscsid enabled: true daemon_reload: true when: - (database_cluster_type == "ISCSI") or (scs_cluster_type == "ISCSI") ... # /*---------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/