From 1404f18e808a5f25135b5f10e7a7a327d74cf0ed Mon Sep 17 00:00:00 2001 From: Kristof Havasi Date: Wed, 30 Aug 2023 13:12:38 +0100 Subject: [PATCH] feat: add registry-secret param / envvar to allow setting custom private registry credentials in knative service manifest --- assets/knative/service.yaml.tmpl | 4 ++++ src/cli/cli.go | 2 ++ src/cli/flags.go | 7 +++++++ src/services/k8s/knative.go | 8 +++++++- src/services/project/project.go | 4 +++- 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/assets/knative/service.yaml.tmpl b/assets/knative/service.yaml.tmpl index 8c3abab..d64428d 100644 --- a/assets/knative/service.yaml.tmpl +++ b/assets/knative/service.yaml.tmpl @@ -6,6 +6,10 @@ metadata: spec: template: spec: + {{ if ne .RegistrySecret "" }} + imagePullSecrets: + - name: {{ .RegistrySecret }} + {{ end }} containers: - image: {{ .RemoteTag }} imagePullPolicy: Always diff --git a/src/cli/cli.go b/src/cli/cli.go index dedeac5..8dec28d 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -67,6 +67,7 @@ func (c *icli) init(cCtx *cli.Context) error { projectDirectory := cCtx.String(projectDirectoryFlag) absProjectDirectory, err := filepath.Abs(cCtx.String(projectDirectoryFlag)) registry := cCtx.String(repoNameFlag) + registrySecret := cCtx.String(registrySecretFlag) dockerFileName := cCtx.String(dockerFileNameFlag) if dockerFileName == "" { @@ -83,6 +84,7 @@ func (c *icli) init(cCtx *cli.Context) error { projectDirectory, cCtx.String(runtimeVersionFlag), version, + registrySecret, c.Resources, ) diff --git a/src/cli/flags.go b/src/cli/flags.go index 0def54b..eb56fcd 100644 --- a/src/cli/flags.go +++ b/src/cli/flags.go @@ -42,6 +42,7 @@ const ( dockerFileNameFlag string = "dockerfile-name" configFileFlag string = "config-file" namespaceFlag string = "namespace" + registrySecretFlag string = "registry-secret" stopOnBuildFlag string = "stop-on-build" stopOnPushFlag string = "stop-on-push" ) @@ -100,6 +101,12 @@ func InitFlags() flags { Required: true, Category: "deploy", }, + &cli.StringFlag{ + Name: registrySecretFlag, + EnvVars: []string{"INITIUM_REGISTRY_SECRET"}, + Required: false, + Category: "deploy", + }, }, Registry: []cli.Flag{ &cli.StringFlag{ diff --git a/src/services/k8s/knative.go b/src/services/k8s/knative.go index 7b6cd77..d5a959f 100644 --- a/src/services/k8s/knative.go +++ b/src/services/k8s/knative.go @@ -45,9 +45,15 @@ func loadManifest(project *project.Project, dockerImage docker.DockerImage) (*se return nil, fmt.Errorf("error reading the knative service yaml: %v", err) } + templateParams := map[string]interface{}{ + "Name": dockerImage.Name, + "RemoteTag": dockerImage.RemoteTag(), + "RegistrySecret": project.RegistrySecret, + } + output := &bytes.Buffer{} // TODO replace map[string]string{} with proper values - if err = template.Execute(output, dockerImage); err != nil { + if err = template.Execute(output, templateParams); err != nil { return nil, err } diff --git a/src/services/project/project.go b/src/services/project/project.go index fcadcd6..53eb04d 100644 --- a/src/services/project/project.go +++ b/src/services/project/project.go @@ -25,6 +25,7 @@ type Project struct { Directory string RuntimeVersion string DefaultRuntimeVersion string + RegistrySecret string Resources fs.FS } @@ -46,11 +47,12 @@ func GuessAppName() *string { return &name } -func New(name string, directory string, runtimeVersion string, version string, resources fs.FS) Project { +func New(name string, directory string, runtimeVersion string, version string, registrySecret string, resources fs.FS) Project { return Project{ Name: name, Directory: directory, RuntimeVersion: runtimeVersion, + RegistrySecret: registrySecret, Resources: resources, Version: version, }