From 5b19dfda60f1a41c674f44a05a41239618634cb2 Mon Sep 17 00:00:00 2001
From: pthomison
Date: Fri, 5 Apr 2024 13:22:06 -0700
Subject: [PATCH] update work
---
Taskfile.yml | 10 ++-
cmd/deploy.go | 142 +++++++++++++++++++++++++++++++++++++++
cmd/forward.go | 15 +++++
cmd/k3auto.go | 11 ++-
cmd/utils.go | 95 --------------------------
go.mod | 19 +++---
go.sum | 51 ++++++--------
internal/docker/build.go | 22 +++---
8 files changed, 218 insertions(+), 147 deletions(-)
create mode 100644 cmd/deploy.go
create mode 100644 cmd/forward.go
delete mode 100644 cmd/utils.go
diff --git a/Taskfile.yml b/Taskfile.yml
index 957fbc9..8285fe9 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -18,9 +18,13 @@ tasks:
image-registry: echo {{.REGISTRY}}
image-repository: echo {{.REPOSITORY}}
- run:
+ create:
cmds:
- - go run .
+ - go run {{.BUILD_FLAGS}} . create
+
+ delete:
+ cmds:
+ - go run {{.BUILD_FLAGS}} . delete
test:
env:
@@ -34,7 +38,7 @@ tasks:
e2e:
cmds:
- - go test {{.BUILD_FLAGS}} ./e2e/... -v --count=1 #-tag containers_image_openpgp
+ - go test {{.BUILD_FLAGS}} ./e2e/... -v --count=1
docker-test-image:
cmds:
diff --git a/cmd/deploy.go b/cmd/deploy.go
new file mode 100644
index 0000000..11cd43e
--- /dev/null
+++ b/cmd/deploy.go
@@ -0,0 +1,142 @@
+package cmd
+
+import (
+ "context"
+ "fmt"
+
+ appsv1 "k8s.io/api/apps/v1"
+ corev1 "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/errors"
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "sigs.k8s.io/controller-runtime/pkg/client"
+
+ "github.com/davecgh/go-spew/spew"
+ "github.com/pthomison/k3auto/internal/containers"
+ "github.com/pthomison/k3auto/internal/docker"
+ "github.com/pthomison/k3auto/internal/flux"
+ "github.com/pthomison/k3auto/internal/k8s"
+ "github.com/sirupsen/logrus"
+ "github.com/spf13/afero"
+
+ kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1"
+ sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
+)
+
+func ensureDeployment(ctx context.Context, k8sC client.Client, name string, namespace string, repository string, image string, tag string) error {
+ oci := sourcev1beta2.OCIRepository{}
+ err := k8sC.Get(ctx, client.ObjectKey{
+ Name: name,
+ Namespace: namespace,
+ }, &oci)
+
+ if err != nil && !errors.IsNotFound(err) {
+ spew.Dump(errors.IsNotFound(err), err)
+ return err
+ } else if err != nil {
+ oci = flux.NewOCIRepoObject(name, namespace, repository, image, tag)
+ err = k8sC.Create(ctx, &oci)
+ if err != nil {
+ return err
+ }
+ } else {
+ oci.Spec.Reference.Tag = tag
+ err = k8sC.Update(ctx, &oci)
+ if err != nil {
+ return err
+ }
+ }
+
+ kustomization := kustomizev1.Kustomization{}
+ err = k8sC.Get(ctx, client.ObjectKey{
+ Name: name,
+ Namespace: namespace,
+ }, &kustomization)
+
+ if err != nil && !errors.IsNotFound(err) {
+ return err
+ } else if err != nil {
+ kustomization = flux.NewOCIKustomizationObject(name, namespace)
+ err = k8sC.Create(ctx, &kustomization)
+ if err != nil {
+ return err
+ }
+ }
+
+ err = flux.WaitForKustomization(ctx, k8sC, v1.ObjectMeta{
+ Name: name,
+ Namespace: namespace,
+ })
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func Deploy(ctx context.Context, name string, directory string, filesystem afero.Fs) error {
+
+ k8sC, err := k8s.NewClient()
+ if err != nil {
+ return err
+ }
+
+ repository := fmt.Sprintf("%v:5000", "docker-registry.docker-registry.svc.cluster.local")
+ localRepository := fmt.Sprintf("%v:5000", "127.0.0.1")
+
+ image := name
+ namespace := "kube-system"
+
+ logrus.Infof("%v Deployments Injecting", name)
+
+ initImageRef := fmt.Sprintf("%v:%v", name, name)
+
+ hash, err := docker.BuildImage(ctx, directory, docker.DumpDockerfile, []string{initImageRef}, filesystem)
+ if err != nil {
+ return err
+ }
+
+ tag := hash
+ imageRef := fmt.Sprintf("%v:%v", name, hash)
+
+ err = docker.TagImage(ctx, initImageRef, imageRef)
+ if err != nil {
+ return err
+ }
+
+ dep := appsv1.Deployment{}
+ err = k8sC.Get(ctx, client.ObjectKey{
+ Name: "docker-registry",
+ Namespace: "docker-registry",
+ }, &dep)
+ if err != nil {
+ return err
+ }
+
+ pods := corev1.PodList{}
+ var selector client.MatchingLabels = dep.Spec.Selector.MatchLabels
+ err = k8sC.List(ctx, &pods, selector)
+ if err != nil {
+ return err
+ }
+
+ closeChan, err := k8s.PortForward(ctx, pods.Items[0].Name, pods.Items[0].Namespace, 5000)
+ if err != nil {
+ return err
+ }
+
+ err = containers.PushImage(ctx, imageRef, localRepository)
+ if err != nil {
+ return err
+ }
+
+ close(closeChan)
+
+ err = ensureDeployment(ctx, k8sC, name, namespace, repository, image, tag)
+ if err != nil {
+ return err
+ }
+
+ logrus.Infof("%v Deployments Injected", name)
+
+ return nil
+}
diff --git a/cmd/forward.go b/cmd/forward.go
new file mode 100644
index 0000000..13b322d
--- /dev/null
+++ b/cmd/forward.go
@@ -0,0 +1,15 @@
+package cmd
+
+import (
+ "fmt"
+
+ "github.com/spf13/cobra"
+)
+
+var ForwardCmd = &cobra.Command{
+ Use: "forward",
+ Short: "Forwards Ports To the Environment",
+ Run: func(cmd *cobra.Command, args []string) {
+ fmt.Printf("Implementation TBD")
+ },
+}
diff --git a/cmd/k3auto.go b/cmd/k3auto.go
index 1c0c5ce..0fe1e07 100644
--- a/cmd/k3auto.go
+++ b/cmd/k3auto.go
@@ -3,6 +3,7 @@ package cmd
import (
_ "embed"
+ "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
@@ -25,5 +26,13 @@ func init() {
K3AutoCmd.AddCommand(VersionCmd)
K3AutoCmd.AddCommand(CreateCmd)
K3AutoCmd.AddCommand(DeleteCmd)
- // K3AutoCmd.AddCommand(UpdateCmd)
+ K3AutoCmd.AddCommand(UpdateCmd)
+ // K3AutoCmd.AddCommand(ForwardCmd)
+}
+
+func checkError(err error) {
+ if err != nil {
+ logrus.Fatal(err)
+ panic(err)
+ }
}
diff --git a/cmd/utils.go b/cmd/utils.go
deleted file mode 100644
index 0985cdf..0000000
--- a/cmd/utils.go
+++ /dev/null
@@ -1,95 +0,0 @@
-package cmd
-
-import (
- "context"
- "fmt"
-
- appsv1 "k8s.io/api/apps/v1"
- corev1 "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/runtime"
- "sigs.k8s.io/controller-runtime/pkg/client"
-
- "github.com/pthomison/k3auto/internal/containers"
- "github.com/pthomison/k3auto/internal/docker"
- "github.com/pthomison/k3auto/internal/flux"
- "github.com/pthomison/k3auto/internal/k8s"
- "github.com/sirupsen/logrus"
- "github.com/spf13/afero"
-)
-
-func checkError(err error) {
- if err != nil {
- logrus.Fatal(err)
- panic(err)
- }
-}
-
-func Deploy(ctx context.Context, name string, directory string, filesystem afero.Fs) error {
- imageRef := fmt.Sprintf("%v:%v", name, name)
-
- k8sC, err := k8s.NewClient()
- if err != nil {
- return err
- }
-
- tag := name
-
- repository := fmt.Sprintf("%v:5000", "docker-registry.docker-registry.svc.cluster.local")
- localRepository := fmt.Sprintf("%v:5000", "127.0.0.1")
-
- image := name
- namespace := "kube-system"
-
- logrus.Infof("%v Deployments Injecting", name)
-
- err = docker.BuildImage(ctx, directory, docker.DumpDockerfile, []string{imageRef}, filesystem)
- if err != nil {
- return err
- }
-
- dep := appsv1.Deployment{}
- err = k8sC.Get(ctx, client.ObjectKey{
- Name: "docker-registry",
- Namespace: "docker-registry",
- }, &dep)
- if err != nil {
- return err
- }
-
- pods := corev1.PodList{}
- var selector client.MatchingLabels = dep.Spec.Selector.MatchLabels
- err = k8sC.List(ctx, &pods, selector)
- if err != nil {
- return err
- }
-
- closeChan, err := k8s.PortForward(ctx, pods.Items[0].Name, pods.Items[0].Namespace, 5000)
- if err != nil {
- return err
- }
-
- err = containers.PushImage(ctx, imageRef, localRepository)
- if err != nil {
- return err
- }
-
- close(closeChan)
-
- repo := flux.NewOCIRepoObject(name, namespace, repository, image, tag)
- kustomization := flux.NewOCIKustomizationObject(name, namespace)
-
- err = k8s.CreateObjects(ctx, k8sC, []runtime.Object{&repo, &kustomization})
- if err != nil {
- return err
- }
-
- logrus.Infof("%v Deployments Injected", name)
-
- logrus.Infof("Waiting For %v Kustomization", name)
- err = flux.WaitForKustomization(ctx, k8sC, kustomization.ObjectMeta)
- if err != nil {
- return err
- }
-
- return nil
-}
diff --git a/go.mod b/go.mod
index b27a6de..96da0a7 100644
--- a/go.mod
+++ b/go.mod
@@ -16,12 +16,12 @@ require (
github.com/spf13/cobra v1.8.0
github.com/spf13/viper v1.18.2
github.com/stretchr/testify v1.9.0
- k8s.io/api v0.28.6
- k8s.io/apiextensions-apiserver v0.28.6
- k8s.io/apimachinery v0.28.6
- k8s.io/client-go v0.28.6
- k8s.io/kubectl v0.28.6
- sigs.k8s.io/controller-runtime v0.16.3
+ k8s.io/api v0.29.0
+ k8s.io/apiextensions-apiserver v0.29.0
+ k8s.io/apimachinery v0.29.0
+ k8s.io/client-go v0.29.0
+ k8s.io/kubectl v0.29.0
+ sigs.k8s.io/controller-runtime v0.17.2
)
require (
@@ -55,7 +55,7 @@ require (
github.com/docker/go-metrics v0.0.1 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
- github.com/evanphx/json-patch/v5 v5.7.0 // indirect
+ github.com/evanphx/json-patch/v5 v5.8.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect
github.com/fluxcd/pkg/apis/kustomize v1.3.0 // indirect
@@ -68,7 +68,7 @@ require (
github.com/go-jose/go-jose/v3 v3.0.2 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-logr/zapr v1.2.4 // indirect
+ github.com/go-logr/zapr v1.3.0 // indirect
github.com/go-openapi/analysis v0.21.4 // indirect
github.com/go-openapi/errors v0.21.1 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
@@ -127,6 +127,7 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/onsi/ginkgo/v2 v2.15.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
@@ -200,7 +201,7 @@ require (
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- k8s.io/component-base v0.28.6 // indirect
+ k8s.io/component-base v0.29.0 // indirect
k8s.io/klog/v2 v2.120.1 // indirect
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect
diff --git a/go.sum b/go.sum
index f95743f..a75af48 100644
--- a/go.sum
+++ b/go.sum
@@ -30,7 +30,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
-github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20150223135152-b965b613227f/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -122,8 +121,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc=
-github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
+github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro=
+github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fluxcd/flux2/v2 v2.2.3 h1:sVeYLHIDGMTkT1ibbdz52z5y9pr456XSRULsehxqEXI=
@@ -159,13 +158,12 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo=
-github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA=
+github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
+github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY=
github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc=
github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo=
@@ -426,6 +424,8 @@ github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7P
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
@@ -601,7 +601,6 @@ github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng=
@@ -630,14 +629,10 @@ go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lI
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
go.starlark.net v0.0.0-20240314022150-ee8ed142361c h1:roAjH18hZcwI4hHStHbkXjF5b7UUyZ/0SG3hXNN1SjA=
go.starlark.net v0.0.0-20240314022150-ee8ed142361c/go.mod h1:YKMCv9b1WrfWmeqdV5MAuEHWsu5iC+fe6kYl2sQjdI8=
-go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
go4.org/netipx v0.0.0-20230728184502-ec4c8b891b28 h1:zLxFnORHDFTSkJPawMU7LzsuGQJ4MUFS653jJHpORow=
@@ -661,10 +656,8 @@ golang.org/x/exp v0.0.0-20240318143956-a85f2c67cd81/go.mod h1:CQ1k9gNrJ50XIzaKCR
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
@@ -682,7 +675,6 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -721,10 +713,8 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -767,7 +757,6 @@ golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
@@ -852,26 +841,26 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-k8s.io/api v0.28.6 h1:yy6u9CuIhmg55YvF/BavPBBXB+5QicB64njJXxVnzLo=
-k8s.io/api v0.28.6/go.mod h1:AM6Ys6g9MY3dl/XNaNfg/GePI0FT7WBGu8efU/lirAo=
-k8s.io/apiextensions-apiserver v0.28.6 h1:myB3iG/3v3jqCg28JDbOefu4sH2/erNEXgytRzJKBOo=
-k8s.io/apiextensions-apiserver v0.28.6/go.mod h1:qlp6xRKBgyRhe5AYc81TQpLx4kLNK8/sGQUOwMkVjRk=
-k8s.io/apimachinery v0.28.6 h1:RsTeR4z6S07srPg6XYrwXpTJVMXsjPXn0ODakMytSW0=
-k8s.io/apimachinery v0.28.6/go.mod h1:QFNX/kCl/EMT2WTSz8k4WLCv2XnkOLMaL8GAVRMdpsA=
-k8s.io/client-go v0.28.6 h1:Gge6ziyIdafRchfoBKcpaARuz7jfrK1R1azuwORIsQI=
-k8s.io/client-go v0.28.6/go.mod h1:+nu0Yp21Oeo/cBCsprNVXB2BfJTV51lFfe5tXl2rUL8=
-k8s.io/component-base v0.28.6 h1:G4T8VrcQ7xZou3by/fY5NU5mfxOBlWaivS2lPrEltAo=
-k8s.io/component-base v0.28.6/go.mod h1:Dg62OOG3ALu2P4nAG00UdsuHoNLQJ5VsUZKQlLDcS+E=
+k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A=
+k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA=
+k8s.io/apiextensions-apiserver v0.29.0 h1:0VuspFG7Hj+SxyF/Z/2T0uFbI5gb5LRgEyUVE3Q4lV0=
+k8s.io/apiextensions-apiserver v0.29.0/go.mod h1:TKmpy3bTS0mr9pylH0nOt/QzQRrW7/h7yLdRForMZwc=
+k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o=
+k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis=
+k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8=
+k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38=
+k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s=
+k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M=
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
-k8s.io/kubectl v0.28.6 h1:46O3gGJYlpqy7wtwYlggieemyIcuZqmflnQVDci3MgY=
-k8s.io/kubectl v0.28.6/go.mod h1:FS5ugZhi3kywpMQSCnp8MN+gctdFHJACzC6mH3fZ6lc=
+k8s.io/kubectl v0.29.0 h1:Oqi48gXjikDhrBF67AYuZRTcJV4lg2l42GmvsP7FmYI=
+k8s.io/kubectl v0.29.0/go.mod h1:0jMjGWIcMIQzmUaMgAzhSELv5WtHo2a8pq67DtviAJs=
k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI=
k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4=
-sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
+sigs.k8s.io/controller-runtime v0.17.2 h1:FwHwD1CTUemg0pW2otk7/U5/i5m2ymzvOXdbeGOUvw0=
+sigs.k8s.io/controller-runtime v0.17.2/go.mod h1:+MngTvIQQQhfXtwfdGw/UOQ/aIaqsYywfCINOtwMO/s=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/kustomize/api v0.16.0 h1:/zAR4FOQDCkgSDmVzV2uiFbuy9bhu3jEzthrHCuvm1g=
diff --git a/internal/docker/build.go b/internal/docker/build.go
index df2953b..582c79b 100644
--- a/internal/docker/build.go
+++ b/internal/docker/build.go
@@ -4,6 +4,7 @@ import (
"archive/tar"
"bytes"
"context"
+ "crypto/sha256"
"fmt"
"io"
"io/fs"
@@ -12,10 +13,10 @@ import (
"github.com/spf13/afero"
)
-func BuildImage(ctx context.Context, buildContextLocation string, dockerfile string, tags []string, filesystem afero.Fs) error {
+func BuildImage(ctx context.Context, buildContextLocation string, dockerfile string, tags []string, filesystem afero.Fs) (string, error) {
apiClient, err := NewClient()
if err != nil {
- return err
+ return "", err
}
defer apiClient.Close()
@@ -30,12 +31,12 @@ func BuildImage(ctx context.Context, buildContextLocation string, dockerfile str
Size: int64(len([]byte(dockerfile))),
}
if err := tw.WriteHeader(hdr); err != nil {
- return err
+ return "", err
}
_, err = tw.Write([]byte(dockerfile))
if err != nil {
- return err
+ return "", err
}
err = afero.Walk(filesystem, buildContextLocation, func(path string, info fs.FileInfo, err error) error {
@@ -69,12 +70,12 @@ func BuildImage(ctx context.Context, buildContextLocation string, dockerfile str
return nil
})
if err != nil {
- return err
+ return "", err
}
err = tw.Close()
if err != nil {
- return err
+ return "", err
}
resp, err := apiClient.ImageBuild(ctx, &buf, types.ImageBuildOptions{
@@ -82,10 +83,15 @@ func BuildImage(ctx context.Context, buildContextLocation string, dockerfile str
Dockerfile: dockerFileLocation,
})
if err != nil {
- return err
+ return "", err
}
io.ReadAll(resp.Body)
+ resp.Body.Close()
- return nil
+ hasher := sha256.New()
+ hasher.Write([]byte(buf.Bytes()))
+ hash := fmt.Sprintf("%x", hasher.Sum(nil))
+
+ return hash, nil
}