@@ -17,28 +17,90 @@ limitations under the License.
17
17
package main
18
18
19
19
import (
20
+ "context"
21
+
22
+ "github.com/operator-framework/deppy/pkg/deppy"
20
23
"github.com/operator-framework/deppy/pkg/deppy/input"
24
+ rukpakv1alpha1 "github.com/operator-framework/rukpak/api/v1alpha1"
25
+ "sigs.k8s.io/controller-runtime/pkg/client"
21
26
27
+ operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
28
+ olmvariables "github.com/operator-framework/operator-controller/internal/resolution/variables"
22
29
"github.com/operator-framework/operator-controller/internal/resolution/variablesources"
23
30
)
24
31
25
- func newPackageVariableSource (catalogClient * indexRefClient , packageName , packageVersion , packageChannel string ) func (inputVariableSource input.VariableSource ) (input.VariableSource , error ) {
26
- return func (inputVariableSource input.VariableSource ) (input.VariableSource , error ) {
27
- pkgSource , err := variablesources .NewRequiredPackageVariableSource (
28
- catalogClient ,
29
- packageName ,
30
- variablesources .InVersionRange (packageVersion ),
31
- variablesources .InChannel (packageChannel ),
32
- )
33
- if err != nil {
34
- return nil , err
35
- }
36
-
37
- sliceSource := variablesources.SliceVariableSource {pkgSource }
38
- if inputVariableSource != nil {
39
- sliceSource = append (sliceSource , inputVariableSource )
40
- }
41
-
42
- return sliceSource , nil
32
+ var _ input.VariableSource = & OfflineOLMVariableSource {}
33
+
34
+ type OfflineOLMVariableSource struct {
35
+ client client.Client
36
+ catalogClient * indexRefClient
37
+
38
+ packageName string
39
+ packageChannel string
40
+ packageVersionRange string
41
+ }
42
+
43
+ func NewOfflineOLMVariableSource (cl client.Client , catalogClient * indexRefClient , packageName , packageChannel , packageVersionRange string ) * OfflineOLMVariableSource {
44
+ return & OfflineOLMVariableSource {
45
+ client : cl ,
46
+ catalogClient : catalogClient ,
47
+
48
+ packageName : packageName ,
49
+ packageChannel : packageChannel ,
50
+ packageVersionRange : packageVersionRange ,
51
+ }
52
+ }
53
+
54
+ func (o * OfflineOLMVariableSource ) GetVariables (ctx context.Context ) ([]deppy.Variable , error ) {
55
+ operatorList := operatorsv1alpha1.OperatorList {}
56
+ if err := o .client .List (ctx , & operatorList ); err != nil {
57
+ return nil , err
58
+ }
59
+
60
+ bundleDeployments := rukpakv1alpha1.BundleDeploymentList {}
61
+ if err := o .client .List (ctx , & bundleDeployments ); err != nil {
62
+ return nil , err
63
+ }
64
+
65
+ allBundles , err := o .catalogClient .Bundles (ctx )
66
+ if err != nil {
67
+ return nil , err
68
+ }
69
+
70
+ requiredPackages := []* olmvariables.RequiredPackageVariable {}
71
+ requiredPackage , err := variablesources .RequiredPackageVariable (allBundles , o .packageName , o .packageChannel , o .packageVersionRange )
72
+ if err != nil {
73
+ return nil , err
74
+ }
75
+ requiredPackages = append (requiredPackages , requiredPackage )
76
+
77
+ installedPackages , err := variablesources .InstalledPackageVariables (allBundles , bundleDeployments .Items )
78
+ if err != nil {
79
+ return nil , err
80
+ }
81
+
82
+ bundles , err := variablesources .BundleVariables (allBundles , requiredPackages , installedPackages )
83
+ if err != nil {
84
+ return nil , err
85
+ }
86
+
87
+ bundleUniqueness , err := variablesources .BundleUniquenessVariables (bundles )
88
+ if err != nil {
89
+ return nil , err
90
+ }
91
+
92
+ result := []deppy.Variable {}
93
+ for _ , v := range requiredPackages {
94
+ result = append (result , v )
95
+ }
96
+ for _ , v := range installedPackages {
97
+ result = append (result , v )
98
+ }
99
+ for _ , v := range bundles {
100
+ result = append (result , v )
101
+ }
102
+ for _ , v := range bundleUniqueness {
103
+ result = append (result , v )
43
104
}
105
+ return result , nil
44
106
}
0 commit comments