Path: blob/main/install/installer/pkg/components/proxy/configmap.go
2501 views
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package proxy56import (7"bytes"8_ "embed"9"encoding/base64"10"fmt"11"text/template"1213"github.com/gitpod-io/gitpod/installer/pkg/common"14ideProxyComponent "github.com/gitpod-io/gitpod/installer/pkg/components/ide-proxy"15minioComponent "github.com/gitpod-io/gitpod/installer/pkg/components/minio"16openvsxproxy "github.com/gitpod-io/gitpod/installer/pkg/components/openvsx-proxy"1718"golang.org/x/crypto/bcrypt"19corev1 "k8s.io/api/core/v1"20metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"21"k8s.io/apimachinery/pkg/runtime"22"k8s.io/utils/pointer"23)2425//go:embed templates/configmap/vhost.docker-registry.tpl26var vhostDockerRegistry []byte2728//go:embed templates/configmap/vhost.empty.tpl29var vhostEmptyTmpl []byte3031//go:embed templates/configmap/vhost.minio.tpl32var vhostMinioTmpl []byte3334//go:embed templates/configmap/vhost.open-vsx.tpl35var vhostOpenVSXTmpl []byte3637//go:embed templates/configmap/vhost.ide-proxy.tpl38var ideProxyTmpl []byte3940type commonTpl struct {41Domain string42ReverseProxy string43}4445type dockerRegistryTpl struct {46Domain string47ReverseProxy string48Username string49Password string50}5152type openVSXTpl struct {53Domain string54RepoURL string55}5657func renderTemplate(tpl []byte, values interface{}) (*string, error) {58t, err := template.New("template").Parse(string(tpl))59if err != nil {60return nil, err61}6263var parsed bytes.Buffer64err = t.Execute(&parsed, values)65if err != nil {66return nil, err67}6869rendered := parsed.String()7071return &rendered, nil72}7374const kubeDomain = "svc.cluster.local"7576func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {77empty, err := renderTemplate(vhostEmptyTmpl, nil)78if err != nil {79return nil, err80}8182openVSX, err := renderTemplate(vhostOpenVSXTmpl, openVSXTpl{83Domain: ctx.Config.Domain,84RepoURL: fmt.Sprintf("openvsx-proxy.%s.%s:%d", ctx.Namespace, kubeDomain, openvsxproxy.ServicePort),85})86if err != nil {87return nil, err88}8990ideProxy, err := renderTemplate(ideProxyTmpl, commonTpl{91Domain: ctx.Config.Domain,92ReverseProxy: fmt.Sprintf("ide-proxy.%s.%s:%d", ctx.Namespace, kubeDomain, ideProxyComponent.ServicePort),93})94if err != nil {95return nil, err96}9798data := map[string]string{99"vhost.empty": *empty,100"vhost.open-vsx": *openVSX,101"vhost.ide-proxy": *ideProxy,102}103104if ctx.Config.ObjectStorage.CloudStorage == nil {105// Don't expose Minio if using cloud storage106minio, err := renderTemplate(vhostMinioTmpl, commonTpl{107Domain: ctx.Config.Domain,108ReverseProxy: fmt.Sprintf("minio.%s.%s:%d", ctx.Namespace, kubeDomain, minioComponent.ServiceConsolePort),109})110if err != nil {111return nil, err112}113data["vhost.minio"] = *minio114}115116if pointer.BoolDeref(ctx.Config.ContainerRegistry.InCluster, false) {117username := ctx.Values.InternalRegistryUsername118if username == "" {119return nil, fmt.Errorf("unknown value: internal registry username")120}121122password := ctx.Values.InternalRegistryPassword123if password == "" {124return nil, fmt.Errorf("unknown value: internal registry password")125}126127hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)128if err != nil {129return nil, err130}131132dockerRegistry, err := renderTemplate(vhostDockerRegistry, dockerRegistryTpl{133Domain: ctx.Config.Domain,134ReverseProxy: fmt.Sprintf("https://%s.%s.%s", common.DockerRegistryName, ctx.Namespace, kubeDomain),135Username: username,136Password: base64.StdEncoding.EncodeToString(hashedPassword),137})138if err != nil {139return nil, err140}141142data["vhost.docker-registry"] = *dockerRegistry143}144145return []runtime.Object{146&corev1.ConfigMap{147TypeMeta: common.TypeMetaConfigmap,148ObjectMeta: metav1.ObjectMeta{149Name: fmt.Sprintf("%s-config", Component),150Namespace: ctx.Namespace,151Labels: common.CustomizeLabel(ctx, Component, common.TypeMetaConfigmap),152Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaConfigmap),153},154Data: data,155},156}, nil157}158159160