// ensureRegistryAcceptsSchema2 checks whether the registry is configured to accept manifests V2 schema 2 or // not. If the result doesn't match given accept argument, registry's deployment config is updated accordingly // and the function blocks until the registry is re-deployed and ready for new requests. func ensureRegistryAcceptsSchema2(oc *exutil.CLI, accept bool) error { ns := oc.Namespace() oc = oc.SetNamespace(kapi.NamespaceDefault).AsAdmin() defer oc.SetNamespace(ns) env, err := oc.Run("env").Args("dc/docker-registry", "--list").Output() if err != nil { return err } value := fmt.Sprintf("%s=%t", dockerregistryserver.AcceptSchema2EnvVar, accept) if strings.Contains(env, value) { if accept { g.By("docker-registry is already configured to accept schema 2") } else { g.By("docker-registry is already configured to refuse schema 2") } return nil } dc, err := oc.REST().DeploymentConfigs(kapi.NamespaceDefault).Get("docker-registry") if err != nil { return err } waitForVersion := dc.Status.LatestVersion + 1 g.By("configuring Docker registry to accept schema 2") err = oc.Run("env").Args("dc/docker-registry", value).Execute() if err != nil { return fmt.Errorf("failed to update registry's environment with %s: %v", &waitForVersion, err) } return exutil.WaitForRegistry(oc.AdminREST(), oc.AdminKubeREST(), &waitForVersion, oc) }
// deleteTestImagesAndStreams deletes test images built in current and shared // namespaces. It also deletes shared projects. func deleteTestImagesAndStreams(oc *exutil.CLI) { for _, projectName := range []string{ oc.Namespace() + "-s2", oc.Namespace() + "-s1", oc.Namespace() + "-shared", oc.Namespace(), } { g.By(fmt.Sprintf("Deleting images and image streams in project %q", projectName)) iss, err := oc.AdminREST().ImageStreams(projectName).List(kapi.ListOptions{}) if err != nil { continue } for _, is := range iss.Items { for _, history := range is.Status.Tags { for i := range history.Items { oc.AdminREST().Images().Delete(history.Items[i].Image) } } for _, tagRef := range is.Spec.Tags { switch tagRef.From.Kind { case "ImageStreamImage": _, id, err := imageapi.ParseImageStreamImageName(tagRef.From.Name) if err != nil { continue } oc.AdminREST().Images().Delete(id) } } } // let the extended framework take care of the current namespace if projectName != oc.Namespace() { g.By(fmt.Sprintf("Deleting project %q", projectName)) oc.AdminREST().Projects().Delete(projectName) } } }