Skip to content

Commit 6f82a07

Browse files
committed
feat: add ExternalSecrets structure to bootstrapper config to allow specification of repository and image pull secrets
On-behalf-of: Radek Schekalla (SAP) <[email protected]> Signed-off-by: Radek Schekalla (SAP) <[email protected]>
1 parent 94e81cb commit 6f82a07

File tree

4 files changed

+27
-17
lines changed

4 files changed

+27
-17
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/Masterminds/sprig/v3 v3.3.0
77
github.com/fluxcd/helm-controller/api v1.4.2
88
github.com/fluxcd/kustomize-controller/api v1.7.1
9+
github.com/fluxcd/pkg/apis/meta v1.22.0
910
github.com/fluxcd/source-controller/api v1.7.2
1011
github.com/go-git/go-billy/v5 v5.6.2
1112
github.com/go-git/go-git/v5 v5.16.3
@@ -41,7 +42,6 @@ require (
4142
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
4243
github.com/fluxcd/pkg/apis/acl v0.9.0 // indirect
4344
github.com/fluxcd/pkg/apis/kustomize v1.13.0 // indirect
44-
github.com/fluxcd/pkg/apis/meta v1.22.0 // indirect
4545
github.com/fsnotify/fsnotify v1.9.0 // indirect
4646
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
4747
github.com/go-errors/errors v1.4.2 // indirect

internal/config/config.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"os"
66

7+
"github.com/fluxcd/pkg/apis/meta"
78
"k8s.io/apimachinery/pkg/util/validation/field"
89
"sigs.k8s.io/yaml"
910
)
@@ -16,6 +17,7 @@ type BootstrapperConfig struct {
1617
OpenMCPOperator OpenMCPOperator `json:"openmcpOperator"`
1718
Environment string `json:"environment"`
1819
TemplateInput map[string]interface{} `json:"templateInput"`
20+
ExternalSecrets ExternalSecrets `json:"externalSecrets"`
1921
}
2022

