// 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.Client().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.AdminClient(), oc.AdminKubeClient(), &waitForVersion, oc) }
func doesRegistryAcceptSchema2(oc *exutil.CLI) (bool, error) { ns := oc.Namespace() defer oc.SetNamespace(ns) env, err := oc.SetNamespace(kapi.NamespaceDefault).AsAdmin().Run("env").Args("dc/docker-registry", "--list").Output() if err != nil { return false, err } return strings.Contains(env, fmt.Sprintf("%s=true", dockerregistryserver.AcceptSchema2EnvVar)), nil }
func getRegistryStorageSize(oc *exutil.CLI) (int64, error) { ns := oc.Namespace() defer oc.SetNamespace(ns) out, err := oc.SetNamespace(kapi.NamespaceDefault).AsAdmin().Run("rsh").Args("dc/docker-registry", "du", "--bytes", "--summarize", "/registry/docker/registry").Output() if err != nil { return 0, err } m := regexp.MustCompile(`^\d+`).FindString(out) if len(m) == 0 { return 0, fmt.Errorf("failed to parse du output: %s", out) } size, err := strconv.ParseInt(m, 10, 64) if err != nil { return 0, fmt.Errorf("failed to parse du output: %s", m) } return size, nil }
func followDCLogs(oc *exutil.CLI, jenkinsNamespace string) { oc.SetNamespace(jenkinsNamespace) oc.Run("logs").Args("-f", "dc/jenkins").Execute() }