From 7ac8d32bc67b22b6199af08e28a72cc8d81f59a0 Mon Sep 17 00:00:00 2001 From: yuhao_liu Date: Thu, 10 Oct 2024 02:15:28 -0500 Subject: [PATCH] SDT deployment role --- .ansible-lint-ignore | 3 + playbooks/roles/group_vars/all | 6 + playbooks/roles/host_vars/sdt1 | 3 + playbooks/roles/host_vars/sdt2 | 3 + playbooks/roles/inventory | 6 + playbooks/roles/site_powerflex45.yml | 7 + playbooks/roles/uninstall_powerflex45.yml | 9 + roles/README.md | 9 + roles/powerflex_sdt/README.md | 212 ++++++++++++++++++ roles/powerflex_sdt/defaults/main.yml | 7 + roles/powerflex_sdt/meta/argument_spec.yml | 77 +++++++ roles/powerflex_sdt/meta/main.yml | 24 ++ .../molecule/sdt_installation/converge.yml | 58 +++++ .../molecule/sdt_installation/molecule.yml | 1 + .../molecule/sdt_uninstallation/converge.yml | 58 +++++ .../molecule/sdt_uninstallation/molecule.yml | 1 + roles/powerflex_sdt/tasks/install_sdt.yml | 74 ++++++ roles/powerflex_sdt/tasks/main.yml | 8 + roles/powerflex_sdt/tasks/uninstall_sdt.yml | 87 +++++++ roles/powerflex_sdt/vars/main.yml | 5 + 20 files changed, 658 insertions(+) create mode 100644 playbooks/roles/host_vars/sdt1 create mode 100644 playbooks/roles/host_vars/sdt2 create mode 100644 roles/powerflex_sdt/README.md create mode 100644 roles/powerflex_sdt/defaults/main.yml create mode 100644 roles/powerflex_sdt/meta/argument_spec.yml create mode 100644 roles/powerflex_sdt/meta/main.yml create mode 100644 roles/powerflex_sdt/molecule/sdt_installation/converge.yml create mode 100644 roles/powerflex_sdt/molecule/sdt_installation/molecule.yml create mode 100644 roles/powerflex_sdt/molecule/sdt_uninstallation/converge.yml create mode 100644 roles/powerflex_sdt/molecule/sdt_uninstallation/molecule.yml create mode 100644 roles/powerflex_sdt/tasks/install_sdt.yml create mode 100644 roles/powerflex_sdt/tasks/main.yml create mode 100644 roles/powerflex_sdt/tasks/uninstall_sdt.yml create mode 100644 roles/powerflex_sdt/vars/main.yml diff --git a/.ansible-lint-ignore b/.ansible-lint-ignore index 1b2e740..61c971c 100644 --- a/.ansible-lint-ignore +++ b/.ansible-lint-ignore @@ -15,6 +15,8 @@ roles/powerflex_sdc/vars/main.yml var-naming[no-role-prefix] roles/powerflex_sdr/defaults/main.yml var-naming[no-role-prefix] roles/powerflex_sds/defaults/main.yml var-naming[no-role-prefix] roles/powerflex_sds/vars/main.yml var-naming[no-role-prefix] +roles/powerflex_sdt/defaults/main.yml var-naming[no-role-prefix] +roles/powerflex_sdt/vars/main.yml var-naming[no-role-prefix] roles/powerflex_tb/defaults/main.yml var-naming[no-role-prefix] roles/powerflex_tb/vars/main.yml var-naming[no-role-prefix] roles/powerflex_webui/defaults/main.yml var-naming[no-role-prefix] @@ -24,4 +26,5 @@ roles/powerflex_lia/molecule/lia_installation_invalid_path_rpm/converge.yml var- roles/powerflex_sdc/molecule/sdc_installation_invalid_path_rpm/converge.yml var-naming[no-role-prefix] roles/powerflex_sdr/molecule/sdr_installation_invalid_path_rpm/converge.yml var-naming[no-role-prefix] roles/powerflex_sds/molecule/sds_installation/converge.yml var-naming[no-role-prefix] +roles/powerflex_sdt/molecule/sdt_installation/converge.yml var-naming[no-role-prefix] roles/powerflex_webui/molecule/webui_installation_invalid_path_rpm/converge.yml var-naming[no-role-prefix] diff --git a/playbooks/roles/group_vars/all b/playbooks/roles/group_vars/all index 5cec51f..72dcbe1 100644 --- a/playbooks/roles/group_vars/all +++ b/playbooks/roles/group_vars/all @@ -50,3 +50,9 @@ powerflex_gateway_is_redundant: false #powerflex sdr params powerflex_protection_domain_name: domain1 powerflex_storage_pool_name: pool1 +#powerflex sdt params +powerflex_sdt_storage_port: 12200 +powerflex_sdt_nvme_port: 4420 +powerflex_sdt_discovery_port: 8009 +powerflex_sdt_protection_domain: PD1 +powerflex_sdt_state: present diff --git a/playbooks/roles/host_vars/sdt1 b/playbooks/roles/host_vars/sdt1 new file mode 100644 index 0000000..fe27b3f --- /dev/null +++ b/playbooks/roles/host_vars/sdt1 @@ -0,0 +1,3 @@ +#powerflex sdt params +powerflex_sdt_ip_list: 10.x.x.1,10.x.x.2 +powerflex_sdt_role_list: storage_and_host,storage_and_host \ No newline at end of file diff --git a/playbooks/roles/host_vars/sdt2 b/playbooks/roles/host_vars/sdt2 new file mode 100644 index 0000000..ec55639 --- /dev/null +++ b/playbooks/roles/host_vars/sdt2 @@ -0,0 +1,3 @@ +#powerflex sdt params +powerflex_sdt_ip_list: 10.x.y.1,10.x.y.2 +powerflex_sdt_role_list: storage_and_host,storage_and_host \ No newline at end of file diff --git a/playbooks/roles/inventory b/playbooks/roles/inventory index 24fc6f2..4467f46 100644 --- a/playbooks/roles/inventory +++ b/playbooks/roles/inventory @@ -1,6 +1,8 @@ node0 ansible_host=10.1.1.1 ansible_port=22 ansible_ssh_pass=password ansible_user=root node1 ansible_host=10.x.x.x ansible_port=22 ansible_ssh_pass=password ansible_user=root node2 ansible_host=10.x.x.y ansible_port=22 ansible_ssh_pass=password ansible_user=root +sdt1 ansible_host=10.x.x.x ansible_port=22 ansible_ssh_pass=password ansible_user=root +sdt2 ansible_host=10.x.x.y ansible_port=22 ansible_ssh_pass=password ansible_user=root [activemq] node0 @@ -39,3 +41,7 @@ node1 node0 node1 node2 + +[sdt] +sdt1 +sdt2 \ No newline at end of file diff --git a/playbooks/roles/site_powerflex45.yml b/playbooks/roles/site_powerflex45.yml index bd75f6b..629f22f 100644 --- a/playbooks/roles/site_powerflex45.yml +++ b/playbooks/roles/site_powerflex45.yml @@ -57,3 +57,10 @@ - vars_files/connection.yml roles: - powerflex_sdr + +- name: Install and configure PowerFlex SDT + hosts: sdt + vars_files: + - vars_files/connection.yml + roles: + - powerflex_sdt diff --git a/playbooks/roles/uninstall_powerflex45.yml b/playbooks/roles/uninstall_powerflex45.yml index 2d36b5b..bccf4d4 100644 --- a/playbooks/roles/uninstall_powerflex45.yml +++ b/playbooks/roles/uninstall_powerflex45.yml @@ -59,3 +59,12 @@ - vars_files/connection.yml roles: - powerflex_activemq + +- name: Uninstall PowerFlex SDT + hosts: sdt + vars_files: + - vars_files/connection.yml + roles: + - powerflex_sdt + vars: + powerflex_sdt_state: absent diff --git a/roles/README.md b/roles/README.md index e6f8c42..00c878e 100644 --- a/roles/README.md +++ b/roles/README.md @@ -14,6 +14,7 @@ Here is the list of supported roles. ├── powerflex_lia ├── powerflex_tb ├── powerflex_sds +├── powerflex_sdt ├── powerflex_config ├── powerflex_activeMQ @@ -59,6 +60,10 @@ Below is the brief description of each role powerflex_sds Role to manage the installation and uninstallation of Powerflex SDS. + + powerflex_sdt + Role to manage the installation and uninstallation of Powerflex SDT. + powerflex_tb Role to manage the installation and uninstallation of Powerflex TB. @@ -109,6 +114,10 @@ Below is the list of full form of the acronyms which are refered throughout the SDS Storage Data Server. + + SDT + Storage Data Target. + TB Tie Breaker. diff --git a/roles/powerflex_sdt/README.md b/roles/powerflex_sdt/README.md new file mode 100644 index 0000000..0858a3d --- /dev/null +++ b/roles/powerflex_sdt/README.md @@ -0,0 +1,212 @@ +# powerflex_sdt + +Role to manage the installation and uninstallation of Powerflex SDT. + +## Table of contents + +* [Requirements](#requirements) +* [Ansible collections](#ansible-collections) +* [Role Variables](#role-variables) +* [Examples](#examples) +* [Usage instructions](#usage-instructions) +* [Author Information](#author-information) + +## Requirements + +``` +ansible +python +``` + +## Ansible collections + +Collections required to use the role. + +``` +dellemc.powerflex +``` + +## Role Variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameRequiredDescriptionChoicesTypeDefault Value
hostnametrueIP or FQDN of the PowerFlex gateway.str10.1.1.1
usernametrueThe username of the PowerFlex gateway.stradmin
passwordtrueThe password of the PowerFlex gateway.strpassword
portfalsePortint443
validate_certsfalseIf C(false), the SSL certificates will not be validated.
Configure C(false) only on personally controlled sites where self-signed certificates are used.
boolfalse
timeoutfalseTimeoutint120
powerflex_common_file_install_locationtrueLocation of installation and rpm gpg files to be installed. +
The required, compatible installation software package based on the operating system of the node. +
The files can be downloaded from the Dell Product support page for PowerFlex software.
str/var/tmp
powerflex_sdt_discovery_portfalsePort used by the NVMe hosts for discovery. Set to 1 in order to indicate no use of discovery port.int8009
powerflex_sdt_ip_listtrueTarget IP list of SDT. Comma separated.str
powerflex_sdt_nvme_portfalsePort used by the NVMe hostsint4420
powerflex_sdt_protection_domaintrueThe name of the protection domain to which the SDT will be added. + str
powerflex_sdt_role_listtrueRole list of SDT target IP. Comma separated.storage_only, host_only, storage_and_hoststr
powerflex_sdt_statefalseState of the SDT.present, absentstrpresent
powerflex_sdt_storage_portfalsePort assigned to the SDT.int12200
+ +## Examples +---- +``` + - name: "Install and configure powerflex SDT" + ansible.builtin.import_role: + name: "powerflex_sdt" + vars: + hostname: "{{ hostname }}" + username: "{{ username }}" + password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + port: "{{ port }}" + powerflex_sdt_protection_domain: PD1 + powerflex_sdt_storage_port: 12200 + powerflex_sdt_nvme_port: 4420 + powerflex_sdt_discovery_port: 8009 + powerflex_sdt_state: present + + - name: "Uninstall powerflex SDT" + ansible.builtin.import_role: + name: "powerflex_sdt" + vars: + hostname: "{{ hostname }}" + username: "{{ username }}" + password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + port: "{{ port }}" + powerflex_sdt_state: 'absent' + +``` + +## Usage instructions +---- +### To install all dependency packages, including SDT, on node: +- PowerFlex 4.5: + ``` + ansible-playbook -i inventory site_powerflex45.yml + ``` + +### To uninstall SDT: +- PowerFlex 4.5: + ``` + ansible-playbook -i inventory uninstall_powerflex45.yml + ``` + +Sample playbooks and inventory can be found in the playbooks directory. + +## Author Information +------------------ + +Dell Technologies +Yuhao Liu (yuhao_liu@Dell.com) 2024 \ No newline at end of file diff --git a/roles/powerflex_sdt/defaults/main.yml b/roles/powerflex_sdt/defaults/main.yml new file mode 100644 index 0000000..5963e0a --- /dev/null +++ b/roles/powerflex_sdt/defaults/main.yml @@ -0,0 +1,7 @@ +--- +file_glob_name: sdt +i_am_sure: 1 +powerflex_sdt_state: present +powerflex_sdt_storage_port: 12200 +powerflex_sdt_nvme_port: 4420 +powerflex_sdt_discovery_port: 8009 diff --git a/roles/powerflex_sdt/meta/argument_spec.yml b/roles/powerflex_sdt/meta/argument_spec.yml new file mode 100644 index 0000000..be1de17 --- /dev/null +++ b/roles/powerflex_sdt/meta/argument_spec.yml @@ -0,0 +1,77 @@ +--- +argument_specs: + main: + short_description: Role to manage the installation and uninstallation of Powerflex SDT. + description: + - Role to manage the installation and uninstallation of Powerflex SDT. + options: + hostname: + required: true + type: str + description: IP or FQDN of the PowerFlex gateway. + username: + required: true + type: str + description: The username of the PowerFlex gateway. + password: + required: true + type: str + description: The password of the PowerFlex gateway. + port: + type: int + description: Port of the PowerFlex gateway. + default: 443 + validate_certs: + description: + - If C(false), the SSL certificates will not be validated. + - Configure C(false) only on personally controlled sites where self-signed certificates are used. + type: bool + default: false + timeout: + description: Timeout. + type: int + default: 120 + powerflex_common_file_install_location: + description: + - Location of installation and rpm gpg files to be installed. + - The required, compatible installation software package based on the operating system of the node. + - The files can be downloaded from the Dell Product support page for PowerFlex software. + type: str + default: /var/tmp + powerflex_sdt_discovery_port: + description: + - Port used by the NVMe hosts for discovery. Set to 1 in order to indicate no use of discovery port. + type: int + default: 8009 + powerflex_sdt_ip_list: + required: true + description: + - Target IP list of SDT. Comma separated. + type: str + powerflex_sdt_nvme_port: + description: + - Port used by the NVMe hosts + type: int + default: 4420 + powerflex_sdt_protection_domain: + required: true + description: + - The name of the protection domain to which the SDT will be added. + type: str + powerflex_sdt_role_list: + required: true + description: + - Role list of SDT target IP. Comma separated. + type: str + choices: ['storage_only', 'host_only', 'storage_and_host'] + powerflex_sdt_state: + description: + - Specifies the state of SDT. + type: str + choices: ['absent', 'present'] + default: present + powerflex_sdt_storage_port: + description: + - Port assigned to the SDT + type: int + default: 12200 diff --git a/roles/powerflex_sdt/meta/main.yml b/roles/powerflex_sdt/meta/main.yml new file mode 100644 index 0000000..8130cf6 --- /dev/null +++ b/roles/powerflex_sdt/meta/main.yml @@ -0,0 +1,24 @@ +--- +galaxy_info: + author: Yuhao Liu + description: The role helps to manage the installation of SDT. + company: Dell Technologies + license: GPL-3.0-only + role_name: powerflex_sdt + namespace: dellemc + + min_ansible_version: "2.14.0" + platforms: + - name: EL + versions: + - "9" + - "8" + - name: Ubuntu + versions: + - jammy + - name: SLES + versions: + - "15SP3" + - "15SP4" + + galaxy_tags: [] diff --git a/roles/powerflex_sdt/molecule/sdt_installation/converge.yml b/roles/powerflex_sdt/molecule/sdt_installation/converge.yml new file mode 100644 index 0000000..6570801 --- /dev/null +++ b/roles/powerflex_sdt/molecule/sdt_installation/converge.yml @@ -0,0 +1,58 @@ +--- +- name: Molecule Test for installation of SDT + hosts: sdt + vars_files: + - ../../../../playbooks/roles/vars_files/connection.yml + + tasks: + - name: Install and configure Powerflex SDT + ansible.builtin.import_role: + name: powerflex_sdt + vars: + powerflex_sdt_state: present + + - name: Verifying install package in check mode + ansible.builtin.assert: + that: + - powerflex_common_install_package_output.msg == "Check mode: No changes made" + when: ansible_check_mode + + - name: Verifying add sdt in check mode + ansible.builtin.assert: + that: + - powerflex_add_sdt_result.msg == "Check mode: No changes made" + when: ansible_check_mode + + - name: Verifying installation package in converge mode + ansible.builtin.assert: + that: + - not powerflex_common_install_package_output.failed + - powerflex_common_install_package_output.state == "present" + when: + - not ansible_check_mode + - powerflex_common_install_package_output.changed + + - name: Verifying add sdt in converge mode + ansible.builtin.assert: + that: + - not powerflex_add_sdt_result.failed + when: + - not ansible_check_mode + - powerflex_add_sdt_result.changed + + - name: Verifying installation package in Idempotency mode + ansible.builtin.assert: + that: + - not powerflex_common_install_package_output.failed + - powerflex_common_install_package_output.state == "present" + when: + - not ansible_check_mode + - not powerflex_common_install_package_output.changed + + - name: Verifying add sdt in Idempotency mode + ansible.builtin.assert: + that: + - powerflex_add_sdt_result.rc == 7 + when: + - not ansible_check_mode + - not powerflex_add_sdt_result.changed diff --git a/roles/powerflex_sdt/molecule/sdt_installation/molecule.yml b/roles/powerflex_sdt/molecule/sdt_installation/molecule.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/powerflex_sdt/molecule/sdt_installation/molecule.yml @@ -0,0 +1 @@ +--- diff --git a/roles/powerflex_sdt/molecule/sdt_uninstallation/converge.yml b/roles/powerflex_sdt/molecule/sdt_uninstallation/converge.yml new file mode 100644 index 0000000..535327a --- /dev/null +++ b/roles/powerflex_sdt/molecule/sdt_uninstallation/converge.yml @@ -0,0 +1,58 @@ +--- +- name: SDT uninstallation + hosts: sdt + vars_files: + - ../../../../playbooks/roles/vars_files/connection.yml + tasks: + - name: Uninstall powerflex SDT + register: powerflex_sdt_uninstall_output + ansible.builtin.import_role: + name: powerflex_sdt + vars: + powerflex_sdt_state: absent + + - name: Verifying uninstall package in check mode + ansible.builtin.assert: + that: + - powerflex_sdt_uninstall_output.msg == "Check mode: No changes made" + when: ansible_check_mode + + - name: Verifying remove the sdt in check mode + ansible.builtin.assert: + that: + - powerflex_sdt_remove_result.msg == "Check mode: No changes made" + when: ansible_check_mode + + - name: Verifying uninstall package in converge mode + ansible.builtin.assert: + that: + - not powerflex_sdt_uninstall_output.results[0].failed + - powerflex_sdt_uninstall_output.results[0].state == "absent" + when: + - not ansible_check_mode + - powerflex_sdt_uninstall_output.changed + + - name: Verifying remove the sdt in converge mode + ansible.builtin.assert: + that: + - not powerflex_sdt_remove_result.failed + when: + - not ansible_check_mode + - powerflex_sdt_remove_result.changed + + - name: Verifying uninstall package in Idempotency + ansible.builtin.assert: + that: + - not powerflex_sdt_uninstall_output.results[0].failed + - powerflex_sdt_uninstall_output.results[0].state == "absent" + when: + - not ansible_check_mode + - not powerflex_sdt_uninstall_output.changed + + - name: Verifying remove the sdt in Idempotency + ansible.builtin.assert: + that: + - powerflex_sdt_remove_result.rc == 7 + when: + - not ansible_check_mode + - not powerflex_sdt_remove_result.changed diff --git a/roles/powerflex_sdt/molecule/sdt_uninstallation/molecule.yml b/roles/powerflex_sdt/molecule/sdt_uninstallation/molecule.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/powerflex_sdt/molecule/sdt_uninstallation/molecule.yml @@ -0,0 +1 @@ +--- diff --git a/roles/powerflex_sdt/tasks/install_sdt.yml b/roles/powerflex_sdt/tasks/install_sdt.yml new file mode 100644 index 0000000..76059ac --- /dev/null +++ b/roles/powerflex_sdt/tasks/install_sdt.yml @@ -0,0 +1,74 @@ +--- +- name: Get configured MDM IP addresses + dellemc.powerflex.mdm_cluster: + hostname: "{{ hostname }}" + username: "{{ username }}" + password: "{{ password }}" + port: "{{ port }}" + validate_certs: "{{ validate_certs }}" + state: "present" + register: powerflex_sdt_mdm_ip_result + delegate_to: "{{ lookup('ansible.builtin.env', 'RUNON', default='localhost') }}" + +- name: Set fact - PowerFlex version + ansible.builtin.set_fact: + powerflex_sdt_array_version: "{{ powerflex_sdt_mdm_ip_result.mdm_cluster_details.master.versionInfo[1] }}" + +- name: Set fact - powerflex_sdt_mdm_ips + ansible.builtin.set_fact: + powerflex_sdt_mdm_ips: "{{ powerflex_sdt_mdm_ip_result.mdm_cluster_details.mdmAddresses | join(',') }}" + powerflex_sdt_primary_mdm_hostname: "{{ hostvars[groups['mdm'][0]]['inventory_hostname'] }}" + powerflex_sdt_primary_mdm_ip: "{{ hostvars[groups['mdm'][0]]['ansible_host'] }}" + +- name: Include install_powerflex.yml + ansible.builtin.include_tasks: ../../powerflex_common/tasks/install_powerflex.yml + +- name: Add certificate file for PowerFlex version 4.x + ansible.builtin.command: scli --add_certificate --certificate_file /opt/emc/scaleio/mdm/cfg/mgmt_ca.pem + run_once: true + register: powerflex_sdt_add_certificate + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != '3' + +- name: Generate login certificate for PowerFlex version 4.x + block: + - name: Generate login certificate using management_system_ip + ansible.builtin.command: > + scli --generate_login_certificate --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }} + --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure + run_once: true + register: powerflex_sdt_generate_login_certificate + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != "3" + rescue: + - name: Generate login certificate using primary_mdm_ip + ansible.builtin.command: > + scli --generate_login_certificate --management_system_ip {{ powerflex_sdt_primary_mdm_ip }} --username {{ username }} + --password {{ password }} --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure + run_once: true + register: powerflex_sdt_generate_login_certificate_mdm_ip + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != "3" + +- name: Login to MDM for PowerFlex version 4.x + ansible.builtin.command: scli --login --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} + run_once: true + register: powerflex_sdt_login_output + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != "3" + +- name: Add SDT for PowerFlex version 4.x + ansible.builtin.command: scli --add_sdt --management_system_ip {{ hostname }} + --sdt_ip {{ hostvars[inventory_hostname].powerflex_sdt_ip_list }} + --sdt_ip_role {{ hostvars[inventory_hostname].powerflex_sdt_role_list }} --storage_port {{ powerflex_sdt_storage_port }} + --nvme_port {{ powerflex_sdt_nvme_port }} --discovery_port {{ powerflex_sdt_discovery_port }} + --sdt_name {{ inventory_hostname }} --protection_domain_name {{ powerflex_sdt_protection_domain }} + register: powerflex_add_sdt_result + changed_when: ('already in use' not in powerflex_add_sdt_result.stderr) and (powerflex_add_sdt_result.rc == 0) + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + ignore_errors: true + when: powerflex_sdt_array_version != "3" diff --git a/roles/powerflex_sdt/tasks/main.yml b/roles/powerflex_sdt/tasks/main.yml new file mode 100644 index 0000000..d968035 --- /dev/null +++ b/roles/powerflex_sdt/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- name: Install SDT + ansible.builtin.include_tasks: install_sdt.yml + when: powerflex_sdt_state == 'present' + +- name: Remove SDT + ansible.builtin.include_tasks: uninstall_sdt.yml + when: powerflex_sdt_state == 'absent' diff --git a/roles/powerflex_sdt/tasks/uninstall_sdt.yml b/roles/powerflex_sdt/tasks/uninstall_sdt.yml new file mode 100644 index 0000000..dcaffc4 --- /dev/null +++ b/roles/powerflex_sdt/tasks/uninstall_sdt.yml @@ -0,0 +1,87 @@ +--- +- name: Get configured MDM IP addresses + dellemc.powerflex.mdm_cluster: + hostname: "{{ hostname }}" + username: "{{ username }}" + password: "{{ password }}" + port: "{{ port }}" + validate_certs: "{{ validate_certs }}" + state: "present" + register: powerflex_sdt_mdm_ip_result + delegate_to: "{{ lookup('ansible.builtin.env', 'RUNON', default='localhost') }}" + +- name: Set fact - PowerFlex version + ansible.builtin.set_fact: + powerflex_sdt_array_version: "{{ powerflex_sdt_mdm_ip_result.mdm_cluster_details.master.versionInfo[1] }}" + +- name: Set fact - powerflex_sdt_mdm_ips + ansible.builtin.set_fact: + powerflex_sdt_mdm_ips: "{{ powerflex_sdt_mdm_ip_result.mdm_cluster_details.mdmAddresses | join(',') }}" + powerflex_sdt_primary_mdm_hostname: "{{ hostvars[groups['mdm'][0]]['inventory_hostname'] }}" + powerflex_sdt_primary_mdm_ip: "{{ hostvars[groups['mdm'][0]]['ansible_host'] }}" + +- name: Add certificate file for PowerFlex version 4.x + ansible.builtin.command: scli --add_certificate --certificate_file /opt/emc/scaleio/mdm/cfg/mgmt_ca.pem + run_once: true + register: powerflex_sdt_add_certificate + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != '3' + +- name: Generate login certificate for PowerFlex version 4.x + block: + - name: Generate login certificate using management_system_ip + ansible.builtin.command: > + scli --generate_login_certificate --management_system_ip {{ hostname }} --username {{ username }} --password {{ password }} + --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure + run_once: true + register: powerflex_sdt_generate_login_certificate + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != "3" + rescue: + - name: Generate login certificate using primary_mdm_ip + ansible.builtin.command: > + scli --generate_login_certificate --management_system_ip {{ powerflex_sdt_primary_mdm_ip }} --username {{ username }} + --password {{ password }} --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} --insecure + run_once: true + register: powerflex_sdt_generate_login_certificate_mdm_ip + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != "3" + +- name: Login to MDM for PowerFlex version 4.x + ansible.builtin.command: scli --login --p12_path /opt/emc/scaleio/mdm/cfg/cli_certificate.p12 --p12_password {{ password }} + run_once: true + register: powerflex_sdt_login_output + changed_when: false + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + when: powerflex_sdt_array_version != "3" + +- name: Remove SDT + ansible.builtin.command: + scli --remove_sdt --management_system_ip {{ hostname }} + --sdt_name {{ inventory_hostname }} --i_am_sure + register: powerflex_sdt_remove_result + changed_when: ('Could not find' not in powerflex_sdt_remove_result.stderr) and (powerflex_sdt_remove_result.rc == 0) + delegate_to: "{{ powerflex_sdt_primary_mdm_hostname }}" + ignore_errors: true + +- name: Uninstall package + register: powerflex_sdt_uninstall_output + environment: + I_AM_SURE: "{{ i_am_sure | int }}" + ansible.builtin.package: + name: "{{ item }}" + state: "absent" + with_items: + - EMC-ScaleIO-sdt + when: ansible_distribution in ("RedHat", "CentOS", "SLES") + +- name: Uninstall deb package + ansible.builtin.apt: + name: "{{ item }}" + state: absent + with_items: + - emc-scaleio-sdt + when: ansible_distribution == "Ubuntu" diff --git a/roles/powerflex_sdt/vars/main.yml b/roles/powerflex_sdt/vars/main.yml new file mode 100644 index 0000000..420a68d --- /dev/null +++ b/roles/powerflex_sdt/vars/main.yml @@ -0,0 +1,5 @@ +--- +file_glob_name: sdt +file_gpg_name: RPM-GPG-KEY-ScaleIO +powerflex_role_environment: + MDM_IP: "{{ powerflex_sdt_mdm_ips }}"