Skip to content

Commit aacc72c

Browse files
robertgraeffreshnm
andauthored
feat: add command to manage deployment repo (#41)
Co-authored-by: René Schünemann <rene.schuenemann@sap.com>
1 parent 2f25adb commit aacc72c

35 files changed

+3218
-91
lines changed

cmd/manageDeploymentRepo.go

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package cmd
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/go-logr/logr"
7+
"github.com/spf13/cobra"
8+
"k8s.io/apimachinery/pkg/runtime"
9+
controllerruntime "sigs.k8s.io/controller-runtime"
10+
11+
"github.com/openmcp-project/bootstrapper/internal/config"
12+
13+
"github.com/openmcp-project/bootstrapper/internal/util"
14+
15+
deploymentrepo "github.com/openmcp-project/bootstrapper/internal/deployment-repo"
16+
"github.com/openmcp-project/bootstrapper/internal/log"
17+
)
18+
19+
const (
20+
FlagGitConfig = "git-config"
21+
FlagOcmConfig = "ocm-config"
22+
FlagKubeConfig = "kubeconfig"
23+
)
24+
25+
type LogWriter struct{}
26+
27+
func (w LogWriter) Write(p []byte) (n int, err error) {
28+
logger := log.GetLogger()
29+
logger.Debugf("Git progress: %s", string(p))
30+
return len(p), nil
31+
}
32+
33+
// manageDeploymentRepoCmd represents the manageDeploymentRepo command
34+
var manageDeploymentRepoCmd = &cobra.Command{
35+
Use: "manageDeploymentRepo",
36+
Short: "Updates the openMCP deployment specification in the specified Git repository",
37+
Long: `Updates the openMCP deployment specification in the specified Git repository.
38+
The update is based on the specified component version.
39+
openmcp-bootstrapper manageDeploymentRepo <configFile>`,
40+
Args: cobra.ExactArgs(1),
41+
ArgAliases: []string{
42+
"configFile",
43+
},
44+
Example: ` openmcp-bootstrapper manageDeploymentRepo "./config.yaml"`,
45+
RunE: func(cmd *cobra.Command, args []string) error {
46+
configFilePath := args[0]
47+
48+
// disable controller-runtime logging
49+
controllerruntime.SetLogger(logr.Discard())
50+
51+
targetCluster, err := util.GetCluster(cmd.Flag(FlagKubeConfig).Value.String(), "target-cluster", runtime.NewScheme())
52+
if err != nil {
53+
return fmt.Errorf("failed to get platform cluster: %w", err)
54+
}
55+
56+
config := &config.BootstrapperConfig{}
57+
err = config.ReadFromFile(configFilePath)
58+
if err != nil {
59+
return fmt.Errorf("failed to read config file: %w", err)
60+
}
61+
config.SetDefaults()
62+
err = config.Validate()
63+
if err != nil {
64+
return fmt.Errorf("invalid config file: %w", err)
65+
}
66+
67+
deploymentRepoManager, err := deploymentrepo.NewDeploymentRepoManager(
68+
config,
69+
targetCluster,
70+
cmd.Flag(FlagGitConfig).Value.String(),
71+
cmd.Flag(FlagOcmConfig).Value.String(),
72+
).Initialize(cmd.Context())
73+
74+
defer func() {
75+
deploymentRepoManager.Cleanup()
76+
}()
77+
78+
if err != nil {
79+
return fmt.Errorf("failed to initialize deployment repo manager: %w", err)
80+
}
81+
82+
err = deploymentRepoManager.ApplyTemplates(cmd.Context())
83+
if err != nil {
84+
return fmt.Errorf("failed to apply templates: %w", err)
85+
}
86+
87+
err = deploymentRepoManager.ApplyProviders(cmd.Context())
88+
if err != nil {
89+
return fmt.Errorf("failed to apply providers: %w", err)
90+
}
91+
92+
err = deploymentRepoManager.ApplyCustomResourceDefinitions(cmd.Context())
93+
if err != nil {
94+
return fmt.Errorf("failed to apply custom resource definitions: %w", err)
95+
}
96+
97+
err = deploymentRepoManager.UpdateResourcesKustomization()
98+
if err != nil {
99+
return fmt.Errorf("failed to update resources kustomization: %w", err)
100+
}
101+
102+
err = deploymentRepoManager.CommitAndPushChanges(cmd.Context())
103+
if err != nil {
104+
return fmt.Errorf("failed to commit and push changes: %w", err)
105+
}
106+
107+
err = deploymentRepoManager.RunKustomizeAndApply(cmd.Context())
108+
if err != nil {
109+
return fmt.Errorf("failed to run kustomize and apply: %w", err)
110+
}
111+
112+
return nil
113+
},
114+
}
115+
116+
func init() {
117+
RootCmd.AddCommand(manageDeploymentRepoCmd)
118+
manageDeploymentRepoCmd.Flags().SortFlags = false
119+
manageDeploymentRepoCmd.Flags().String(FlagOcmConfig, "", "ocm configuration file")
120+
manageDeploymentRepoCmd.Flags().String(FlagGitConfig, "", "Git configuration file")
121+
manageDeploymentRepoCmd.Flags().String(FlagKubeConfig, "", "Kubernetes configuration file")
122+
123+
if err := manageDeploymentRepoCmd.MarkFlagRequired(FlagGitConfig); err != nil {
124+
panic(err)
125+
}
126+
}

