Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions internal/component/component_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

// ComponentManager bundles the OCM logic required by the FluxDeployer.
type ComponentManager interface {
GetComponentWithImageResources(ctx context.Context, resourceName string) (*ocm_cli.ComponentVersion, error)
GetComponentsWithImageResources(ctx context.Context, resourceName string) ([]ocm_cli.ComponentVersion, error)
DownloadTemplatesResource(ctx context.Context, downloadDir string) error
}

Expand All @@ -35,8 +35,8 @@ func NewComponentManager(ctx context.Context, config *cfg.BootstrapperConfig, oc
return m, nil
}

func (m *ComponentManagerImpl) GetComponentWithImageResources(ctx context.Context, resourceName string) (*ocm_cli.ComponentVersion, error) {
return m.ComponentGetter.GetComponentVersionForResourceRecursive(ctx, m.ComponentGetter.RootComponentVersion(), resourceName)
func (m *ComponentManagerImpl) GetComponentsWithImageResources(ctx context.Context, resourceName string) ([]ocm_cli.ComponentVersion, error) {
return m.ComponentGetter.GetComponentVersionsForResourceRecursive(ctx, m.ComponentGetter.RootComponentVersion(), resourceName)
}

func (m *ComponentManagerImpl) DownloadTemplatesResource(ctx context.Context, downloadDir string) error {
Expand Down
8 changes: 6 additions & 2 deletions internal/component/component_manager_mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@ type MockComponentManager struct {

var _ ComponentManager = (*MockComponentManager)(nil)

func (m MockComponentManager) GetComponentWithImageResources(_ context.Context, _ string) (*ocmcli.ComponentVersion, error) {
return loadComponentVersion(m.ComponentPath)
func (m MockComponentManager) GetComponentsWithImageResources(_ context.Context, _ string) ([]ocmcli.ComponentVersion, error) {
cv, err := loadComponentVersion(m.ComponentPath)
if err != nil {
return nil, err
}
return []ocmcli.ComponentVersion{*cv}, nil
}

func (m MockComponentManager) DownloadTemplatesResource(_ context.Context, downloadDir string) error {
Expand Down
34 changes: 25 additions & 9 deletions internal/deployment-repo/deploymentRepoManager.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,15 +147,23 @@ func (m *DeploymentRepoManager) Initialize(ctx context.Context) (*DeploymentRepo

logger.Infof("Fetching openmcp-operator component version")

m.openMCPOperatorCV, err = m.compGetter.GetReferencedComponentVersionRecursive(ctx, m.compGetter.RootComponentVersion(), OpenMCPOperatorComponentName)
openMCPOperatorCVs, err := m.compGetter.GetReferencedComponentVersionsRecursive(ctx, m.compGetter.RootComponentVersion(), OpenMCPOperatorComponentName)
if err != nil {
return m, fmt.Errorf("failed to get openmcp-operator component version: %w", err)
}
if len(openMCPOperatorCVs) != 1 {
return m, fmt.Errorf("expected exactly one openmcp-operator component version, got %d", len(openMCPOperatorCVs))
}
m.openMCPOperatorCV = &openMCPOperatorCVs[0]

m.fluxcdCV, err = m.compGetter.GetComponentVersionForResourceRecursive(ctx, m.compGetter.RootComponentVersion(), FluxCDSourceControllerResourceName)
fluxcdCVs, err := m.compGetter.GetComponentVersionsForResourceRecursive(ctx, m.compGetter.RootComponentVersion(), FluxCDSourceControllerResourceName)
if err != nil {
return m, fmt.Errorf("failed to get fluxcd source controller component version: %w", err)
}
if len(fluxcdCVs) != 1 {
return m, fmt.Errorf("expected exactly one fluxcd source controller component version, got %d", len(fluxcdCVs))
}
m.fluxcdCV = &fluxcdCVs[0]

m.gitConfig, err = gitconfig.ParseConfig(m.GitConfigPath)
if err != nil {
Expand Down Expand Up @@ -339,34 +347,42 @@ func (m *DeploymentRepoManager) ApplyCustomResourceDefinitions(ctx context.Conte
}

for _, clusterProvider := range m.Config.Providers.ClusterProviders {
clusterProviderCV, err := m.compGetter.GetReferencedComponentVersionRecursive(ctx, m.compGetter.RootComponentVersion(), "cluster-provider-"+clusterProvider.Name)
clusterProviderCVs, err := m.compGetter.GetReferencedComponentVersionsRecursive(ctx, m.compGetter.RootComponentVersion(), "cluster-provider-"+clusterProvider.Name)
if err != nil {
return fmt.Errorf("failed to get component version for cluster provider %s: %w", clusterProvider, err)
}

err = m.applyCRDsForComponentVersion(ctx, clusterProviderCV, crdDirectory)
if len(clusterProviderCVs) != 1 {
return fmt.Errorf("expected exactly one component version for cluster provider %s, got %d", clusterProvider, len(clusterProviderCVs))
}
err = m.applyCRDsForComponentVersion(ctx, &clusterProviderCVs[0], crdDirectory)
if err != nil {
logger.Warnf("Failed to apply CRDs for cluster provider %s: %v", clusterProvider, err)
}
}

for _, serviceProvider := range m.Config.Providers.ServiceProviders {
serviceProviderCV, err := m.compGetter.GetReferencedComponentVersionRecursive(ctx, m.compGetter.RootComponentVersion(), "service-provider-"+serviceProvider.Name)
serviceProviderCVs, err := m.compGetter.GetReferencedComponentVersionsRecursive(ctx, m.compGetter.RootComponentVersion(), "service-provider-"+serviceProvider.Name)
if err != nil {
return fmt.Errorf("failed to get component version for service provider %s: %w", serviceProvider, err)
}
err = m.applyCRDsForComponentVersion(ctx, serviceProviderCV, crdDirectory)
if len(serviceProviderCVs) != 1 {
return fmt.Errorf("expected exactly one component version for service provider %s, got %d", serviceProvider, len(serviceProviderCVs))
}
err = m.applyCRDsForComponentVersion(ctx, &serviceProviderCVs[0], crdDirectory)
if err != nil {
logger.Warnf("Failed to apply CRDs for service provider %s: %v", serviceProvider, err)
}
}

for _, platformService := range m.Config.Providers.PlatformServices {
platformServiceCV, err := m.compGetter.GetReferencedComponentVersionRecursive(ctx, m.compGetter.RootComponentVersion(), "platform-service-"+platformService.Name)
platformServiceCVs, err := m.compGetter.GetReferencedComponentVersionsRecursive(ctx, m.compGetter.RootComponentVersion(), "platform-service-"+platformService.Name)
if err != nil {
return fmt.Errorf("failed to get component version for platform service %s: %w", platformService, err)
}
err = m.applyCRDsForComponentVersion(ctx, platformServiceCV, crdDirectory)
if len(platformServiceCVs) != 1 {
return fmt.Errorf("expected exactly one component version for platform service %s, got %d", platformService, len(platformServiceCVs))
}
err = m.applyCRDsForComponentVersion(ctx, &platformServiceCVs[0], crdDirectory)
if err != nil {
logger.Warnf("Failed to apply CRDs for platform service %s: %v", platformService, err)
}
Expand Down
21 changes: 15 additions & 6 deletions internal/deployment-repo/templater.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,15 @@ func TemplateProviders(ctx context.Context, clusterProviders, serviceProviders,
}

for _, cp := range clusterProviders {
componentVersion, err := ocmGetter.GetReferencedComponentVersionRecursive(ctx, ocmGetter.RootComponentVersion(), "cluster-provider-"+cp.Name)
componentVersions, err := ocmGetter.GetReferencedComponentVersionsRecursive(ctx, ocmGetter.RootComponentVersion(), "cluster-provider-"+cp.Name)
if err != nil {
return fmt.Errorf("failed to get component version for cluster provider %s: %w", cp, err)
}
if len(componentVersions) != 1 {
return fmt.Errorf("expected exactly one component version for cluster provider %s, got %d", cp, len(componentVersions))
}

imageResource, err := getImageResource(componentVersion)
imageResource, err := getImageResource(&componentVersions[0])
if err != nil {
return fmt.Errorf("failed to get image resource for cluster provider %s: %w", cp, err)
}
Expand All @@ -177,12 +180,15 @@ func TemplateProviders(ctx context.Context, clusterProviders, serviceProviders,
}

for _, sp := range serviceProviders {
componentVersion, err := ocmGetter.GetReferencedComponentVersionRecursive(ctx, ocmGetter.RootComponentVersion(), "service-provider-"+sp.Name)
componentVersions, err := ocmGetter.GetReferencedComponentVersionsRecursive(ctx, ocmGetter.RootComponentVersion(), "service-provider-"+sp.Name)
if err != nil {
return fmt.Errorf("failed to get component version for service provider %s: %w", sp, err)
}
if len(componentVersions) != 1 {
return fmt.Errorf("expected exactly one component version for service provider %s, got %d", sp, len(componentVersions))
}

imageResource, err := getImageResource(componentVersion)
imageResource, err := getImageResource(&componentVersions[0])
if err != nil {
return fmt.Errorf("failed to get image resource for service provider %s: %w", sp, err)
}
Expand All @@ -201,12 +207,15 @@ func TemplateProviders(ctx context.Context, clusterProviders, serviceProviders,
}

for _, ps := range platformServices {
componentVersion, err := ocmGetter.GetReferencedComponentVersionRecursive(ctx, ocmGetter.RootComponentVersion(), "platform-service-"+ps.Name)
componentVersions, err := ocmGetter.GetReferencedComponentVersionsRecursive(ctx, ocmGetter.RootComponentVersion(), "platform-service-"+ps.Name)
if err != nil {
return fmt.Errorf("failed to get component version for platform service %s: %w", ps, err)
}
if len(componentVersions) != 1 {
return fmt.Errorf("expected exactly one component version for platform service %s, got %d", ps, len(componentVersions))
}

imageResource, err := getImageResource(componentVersion)
imageResource, err := getImageResource(&componentVersions[0])
if err != nil {
return fmt.Errorf("failed to get image resource for platform service %s: %w", ps, err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,10 @@ components:
resources:
- name: image-crossplane
type: ociImage
version: v0.0.2
version: v0.0.1
access:
type: ociArtifact
imageReference: ghcr.io/openmcp-project/releasechannel/crossplane:v0.0.2
imageReference: ghcr.io/openmcp-project/releasechannel/crossplane:v0.0.1

- name: github.com/openmcp-project/openmcp/releasechannel/crossplane
version: v0.0.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ data:
key: "value"
repository: "{{OCM_REPO_URL}}"
rootComponent: "github.com/openmcp-project/openmcp"
crossplaneComponentName: "github.com/openmcp-project/openmcp/releasechannel/crossplane"
crossplaneComponentVersion: "v0.0.1"
crossplaneImage: "ghcr.io/openmcp-project/releasechannel/crossplane"
crossplaneVersions: |
- v0.0.1
- v0.0.2
crossplane: |
- crossplaneComponentName: "github.com/openmcp-project/openmcp/releasechannel/crossplane"
crossplaneComponentVersion: "v0.0.1"
crossplaneImage: "ghcr.io/openmcp-project/releasechannel/crossplane:v0.0.1"
- crossplaneComponentName: "github.com/openmcp-project/openmcp/releasechannel/crossplane"
crossplaneComponentVersion: "v0.0.2"
crossplaneImage: "ghcr.io/openmcp-project/releasechannel/crossplane:v0.0.2"
platformService: |
image: "ghcr.io/openmcp-project/images/platform-service-test"
version: "v0.3.0"
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,22 @@ data:
key: "value"
repository: "{{ getOCMRepository }}"
rootComponent: "{{ dig "component" "name" "none" (componentVersionAsMap (getRootComponentVersion)) }}"
{{- $releaseChannelCv := getComponentVersionByReference "releasechannel" }}
{{- $crossplaneCv := getComponentVersionByReference $releaseChannelCv "crossplane" }}
{{- $crossplaneImageResource := getResourceFromComponentVersion $crossplaneCv "image-crossplane" }}
{{- $imageReference := dig "access" "imageReference" "none" $crossplaneImageResource }}
{{- $parsedImage := parseImage $imageReference }}
{{- $crossplaneCvMap := componentVersionAsMap $crossplaneCv }}
crossplaneComponentName: "{{ dig "component" "name" "none" $crossplaneCvMap }}"
crossplaneComponentVersion: "{{ dig "component" "version" "none" $crossplaneCvMap }}"
crossplaneImage: "{{ dig "image" "none" $parsedImage }}"
crossplaneVersions: |
{{- $crossplaneVersions := listComponentVersions $crossplaneCv }}
{{ toYaml (sortAlpha $crossplaneVersions) | indent 4 }}
{{- $releaseChannelCvs := getComponentVersionsByReference "releasechannel" }}
{{- $releaseChannelCv := index $releaseChannelCvs 0 }}
{{- $crossplaneCvs := getComponentVersionsByReference $releaseChannelCv "crossplane" }}
crossplane: |
{{- range $crossplaneCv := $crossplaneCvs }}
{{- $crossplaneImageResource := getResourceFromComponentVersion $crossplaneCv "image-crossplane" }}
{{- $imageReference := dig "access" "imageReference" "none" $crossplaneImageResource }}
{{- $parsedImage := parseImage $imageReference }}
{{- $crossplaneCvMap := componentVersionAsMap $crossplaneCv }}
- crossplaneComponentName: "{{ dig "component" "name" "none" $crossplaneCvMap }}"
crossplaneComponentVersion: "{{ dig "component" "version" "none" $crossplaneCvMap }}"
crossplaneImage: "{{ dig "image" "none" $parsedImage }}:{{ dig "tag" "none" $parsedImage }}"
{{- end }}
platformService: |
{{- $platformServiceCv := getComponentVersionForResource "platform-service-test-image" }}
{{- $platformServiceCvs := getComponentVersionsForResource "platform-service-test-image" }}
{{- $platformServiceCv := index $platformServiceCvs 0 }}
{{- $platformServiceImageResource := getResourceFromComponentVersion $platformServiceCv "platform-service-test-image" }}
{{- $platformServiceImageReference := dig "access" "imageReference" "none" $platformServiceImageResource }}
{{- $platformServiceParsedImage := parseImage $platformServiceImageReference }}
Expand Down
6 changes: 5 additions & 1 deletion internal/eso-deployer/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,14 @@ func (d *EsoDeployer) Deploy(ctx context.Context) error {

func (d *EsoDeployer) DeployWithComponentManager(ctx context.Context, componentManager component.ComponentManager) error {
d.log.Info("Getting OCM component containing ESO resources.")
esoComponent, err := componentManager.GetComponentWithImageResources(ctx, "external-secrets-operator-image")
esoComponents, err := componentManager.GetComponentsWithImageResources(ctx, "external-secrets-operator-image")
if err != nil {
return fmt.Errorf("failed to get external-secrets-operator-image component: %w", err)
}
if len(esoComponents) != 1 {
return fmt.Errorf("expected exactly one component with external-secrets-operator-image resource, got %d", len(esoComponents))
}
esoComponent := &esoComponents[0]

esoChartRes, err := esoComponent.GetResource("external-secrets-operator-chart")
if err != nil {
Expand Down
6 changes: 5 additions & 1 deletion internal/flux_deployer/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,14 @@ func (d *FluxDeployer) DeployWithComponentManager(ctx context.Context, component
d.log.Tracef("Created repo directory: %s", d.repoDir)

// Get component which contains the fluxcd images as resources
d.fluxcdCV, err = componentManager.GetComponentWithImageResources(ctx, FluxCDSourceControllerResourceName)
fluxcdCVs, err := componentManager.GetComponentsWithImageResources(ctx, FluxCDSourceControllerResourceName)
if err != nil {
return fmt.Errorf("failed to get fluxcd source controller component version: %w", err)
}
if len(fluxcdCVs) != 1 {
return fmt.Errorf("expected exactly one fluxcd component version with resource %s, got %d", FluxCDSourceControllerResourceName, len(fluxcdCVs))
}
d.fluxcdCV = &fluxcdCVs[0]

// Download resource from gitops-templates component into the download directory
d.log.Info("Downloading templates")
Expand Down
Loading