From 01c10d78bca30bb2945af3ed32ce5517ea64a0fa Mon Sep 17 00:00:00 2001 From: Heba Elayoty Date: Mon, 23 Jan 2023 16:22:06 -0800 Subject: [PATCH] validate instanceView state and provingingState Signed-off-by: Heba Elayoty --- pkg/provider/aci_test.go | 10 +++++++--- pkg/provider/containergroup_to_pod.go | 16 ++++++++++------ pkg/validation/validator.go | 9 +++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/pkg/provider/aci_test.go b/pkg/provider/aci_test.go index d291f235..9a2bc65c 100644 --- a/pkg/provider/aci_test.go +++ b/pkg/provider/aci_test.go @@ -40,6 +40,7 @@ var ( fakeRegion = getEnv("LOCATION", "westus2") creationTime = "2006-01-02 15:04:05.999999999 -0700 MST" azConfig auth.Config + runningState = "Running" ) func getEnv(key, fallback string) string { @@ -401,7 +402,10 @@ func TestGetPodsWithoutResourceRequestsLimits(t *testing.T) { }, Properties: &azaciv2.ContainerGroupPropertiesProperties{ ProvisioningState: &provisioning, - Containers: testsutil.CreateACIContainersListObj("Running", "Initializing", testsutil.CgCreationTime.Add(time.Second*2), testsutil.CgCreationTime.Add(time.Second*3), true, false, false), + Containers: testsutil.CreateACIContainersListObj(runningState, "Initializing", testsutil.CgCreationTime.Add(time.Second*2), testsutil.CgCreationTime.Add(time.Second*3), true, false, false), + InstanceView: &azaciv2.ContainerGroupPropertiesInstanceView{ + State: &runningState, + }, }, } var result []*azaciv2.ContainerGroup @@ -442,7 +446,7 @@ func TestGetPodWithoutResourceRequestsLimits(t *testing.T) { aciMocks.MockGetContainerGroupInfo = func(ctx context.Context, resourceGroup, namespace, name, nodeName string) (*azaciv2.ContainerGroup, error) { return testsutil.CreateContainerGroupObj(podName, podNamespace, "Succeeded", - testsutil.CreateACIContainersListObj("Running", "Initializing", + testsutil.CreateACIContainersListObj(runningState, "Initializing", testsutil.CgCreationTime.Add(time.Second*2), testsutil.CgCreationTime.Add(time.Second*3), false, false, false), "Succeeded"), nil @@ -450,7 +454,7 @@ func TestGetPodWithoutResourceRequestsLimits(t *testing.T) { aciMocks.MockGetContainerGroupList = func(ctx context.Context, resourceGroup string) ([]*azaciv2.ContainerGroup, error) { cg := testsutil.CreateContainerGroupObj(podName, podNamespace, "Succeeded", - testsutil.CreateACIContainersListObj("Running", "Initializing", + testsutil.CreateACIContainersListObj(runningState, "Initializing", testsutil.CgCreationTime.Add(time.Second*2), testsutil.CgCreationTime.Add(time.Second*3), false, false, false), "Succeeded") diff --git a/pkg/provider/containergroup_to_pod.go b/pkg/provider/containergroup_to_pod.go index 62718d40..aa4ecc45 100644 --- a/pkg/provider/containergroup_to_pod.go +++ b/pkg/provider/containergroup_to_pod.go @@ -42,11 +42,15 @@ func (p *ACIProvider) getPodStatusFromContainerGroup(ctx context.Context, cg *az // cg is validated allReady := true - var firstContainerStartTime, lastUpdateTime *time.Time + var firstContainerStartTime, lastUpdateTime time.Time containerStatuses := make([]v1.ContainerStatus, 0, len(cg.Properties.Containers)) containersList := cg.Properties.Containers + if len(containersList) == 0 { + firstContainerStartTime = time.Time{} + lastUpdateTime = time.Time{} + } for i := range containersList { err := validation.ValidateContainer(ctx, containersList[i]) logger.Debugf("container %s has missing fields. retrying the validation...", *containersList[i].Name) @@ -54,7 +58,7 @@ func (p *ACIProvider) getPodStatusFromContainerGroup(ctx context.Context, cg *az return nil, err } - firstContainerStartTime = containersList[i].Properties.InstanceView.CurrentState.StartTime + firstContainerStartTime = *containersList[i].Properties.InstanceView.CurrentState.StartTime lastUpdateTime = firstContainerStartTime containerStatus := v1.ContainerStatus{ @@ -74,8 +78,8 @@ func (p *ACIProvider) getPodStatusFromContainerGroup(ctx context.Context, cg *az } containerStartTime := containersList[i].Properties.InstanceView.CurrentState.StartTime - if containerStartTime.After(*lastUpdateTime) { - lastUpdateTime = containerStartTime + if containerStartTime.After(lastUpdateTime) { + lastUpdateTime = *containerStartTime } // Add to containerStatuses @@ -94,12 +98,12 @@ func (p *ACIProvider) getPodStatusFromContainerGroup(ctx context.Context, cg *az } return &v1.PodStatus{ Phase: getPodPhaseFromACIState(*aciState), - Conditions: getPodConditionsFromACIState(*aciState, creationTime, *lastUpdateTime, allReady), + Conditions: getPodConditionsFromACIState(*aciState, creationTime, lastUpdateTime, allReady), Message: "", Reason: "", HostIP: p.internalIP, PodIP: podIp, - StartTime: &metav1.Time{Time: *firstContainerStartTime}, + StartTime: &metav1.Time{Time: firstContainerStartTime}, ContainerStatuses: containerStatuses, }, nil } diff --git a/pkg/validation/validator.go b/pkg/validation/validator.go index 8d204340..19329f99 100644 --- a/pkg/validation/validator.go +++ b/pkg/validation/validator.go @@ -64,11 +64,20 @@ func ValidateContainerGroup(ctx context.Context, cg *azaciv2.ContainerGroup) err if cg.Tags == nil { return errors.Errorf("tags list cannot be nil for container group %s", *cg.Name) } + if cg.Properties.InstanceView == nil { + return errors.Errorf("InstanceView cannot be nil for container group %s", *cg.Name) + } + if cg.Properties.InstanceView.State == nil { + return errors.Errorf("InstanceView state cannot be nil for container group %s", *cg.Name) + } if cg.Properties.OSType != nil && *cg.Properties.OSType != azaciv2.OperatingSystemTypesWindows { if cg.Properties.IPAddress == nil { return errors.Errorf("IPAddress cannot be nil for container group %s", *cg.Name) } else { + if cg.Properties.ProvisioningState == nil { + return errors.Errorf("ProvisioningState cannot be nil for container group %s", *cg.Name) + } aciState := *cg.Properties.ProvisioningState if cg.Properties.IPAddress.IP == nil { if aciState == "Running" {