From 0822e0f93d758c53ce6c34c62e40c466308b7f59 Mon Sep 17 00:00:00 2001 From: Matias Frank Jensen Date: Thu, 14 Sep 2023 12:15:15 +0200 Subject: [PATCH 1/3] Automatically add a developer registry to the kind cluster when using 'Make kind-create' Also added new configuration necessary to interface with the developer docker registry --- Makefile | 9 +++++- cmd/rig-server/root.go | 3 +- cmd/rig/cmd/capsule/create_build.go | 5 ++-- cmd/rig/cmd/capsule/setup.go | 10 ++++--- deploy/charts/rig/templates/_config.tpl | 8 +++++- deploy/kind/create.sh | 13 +++++++++ deploy/registry/registry.yaml | 38 +++++++++++++++++++++++++ internal/config/types.go | 15 ++++++++-- internal/service/capsule/build.go | 18 +++++++++++- internal/service/capsule/service.go | 5 +++- 10 files changed, 109 insertions(+), 15 deletions(-) create mode 100755 deploy/kind/create.sh create mode 100644 deploy/registry/registry.yaml diff --git a/Makefile b/Makefile index fb93bab52..ba1073af7 100644 --- a/Makefile +++ b/Makefile @@ -140,13 +140,16 @@ deploy: ## ๐Ÿš€ Deploy to k8s context defined by $KUBECTX (default: kind-rig) --set image.tag=$(TAG) \ --set mongodb.enabled=true \ --set rig.telemetry.enabled=false \ + --set rig.cluster.dev_registry.enabled=true \ + --set rig.cluster.dev_registry.host="localhost:30000" \ + --set rig.cluster.dev_registry.cluster_host="rig-registry:5000" \ --create-namespace $(KUBECTL) rollout restart deployment -n rig-system rig .PHONY: kind-create kind-create: kind ## ๐Ÿ‹ Create kind cluster with rig dependencies $(KIND) get clusters | grep '^rig$$' || \ - $(KIND) create cluster --name rig + ./deploy/kind/create.sh $(KIND) .PHONY: kind-load kind-load: kind docker ## ๐Ÿ‹ Load docker image into kind cluster @@ -159,6 +162,10 @@ kind-deploy: kind kind-load deploy ## ๐Ÿ‹ Deploy rig to kind cluster kind-clean: ## ๐Ÿงน Clean kind cluster $(KIND) delete clusters rig +.PHONY: kind-registry +kind-registry: ## ๐Ÿงน Clean kind cluster + $(KUBECTL) apply -f ./deploy/registry/registry.yaml -n rig-system + ##@ Release .PHONY: release diff --git a/cmd/rig-server/root.go b/cmd/rig-server/root.go index 6bcbc39d1..2690738dc 100644 --- a/cmd/rig-server/root.go +++ b/cmd/rig-server/root.go @@ -10,9 +10,8 @@ import ( "github.com/rigdev/rig/internal/handler" "github.com/rigdev/rig/internal/handler/registry" "github.com/rigdev/rig/internal/service/operator" - "github.com/spf13/cobra" - pkg_service "github.com/rigdev/rig/pkg/service" + "github.com/spf13/cobra" "go.uber.org/dig" "go.uber.org/fx" "go.uber.org/fx/fxevent" diff --git a/cmd/rig/cmd/capsule/create_build.go b/cmd/rig/cmd/capsule/create_build.go index 509aa6065..4e96b8f56 100644 --- a/cmd/rig/cmd/capsule/create_build.go +++ b/cmd/rig/cmd/capsule/create_build.go @@ -23,8 +23,9 @@ func CapsuleCreateBuild(ctx context.Context, cmd *cobra.Command, args []string, var buildID string if res, err := nc.Capsule().CreateBuild(ctx, &connect.Request[capsule.CreateBuildRequest]{ Msg: &capsule.CreateBuildRequest{ - CapsuleId: capsuleID.String(), - Image: image, + CapsuleId: capsuleID.String(), + Image: image, + SkipImageCheck: skipImageCheck, }, }); err != nil { return err diff --git a/cmd/rig/cmd/capsule/setup.go b/cmd/rig/cmd/capsule/setup.go index 0c5a4a119..00c6711db 100644 --- a/cmd/rig/cmd/capsule/setup.go +++ b/cmd/rig/cmd/capsule/setup.go @@ -22,10 +22,11 @@ var ( ) var ( - deploy bool - follow bool - interactive bool - outputJSON bool + deploy bool + follow bool + interactive bool + outputJSON bool + skipImageCheck bool ) var ( @@ -70,6 +71,7 @@ func Setup(parent *cobra.Command) { } createBuild.Flags().StringVarP(&image, "image", "i", "", "image to use for the build") createBuild.Flags().BoolVarP(&deploy, "deploy", "d", false, "deploy build after successful creation") + createBuild.Flags().BoolVarP(&skipImageCheck, "skip-image-check", "s", false, "skip validating that the docker image exists") capsule.AddCommand(createBuild) deploy := &cobra.Command{ diff --git a/deploy/charts/rig/templates/_config.tpl b/deploy/charts/rig/templates/_config.tpl index 882923854..c3d23ac9d 100644 --- a/deploy/charts/rig/templates/_config.tpl +++ b/deploy/charts/rig/templates/_config.tpl @@ -29,6 +29,12 @@ client: {{- end }} cluster: type: k8s + {{- with .Values.rig.cluster.dev_registry }} + dev_registry: + enabled: {{ .enabled }} + host: {{ .host }} + cluster_host: {{ .cluster_host }} + {{- end }} {{- with .Values.rig.email }} email: type: {{ .type | quote }} @@ -36,7 +42,7 @@ email: {{- with .Values.rig.registry }} registry: enabled: {{ .enabled }} - port: {{ .port }} + port: {{ .registry_port }} log_level: {{ .log_level }} {{- end }} {{- end -}} diff --git a/deploy/kind/create.sh b/deploy/kind/create.sh new file mode 100755 index 000000000..550576b82 --- /dev/null +++ b/deploy/kind/create.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +cat < 0 { @@ -111,3 +112,18 @@ func (s *Service) validateImage(ctx context.Context, ref name.Reference) (string return d.String(), nil } + +func (s *Service) getLookupDockerRef(ref name.Reference) name.Reference { + cfg := s.cfg.Cluster.DevRegistry + if !cfg.Enabled || cfg.Host == "" || cfg.ClusterHost == "" { + return ref + } + + if ref.Context().RegistryStr() != cfg.Host { + return ref + } + + r, _ := name.NewRegistry(cfg.ClusterHost, name.Insecure) + repo := r.Repo(ref.Context().RepositoryStr()) + return repo.Tag(ref.Identifier()) +} diff --git a/internal/service/capsule/service.go b/internal/service/capsule/service.go index 10343bcf3..1b093d493 100644 --- a/internal/service/capsule/service.go +++ b/internal/service/capsule/service.go @@ -5,6 +5,7 @@ import ( "github.com/rigdev/rig-go-api/api/v1/capsule" "github.com/rigdev/rig-go-api/model" + "github.com/rigdev/rig/internal/config" "github.com/rigdev/rig/internal/gateway/cluster" "github.com/rigdev/rig/internal/repository" "github.com/rigdev/rig/internal/service/auth" @@ -24,9 +25,10 @@ type Service struct { as *auth.Service ps project.Service q *Queue[Job] + cfg config.Config } -func NewService(cr repository.Capsule, sr repository.Secret, cg cluster.Gateway, as *auth.Service, ps project.Service, logger *zap.Logger) *Service { +func NewService(cr repository.Capsule, sr repository.Secret, cg cluster.Gateway, as *auth.Service, ps project.Service, cfg config.Config, logger *zap.Logger) *Service { s := &Service{ cr: cr, sr: sr, @@ -34,6 +36,7 @@ func NewService(cr repository.Capsule, sr repository.Secret, cg cluster.Gateway, as: as, ps: ps, q: NewQueue[Job](), + cfg: cfg, logger: logger, } From 3a0b3688eb15b5057936f31741fbcb93796faa17 Mon Sep 17 00:00:00 2001 From: Matias Frank Jensen Date: Fri, 15 Sep 2023 13:24:59 +0200 Subject: [PATCH 2/3] Fixes to comments --- Makefile | 3 +-- deploy/registry/registry.yaml | 16 ++++++++-------- internal/config/types.go | 1 - internal/service/capsule/build.go | 20 +++++++++++++------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index ba1073af7..8639f0427 100644 --- a/Makefile +++ b/Makefile @@ -140,9 +140,8 @@ deploy: ## ๐Ÿš€ Deploy to k8s context defined by $KUBECTX (default: kind-rig) --set image.tag=$(TAG) \ --set mongodb.enabled=true \ --set rig.telemetry.enabled=false \ - --set rig.cluster.dev_registry.enabled=true \ --set rig.cluster.dev_registry.host="localhost:30000" \ - --set rig.cluster.dev_registry.cluster_host="rig-registry:5000" \ + --set rig.cluster.dev_registry.cluster_host="registry:5000" \ --create-namespace $(KUBECTL) rollout restart deployment -n rig-system rig diff --git a/deploy/registry/registry.yaml b/deploy/registry/registry.yaml index 34c640dd0..bf12ed5ad 100644 --- a/deploy/registry/registry.yaml +++ b/deploy/registry/registry.yaml @@ -2,21 +2,21 @@ apiVersion: apps/v1 kind: Deployment metadata: labels: - run: rig-registry - name: rig-registry + run: registry + name: registry namespace: rig-system spec: replicas: 1 selector: matchLabels: - run: rig-registry + run: registry template: metadata: labels: - run: rig-registry + run: registry spec: containers: - - name: rig-registry + - name: registry image: registry:2 ports: - containerPort: 5000 @@ -24,14 +24,14 @@ spec: apiVersion: v1 kind: Service metadata: - name: rig-registry + name: registry namespace: rig-system spec: type: NodePort selector: - run: rig-registry + run: registry ports: - - name: rig-registry-tcp + - name: registry-tcp nodePort: 30000 protocol: TCP port: 5000 diff --git a/internal/config/types.go b/internal/config/types.go index 7b22716d8..d9b9a05a2 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -117,7 +117,6 @@ type Cluster struct { } type DevRegistry struct { - Enabled bool `mapstructure:"enabled"` Host string `mapstructure:"host"` ClusterHost string `mapstructure:"cluster_host"` Size uint64 `mapstructure:"size"` diff --git a/internal/service/capsule/build.go b/internal/service/capsule/build.go index 2e0f6f8e8..5e1a3b650 100644 --- a/internal/service/capsule/build.go +++ b/internal/service/capsule/build.go @@ -87,7 +87,10 @@ func (s *Service) validateImage(ctx context.Context, ref name.Reference) (string })) } - lookupRef := s.getLookupDockerRef(ref) + lookupRef, err := s.getLookupDockerRef(ref) + if err != nil { + return "", err + } img, err := remote.Image(lookupRef, opts...) if err != nil { if terr, ok := err.(*transport.Error); ok { @@ -113,17 +116,20 @@ func (s *Service) validateImage(ctx context.Context, ref name.Reference) (string return d.String(), nil } -func (s *Service) getLookupDockerRef(ref name.Reference) name.Reference { +func (s *Service) getLookupDockerRef(ref name.Reference) (name.Reference, error) { cfg := s.cfg.Cluster.DevRegistry - if !cfg.Enabled || cfg.Host == "" || cfg.ClusterHost == "" { - return ref + if cfg.Host == "" || cfg.ClusterHost == "" { + return ref, nil } if ref.Context().RegistryStr() != cfg.Host { - return ref + return ref, nil } - r, _ := name.NewRegistry(cfg.ClusterHost, name.Insecure) + r, err := name.NewRegistry(cfg.ClusterHost, name.Insecure) + if err != nil { + return nil, err + } repo := r.Repo(ref.Context().RepositoryStr()) - return repo.Tag(ref.Identifier()) + return repo.Tag(ref.Identifier()), nil } From a8cb9e9cb16b084c31593ee3899a3fc8c94154e3 Mon Sep 17 00:00:00 2001 From: Matias Frank Jensen Date: Mon, 18 Sep 2023 09:47:46 +0200 Subject: [PATCH 3/3] Fixes to comments --- Makefile | 2 +- deploy/charts/rig/templates/_config.tpl | 2 +- internal/config/types.go | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 8639f0427..57a2f8068 100644 --- a/Makefile +++ b/Makefile @@ -162,7 +162,7 @@ kind-clean: ## ๐Ÿงน Clean kind cluster $(KIND) delete clusters rig .PHONY: kind-registry -kind-registry: ## ๐Ÿงน Clean kind cluster +kind-registry: ## ๐Ÿ‹ Install docker registry in $(KUBECTL) apply -f ./deploy/registry/registry.yaml -n rig-system ##@ Release diff --git a/deploy/charts/rig/templates/_config.tpl b/deploy/charts/rig/templates/_config.tpl index c3d23ac9d..aac03bfaa 100644 --- a/deploy/charts/rig/templates/_config.tpl +++ b/deploy/charts/rig/templates/_config.tpl @@ -42,7 +42,7 @@ email: {{- with .Values.rig.registry }} registry: enabled: {{ .enabled }} - port: {{ .registry_port }} + port: {{ .port }} log_level: {{ .log_level }} {{- end }} {{- end -}} diff --git a/internal/config/types.go b/internal/config/types.go index d9b9a05a2..8d0c37626 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -143,8 +143,7 @@ const ( ) type Registry struct { - Enabled bool `mapstructure:"enabled"` - // Naming the port 'port' leads to a clash - Port int `mapstructure:"registry_port"` + Enabled bool `mapstructure:"enabled"` + Port int `mapstructure:"port"` LogLevel zapcore.Level `mapstructure:"log_level"` }