go.mod

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ module github.com/openmcp-project/bootstrapper
33
go 1.25.1
44

55
require (
6+
github.com/Masterminds/sprig/v3 v3.3.0
7+
github.com/fluxcd/kustomize-controller/api v1.6.1
8+
github.com/fluxcd/pkg/apis/meta v1.12.0
9+
github.com/go-git/go-billy/v5 v5.6.2
610
github.com/go-git/go-git/v5 v5.16.2
11+
github.com/go-logr/logr v1.4.3
712
github.com/openmcp-project/controller-utils v0.19.0
813
github.com/sirupsen/logrus v1.9.3
914
github.com/spf13/cobra v1.10.1
@@ -12,26 +17,31 @@ require (
1217
k8s.io/apimachinery v0.34.0
1318
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d
1419
sigs.k8s.io/controller-runtime v0.22.1
20+
sigs.k8s.io/kustomize/api v0.20.1
21+
sigs.k8s.io/kustomize/kyaml v0.20.1
1522
sigs.k8s.io/yaml v1.6.0
1623
)
1724

1825
require (
19-
dario.cat/mergo v1.0.0 // indirect
26+
dario.cat/mergo v1.0.1 // indirect
27+
github.com/Masterminds/goutils v1.1.1 // indirect
28+
github.com/Masterminds/semver/v3 v3.4.0 // indirect
2029
github.com/Microsoft/go-winio v0.6.2 // indirect
2130
github.com/ProtonMail/go-crypto v1.1.6 // indirect
2231
github.com/beorn7/perks v1.0.1 // indirect
32+
github.com/blang/semver/v4 v4.0.0 // indirect
2333
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2434
github.com/cloudflare/circl v1.6.1 // indirect
2535
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
2636
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2737
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
2838
github.com/emirpasic/gods v1.18.1 // indirect
2939
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
40+
github.com/fluxcd/pkg/apis/kustomize v1.12.0 // indirect
3041
github.com/fsnotify/fsnotify v1.9.0 // indirect
3142
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
43+
github.com/go-errors/errors v1.4.2 // indirect
3244
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
33-
github.com/go-git/go-billy/v5 v5.6.2 // indirect
34-
github.com/go-logr/logr v1.4.3 // indirect
3545
github.com/go-openapi/jsonpointer v0.21.0 // indirect
3646
github.com/go-openapi/jsonreference v0.21.0 // indirect
3747
github.com/go-openapi/swag v0.23.0 // indirect
@@ -41,14 +51,18 @@ require (
4151
github.com/google/gnostic-models v0.7.0 // indirect
4252
github.com/google/go-cmp v0.7.0 // indirect
4353
github.com/google/uuid v1.6.0 // indirect
54+
github.com/huandu/xstrings v1.5.0 // indirect
4455
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4556
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
4657
github.com/josharian/intern v1.0.0 // indirect
4758
github.com/json-iterator/go v1.1.12 // indirect
4859
github.com/kevinburke/ssh_config v1.2.0 // indirect
4960
github.com/mailru/easyjson v0.9.0 // indirect
61+
github.com/mitchellh/copystructure v1.2.0 // indirect
62+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
5063
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
5164
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
65+
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
5266
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
5367
github.com/pjbgf/sha1cd v0.3.2 // indirect
5468
github.com/pkg/errors v0.9.1 // indirect
@@ -58,10 +72,13 @@ require (
5872
github.com/prometheus/common v0.62.0 // indirect
5973
github.com/prometheus/procfs v0.15.1 // indirect
6074
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
75+
github.com/shopspring/decimal v1.4.0 // indirect
6176
github.com/skeema/knownhosts v1.3.1 // indirect
77+
github.com/spf13/cast v1.7.0 // indirect
6278
github.com/spf13/pflag v1.0.9 // indirect
6379
github.com/x448/float16 v0.8.4 // indirect
6480
github.com/xanzy/ssh-agent v0.3.3 // indirect
81+
github.com/xlab/treeprint v1.2.0 // indirect
6582
go.yaml.in/yaml/v2 v2.4.2 // indirect
6683
go.yaml.in/yaml/v3 v3.0.4 // indirect
6784
golang.org/x/crypto v0.41.0 // indirect

go.sum

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
2-
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
1+
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
2+
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
3+
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
4+
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
35
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
46
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
7+
github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
8+
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
59
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
610
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
711
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
@@ -13,6 +17,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd
1317
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
1418
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
1519
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
20+
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
21+
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
1622
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
1723
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
1824
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
@@ -34,12 +40,22 @@ github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH
3440
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
3541
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
3642
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
43+
github.com/fluxcd/kustomize-controller/api v1.6.1 h1:8AOD+BWQwCLT+u5jgtGryZWkCeslgr+cnQAfUzgWmGk=
44+
github.com/fluxcd/kustomize-controller/api v1.6.1/go.mod h1:b0i/KVz28tV8iuqlNHx7MW6ZtTcIbBELGLoKdaK+X8M=
45+
github.com/fluxcd/pkg/apis/kustomize v1.12.0 h1:KvZN6xwgP/dNSeckL4a/Uv715XqiN1C3xS+jGcPejtE=
46+
github.com/fluxcd/pkg/apis/kustomize v1.12.0/go.mod h1:OojLxIdKm1JAAdh3sL4j4F+vfrLKb7kq1vr8bpyEKgg=
47+
github.com/fluxcd/pkg/apis/meta v1.12.0 h1:XW15TKZieC2b7MN8VS85stqZJOx+/b8jATQ/xTUhVYg=
48+
github.com/fluxcd/pkg/apis/meta v1.12.0/go.mod h1:+son1Va60x2eiDcTwd7lcctbI6C+K3gM7R+ULmEq1SI=
49+
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
50+
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
3751
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
3852
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
3953
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
4054
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
4155
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
4256
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
57+
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
58+
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
4359
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
4460
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
4561
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
@@ -77,6 +93,8 @@ github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pI
7793
github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U=
7894
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
7995
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
96+
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
97+
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
8098
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
8199
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
82100
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
@@ -102,12 +120,18 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
102120
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
103121
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
104122
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
123+
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
124+
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
125+
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
126+
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
105127
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
106128
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
107129
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
108130
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
109131
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
110132
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
133+
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
134+
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
111135
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
112136
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
113137
github.com/onsi/ginkgo/v2 v2.25.2 h1:hepmgwx1D+llZleKQDMEvy8vIlCxMGt7W5ZxDjIEhsw=
@@ -136,11 +160,15 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7
136160
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
137161
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
138162
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
163+
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
164+
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
139165
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
140166
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
141167
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
142168
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
143169
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
170+
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
171+
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
144172
github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
145173
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
146174
github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
@@ -158,6 +186,8 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
158186
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
159187
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
160188
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
189+
github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
190+
github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
161191
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
162192
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
163193
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
@@ -262,6 +292,10 @@ sigs.k8s.io/controller-runtime v0.22.1 h1:Ah1T7I+0A7ize291nJZdS1CabF/lB4E++WizgV
262292
sigs.k8s.io/controller-runtime v0.22.1/go.mod h1:FwiwRjkRPbiN+zp2QRp7wlTCzbUXxZ/D4OzuQUDwBHY=
263293
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
264294
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
295+
sigs.k8s.io/kustomize/api v0.20.1 h1:iWP1Ydh3/lmldBnH/S5RXgT98vWYMaTUL1ADcr+Sv7I=
296+
sigs.k8s.io/kustomize/api v0.20.1/go.mod h1:t6hUFxO+Ph0VxIk1sKp1WS0dOjbPCtLJ4p8aADLwqjM=
297+
sigs.k8s.io/kustomize/kyaml v0.20.1 h1:PCMnA2mrVbRP3NIB6v9kYCAc38uvFLVs8j/CD567A78=
298+
sigs.k8s.io/kustomize/kyaml v0.20.1/go.mod h1:0EmkQHRUsJxY8Ug9Niig1pUMSCGHxQ5RklbpV/Ri6po=
265299
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
266300
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
267301
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=

0 commit comments

Comments
 (0)