github.com/operator-framework/operator-lifecycle-manager@v0.30.0/test/e2e/registry.go (about) 1 package e2e 2 3 import ( 4 "context" 5 "fmt" 6 "os/exec" 7 8 "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" 9 corev1 "k8s.io/api/core/v1" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 ) 12 13 // This module contains helper functions for copying images and creating image registries 14 // Use for tests that require manipulating images or use of custom container registries 15 16 const ( 17 registryImage = "registry:2.7.1" 18 registryName = "registry" 19 localFQDN = "localhost:5000" 20 ) 21 22 func createDockerRegistry(client operatorclient.ClientInterface, namespace string) (string, error) { 23 registry := &corev1.Pod{ 24 ObjectMeta: metav1.ObjectMeta{ 25 Name: registryName, 26 Namespace: namespace, 27 Labels: map[string]string{"name": registryName}, 28 }, 29 Spec: corev1.PodSpec{ 30 Containers: []corev1.Container{ 31 { 32 Name: registryName, 33 Image: registryImage, 34 Ports: []corev1.ContainerPort{ 35 { 36 HostPort: int32(5000), 37 ContainerPort: int32(5000), 38 }, 39 }, 40 }, 41 }, 42 }, 43 } 44 45 svc := &corev1.Service{ 46 ObjectMeta: metav1.ObjectMeta{ 47 Name: registryName, 48 Namespace: namespace, 49 }, 50 Spec: corev1.ServiceSpec{ 51 Selector: map[string]string{"name": registryName}, 52 Ports: []corev1.ServicePort{ 53 { 54 Port: int32(5000), 55 }, 56 }, 57 }, 58 } 59 60 _, err := client.KubernetesInterface().CoreV1().Pods(namespace).Create(context.TODO(), registry, metav1.CreateOptions{}) 61 if err != nil { 62 return "", fmt.Errorf("creating test registry: %s", err) 63 } 64 65 _, err = client.KubernetesInterface().CoreV1().Services(namespace).Create(context.TODO(), svc, metav1.CreateOptions{}) 66 if err != nil { 67 return "", fmt.Errorf("creating test registry: %s", err) 68 } 69 70 return localFQDN, nil 71 } 72 73 func deleteDockerRegistry(client operatorclient.ClientInterface, namespace string) { 74 _ = client.KubernetesInterface().CoreV1().Pods(namespace).Delete(context.TODO(), registryName, metav1.DeleteOptions{}) 75 _ = client.KubernetesInterface().CoreV1().Services(namespace).Delete(context.TODO(), registryName, metav1.DeleteOptions{}) 76 } 77 78 // port-forward registry pod port 5000 for local test 79 // port-forwarding ends when registry pod is deleted: no need for explicit port-forward stop 80 func registryPortForward(namespace string) error { 81 cmd := exec.Command("kubectl", "-n", namespace, "port-forward", "registry", "5000:5000") 82 err := cmd.Start() 83 if err != nil { 84 return fmt.Errorf("failed to exec %#v: %v", cmd.Args, err) 85 } 86 return nil 87 }