Skip to content

Commit e4a1377

Browse files
author
Mikalai Radchuk
committed
Move bundle variable code into a func
Signed-off-by: Mikalai Radchuk <[email protected]>
1 parent 0d2e471 commit e4a1377

File tree

3 files changed

+406
-45
lines changed

3 files changed

+406
-45
lines changed

internal/resolution/variablesources/bundle.go

Lines changed: 70 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,59 +5,32 @@ import (
55
"fmt"
66
"sort"
77

8+
"k8s.io/apimachinery/pkg/util/sets"
9+
810
"github.com/operator-framework/deppy/pkg/deppy"
911
"github.com/operator-framework/deppy/pkg/deppy/input"
10-
"k8s.io/apimachinery/pkg/util/sets"
1112

1213
"github.com/operator-framework/operator-controller/internal/catalogmetadata"
1314
catalogfilter "github.com/operator-framework/operator-controller/internal/catalogmetadata/filter"
1415
catalogsort "github.com/operator-framework/operator-controller/internal/catalogmetadata/sort"
1516
olmvariables "github.com/operator-framework/operator-controller/internal/resolution/variables"
1617
)
1718

18-
var _ input.VariableSource = &BundlesAndDepsVariableSource{}
19-
20-
type BundlesAndDepsVariableSource struct {
21-
catalogClient BundleProvider
22-
variableSources []input.VariableSource
23-
}
24-
25-
func NewBundlesAndDepsVariableSource(catalogClient BundleProvider, inputVariableSources ...input.VariableSource) *BundlesAndDepsVariableSource {
26-
return &BundlesAndDepsVariableSource{
27-
catalogClient: catalogClient,
28-
variableSources: inputVariableSources,
29-
}
30-
}
31-
32-
func (b *BundlesAndDepsVariableSource) GetVariables(ctx context.Context) ([]deppy.Variable, error) {
33-
var variables []deppy.Variable
34-
35-
// extract required package variables
36-
for _, variableSource := range b.variableSources {
37-
inputVariables, err := variableSource.GetVariables(ctx)
38-
if err != nil {
39-
return nil, err
40-
}
41-
variables = append(variables, inputVariables...)
42-
}
43-
44-
// create bundle queue for dependency resolution
19+
func MakeBundleVariables(
20+
allBundles []*catalogmetadata.Bundle,
21+
requiredPackages []*olmvariables.RequiredPackageVariable,
22+
installedPackages []*olmvariables.InstalledPackageVariable,
23+
) ([]*olmvariables.BundleVariable, error) {
4524
var bundleQueue []*catalogmetadata.Bundle
46-
for _, variable := range variables {
47-
switch v := variable.(type) {
48-
case *olmvariables.RequiredPackageVariable:
49-
bundleQueue = append(bundleQueue, v.Bundles()...)
50-
case *olmvariables.InstalledPackageVariable:
51-
bundleQueue = append(bundleQueue, v.Bundles()...)
52-
}
25+
for _, variable := range requiredPackages {
26+
bundleQueue = append(bundleQueue, variable.Bundles()...)
5327
}
54-
55-
allBundles, err := b.catalogClient.Bundles(ctx)
56-
if err != nil {
57-
return nil, err
28+
for _, variable := range installedPackages {
29+
bundleQueue = append(bundleQueue, variable.Bundles()...)
5830
}
5931

6032
// build bundle and dependency variables
33+
var result []*olmvariables.BundleVariable
6134
visited := sets.Set[deppy.Identifier]{}
6235
for len(bundleQueue) > 0 {
6336
// pop head of queue
@@ -73,7 +46,7 @@ func (b *BundlesAndDepsVariableSource) GetVariables(ctx context.Context) ([]depp
7346
visited.Insert(id)
7447

7548
// get bundle dependencies
76-
dependencies, err := b.filterBundleDependencies(allBundles, head)
49+
dependencies, err := filterBundleDependencies(allBundles, head)
7750
if err != nil {
7851
return nil, fmt.Errorf("could not determine dependencies for bundle with id '%s': %w", id, err)
7952
}
@@ -82,21 +55,23 @@ func (b *BundlesAndDepsVariableSource) GetVariables(ctx context.Context) ([]depp
8255
bundleQueue = append(bundleQueue, dependencies...)
8356

8457
// create variable
85-
variables = append(variables, olmvariables.NewBundleVariable(head, dependencies))
58+
result = append(result, olmvariables.NewBundleVariable(head, dependencies))
8659
}
8760

88-
return variables, nil
61+
return result, nil
8962
}
9063

91-
func (b *BundlesAndDepsVariableSource) filterBundleDependencies(allBundles []*catalogmetadata.Bundle, bundle *catalogmetadata.Bundle) ([]*catalogmetadata.Bundle, error) {
64+
func filterBundleDependencies(allBundles []*catalogmetadata.Bundle, bundle *catalogmetadata.Bundle) ([]*catalogmetadata.Bundle, error) {
9265
var dependencies []*catalogmetadata.Bundle
9366
added := sets.Set[deppy.Identifier]{}
9467

9568
// gather required package dependencies
96-
// todo(perdasilva): disambiguate between not found and actual errors
9769
requiredPackages, _ := bundle.RequiredPackages()
9870
for _, requiredPackage := range requiredPackages {
99-
packageDependencyBundles := catalogfilter.Filter(allBundles, catalogfilter.And(catalogfilter.WithPackageName(requiredPackage.PackageName), catalogfilter.InBlangSemverRange(requiredPackage.SemverRange)))
71+
packageDependencyBundles := catalogfilter.Filter(allBundles, catalogfilter.And(
72+
catalogfilter.WithPackageName(requiredPackage.PackageName),
73+
catalogfilter.InBlangSemverRange(requiredPackage.SemverRange),
74+
))
10075
if len(packageDependencyBundles) == 0 {
10176
return nil, fmt.Errorf("could not find package dependencies for bundle '%s'", bundle.Name)
10277
}
@@ -117,3 +92,53 @@ func (b *BundlesAndDepsVariableSource) filterBundleDependencies(allBundles []*ca
11792

11893
return dependencies, nil
11994
}
95+
96+
type BundlesAndDepsVariableSource struct {
97+
catalogClient BundleProvider
98+
variableSources []input.VariableSource
99+
}
100+
101+
func NewBundlesAndDepsVariableSource(catalogClient BundleProvider, inputVariableSources ...input.VariableSource) *BundlesAndDepsVariableSource {
102+
return &BundlesAndDepsVariableSource{
103+
catalogClient: catalogClient,
104+
variableSources: inputVariableSources,
105+
}
106+
}
107+
108+
func (b *BundlesAndDepsVariableSource) GetVariables(ctx context.Context) ([]deppy.Variable, error) {
109+
variables := []deppy.Variable{}
110+
111+
for _, variableSource := range b.variableSources {
112+
inputVariables, err := variableSource.GetVariables(ctx)
113+
if err != nil {
114+
return nil, err
115+
}
116+
variables = append(variables, inputVariables...)
117+
}
118+
119+
allBundles, err := b.catalogClient.Bundles(ctx)
120+
if err != nil {
121+
return nil, err
122+
}
123+
124+
requiredPackages := []*olmvariables.RequiredPackageVariable{}
125+
installedPackages := []*olmvariables.InstalledPackageVariable{}
126+
for _, variable := range variables {
127+
switch v := variable.(type) {
128+
case *olmvariables.RequiredPackageVariable:
129+
requiredPackages = append(requiredPackages, v)
130+
case *olmvariables.InstalledPackageVariable:
131+
installedPackages = append(installedPackages, v)
132+
}
133+
}
134+
135+
bundles, err := MakeBundleVariables(allBundles, requiredPackages, installedPackages)
136+
if err != nil {
137+
return nil, err
138+
}
139+
140+
for _, v := range bundles {
141+
variables = append(variables, v)
142+
}
143+
return variables, nil
144+
}

0 commit comments

Comments
 (0)