+ `;
+
+ onObservabilityOperatorChange();
+
+ expect($("div#observability-operator-metrics-wrapper").css("display")).not.toEqual("none");
+ expect($("div#observability-operator-topology-wrapper").css("display")).not.toEqual("none");
+ expect($("div#observability-operator-otel-wrapper").css("display")).not.toEqual("none");
+ });
+});
+
describe("GIVEN onSnapshotChange function", () => {
test("SHOULD hide snapshot components when option not checked", () => {
document.body.innerHTML = `
@@ -214,6 +249,26 @@ describe("GIVEN onCertManagerChange function", () => {
});
});
+describe("GIVEN onTopologyChange function", () => {
+ test("SHOULD hide topology components when option not checked", () => {
+ document.body.innerHTML = `
+
+ `;
+ onCertManagerChange("Temp topology note");
+ expect($("div#topology-note-wrapper").css("display")).toEqual("block");
+ });
+
+ test("SHOULD show topology components when option checked", () => {
+ document.body.innerHTML = `
+
+
+ `;
+ onCertManagerChange("Temp topology note");
+ expect($("div#topology-note-wrapper").css("display")).toEqual("none");
+ });
+});
+
describe("GIVEN onVSphereChange function", () => {
test("SHOULD hide Observability Metrics components when option not checked", () => {
document.body.innerHTML = `
diff --git a/content/docs/deployment/csminstallationwizard/src/static/js/tests/utility.test.js b/content/docs/deployment/csminstallationwizard/src/static/js/tests/utility.test.js
index d90928a12f..87a20a3d1d 100644
--- a/content/docs/deployment/csminstallationwizard/src/static/js/tests/utility.test.js
+++ b/content/docs/deployment/csminstallationwizard/src/static/js/tests/utility.test.js
@@ -21,6 +21,44 @@ const {
setDefaultValues
} = require("../utility");
+const CONSTANT_PARAM = {
+ POWERSTORE: "powerstore",
+ POWERSCALE: "isilon",
+ POWERFLEX: "vxflexos",
+ POWERMAX: "powermax",
+ UNITY: "unity",
+ POWERSTORE_NAMESPACE: "csi-powerstore",
+ POWERFLEX_NAMESPACE: "vxflexos",
+ POWERMAX_NAMESPACE: "powermax",
+ POWERSCALE_NAMESPACE: "isilon",
+ UNITY_NAMESPACE: "unity",
+ POWERSTORE_LABEL_VALUE: "csi-powerstore",
+ POWERMAX_LABEL_VALUE: "csi-powermax",
+ VALUES: "values",
+ TEMP_DIR: "templates",
+ TEMP_EXT: ".template",
+ HYPHEN: "-",
+ SLASH: "/",
+ VERSIONS_DIR: "csm-versions",
+ CSM: "csm",
+ DEFAULT_VALUES: "default-values",
+ PROPERTIES: ".properties",
+ HELM: "helm",
+ OPERATOR: "operator",
+ CSM_HELM_V170: "1.0.0",
+ CSM_HELM_V180: "1.1.0",
+ HELM_TAINTS: `
+ - key: "$KEY"
+ operator: "Exists"
+ effect: "NoSchedule"
+ `,
+ OPERATOR_TAINTS: `
+ - key: "$KEY"
+ operator: "Exists"
+ effect: "NoSchedule"
+ `
+};
+
describe("GIVEN validateForm functions", () => {
test("SHOULD return false IF array value is empty", () => {
document.body.innerHTML = `
@@ -135,12 +173,10 @@ describe("GIVEN validateForm functions", () => {
+
+
`;
- const CONSTANT_PARAM = {
- POWERMAX: "powermax"
- };
-
test("SHOULD return false IF storage-array-id value is empty", () => {
document.body.innerHTML = powermaxTestHtml;
diff --git a/content/docs/deployment/csminstallationwizard/src/static/js/ui-functions.js b/content/docs/deployment/csminstallationwizard/src/static/js/ui-functions.js
index 4677aa3d3b..1458a7a253 100644
--- a/content/docs/deployment/csminstallationwizard/src/static/js/ui-functions.js
+++ b/content/docs/deployment/csminstallationwizard/src/static/js/ui-functions.js
@@ -31,7 +31,7 @@ function onInstallationTypeChange(){
displayModules(installationType, driver, CONSTANTS)
$("#command-text-area").hide();
onOperatorResiliencyChange();
- loadTemplate(document.getElementById("array").value, document.getElementById("installation-type").value, document.getElementById("csm-version").value);
+ document.getElementById("array").value !== ""? loadTemplate(document.getElementById("array").value, document.getElementById("installation-type").value, document.getElementById("csm-version").value) : null;
}
function onArrayChange() {
@@ -45,11 +45,14 @@ function onArrayChange() {
setDefaultValues(defaultValues, csmMap);
$(".namespace").show();
onObservabilityChange();
+ onObservabilityOperatorChange();
onAuthorizationChange();
onResiliencyChange(podmonNote);
onSnapshotChange(snapshotNote, driver, CONSTANTS);
onCertManagerChange(certmanagerNote);
+ onTopologyChange(topologyNote);
onVSphereChange();
+ onReplicationChange(replicationNote);
validateInput(validateForm, CONSTANTS);
});
}
@@ -72,6 +75,19 @@ function onObservabilityChange() {
}
}
+function onObservabilityOperatorChange() {
+ if ($("#observability-operator").prop('checked') === true) {
+ $('div#observability-operator-metrics-wrapper').show();
+ $('div#observability-operator-topology-wrapper').show();
+ $('div#observability-operator-otel-wrapper').show();
+ } else {
+ $('div#observability-operator-metrics-wrapper').hide();
+ $('div#observability-operator-topology-wrapper').hide();
+ $('div#observability-operator-otel-wrapper').hide();
+ }
+}
+
+
function onResiliencyChange(podmonNoteValue) {
if ($("#resiliency").prop('checked') === true) {
$('div#podmon-note-wrapper').show();
@@ -105,6 +121,25 @@ function onCertManagerChange(certmanagerNoteValue) {
}
}
+function onTopologyChange(topologyNoteValue) {
+ if ($("#topology").prop('checked') === true) {
+ $('div#topology-note-wrapper').show();
+ $("#topology-note").html(topologyNoteValue);
+ } else {
+ $('div#topology-note-wrapper').hide();
+ }
+}
+
+function onReplicationChange(replicationNoteValue) {
+ if ($("#replication").prop('checked') === true && $("#installation-type").val() === "operator") {
+ $("#replication-operator-note").html(replicationNoteValue);
+ $('.replication-operator').show();
+
+ } else {
+ $('.replication-operator').hide();
+ }
+}
+
function onVSphereChange() {
if ($("#vSphere").prop('checked') === true) {
$('div#vSphere-wrapper').show();
@@ -125,9 +160,10 @@ function onNodeSelectorChange(nodeSelectorNoteValue, csmMapValue) {
}
const onCSMVersionChange = () => {
- document.getElementById("csm-version").value !== "" ? loadTemplate(document.getElementById("array").value, document.getElementById("installation-type").value, document.getElementById("csm-version").value) : null;
+ document.getElementById("csm-version").value !== ""? loadTemplate(document.getElementById("array").value, document.getElementById("installation-type").value, document.getElementById("csm-version").value) : null;
displayModules(installationType, driver, CONSTANTS);
onObservabilityChange();
+ onObservabilityOperatorChange();
onAuthorizationChange();
};
@@ -209,6 +245,7 @@ const downloadFile = (validateFormFunc, generateYamlFileFunc, displayCommandsFun
}
function displayModules(installationType, driverName, CONSTANTS_PARAM) {
+ csmVersion = document.getElementById("csm-version").value;
$(".vgsnapshot").show();
$(".authorization").show();
$(".observability").show();
@@ -231,6 +268,13 @@ function displayModules(installationType, driverName, CONSTANTS_PARAM) {
$(".resizer").show();
$(".snapshot-feature").show();
$(".resiliency-operator").hide();
+ $(".observability-operator").hide();
+ $(".managedArrays").hide();
+ $(".transport-protocol").hide();
+ $(".iscsichap").hide();
+ $(".topology").hide();
+ $(".replication-operator").hide();
+
switch (driverName) {
case CONSTANTS_PARAM.POWERSTORE:
$(".authorization").hide();
@@ -276,10 +320,35 @@ function displayModules(installationType, driverName, CONSTANTS_PARAM) {
$(".storageArrays").show();
$(".cluster-prefix").show();
$(".port-groups").show();
+ $(".resiliency").hide();
$(".migration").show();
$(".vSphere").show();
$(".storage-capacity").show();
+ $(".snapshot-feature").show();
+ $(".replication-mod").show();
+ $(".iscsichap").show();
+ $(".transport-protocol").show();
document.getElementById("driver-namespace").value = CONSTANTS_PARAM.POWERMAX_NAMESPACE;
+ if (installationType === CONSTANTS_PARAM.OPERATOR) {
+
+ $(".observability-operator").show();
+ $(".observability").hide();
+ $(".replication-operator").show();
+ $(".image-repository").hide();
+ $(".cert-manager").hide();
+ $(".storageArrays").hide();
+ $(".managedArrays").show();
+ $(".snapshot-feature").hide();
+ $(".vol-name-prefix").hide();
+ $(".transport-protocol").show();
+ $(".migration").hide();
+ $(".resizer").hide();
+ $(".fsGroupPolicy").show();
+ $(".transport-protocol").show();
+
+ $(".topology").show();
+ document.getElementById("label-value").value = CONSTANTS_PARAM.POWERMAX_LABEL_VALUE;
+ }
break;
case CONSTANTS_PARAM.POWERFLEX:
$(".monitor").show();
@@ -374,10 +443,13 @@ if (typeof exports !== 'undefined') {
module.exports = {
onAuthorizationChange,
onObservabilityChange,
+ onObservabilityOperatorChange,
onResiliencyChange,
onOperatorResiliencyChange,
onSnapshotChange,
onCertManagerChange,
+ onTopologyChange,
+ onReplicationChange,
onVSphereChange,
onNodeSelectorChange,
onCopyButtonClickHandler,
diff --git a/content/docs/deployment/csminstallationwizard/src/static/js/utility.js b/content/docs/deployment/csminstallationwizard/src/static/js/utility.js
index 24762baac6..6143ac0c68 100644
--- a/content/docs/deployment/csminstallationwizard/src/static/js/utility.js
+++ b/content/docs/deployment/csminstallationwizard/src/static/js/utility.js
@@ -42,16 +42,26 @@ function validateForm(CONSTANTS_PARAM) {
const vSphereEnabled = $("#vSphere").prop('checked') ? true : false;
if (powermaxSelected) {
- if (document.getElementById('storage-array-id').value.trim() === "") {
- return false;
- }
- if (document.getElementById('storage-array-endpoint-url').value.trim() === "") {
- return false;
- }
+ if (document.getElementById('installation-type').value === CONSTANTS_PARAM.HELM) {
+ if (document.getElementById('storage-array-id').value.trim() === "") {
+ return false;
+ }
+ if (document.getElementById('storage-array-endpoint-url').value.trim() === "") {
+ return false;
+ }
+ } else {
+ if (document.getElementById('manage-array-id').value.trim() === "") {
+ return false;
+ }
+ if (document.getElementById('manage-array-endpoint-url').value.trim() === "") {
+ return false;
+ }
+ }
if (document.getElementById('cluster-prefix').value.trim() === "") {
return false;
}
+
if (vSphereEnabled) {
if (document.getElementById('vSphere-fc-port-group').value.trim() === "") {
return false;
diff --git a/content/docs/deployment/csminstallationwizard/src/templates/operator/csm-powermax-1.7.0.template b/content/docs/deployment/csminstallationwizard/src/templates/operator/csm-powermax-1.7.0.template
new file mode 100644
index 0000000000..c415bfd0c3
--- /dev/null
+++ b/content/docs/deployment/csminstallationwizard/src/templates/operator/csm-powermax-1.7.0.template
@@ -0,0 +1,318 @@
+#
+# Copyright © 2023 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+# Licensed under the Apache 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://www.apache.org/licenses/LICENSE-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.
+#
+#
+apiVersion: storage.dell.com/v1
+kind: ContainerStorageModule
+metadata:
+ name: powermax
+ namespace: $NAMESPACE
+spec:
+ # Add fields here
+ driver:
+ csiDriverType: "powermax"
+ csiDriverSpec:
+ # fsGroupPolicy: Defines if the underlying volume supports changing ownership and permission of the volume before being mounted.
+ # Allowed values: ReadWriteOnceWithFSType, File , None
+ # Default value: ReadWriteOnceWithFSType
+ fSGroupPolicy: "$FSGROUP_POLICY"
+ # storageCapacity: Helps the scheduler to schedule the pod on a node satisfying the topology constraints, only if the requested capacity is available on the storage array
+ # Allowed values:
+ # true: enable storage capacity tracking
+ # false: disable storage capacity tracking
+ storageCapacity: $STORAGE_CAPACITY_ENABLED
+ # Config version for CSI PowerMax v2.7.0 driver
+ configVersion: v2.7.0
+ # replica: Define the number of PowerMax controller nodes
+ # to deploy to the Kubernetes release
+ # Allowed values: n, where n > 0
+ # Default value: None
+ replicas: $CONTROLLER_COUNT
+ # Default credential secret for Powermax, if not set it to ""
+ authSecret: powermax-creds
+ dnsPolicy: ClusterFirstWithHostNet
+ forceUpdate: false
+ forceRemoveDriver: true
+ common:
+ # Image for CSI PowerMax driver v2.7.0
+ image: dellemc/csi-powermax:v2.7.0
+ # imagePullPolicy: Policy to determine if the image should be pulled prior to starting the container.
+ # Allowed values:
+ # Always: Always pull the image.
+ # IfNotPresent: Only pull the image if it does not already exist on the node.
+ # Never: Never pull the image.
+ # Default value: None
+ imagePullPolicy: IfNotPresent
+ envs:
+ # X_CSI_MANAGED_ARRAYS: Serial ID of the arrays that will be used for provisioning
+ # Default value: None
+ # Examples: "000000000001", "000000000002"
+ - name: X_CSI_MANAGED_ARRAYS
+ value: $POWERMAX_MANAGE_ARRAY_ID
+ # X_CSI_POWERMAX_ENDPOINT: Address of the Unisphere server that is managing the PowerMax arrays
+ # In case of multi-array, provide an endpoint of locally attached array
+ # Default value: None
+ # Example: https://0.0.0.1:8443
+ - name: X_CSI_POWERMAX_ENDPOINT
+ value: $POWERMAX_MANAGE_ARRAY_ENDPOINT_URL
+ # X_CSI_K8S_CLUSTER_PREFIX: Define a prefix that is appended onto
+ # all resources created in the Array
+ # This should be unique per K8s/CSI deployment
+ # maximum length of this value is 3 characters
+ # Default value: None
+ # Examples: "XYZ", "EMC"
+ - name: X_CSI_K8S_CLUSTER_PREFIX
+ value: $POWERMAX_CLUSTER_PREFIX
+ # Specify kubelet config dir path.
+ # Ensure that the config.yaml file is present at this path.
+ # Default value: None
+ - name: KUBELET_CONFIG_DIR
+ value: /var/lib/kubelet
+ # X_CSI_POWERMAX_PORTGROUPS: Define the set of existing port groups that the driver will use.
+ # It is a comma separated list of portgroup names.
+ # Required only in case of iSCSI port groups
+ # Allowed values: iSCSI Port Group names
+ # Default value: None
+ # Examples: "pg1", "pg1, pg2"
+ - name: X_CSI_POWERMAX_PORTGROUPS
+ value: $POWERMAX_PORT_GROUPS
+ # "X_CSI_TRANSPORT_PROTOCOL" can be "FC" or "FIBRE" for fibrechannel,
+ # "ISCSI" for iSCSI, or "" for autoselection.
+ # Allowed values:
+ # "FC" - Fiber Channel protocol
+ # "FIBER" - Fiber Channel protocol
+ # "ISCSI" - iSCSI protocol
+ # "" - Automatic selection of transport protocol
+ # Default value: ""
+ - name: X_CSI_TRANSPORT_PROTOCOL
+ value: $NODE_TRANSPORT_PROTOCOL
+ # X_CSI_POWERMAX_PROXY_SERVICE_NAME: Refers to the name of the proxy service in kubernetes
+ # Allowed values: "csipowermax-reverseproxy"
+ # default values: "csipowermax-reverseproxy"
+ - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME
+ value: "csipowermax-reverseproxy"
+ # VMware/vSphere virtualization support
+ # set X_CSI_VSPHERE_ENABLED to true, if you to enable VMware virtualized environment support via RDM
+ # Allowed values:
+ # "true" - vSphere volumes are enabled
+ # "false" - vSphere volumes are disabled
+ # Default value: "false"
+ - name: "X_CSI_VSPHERE_ENABLED"
+ value: $VSPHERE_ENABLED
+ # X_CSI_VSPHERE_PORTGROUP: An existing portGroup that driver will use for vSphere
+ # recommended format: csi-x-VC-PG, x can be anything of user choice
+ # Allowed value: valid existing port group on the array
+ # Default value: ""
+ - name: "X_CSI_VSPHERE_PORTGROUP"
+ value: $VSPHERE_FC_PORT_GROUP
+ # X_CSI_VSPHERE_HOSTNAME: An existing host(initiator group)/ host group(cascaded initiator group) that driver will use for vSphere
+ # this host should contain initiators from all the ESXs/ESXi host where the cluster is deployed
+ # recommended format: csi-x-VC-HN, x can be anything of user choice
+ # Allowed value: valid existing host/host group on the array
+ # Default value: ""
+ - name: "X_CSI_VSPHERE_HOSTNAME"
+ value: $VSPHERE_FC_HOST_NAME
+ # X_CSI_VCENTER_HOST: URL/endpoint of the vCenter where all the ESX are present
+ # Allowed value: valid vCenter host endpoint
+ # Default value: ""
+ - name: "X_CSI_VCENTER_HOST"
+ value: $VSPHERE_VCENTER_HOST
+ controller:
+ envs:
+ # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin- volume usage, volume condition
+ # Allowed values:
+ # true: enable checking of health condition of CSI volumes
+ # false: disable checking of health condition of CSI volumes
+ # Default value: false
+ - name: X_CSI_HEALTH_MONITOR_ENABLED
+ value: "$HEALTH_MONITOR_ENABLED"
+ # nodeSelector: Define node selection constraints for controller pods.
+ # For the pod to be eligible to run on a node, the node must have each
+ # of the indicated key-value pairs as labels.
+ # Leave as blank to consider all nodes
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ nodeSelector: $NODE_POD_NODE_SELECTOR
+ # Uncomment if nodes you wish to use have the node-role.kubernetes.io/control-plane taint
+ # node-role.kubernetes.io/control-plane: ""
+
+ # tolerations: Define tolerations that would be applied to controller deployment
+ # Leave as blank to install controller on worker nodes
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ tolerations: $NODE_TOLERATIONS
+ # Uncomment if nodes you wish to use have the node-role.kubernetes.io/control-plane taint
+ # - key: "node-role.kubernetes.io/control-plane"
+ # operator: "Exists"
+ # effect: "NoSchedule"
+ node:
+ envs:
+ # X_CSI_POWERMAX_ISCSI_ENABLE_CHAP: Determine if the driver is going to configure
+ # ISCSI node databases on the nodes with the CHAP credentials
+ # If enabled, the CHAP secret must be provided in the credentials secret
+ # and set to the key "chapsecret"
+ # Allowed values:
+ # "true" - CHAP is enabled
+ # "false" - CHAP is disabled
+ # Default value: "false"
+ - name: X_CSI_POWERMAX_ISCSI_ENABLE_CHAP
+ value: $ISCSI_CHAP_ENABLED
+ # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin- volume usage, volume condition
+ # Allowed values:
+ # true: enable checking of health condition of CSI volumes
+ # false: disable checking of health condition of CSI volumes
+ # Default value: false
+ - name: X_CSI_HEALTH_MONITOR_ENABLED
+ value: "$HEALTH_MONITOR_ENABLED"
+ # X_CSI_TOPOLOGY_CONTROL_ENABLED provides a way to filter topology keys on a node based on array and transport protocol
+ # if enabled, user can create custom topology keys by editing node-topology-config configmap.
+ # Allowed values:
+ # true: enable the filtration based on config map
+ # false: disable the filtration based on config map
+ # Default value: false
+ - name: X_CSI_TOPOLOGY_CONTROL_ENABLED
+ value: $TOPOLOGY_ENABLED
+ # nodeSelector: Define node selection constraints for node pods.
+ # For the pod to be eligible to run on a node, the node must have each
+ # of the indicated key-value pairs as labels.
+ # Leave as blank to consider all nodes
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ nodeSelector: $NODE_POD_NODE_SELECTOR
+ # Uncomment if nodes you wish to use have the node-role.kubernetes.io/control-plane taint
+ # node-role.kubernetes.io/control-plane: ""
+
+ # tolerations: Define tolerations that would be applied to node daemonset
+ # Add/Remove tolerations as per requirement
+ # Leave as blank if you wish to not apply any tolerations
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ tolerations:
+ - key: "node.kubernetes.io/memory-pressure"
+ operator: "Exists"
+ effect: "NoExecute"
+ - key: "node.kubernetes.io/disk-pressure"
+ operator: "Exists"
+ effect: "NoExecute"
+ - key: "node.kubernetes.io/network-unavailable"
+ operator: "Exists"
+ effect: "NoExecute"
+ sideCars:
+ # health monitor is disabled by default, refer to driver documentation before enabling it
+ - name: external-health-monitor
+ enabled: $HEALTH_MONITOR_ENABLED
+ args: [ "--monitor-interval=60s" ]
+
+ modules:
+ # CSI Powermax Reverseproxy is a mandatory module for Powermax
+ - name: csireverseproxy
+ # enabled: Always set to true
+ enabled: true
+ configVersion: v2.6.0
+ forceRemoveModule: true
+ components:
+ - name: csipowermax-reverseproxy
+ # image: Define the container images used for the reverse proxy
+ # Default value: None
+ # Example: "csipowermax-reverseproxy:v2.6.0"
+ image: dellemc/csipowermax-reverseproxy:v2.6.0
+ envs:
+ # "tlsSecret" defines the TLS secret that is created with certificate
+ # and its associated key
+ # Default value: None
+ # Example: "tls-secret"
+ - name: X_CSI_REVPROXY_TLS_SECRET
+ value: "csirevproxy-tls-secret"
+ - name: X_CSI_REVPROXY_PORT
+ value: "2222"
+ - name: X_CSI_CONFIG_MAP_NAME
+ value: "powermax-reverseproxy-config"
+
+ # Authorization: enable csm-authorization for RBAC
+ - name: authorization
+ # enabled: Enable/Disable csm-authorization
+ enabled: $AUTHORIZATION_ENABLED
+ configVersion: v1.7.0
+ components:
+ - name: karavi-authorization-proxy
+ image: dellemc/csm-authorization-sidecar:v1.7.0
+ envs:
+ # proxyHost: hostname of the csm-authorization server
+ - name: "PROXY_HOST"
+ value: $AUTHORIZATION_PROXY_HOST
+ # skipCertificateValidation: Enable/Disable certificate validation of the csm-authorization server
+ - name: "SKIP_CERTIFICATE_VALIDATION"
+ value: $AUTHORIZATION_SKIP_CERTIFICATE_VALIDATION
+
+ # Replication: allows configuring replication module
+ # Replication CRDs must be installed before installing driver
+ - name: replication
+ # enabled: Enable/Disable replication feature
+ # Allowed values:
+ # true: enable replication feature(install dell-csi-replicator sidecar)
+ # false: disable replication feature(do not install dell-csi-replicator sidecar)
+ # Default value: false
+ enabled: $REPLICATION_ENABLED
+ configVersion: v1.5.0
+ components:
+ - name: dell-csi-replicator
+ # image: Image to use for dell-csi-replicator. This shouldn't be changed
+ # Allowed values: string
+ # Default value: None
+ image: dellemc/dell-csi-replicator:v1.5.0
+ envs:
+ # replicationPrefix: prefix to prepend to storage classes parameters
+ # Allowed values: string
+ # Default value: replication.storage.dell.com
+ - name: "X_CSI_REPLICATION_PREFIX"
+ value: "replication.storage.dell.com"
+ # replicationContextPrefix: prefix to use for naming of resources created by replication feature
+ # Allowed values: string
+ # Default value: powermax
+ - name: "X_CSI_REPLICATION_CONTEXT_PREFIX"
+ value: "powermax"
+
+ - name: dell-replication-controller-manager
+ # image: Defines controller image. This shouldn't be changed
+ # Allowed values: string
+ image: dellemc/dell-replication-controller:v1.5.0
+ envs:
+ # TARGET_CLUSTERS_IDS: comma separated list of cluster IDs of the targets clusters. DO NOT include the source(wherever CSM Operator is deployed) cluster ID
+ # Set the value to "self" in case of stretched/single cluster configuration
+ # Allowed values: string
+ - name: "TARGET_CLUSTERS_IDS"
+ value: "$TARGET_CLUSTER_ID"
+ # Replication log level
+ # Allowed values: "error", "warn"/"warning", "info", "debug"
+ # Default value: "debug"
+ - name: "REPLICATION_CTRL_LOG_LEVEL"
+ value: "debug"
+ # replicas: Defines number of controller replicas
+ # Allowed values: int
+ # Default value: 1
+ - name: "REPLICATION_CTRL_REPLICAS"
+ value: "1"
+ # retryIntervalMin: Initial retry interval of failed reconcile request.
+ # It doubles with each failure, upto retry-interval-max
+ # Allowed values: time
+ - name: "RETRY_INTERVAL_MIN"
+ value: "1s"
+ # RETRY_INTERVAL_MAX: Maximum retry interval of failed reconcile request
+ # Allowed values: time
+ - name: "RETRY_INTERVAL_MAX"
+ value: "5m"
+
+ - name: dell-replication-controller-init
+ # image: Defines replication init container image. This shouldn't be changed
+ # Allowed values: string
+ image: dellemc/dell-replication-init:v1.0.1
diff --git a/content/docs/deployment/csminstallationwizard/src/templates/operator/csm-powermax-1.8.0.template b/content/docs/deployment/csminstallationwizard/src/templates/operator/csm-powermax-1.8.0.template
new file mode 100644
index 0000000000..1847973954
--- /dev/null
+++ b/content/docs/deployment/csminstallationwizard/src/templates/operator/csm-powermax-1.8.0.template
@@ -0,0 +1,405 @@
+#
+# Copyright © 2023 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+# Licensed under the Apache 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://www.apache.org/licenses/LICENSE-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.
+#
+#
+apiVersion: storage.dell.com/v1
+kind: ContainerStorageModule
+metadata:
+ name: powermax
+ namespace: $NAMESPACE
+spec:
+ # Add fields here
+ driver:
+ csiDriverType: "powermax"
+ csiDriverSpec:
+ # fsGroupPolicy: Defines if the underlying volume supports changing ownership and permission of the volume before being mounted.
+ # Allowed values: ReadWriteOnceWithFSType, File , None
+ # Default value: ReadWriteOnceWithFSType
+ fSGroupPolicy: "$FSGROUP_POLICY"
+ # storageCapacity: Helps the scheduler to schedule the pod on a node satisfying the topology constraints, only if the requested capacity is available on the storage array
+ # Allowed values:
+ # true: enable storage capacity tracking
+ # false: disable storage capacity tracking
+ storageCapacity: $STORAGE_CAPACITY_ENABLED
+ # Config version for CSI PowerMax v2.8.0 driver
+ configVersion: v2.8.0
+ # replica: Define the number of PowerMax controller nodes
+ # to deploy to the Kubernetes release
+ # Allowed values: n, where n > 0
+ # Default value: None
+ replicas: $CONTROLLER_COUNT
+ # Default credential secret for Powermax, if not set it to ""
+ authSecret: powermax-creds
+ dnsPolicy: ClusterFirstWithHostNet
+ forceUpdate: false
+ forceRemoveDriver: true
+ common:
+ # Image for CSI PowerMax driver v2.8.0
+ image: dellemc/csi-powermax:v2.8.0
+ # imagePullPolicy: Policy to determine if the image should be pulled prior to starting the container.
+ # Allowed values:
+ # Always: Always pull the image.
+ # IfNotPresent: Only pull the image if it does not already exist on the node.
+ # Never: Never pull the image.
+ # Default value: None
+ imagePullPolicy: IfNotPresent
+ envs:
+ # X_CSI_MANAGED_ARRAYS: Serial ID of the arrays that will be used for provisioning
+ # Default value: None
+ # Examples: "000000000001", "000000000002"
+ - name: X_CSI_MANAGED_ARRAYS
+ value: $POWERMAX_MANAGE_ARRAY_ID
+ # X_CSI_POWERMAX_ENDPOINT: Address of the Unisphere server that is managing the PowerMax arrays
+ # In case of multi-array, provide an endpoint of locally attached array
+ # Default value: None
+ # Example: https://0.0.0.1:8443
+ - name: X_CSI_POWERMAX_ENDPOINT
+ value: $POWERMAX_MANAGE_ARRAY_ENDPOINT_URL
+ # X_CSI_K8S_CLUSTER_PREFIX: Define a prefix that is appended onto
+ # all resources created in the Array
+ # This should be unique per K8s/CSI deployment
+ # maximum length of this value is 3 characters
+ # Default value: None
+ # Examples: "XYZ", "EMC"
+ - name: X_CSI_K8S_CLUSTER_PREFIX
+ value: $POWERMAX_CLUSTER_PREFIX
+ # Specify kubelet config dir path.
+ # Ensure that the config.yaml file is present at this path.
+ # Default value: None
+ - name: KUBELET_CONFIG_DIR
+ value: /var/lib/kubelet
+ # X_CSI_POWERMAX_PORTGROUPS: Define the set of existing port groups that the driver will use.
+ # It is a comma separated list of portgroup names.
+ # Required only in case of iSCSI port groups
+ # Allowed values: iSCSI Port Group names
+ # Default value: None
+ # Examples: "pg1", "pg1, pg2"
+ - name: X_CSI_POWERMAX_PORTGROUPS
+ value: $POWERMAX_PORT_GROUPS
+ # "X_CSI_TRANSPORT_PROTOCOL" can be "FC" or "FIBRE" for fibrechannel,
+ # "ISCSI" for iSCSI, or "" for autoselection.
+ # Allowed values:
+ # "FC" - Fiber Channel protocol
+ # "FIBER" - Fiber Channel protocol
+ # "ISCSI" - iSCSI protocol
+ # "" - Automatic selection of transport protocol
+ # Default value: ""
+ - name: X_CSI_TRANSPORT_PROTOCOL
+ value: $NODE_TRANSPORT_PROTOCOL
+ # X_CSI_POWERMAX_PROXY_SERVICE_NAME: Refers to the name of the proxy service in kubernetes
+ # Allowed values: "csipowermax-reverseproxy"
+ # default values: "csipowermax-reverseproxy"
+ - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME
+ value: "csipowermax-reverseproxy"
+ # VMware/vSphere virtualization support
+ # set X_CSI_VSPHERE_ENABLED to true, if you to enable VMware virtualized environment support via RDM
+ # Allowed values:
+ # "true" - vSphere volumes are enabled
+ # "false" - vSphere volumes are disabled
+ # Default value: "false"
+ - name: "X_CSI_VSPHERE_ENABLED"
+ value: $VSPHERE_ENABLED
+ # X_CSI_VSPHERE_PORTGROUP: An existing portGroup that driver will use for vSphere
+ # recommended format: csi-x-VC-PG, x can be anything of user choice
+ # Allowed value: valid existing port group on the array
+ # Default value: ""
+ - name: "X_CSI_VSPHERE_PORTGROUP"
+ value: $VSPHERE_FC_PORT_GROUP
+ # X_CSI_VSPHERE_HOSTNAME: An existing host(initiator group)/ host group(cascaded initiator group) that driver will use for vSphere
+ # this host should contain initiators from all the ESXs/ESXi host where the cluster is deployed
+ # recommended format: csi-x-VC-HN, x can be anything of user choice
+ # Allowed value: valid existing host/host group on the array
+ # Default value: ""
+ - name: "X_CSI_VSPHERE_HOSTNAME"
+ value: $VSPHERE_FC_HOST_NAME
+ # X_CSI_VCENTER_HOST: URL/endpoint of the vCenter where all the ESX are present
+ # Allowed value: valid vCenter host endpoint
+ # Default value: ""
+ - name: "X_CSI_VCENTER_HOST"
+ value: $VSPHERE_VCENTER_HOST
+ controller:
+ envs:
+ # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin- volume usage, volume condition
+ # Allowed values:
+ # true: enable checking of health condition of CSI volumes
+ # false: disable checking of health condition of CSI volumes
+ # Default value: false
+ - name: X_CSI_HEALTH_MONITOR_ENABLED
+ value: "$HEALTH_MONITOR_ENABLED"
+ # nodeSelector: Define node selection constraints for controller pods.
+ # For the pod to be eligible to run on a node, the node must have each
+ # of the indicated key-value pairs as labels.
+ # Leave as blank to consider all nodes
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ nodeSelector: $NODE_POD_NODE_SELECTOR
+ # Uncomment if nodes you wish to use have the node-role.kubernetes.io/control-plane taint
+ # node-role.kubernetes.io/control-plane: ""
+
+ # tolerations: Define tolerations that would be applied to controller deployment
+ # Leave as blank to install controller on worker nodes
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ tolerations: $NODE_TOLERATIONS
+ # Uncomment if nodes you wish to use have the node-role.kubernetes.io/control-plane taint
+ # - key: "node-role.kubernetes.io/control-plane"
+ # operator: "Exists"
+ # effect: "NoSchedule"
+ node:
+ envs:
+ # X_CSI_POWERMAX_ISCSI_ENABLE_CHAP: Determine if the driver is going to configure
+ # ISCSI node databases on the nodes with the CHAP credentials
+ # If enabled, the CHAP secret must be provided in the credentials secret
+ # and set to the key "chapsecret"
+ # Allowed values:
+ # "true" - CHAP is enabled
+ # "false" - CHAP is disabled
+ # Default value: "false"
+ - name: X_CSI_POWERMAX_ISCSI_ENABLE_CHAP
+ value: $ISCSI_CHAP_ENABLED
+ # X_CSI_HEALTH_MONITOR_ENABLED: Enable/Disable health monitor of CSI volumes from node plugin- volume usage, volume condition
+ # Allowed values:
+ # true: enable checking of health condition of CSI volumes
+ # false: disable checking of health condition of CSI volumes
+ # Default value: false
+ - name: X_CSI_HEALTH_MONITOR_ENABLED
+ value: "$HEALTH_MONITOR_ENABLED"
+ # X_CSI_TOPOLOGY_CONTROL_ENABLED provides a way to filter topology keys on a node based on array and transport protocol
+ # if enabled, user can create custom topology keys by editing node-topology-config configmap.
+ # Allowed values:
+ # true: enable the filtration based on config map
+ # false: disable the filtration based on config map
+ # Default value: false
+ - name: X_CSI_TOPOLOGY_CONTROL_ENABLED
+ value: $TOPOLOGY_ENABLED
+ # nodeSelector: Define node selection constraints for node pods.
+ # For the pod to be eligible to run on a node, the node must have each
+ # of the indicated key-value pairs as labels.
+ # Leave as blank to consider all nodes
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ nodeSelector: $NODE_POD_NODE_SELECTOR
+ # Uncomment if nodes you wish to use have the node-role.kubernetes.io/control-plane taint
+ # node-role.kubernetes.io/control-plane: ""
+
+ # tolerations: Define tolerations that would be applied to node daemonset
+ # Add/Remove tolerations as per requirement
+ # Leave as blank if you wish to not apply any tolerations
+ # Allowed values: map of key-value pairs
+ # Default value: None
+ tolerations:
+ - key: "node.kubernetes.io/memory-pressure"
+ operator: "Exists"
+ effect: "NoExecute"
+ - key: "node.kubernetes.io/disk-pressure"
+ operator: "Exists"
+ effect: "NoExecute"
+ - key: "node.kubernetes.io/network-unavailable"
+ operator: "Exists"
+ effect: "NoExecute"
+ sideCars:
+ # health monitor is disabled by default, refer to driver documentation before enabling it
+ - name: external-health-monitor
+ enabled: $HEALTH_MONITOR_ENABLED
+ args: [ "--monitor-interval=60s" ]
+
+ # Uncomment the following to configure how often external-provisioner polls the driver to detect changed capacity
+ # Configure only when the storageCapacity is set as "true"
+ # Allowed values: 1m,2m,3m,...,10m,...,60m etc. Default value: 5m
+ #- name: provisioner
+ # args: ["--capacity-poll-interval=5m"]
+
+ modules:
+ # CSI Powermax Reverseproxy is a mandatory module for Powermax
+ - name: csireverseproxy
+ # enabled: Always set to true
+ enabled: true
+ configVersion: v2.6.0
+ forceRemoveModule: true
+ components:
+ - name: csipowermax-reverseproxy
+ # image: Define the container images used for the reverse proxy
+ # Default value: None
+ # Example: "csipowermax-reverseproxy:v2.6.0"
+ image: dellemc/csipowermax-reverseproxy:v2.6.0
+ envs:
+ # "tlsSecret" defines the TLS secret that is created with certificate
+ # and its associated key
+ # Default value: None
+ # Example: "tls-secret"
+ - name: X_CSI_REVPROXY_TLS_SECRET
+ value: "csirevproxy-tls-secret"
+ - name: X_CSI_REVPROXY_PORT
+ value: "2222"
+ - name: X_CSI_CONFIG_MAP_NAME
+ value: "powermax-reverseproxy-config"
+
+ # Authorization: enable csm-authorization for RBAC
+ - name: authorization
+ # enabled: Enable/Disable csm-authorization
+ enabled: $AUTHORIZATION_ENABLED
+ configVersion: v1.7.0
+ components:
+ - name: karavi-authorization-proxy
+ image: dellemc/csm-authorization-sidecar:v1.7.0
+ envs:
+ # proxyHost: hostname of the csm-authorization server
+ - name: "PROXY_HOST"
+ value: $AUTHORIZATION_PROXY_HOST
+ # skipCertificateValidation: Enable/Disable certificate validation of the csm-authorization server
+ - name: "SKIP_CERTIFICATE_VALIDATION"
+ value: $AUTHORIZATION_SKIP_CERTIFICATE_VALIDATION
+
+ # Replication: allows configuring replication module
+ # Replication CRDs must be installed before installing driver
+ - name: replication
+ # enabled: Enable/Disable replication feature
+ # Allowed values:
+ # true: enable replication feature(install dell-csi-replicator sidecar)
+ # false: disable replication feature(do not install dell-csi-replicator sidecar)
+ # Default value: false
+ enabled: $REPLICATION_ENABLED
+ configVersion: v1.5.0
+ components:
+ - name: dell-csi-replicator
+ # image: Image to use for dell-csi-replicator. This shouldn't be changed
+ # Allowed values: string
+ # Default value: None
+ image: dellemc/dell-csi-replicator:v1.5.0
+ envs:
+ # replicationPrefix: prefix to prepend to storage classes parameters
+ # Allowed values: string
+ # Default value: replication.storage.dell.com
+ - name: "X_CSI_REPLICATION_PREFIX"
+ value: "replication.storage.dell.com"
+ # replicationContextPrefix: prefix to use for naming of resources created by replication feature
+ # Allowed values: string
+ # Default value: powermax
+ - name: "X_CSI_REPLICATION_CONTEXT_PREFIX"
+ value: "powermax"
+
+ - name: dell-replication-controller-manager
+ # image: Defines controller image. This shouldn't be changed
+ # Allowed values: string
+ image: dellemc/dell-replication-controller:v1.5.0
+ envs:
+ # TARGET_CLUSTERS_IDS: comma separated list of cluster IDs of the targets clusters. DO NOT include the source(wherever CSM Operator is deployed) cluster ID
+ # Set the value to "self" in case of stretched/single cluster configuration
+ # Allowed values: string
+ - name: "TARGET_CLUSTERS_IDS"
+ value: $TARGET_CLUSTER_ID
+ # Replication log level
+ # Allowed values: "error", "warn"/"warning", "info", "debug"
+ # Default value: "debug"
+ - name: "REPLICATION_CTRL_LOG_LEVEL"
+ value: "debug"
+ # replicas: Defines number of controller replicas
+ # Allowed values: int
+ # Default value: 1
+ - name: "REPLICATION_CTRL_REPLICAS"
+ value: "1"
+ # retryIntervalMin: Initial retry interval of failed reconcile request.
+ # It doubles with each failure, upto retry-interval-max
+ # Allowed values: time
+ - name: "RETRY_INTERVAL_MIN"
+ value: "1s"
+ # RETRY_INTERVAL_MAX: Maximum retry interval of failed reconcile request
+ # Allowed values: time
+ - name: "RETRY_INTERVAL_MAX"
+ value: "5m"
+
+ - name: dell-replication-controller-init
+ # image: Defines replication init container image. This shouldn't be changed
+ # Allowed values: string
+ image: dellemc/dell-replication-init:v1.0.1
+ # observability: allows to configure observability
+ - name: observability
+ # enabled: Enable/Disable observability
+ enabled: $OBSERVABILITY_OPERATOR_ENABLED
+ configVersion: v1.5.0
+ components:
+ - name: topology
+ # enabled: Enable/Disable topology
+ enabled: $OBSERVABILITY_OPERATOR_TOPOLOGY
+ # image: Defines karavi-topology image. This shouldn't be changed
+ # Allowed values: string
+ image: dellemc/csm-topology:v1.5.0
+ envs:
+ # topology log level
+ # Valid values: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC
+ # Default value: "INFO"
+ - name: "TOPOLOGY_LOG_LEVEL"
+ value: "INFO"
+
+ - name: otel-collector
+ # enabled: Enable/Disable OpenTelemetry Collector
+ enabled: $OBSERVABILITY_OPERATOR_OTEL
+ # image: Defines otel-collector image. This shouldn't be changed
+ # Allowed values: string
+ image: otel/opentelemetry-collector:0.42.0
+ envs:
+ # image of nginx proxy image
+ # Allowed values: string
+ # Default value: "nginxinc/nginx-unprivileged:1.20"
+ - name: "NGINX_PROXY_IMAGE"
+ value: "nginxinc/nginx-unprivileged:1.20"
+
+ - name: metrics-powermax
+ # enabled: Enable/Disable PowerMax metrics
+ enabled: $OBSERVABILITY_OPERATOR_METRICS
+ # image: Defines PowerMax metrics image. This shouldn't be changed
+ image: dellemc/csm-metrics-powermax:v1.0.0
+ envs:
+ # POWERMAX_MAX_CONCURRENT_QUERIES: set the default max concurrent queries to PowerMax
+ # Allowed values: int
+ # Default value: 10
+ - name: "POWERMAX_MAX_CONCURRENT_QUERIES"
+ value: "10"
+ # POWERMAX_CAPACITY_METRICS_ENABLED: enable/disable collection of capacity metrics
+ # Allowed values: ture, false
+ # Default value: true
+ - name: "POWERMAX_CAPACITY_METRICS_ENABLED"
+ value: "true"
+ # POWERMAX_PERFORMANCE_METRICS_ENABLED: enable/disable collection of volume performance metrics
+ # Allowed values: ture, false
+ # Default value: true
+ - name: "POWERMAX_PERFORMANCE_METRICS_ENABLED"
+ value: "true"
+ # POWERMAX_CAPACITY_POLL_FREQUENCY: set polling frequency to get capacity metrics data
+ # Allowed values: int
+ # Default value: 10
+ - name: "POWERMAX_CAPACITY_POLL_FREQUENCY"
+ value: "10"
+ # POWERMAX_PERFORMANCE_POLL_FREQUENCY: set polling frequency to get volume performance data
+ # Allowed values: int
+ # Default value: 10
+ - name: "POWERMAX_PERFORMANCE_POLL_FREQUENCY"
+ value: "10"
+ # PowerMax metrics log level
+ # Valid values: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC
+ # Default value: "INFO"
+ - name: "POWERMAX_LOG_LEVEL"
+ value: "INFO"
+ # PowerMax Metrics Output logs in the specified format
+ # Valid values: TEXT, JSON
+ # Default value: "TEXT"
+ - name: "POWERMAX_LOG_FORMAT"
+ value: "TEXT"
+ # otel collector address
+ # Allowed values: String
+ # Default value: "otel-collector:55680"
+ - name: "COLLECTOR_ADDRESS"
+ value: "otel-collector:55680"
+ # configMap name which has all array/endpoint related info
+ - name: "X_CSI_CONFIG_MAP_NAME"
+ value: "powermax-reverseproxy-config"