diff --git a/go.mod b/go.mod index b107078..0945550 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ replace github.com/docker/cli => github.com/docker/cli v23.0.5+incompatible // Flux dependent re-writes. These are needed to be compatible with the flux version at all times. replace ( + github.com/fluxcd/pkg/runtime => github.com/fluxcd/pkg/runtime v0.35.0 k8s.io/api => k8s.io/api v0.26.3 k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.26.3 k8s.io/apimachinery => k8s.io/apimachinery v0.26.3 @@ -37,7 +38,7 @@ require ( github.com/fluxcd/pkg/git v0.11.0 github.com/fluxcd/pkg/git/gogit v0.8.1 github.com/fluxcd/pkg/kustomize v1.3.4 - github.com/fluxcd/pkg/runtime v0.35.0 + github.com/fluxcd/pkg/runtime v0.42.0 github.com/fluxcd/pkg/ssa v0.28.2 github.com/fluxcd/source-controller/api v1.1.0 github.com/gabriel-vasile/mimetype v1.4.3 @@ -49,7 +50,7 @@ require ( github.com/open-component-model/ocm v0.4.1 github.com/open-component-model/ocm-controller v0.16.1 github.com/open-component-model/ocm-e2e-framework v0.7.0 - github.com/open-component-model/replication-controller v0.7.0 + github.com/open-component-model/replication-controller v0.11.0 github.com/opencontainers/go-digest v1.0.0 github.com/opencontainers/image-spec v1.1.0-rc5 github.com/oras-project/oras-credentials-go v0.2.0 @@ -366,14 +367,14 @@ require ( go.uber.org/zap v1.26.0 // indirect go4.org/intern v0.0.0-20230525184215-6c62f75575cb // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20230525183740-e7c30c78aeb2 // indirect - golang.org/x/crypto v0.14.0 // indirect + golang.org/x/crypto v0.15.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect golang.org/x/mod v0.13.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.14.0 // indirect golang.org/x/sync v0.5.0 // indirect golang.org/x/sys v0.14.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect diff --git a/go.sum b/go.sum index 81f5bb8..6e04b2c 100644 --- a/go.sum +++ b/go.sum @@ -1281,8 +1281,8 @@ github.com/open-component-model/ocm-controller v0.16.1 h1:Vr04cTivp/kBYktTwDMG4F github.com/open-component-model/ocm-controller v0.16.1/go.mod h1:lYax3VEjWAZ7qEr90opJQl+qm/gO3wIeoz1WSEdje2c= github.com/open-component-model/ocm-e2e-framework v0.7.0 h1:O+PH/xQrJdzA+Tan2qZcHBJgWgoJ64GXkiNEMM/rag0= github.com/open-component-model/ocm-e2e-framework v0.7.0/go.mod h1:ehOW7rZeI0mHcWLKUpiCj19IWefBlJR7LrgSbtFtTfI= -github.com/open-component-model/replication-controller v0.7.0 h1:HZg2VXgcCCwFnqP7izz5T/B7y1QzELlDW3NR+j4rnQs= -github.com/open-component-model/replication-controller v0.7.0/go.mod h1:Z45C/2vKYYKbmPJ8v3nEJgP5UEuHoUKn0/LdvLxrQxc= +github.com/open-component-model/replication-controller v0.11.0 h1:i64Lk3eWmwxWSILD+64L1ppjXUNfraAL0QrGIs1oZCw= +github.com/open-component-model/replication-controller v0.11.0/go.mod h1:yHoO6axadegVn1yjcI7j6JiyQNU77TnORqfExZx4pF8= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -1729,8 +1729,9 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1825,8 +1826,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1837,8 +1838,8 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= +golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1995,8 +1996,9 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/internal/componentsgen/controller.go b/internal/componentsgen/controller.go index 926e13f..8dcbcf9 100644 --- a/internal/componentsgen/controller.go +++ b/internal/componentsgen/controller.go @@ -12,8 +12,13 @@ import ( "strings" "github.com/open-component-model/mpas/internal/env" + "sigs.k8s.io/kustomize/api/krusty" + "sigs.k8s.io/kustomize/kyaml/filesys" ) +//go:embed patch/replication_controller_patch.yaml +var replicationControllerPatch []byte + // Controller is a component that generates manifests for a controller, // localization files from a template, and images for a given controller. type Controller struct { @@ -55,6 +60,12 @@ func (o *Controller) GenerateManifests(ctx context.Context, tmpDir string) error return fmt.Errorf("failed to download install.yaml file: %w", err) } + if o.Name == env.ReplicationControllerName { + if err := o.enableMpasForReplicationController(); err != nil { + return fmt.Errorf("failed to update replication controller: %w", err) + } + } + o.Path = filepath.Join(o.Name, "install.yaml") o.Registry = env.DefaultOCMHost o.Content = string(content) @@ -98,3 +109,29 @@ func (o *Controller) GenerateImages() (map[string][]string, error) { func (o *Controller) GetPath() string { return o.Path } + +func (o *Controller) enableMpasForReplicationController() (err error) { + fs := filesys.MakeFsInMemory() + if err := fs.WriteFile("kustomization.yaml", replicationControllerPatch); err != nil { + return fmt.Errorf("failed to create kustomization file: %w", err) + } + + if err := fs.WriteFile("install.yaml", []byte(o.Content)); err != nil { + return fmt.Errorf("failed to create install file: %w", err) + } + + kustomizer := krusty.MakeKustomizer(krusty.MakeDefaultOptions()) + result, err := kustomizer.Run(fs, ".") + if err != nil { + return fmt.Errorf("failed to run kustomize for controller %s: %w", o.Name, err) + } + + asYaml, err := result.AsYaml() + if err != nil { + return fmt.Errorf("failed to create yaml from kustomize result: %w", err) + } + + o.Content = string(asYaml) + + return nil +} diff --git a/internal/componentsgen/patch/replication_controller_patch.yaml b/internal/componentsgen/patch/replication_controller_patch.yaml new file mode 100644 index 0000000..c7eb256 --- /dev/null +++ b/internal/componentsgen/patch/replication_controller_patch.yaml @@ -0,0 +1,20 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: # manifests generated during bootstrap + - install.yaml +patchesStrategicMerge: + - |- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: replication-controller + namespace: ocm-system + spec: + template: + spec: + containers: + - name: manager + args: + - --mpas-enabled + - --leader-elect + - --zap-log-level=4