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  }