2123
type Component struct {
@@ -56,6 +58,11 @@ type Manifest struct {
5658
ManifestParsed map[string]interface{}
5759
}
5860

61+
type ExternalSecrets struct {
62+
RepositorySecretRef meta.LocalObjectReference `json:"repositorySecretRef"`
63+
ImagePullSecrets []meta.LocalObjectReference `json:"imagePullSecrets"`
64+
}
65+
5966
func (c *BootstrapperConfig) ReadFromFile(path string) error {
6067
data, err := os.ReadFile(path)
6168
if err != nil {

internal/eso-deployer/constants.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package eso_deployer
22

33
const (
4-
esoNamespace = "external-secrets-system"
4+
esoNamespace = "external-secrets"
55
esoImageRepoName = "external-secrets-image"
66
esoChartRepoName = "external-secrets-chart"
77
esoHelmReleaseName = "external-secrets-operator"

internal/eso-deployer/deployer.go

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@ import (
1010
sourcev1 "github.com/fluxcd/source-controller/api/v1"
1111
"github.com/openmcp-project/controller-utils/pkg/clusters"
1212
"github.com/sirupsen/logrus"
13+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1314
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1415

15-
ocmcli "github.com/openmcp-project/bootstrapper/internal/ocm-cli"
16-
1716
"github.com/openmcp-project/bootstrapper/internal/component"
1817
cfg "github.com/openmcp-project/bootstrapper/internal/config"
19-
2018
"github.com/openmcp-project/bootstrapper/internal/flux_deployer"
19+
ocmcli "github.com/openmcp-project/bootstrapper/internal/ocm-cli"
2120
"github.com/openmcp-project/bootstrapper/internal/util"
22-
23-
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2421
)
2522

2623
type EsoDeployer struct {
@@ -63,7 +60,7 @@ func (d *EsoDeployer) DeployWithComponentManager(ctx context.Context, componentM
6360
return fmt.Errorf("failed to get external-secrets-operator-chart resource: %w", err)
6461
}
6562
d.log.Info("Deploying OCIRepo for ESO chart.")
66-
if err = deployRepo(ctx, d, esoChartRes, esoChartRepoName); err != nil {
63+
if err = d.deployRepo(ctx, esoChartRes, esoChartRepoName); err != nil {
6764
return fmt.Errorf("failed to create helm chart repo: %w", err)
6865
}
6966

@@ -72,28 +69,33 @@ func (d *EsoDeployer) DeployWithComponentManager(ctx context.Context, componentM
7269
return fmt.Errorf("failed to get external-secrets-operator-image resource: %w", err)
7370
}
7471
d.log.Info("Deploying OCIRepo for ESO image.")
75-
if err = deployRepo(ctx, d, esoImageRes, esoImageRepoName); err != nil {
72+
if err = d.deployRepo(ctx, esoImageRes, esoImageRepoName); err != nil {
7673
return fmt.Errorf("failed to create helm image repo: %w", err)
7774
}
7875

7976
d.log.Info("Deploying HelmRelease for ESO.")
80-
if err = deployHelmRelease(ctx, d, esoImageRes); err != nil {
77+
if err = d.deployHelmRelease(ctx, esoImageRes); err != nil {
8178
return fmt.Errorf("failed to deploy helm release: %w", err)
8279
}
8380

8481
d.log.Info("Done.")
8582
return nil
8683
}
8784

88-
func deployHelmRelease(ctx context.Context, d *EsoDeployer, res *ocmcli.Resource) error {
89-
name, _, _, err := util.ParseImageVersionAndTag(*res.Access.ImageReference)
85+
func (d *EsoDeployer) deployHelmRelease(ctx context.Context, res *ocmcli.Resource) error {
86+
name, tag, _, err := util.ParseImageVersionAndTag(*res.Access.ImageReference)
9087
if err != nil {
9188
return fmt.Errorf("failed to parse image resource: %w", err)
9289
}
9390

9491
values := map[string]any{
95-
"image": map[string]any{"repository": name},
92+
"image": map[string]any{
93+
"repository": name,
94+
"tag": tag,
95+
},
9696
}
97+
values["imagePullSecrets"] = d.Config.ExternalSecrets.ImagePullSecrets
98+
9799
encoded, err := json.Marshal(values)
98100
if err != nil {
99101
return fmt.Errorf("failed to marshal ESO Helm values: %w", err)
@@ -122,8 +124,8 @@ func deployHelmRelease(ctx context.Context, d *EsoDeployer, res *ocmcli.Resource
122124
return util.CreateOrUpdate(ctx, d.platformCluster, helmRelease)
123125
}
124126

125-
func deployRepo(ctx context.Context, d *EsoDeployer, res *ocmcli.Resource, repoName string) error {
126-
imageName, tag, digest, err := util.ParseImageVersionAndTag(*res.Access.ImageReference)
127+
func (d *EsoDeployer) deployRepo(ctx context.Context, res *ocmcli.Resource, repoName string) error {
128+
name, tag, digest, err := util.ParseImageVersionAndTag(*res.Access.ImageReference)
127129
if err != nil {
128130
return err
129131
}
@@ -134,12 +136,13 @@ func deployRepo(ctx context.Context, d *EsoDeployer, res *ocmcli.Resource, repoN
134136
Namespace: flux_deployer.FluxSystemNamespace,
135137
},
136138
Spec: sourcev1.OCIRepositorySpec{
137-
URL: fmt.Sprintf("oci://%s", imageName),
139+
URL: fmt.Sprintf("oci://%s", name),
138140
Reference: &sourcev1.OCIRepositoryRef{
139141
Tag: tag,
140142
Digest: digest,
141143
},
142-
Timeout: &metav1.Duration{Duration: 1 * time.Minute},
144+
Timeout: &metav1.Duration{Duration: 1 * time.Minute},
145+
SecretRef: &d.Config.ExternalSecrets.RepositorySecretRef,
143146
},
144147
}
145148
return util.CreateOrUpdate(ctx, d.platformCluster, ociRepo)

0 commit comments

Comments
 (0)