Skip to content

Commit 303cc37

Browse files
authored
PTX-25622 Add retry loop for validating AlertManager (#1645)
Signed-off-by: nikolaypopov <nikolay.popov86@gmail.com>
1 parent 09fcd70 commit 303cc37

1 file changed

Lines changed: 51 additions & 42 deletions

File tree

pkg/util/test/util.go

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1980,13 +1980,13 @@ func ConvertNodeListToNodeNameList(nodeList []v1.Node) []string {
19801980
func GetFullVersion() (*version.Version, string, error) {
19811981
k8sVersion, err := coreops.Instance().GetVersion()
19821982
if err != nil {
1983-
return nil, "", fmt.Errorf("unable to get kubernetes version: %v", err)
1983+
return nil, "", fmt.Errorf("unable to get kubernetes version, Err: %v", err)
19841984
}
19851985

19861986
kbVerRegex := regexp.MustCompile(`^(v\d+\.\d+\.\d+)(.*)`)
19871987
matches := kbVerRegex.FindStringSubmatch(k8sVersion.GitVersion)
19881988
if len(matches) < 2 {
1989-
return nil, "", fmt.Errorf("invalid kubernetes version received: %v", k8sVersion.GitVersion)
1989+
return nil, "", fmt.Errorf("invalid kubernetes version received [%v]", k8sVersion.GitVersion)
19901990
}
19911991

19921992
ver, err := version.NewVersion(matches[1])
@@ -4518,67 +4518,76 @@ func ValidateAlertManager(pxImageList map[string]string, cluster *corev1.Storage
45184518
// ValidateAlertManagerEnabled validates alert manager components are enabled/installed as expected
45194519
func ValidateAlertManagerEnabled(pxImageList map[string]string, cluster *corev1.StorageCluster, timeout, interval time.Duration) error {
45204520
// Validate Alert Manager statefulset, pods and images
4521-
logrus.Info("Validating AlertManager components")
4521+
logrus.Info("Validating AlertManager and its components..")
45224522
alertManagerSset := &appsv1.StatefulSet{
45234523
ObjectMeta: metav1.ObjectMeta{
45244524
Name: "alertmanager-portworx",
45254525
Namespace: cluster.Namespace,
45264526
},
45274527
}
4528-
if err := appops.Instance().ValidateStatefulSet(alertManagerSset, timeout); err != nil {
4529-
return err
4530-
}
45314528

4532-
alertManagerSset, err := appops.Instance().GetStatefulSet(alertManagerSset.Name, alertManagerSset.Namespace)
4529+
K8sVer1_22, _ := version.NewVersion("1.22")
4530+
kubeVersion, _, err := GetFullVersion()
45334531
if err != nil {
4534-
return err
4532+
return fmt.Errorf("failed to get full k8s versions, Err: %v", err)
45354533
}
45364534

4537-
pods, err := appops.Instance().GetStatefulSetPods(alertManagerSset)
4538-
if err != nil {
4539-
return err
4540-
}
4535+
t := func() (interface{}, bool, error) {
4536+
if err := appops.Instance().ValidateStatefulSet(alertManagerSset, timeout); err != nil {
4537+
return nil, true, err
4538+
}
45414539

4542-
if image, ok := pxImageList["alertManager"]; ok {
4543-
if err := validateContainerImageInsidePods(cluster, image, "alertmanager", &v1.PodList{Items: pods}); err != nil {
4544-
return err
4540+
alertManagerSset, err := appops.Instance().GetStatefulSet(alertManagerSset.Name, alertManagerSset.Namespace)
4541+
if err != nil {
4542+
return nil, true, err
45454543
}
4546-
} else {
4547-
return fmt.Errorf("failed to find image for telemetry")
4548-
}
45494544

4550-
K8sVer1_22, _ := version.NewVersion("1.22")
4551-
kubeVersion, _, err := GetFullVersion()
4552-
if err != nil {
4553-
return err
4554-
}
4545+
pods, err := appops.Instance().GetStatefulSetPods(alertManagerSset)
4546+
if err != nil {
4547+
return nil, true, err
4548+
}
45554549

4556-
// NOTE: Prometheus uses different images for k8s 1.22 and up then for 1.21 and below
4557-
var configReloaderImageName string
4558-
if kubeVersion != nil && kubeVersion.GreaterThanOrEqual(K8sVer1_22) {
4559-
value, ok := pxImageList["prometheusConfigReloader"]
4560-
if !ok {
4561-
return fmt.Errorf("failed to find image for prometheus config reloader")
4550+
if image, ok := pxImageList["alertManager"]; ok {
4551+
if err := validateContainerImageInsidePods(cluster, image, "alertmanager", &v1.PodList{Items: pods}); err != nil {
4552+
return nil, true, err
4553+
}
4554+
} else {
4555+
return nil, false, fmt.Errorf("failed to find image for alertmanager")
45624556
}
4563-
configReloaderImageName = value
4564-
} else {
4565-
value, ok := pxImageList["prometheusConfigMapReload"]
4566-
if !ok {
4567-
return fmt.Errorf("failed to find image for prometheus configmap reloader")
4557+
4558+
// NOTE: Prometheus uses different images for k8s 1.22 and up then for 1.21 and below
4559+
var configReloaderImageName string
4560+
if kubeVersion != nil && kubeVersion.GreaterThanOrEqual(K8sVer1_22) {
4561+
value, ok := pxImageList["prometheusConfigReloader"]
4562+
if !ok {
4563+
return nil, false, fmt.Errorf("failed to find image for prometheus config reloader")
4564+
}
4565+
configReloaderImageName = value
4566+
} else {
4567+
value, ok := pxImageList["prometheusConfigMapReload"]
4568+
if !ok {
4569+
return nil, false, fmt.Errorf("failed to find image for prometheus configmap reloader")
4570+
}
4571+
configReloaderImageName = value
45684572
}
4569-
configReloaderImageName = value
4570-
}
45714573

4572-
if err := validateContainerImageInsidePods(cluster, configReloaderImageName, "config-reloader", &v1.PodList{Items: pods}); err != nil {
4573-
return err
4574+
if err := validateContainerImageInsidePods(cluster, configReloaderImageName, "config-reloader", &v1.PodList{Items: pods}); err != nil {
4575+
return nil, true, err
4576+
}
4577+
4578+
// Verify alert manager services
4579+
if _, err := coreops.Instance().GetService("alertmanager-portworx", cluster.Namespace); err != nil {
4580+
return nil, true, fmt.Errorf("failed to get service alertmanager-portworx")
4581+
}
4582+
4583+
return nil, false, nil
45744584
}
45754585

4576-
// Verify alert manager services
4577-
if _, err := coreops.Instance().GetService("alertmanager-portworx", cluster.Namespace); err != nil {
4578-
return fmt.Errorf("failed to get service alertmanager-portworx")
4586+
if _, err := task.DoRetryWithTimeout(t, timeout, interval); err != nil {
4587+
return fmt.Errorf("failed to validate AlertManager and its components, Err: %v", err)
45794588
}
45804589

4581-
logrus.Infof("Alert manager is enabled and deployed")
4590+
logrus.Infof("Successfully validated that AlertManager is enabled and deployed")
45824591
return nil
45834592
}
45844593

0 commit comments

Comments
 (0)