powerflex_cluster (Resource)
This terraform resource is used to deploy the PowerFlex Cluster. We can Create and Delete the PowerFlex Cluster using this resource. We can also Import an existing Cluster of the PowerFlex.
Please consider the following points before using cluster resource.
-
For PowerFlex 4.x, the PowerFlex Manager must be installed as a prerequisite. The required packages should be uploaded to the PowerFlex Manager.
-
For PowerFlex 3.x, a Gateway server is a prerequisite. The required packages should be uploaded to the gateway. The Package resource can be used for uploading packages to the gateway.
-
Support is provided for creating, importing, and deleting operations for this resource.
-
In multi-node cluster deployments, when some of the component installations fail, the partial deployment will not be rolled back.
-
If you’ve separately installed any SDR, SDS, or SDC and connected it to the cluster and if you face any security certificate issues during the destroy process, you’ll have to manually accept the security certificate to resolve them.
-
During the destroy process, the entire cluster will be destroyed, not just specific individual resources. After destroy need to follow cleanup process.
-
ips
attribute is used in minimal csv configuration whereasmdm_ips
attribute is used in complete csv configuration. -
For PowerFlex 4.x, there’s no need to mention
allow_non_secure_communication_with_lia
,allow_non_secure_communication_with_mdm
, anddisable_non_mgmt_components_auth
. And, Rfcache is not supported. -
To follow the installation process, you can refer to the Deployment Guide 3.x & Deployment Guide 4.x
Example Usage
/*
Copyright (c) 2023-2024 Dell Inc., or its subsidiaries. All Rights Reserved.
Licensed under the Mozilla Public License Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://mozilla.org/MPL/2.0/
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
# Command to run this tf file : terraform init && terraform plan && terraform apply.
# Create, Read, Delete and Import operations are supported for this resource.
# Example for deploying cluster. After successful execution, 3 node MDM cluster will be deployed with 3 SDCs and 2 SDS.
resource "powerflex_package" "upload-test" {
file_path = ["/root/powerflex_packages/PowerFlex_3.6.700.103_RHEL_OEL7/EMC-ScaleIO-lia-3.6-700.103.el7.x86_64.rpm",
"/root/powerflex_packages/PowerFlex_3.6.700.103_RHEL_OEL7/EMC-ScaleIO-mdm-3.6-700.103.el7.x86_64.rpm",
"/root/powerflex_packages/PowerFlex_3.6.700.103_RHEL_OEL7/EMC-ScaleIO-sds-3.6-700.103.el7.x86_64.rpm",
"/root/powerflex_packages/PowerFlex_3.6.700.103_RHEL_OEL7/EMC-ScaleIO-sdc-3.6-700.103.el7.x86_64.rpm",
"/root/powerflex_packages/PowerFlex_3.6.700.103_RHEL_OEL7/EMC-ScaleIO-sdr-3.6-700.103.el7.x86_64.rpm"]
}
resource "powerflex_cluster" "test" {
depends_on = [powerflex_package.upload-test]
# Security Related Field
mdm_password = "Password"
lia_password = "Password"
# Advance Security Configuration
allow_non_secure_communication_with_lia = false
allow_non_secure_communication_with_mdm = false
disable_non_mgmt_components_auth = false
# Cluster Configuration related fields
cluster = [
{
# MDM Configuration Fields
ips = "10.10.10.1",
username = "root",
password = "Password",
operating_system = "linux",
is_mdm_or_tb = "primary",
mdm_ips = "10.10.10.1",
mdm_mgmt_ip = "10.10.10.1",
mdm_name = "MDM_1",
perf_profile_for_mdm = "HighPerformance",
virtual_ips = "10.30.30.1",
virtual_ip_nics = "ens192",
# SDS Configuration Fields
is_sds = "yes",
sds_name = "sds1",
sds_all_ips = "10.20.20.3", # conflict with sds_to_sds_only_ips,sds_to_sdc_only_ips
# sds_to_sdc_only_ips = "10.20.20.2",
# sds_to_sds_only_ips = "10.20.20.1",
fault_set = "fs1",
protection_domain = "domain_1"
sds_storage_device_list = "/dev/sdb"
sds_storage_device_names = "device1"
storage_pool_list = "pool1"
perf_profile_for_sds = "HighPerformance"
# SDC Configuration Fields
is_sdc = "yes",
sdc_name = "sdc1",
perf_profile_for_sdc = "HighPerformance",
# Rfcache Configuration Fields
is_rfcache = "No",
rf_cache_ssd_device_list = "/dev/sdd"
# SDR Configuration Fields
is_sdr = "Yes",
sdr_name = "SDR_1"
sdr_port = "2000"
# sdr_application_ips = "10.20.30.1"
# sdr_storage_ips = "10.20.30.2"
# sdr_external_ips = "10.20.30.3"
sdr_all_ips = "10.10.20.1" # conflict with sdr_application_ips, sdr_storage_ips, sdr_external_ips
perf_profile_for_sdr = "Compact"
},
{
ips = "10.10.10.2",
username = "root",
password = "Password",
operating_system = "linux",
is_mdm_or_tb = "Secondary",
protection_domain = "domain_1"
sds_storage_device_list = "/dev/sdb"
storage_pool_list = "pool1"
is_sds = "yes",
sds_name = "sds2",
is_sdc = "yes",
sdc_name = "sdc2",
perf_profile_for_sdc = "compact",
is_rfcache = "No",
is_sdr = "No",
},
{
ips = "10.10.10.3",
username = "root",
password = "Password",
operating_system = "linux",
is_mdm_or_tb = "TB",
is_sds = "No",
is_sdc = "yes",
sdc_name = "sdc3",
perf_profile_for_sdc = "compact",
is_rfcache = "No",
is_sdr = "No",
},
]
# Storage Pool Configuration Fields
storage_pools = [
{
media_type = "HDD"
protection_domain = "domain_1"
storage_pool = "pool1"
replication_journal_capacity_percentage = "50"
}
]
}
After the execution of above resource block, Cluster would have been created on the PowerFlex array. For more information, please check the terraform state file.
Schema
Required
cluster
(Attributes List) Cluster Installation Details (see below for nested schema)lia_password
(String) Lia Passwordmdm_password
(String) MDM Password
Optional
allow_non_secure_communication_with_lia
(Boolean) Allow Non Secure Communication With liaallow_non_secure_communication_with_mdm
(Boolean) Allow Non Secure Communication With MDMdisable_non_mgmt_components_auth
(Boolean) Disable Non Mgmt Components Authid
(String) IDstorage_pools
(Attributes List) Storage Pool Details (see below for nested schema)
Read-Only
mdm_list
(Attributes Set) Cluster MDM Details (see below for nested schema)protection_domains
(Attributes List) Cluster Protection Domain Details (see below for nested schema)sdc_list
(Attributes Set) Cluster SDC Details (see below for nested schema)sdr_list
(Attributes Set) Cluster SDR Details (see below for nested schema)sds_list
(Attributes Set) Cluster SDS Details (see below for nested schema)
Nested Schema for cluster
Required:
is_mdm_or_tb
(String) Is Mdm Or Tboperating_system
(String) Operating System
Optional:
fault_set
(String) Fault Setips
(String) Use this field to assign a single IP address for all the MDM IP, MDM Mgmt IP, and SDS All IP. This option is useful when separate networks for data and management are not required.is_rfcache
(String) Is RFCache. The acceptable values areYes
andNo
. Default value isNo
.is_sdc
(String) Is Sdc. The acceptable values areYes
andNo
. Default value isNo
.is_sdr
(String) Is SDR. The acceptable values areYes
andNo
. Default value isNo
.is_sds
(String) Is Sds. The acceptable values areYes
andNo
. Default value isNo
.mdm_ips
(String) MDM IP addresses used to communicate with other PowerFlex components in the storage network. This is required for all MDMs, Tiebreakers and Standbys.Leave this field blank for hosts that are not part of the MDM cluster.mdm_mgmt_ip
(String) This IP address is for the management-only network. The management ip is not required for Tiebreaker MDM, Standby Tiebreaker MDM and any host that is not an MDM.mdm_name
(String) MDMNamepassword
(String, Sensitive) Password used to log in to the node.perf_profile_for_mdm
(String) Performance Profile For MDMperf_profile_for_sdc
(String) Performance Profile For SDCperf_profile_for_sdr
(String) Performance Profile For SDRperf_profile_for_sds
(String) Performance Profile For SDSprotection_domain
(String) Protection Domainrf_cache_ssd_device_list
(String) List of SSD devices to provide RFcache acceleration for Medium Granularity data layout Storage Pools.sdc_name
(String) SDC Namesdr_all_ips
(String) SDR IP addresses to be used for communication among all nodes (including all three roles)sdr_application_ips
(String) The IP addresses through which the SDC communicates with the SDR.sdr_external_ips
(String) The IP addresses through which the SDR communicates with peer systems SDRssdr_name
(String) SDR Namesdr_port
(String) SDR Portsdr_storage_ips
(String) The IP addresses through which the SDR communicates with the MDM for server side control communications.sds_all_ips
(String) SDS IP addresses to be used for communication among all nodes.sds_name
(String) SDS Namesds_storage_device_list
(String) Storage devices to be added to an SDS. For more than one device, use a comma separated list, with no spaces.sds_storage_device_names
(String) Sets names for devices.sds_to_sdc_only_ips
(String) SDS IP addresses to be used for communication among SDS and SDC nodes only.sds_to_sds_only_ips
(String) SDS IP addresses to be used for communication among SDS nodes. When the replication feature is used, these addresses are also used for SDS-SDR communication.storage_pool_list
(String) Sets Storage Pool namesusername
(String) The value can be eitherroot
or any non-root user name with appropriate permissions.virtual_ip_nics
(String) The NIC to which the virtual IP addresses are mapped.virtual_ips
(String) Virtual IPs
Nested Schema for storage_pools
Required:
media_type
(String) Media Type
Optional:
compression_method
(String) Compression Methoddata_layout
(String) Data Layoutexternal_acceleration
(String) External Accelerationprotection_domain
(String) Protection Domainreplication_journal_capacity_percentage
(String) Replication Journal Capacity Percentagestorage_pool
(String) Storage Poolzero_padding
(String) Zero Padding
Nested Schema for mdm_list
Read-Only:
id
(String) IDip
(String) MDM Node IPmdm_ip
(String) MDM IPmgmt_ip
(String) MGMTIPmode
(String) Modename
(String) Namerole
(String) Rolevirtual_ip
(String) Virtual IPvirtual_ip_nic
(String) Virtual IPNIC
Nested Schema for protection_domains
Read-Only:
name
(String) Namestorage_pool_list
(Attributes List) Storage Pools (see below for nested schema)
Nested Schema for protection_domains.storage_pool_list
Read-Only:
compression_method
(String) Compression Methoddata_layout
(String) Data Layoutexternal_acceleration
(String) External Accelerationmedia_type
(String) Media Typename
(String) Namereplication_journal_capacity_percentage
(Number) Replication Journal Capacity Percentagezero_padding
(String) Zero Padding
Nested Schema for sdc_list
Read-Only:
guid
(String) GUIDid
(String) IDip
(String) SDC Node IPname
(String) Name
Nested Schema for sdr_list
Read-Only:
all_ips
(String) All IPapplication_ips
(String) Application IPexternal_ips
(String) External IPid
(String) IDip
(String) SDR Node IPname
(String) Nameport
(Number) Portstorage_ips
(String) Storage IP
Nested Schema for sds_list
Read-Only:
all_ips
(String) All IPdevices
(Attributes Set) Devices (see below for nested schema)fault_set
(String) Fault Setid
(String) IDip
(String) SDS Node IPname
(String) Nameprotection_domain_id
(String) Protection Domain Nameprotection_domain_name
(String) Protection Domain Namesds_only_ips
(String) SDSOnly IPsds_sdc_ips
(String) SDSSDCIP
Nested Schema for sds_list.devices
Read-Only:
max_capacity_in_kb
(Number) Max Capacityname
(String) Namepath
(String) Pathstorage_pool
(String) Storage Pool Name
Import
Import is supported using the following syntax:
# /*
# Copyright (c) 2023-2024 Dell Inc., or its subsidiaries. All Rights Reserved.
# Licensed under the Mozilla Public License Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://mozilla.org/MPL/2.0/
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# */
# import existing cluster
terraform import powerflex_cluster.cluster_data "<MDM_IP>,<MDM_Password>,<LIA_Password>"
- This will import the cluster instance using specified details into your Terraform state.
- After successful import, you can run terraform state list to ensure the resource has been imported successfully.
- Now, you can fill in the resource block with the appropriate arguments and settings that match the imported resource’s real-world configuration.
- Execute terraform plan to see if your configuration and the imported resource are in sync. Make adjustments if needed.
- Finally, execute terraform apply to bring the resource fully under Terraform’s management.
- Now, the resource which was not part of terraform became part of Terraform managed infrastructure.