blob: f1760693d33ba493273b0a7ddb6754eeff6cb4a1 [file] [log] [blame]
// Copyright Istio Authors.
//
// 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.
package verifier
import (
"fmt"
)
import (
appsv1 "k8s.io/api/apps/v1"
v1batch "k8s.io/api/batch/v1"
apimachinery_schema "k8s.io/apimachinery/pkg/runtime/schema"
)
import (
"github.com/apache/dubbo-go-pixiu/pkg/config"
"github.com/apache/dubbo-go-pixiu/pkg/config/schema/collections"
)
func verifyDeploymentStatus(deployment *appsv1.Deployment) error {
cond := getDeploymentCondition(deployment.Status, appsv1.DeploymentProgressing)
if cond != nil && cond.Reason == "ProgressDeadlineExceeded" {
return fmt.Errorf("deployment %q exceeded its progress deadline", deployment.Name)
}
if deployment.Spec.Replicas != nil && deployment.Status.UpdatedReplicas < *deployment.Spec.Replicas {
return fmt.Errorf("waiting for deployment %q rollout to finish: %d out of %d new replicas have been updated",
deployment.Name, deployment.Status.UpdatedReplicas, *deployment.Spec.Replicas)
}
if deployment.Status.Replicas > deployment.Status.UpdatedReplicas {
return fmt.Errorf("waiting for deployment %q rollout to finish: %d old replicas are pending termination",
deployment.Name, deployment.Status.Replicas-deployment.Status.UpdatedReplicas)
}
if deployment.Status.AvailableReplicas < deployment.Status.UpdatedReplicas {
return fmt.Errorf("waiting for deployment %q rollout to finish: %d of %d updated replicas are available",
deployment.Name, deployment.Status.AvailableReplicas, deployment.Status.UpdatedReplicas)
}
return nil
}
func getDeploymentCondition(status appsv1.DeploymentStatus, condType appsv1.DeploymentConditionType) *appsv1.DeploymentCondition {
for i := range status.Conditions {
c := status.Conditions[i]
if c.Type == condType {
return &c
}
}
return nil
}
func verifyJobPostInstall(job *v1batch.Job) error {
for _, c := range job.Status.Conditions {
if c.Type == v1batch.JobFailed {
return fmt.Errorf("the required Job %s/%s failed", job.Namespace, job.Name)
}
}
return nil
}
func findResourceInSpec(gvk apimachinery_schema.GroupVersionKind) string {
s, f := collections.All.FindByGroupVersionKind(config.GroupVersionKind{
Group: gvk.Group,
Version: gvk.Version,
Kind: gvk.Kind,
})
if !f {
return ""
}
return s.Resource().Plural()
}