Skip to content

Commit

Permalink
PWX-32539: When preflight enables PX-storeV2 for vsphere. It should … (
Browse files Browse the repository at this point in the history
…#1167)

* PWX-32539: When preflight enables PX-storeV2 for vsphere.  It should add a default 'type=eagerzeroedthick,size=64' SystemMdDeviceSpec if none is provided.

Signed-off-by: Jose Rivera <jose@portworx.com>

* PWX-32539: Change name of default metadata drive const for AWS.

Signed-off-by: Jose Rivera <jose@portworx.com>

---------

Signed-off-by: Jose Rivera <jose@portworx.com>
  • Loading branch information
jrivera-px committed Jul 27, 2023
1 parent 6d1d0a1 commit bcdf1d0
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 4 deletions.
103 changes: 102 additions & 1 deletion drivers/storage/portworx/portworx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ func TestValidate(t *testing.T) {
<-recorder.Events // Pop first event which is Default telemetry enabled event
require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %s", v1.EventTypeNormal, util.PassPreFlight, "Enabling PX-StoreV2"))
require.Contains(t, *cluster.Spec.CloudStorage.SystemMdDeviceSpec, DefCmetaData)
require.Contains(t, *cluster.Spec.CloudStorage.SystemMdDeviceSpec, DefCmetaAWS)

//
// Validate Pre-flight Daemonset Pod Spec
Expand Down Expand Up @@ -408,6 +408,107 @@ func TestValidateMissingRequiredCheck(t *testing.T) {
fmt.Sprintf("%v %v %s", v1.EventTypeNormal, util.PassPreFlight, "Not enabling PX-StoreV2"))
}

func TestValidateVsphere(t *testing.T) {
driver := portworx{}
cluster := &corev1.StorageCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "px-cluster",
Namespace: "kube-test",
},
}

labels := map[string]string{
"name": pxPreFlightDaemonSetName,
}

// force vsphere
env := make([]v1.EnvVar, 1)
env[0].Name = "VSPHERE_VCENTER"
env[0].Value = "some.vcenter.server.com"
cluster.Spec.Env = env

clusterRef := metav1.NewControllerRef(cluster, pxutil.StorageClusterKind())
preflightDS := &appsv1.DaemonSet{
ObjectMeta: metav1.ObjectMeta{
Name: pxPreFlightDaemonSetName,
Namespace: cluster.Namespace,
Labels: labels,
UID: types.UID("preflight-ds-uid"),
OwnerReferences: []metav1.OwnerReference{*clusterRef},
},
Spec: appsv1.DaemonSetSpec{
Selector: &metav1.LabelSelector{
MatchLabels: labels,
},
},
}

checks := []corev1.CheckResult{
{
Type: "status",
Reason: "oci-mon: pre-flight completed",
Success: true,
},
}

status := corev1.NodeStatus{
Checks: checks,
}

storageNode := &corev1.StorageNode{
ObjectMeta: metav1.ObjectMeta{
Name: "node-1",
Namespace: cluster.Namespace,
OwnerReferences: []metav1.OwnerReference{*clusterRef},
},
Status: status,
}

preFlightPod1 := &v1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "preflight-1",
Namespace: cluster.Namespace,
OwnerReferences: []metav1.OwnerReference{{UID: preflightDS.UID}},
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
{
Name: "portworx",
Ready: true,
},
},
},
}

k8sClient := testutil.FakeK8sClient(preflightDS)

err := k8sClient.Create(context.TODO(), preFlightPod1)
require.NoError(t, err)

preflightDS.Status.DesiredNumberScheduled = int32(1)
err = k8sClient.Status().Update(context.TODO(), preflightDS)
require.NoError(t, err)

recorder := record.NewFakeRecorder(100)
err = driver.Init(k8sClient, runtime.NewScheme(), recorder)
require.NoError(t, err)

err = driver.SetDefaultsOnStorageCluster(cluster)
require.NoError(t, err)

err = k8sClient.Create(context.TODO(), storageNode)
require.NoError(t, err)

err = driver.Validate(cluster)
require.NoError(t, err)
require.Contains(t, cluster.Annotations[pxutil.AnnotationMiscArgs], "-T px-storev2")
require.NotEmpty(t, recorder.Events)
<-recorder.Events // Pop first event which is Default telemetry enabled event
require.Contains(t, <-recorder.Events,
fmt.Sprintf("%v %v %s", v1.EventTypeNormal, util.PassPreFlight, "Enabling PX-StoreV2"))
require.Contains(t, *cluster.Spec.CloudStorage.SystemMdDeviceSpec, DefCmetaVsphere)
}

func TestGetSelectorLabels(t *testing.T) {
driver := portworx{}
expectedLabels := map[string]string{"name": pxutil.DriverName}
Expand Down
11 changes: 8 additions & 3 deletions drivers/storage/portworx/preflight.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ const (
pxPreFlightDaemonSetName = "px-pre-flight"
// PxPreFlightServiceAccountName name of portworx pre flight service account
PxPreFlightServiceAccountName = "px-pre-flight"
// DefCmetaData default metadata cloud device for DMthin
DefCmetaData = "type=gp3,size=64"
// DefCmetaData default metadata cloud device for DMthin AWS
DefCmetaAWS = "type=gp3,size=64"
// DefCmetaVsphere default metadata cloud device for DMthin Vsphere
DefCmetaVsphere = "type=eagerzeroedthick,size=64"
)

// PreFlightPortworx provides a set of APIs to uninstall portworx
Expand Down Expand Up @@ -353,7 +355,10 @@ func (u *preFlightPortworx) processPassedChecks(recorder record.EventRecorder) {
}

if u.cluster.Spec.CloudStorage.SystemMdDeviceSpec == nil {
cmetaData := DefCmetaData
cmetaData := DefCmetaAWS
if pxutil.IsVsphere(u.cluster) {
cmetaData = DefCmetaVsphere
}
u.cluster.Spec.CloudStorage.SystemMdDeviceSpec = &cmetaData
}
}
Expand Down

0 comments on commit bcdf1d0

Please sign in to comment.