func deploymentRunning(dc *deployapi.DeploymentConfig, rcs []kapi.ReplicationController, pods []kapi.Pod) (bool, error) { if len(rcs) == 0 { return false, nil } rc := rcs[len(rcs)-1] version := deployutil.DeploymentVersionFor(&rc) if version != dc.Status.LatestVersion { //e2e.Logf("deployment %s is not the latest version on DC: %d", rc.Name, version) return false, nil } status := rc.Annotations[deployapi.DeploymentStatusAnnotation] switch deployapi.DeploymentStatus(status) { case deployapi.DeploymentStatusFailed: if deployutil.IsDeploymentCancelled(&rc) { return true, nil } reason := deployutil.DeploymentStatusReasonFor(&rc) if reason == "deployer pod no longer exists" { return true, nil } return false, fmt.Errorf("deployment failed: %v", deployutil.DeploymentStatusReasonFor(&rc)) case deployapi.DeploymentStatusRunning, deployapi.DeploymentStatusComplete: return true, nil default: return false, nil } }
func deploymentReachedCompletion(dc *deployapi.DeploymentConfig, rcs []kapi.ReplicationController, pods []kapi.Pod) (bool, error) { if len(rcs) == 0 { return false, nil } rc := rcs[len(rcs)-1] version := deployutil.DeploymentVersionFor(&rc) if version != dc.Status.LatestVersion { return false, nil } status := rc.Annotations[deployapi.DeploymentStatusAnnotation] if deployapi.DeploymentStatus(status) != deployapi.DeploymentStatusComplete { return false, nil } expectedReplicas := dc.Spec.Replicas if dc.Spec.Test { expectedReplicas = 0 } if rc.Spec.Replicas != int32(expectedReplicas) { return false, fmt.Errorf("deployment is complete but doesn't have expected spec replicas: %d %d", rc.Spec.Replicas, expectedReplicas) } if rc.Status.Replicas != int32(expectedReplicas) { e2e.Logf("POSSIBLE_ANOMALY: deployment is complete but doesn't have expected status replicas: %d %d", rc.Status.Replicas, expectedReplicas) return false, nil } e2e.Logf("Latest rollout of dc/%s (rc/%s) is complete.", dc.Name, rc.Name) return true, nil }
// LatestDeploymentInfo returns info about the latest deployment for a config, // if it exists and its current status func LatestDeploymentInfo(config *deployapi.DeploymentConfig, deployments *api.ReplicationControllerList) (bool, deployapi.DeploymentStatus) { if config.LatestVersion == 0 || len(deployments.Items) == 0 { return false, deployapi.DeploymentStatus("") } sort.Sort(ByLatestVersionDesc(deployments.Items)) candidate := &deployments.Items[0] return DeploymentVersionFor(candidate) == config.LatestVersion, DeploymentStatusFor(candidate) }
func DeploymentStatusFor(obj runtime.Object) deployapi.DeploymentStatus { return deployapi.DeploymentStatus(annotationFor(obj, deployapi.DeploymentStatusAnnotation)) }
out, err := oc.Run("create").Args("-f", deploymentFixture).Output() o.Expect(err).NotTo(o.HaveOccurred()) out, err = oc.Run("logs").Args("-f", "dc/deployment-test").Output() o.Expect(err).NotTo(o.HaveOccurred()) g.By(fmt.Sprintf("checking the logs for substrings\n%s", out)) o.Expect(out).To(o.ContainSubstring("deployment-test-1 to 2")) o.Expect(out).To(o.ContainSubstring("Pre hook finished")) o.Expect(out).To(o.ContainSubstring("Deployment deployment-test-1 successfully made active")) g.By("verifying the deployment is marked complete and scaled to zero") err = wait.Poll(100*time.Millisecond, 1*time.Minute, func() (bool, error) { rc, err := oc.KubeREST().ReplicationControllers(oc.Namespace()).Get("deployment-test-1") o.Expect(err).NotTo(o.HaveOccurred()) status := rc.Annotations[deployapi.DeploymentStatusAnnotation] if deployapi.DeploymentStatus(status) != deployapi.DeploymentStatusComplete { return false, nil } if rc.Spec.Replicas != 0 { return false, nil } if rc.Status.Replicas != 0 { return false, nil } return true, nil }) o.Expect(err).NotTo(o.HaveOccurred()) g.By("verifying that scaling does not result in new pods") out, err = oc.Run("scale").Args("dc/deployment-test", "--replicas=1").Output() o.Expect(err).NotTo(o.HaveOccurred())