@@ -22,8 +22,7 @@ import (
22
22
"fmt"
23
23
"os"
24
24
25
- "github.com/operator-framework/deppy/pkg/deppy/solver"
26
- rukpakv1alpha1 "github.com/operator-framework/rukpak/api/v1alpha1"
25
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
26
"k8s.io/apimachinery/pkg/runtime"
28
27
"k8s.io/apimachinery/pkg/runtime/serializer"
29
28
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -32,24 +31,25 @@ import (
32
31
"sigs.k8s.io/controller-runtime/pkg/client/fake"
33
32
34
33
catalogd "github.com/operator-framework/catalogd/api/core/v1alpha1"
34
+ "github.com/operator-framework/deppy/pkg/deppy/solver"
35
+ rukpakv1alpha1 "github.com/operator-framework/rukpak/api/v1alpha1"
35
36
36
37
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
37
38
"github.com/operator-framework/operator-controller/internal/catalogmetadata"
38
39
"github.com/operator-framework/operator-controller/internal/controllers"
39
40
olmvariables "github.com/operator-framework/operator-controller/internal/resolution/variables"
40
- "github.com/operator-framework/operator-controller/internal/resolution/variablesources"
41
41
)
42
42
43
43
const pocMessage = `This command is a proof of concept for off-cluster resolution and is not intended for production use!
44
44
45
45
Please provide your feedback and ideas via https://github.com/operator-framework/operator-controller/discussions/262`
46
46
47
47
const (
48
- flagNamePackageName = "package-name"
49
- flagNamePackageVersion = "package-version"
50
- flagNamePackageChannel = "package-channel"
51
- flagNameIndexRef = "index-ref"
52
- flagNameInputDir = "input-dir"
48
+ flagNamePackageName = "package-name"
49
+ flagNamePackageVersionRange = "package-version"
50
+ flagNamePackageChannel = "package-channel"
51
+ flagNameIndexRef = "index-ref"
52
+ flagNameInputDir = "input-dir"
53
53
)
54
54
55
55
var (
@@ -71,12 +71,12 @@ func main() {
71
71
ctx := context .Background ()
72
72
73
73
var packageName string
74
- var packageVersion string
74
+ var packageVersionRange string
75
75
var packageChannel string
76
76
var indexRef string
77
77
var inputDir string
78
78
flag .StringVar (& packageName , flagNamePackageName , "" , "Name of the package to resolve" )
79
- flag .StringVar (& packageVersion , flagNamePackageVersion , "" , "Version of the package" )
79
+ flag .StringVar (& packageVersionRange , flagNamePackageVersionRange , "" , "Version or version range of the package" )
80
80
flag .StringVar (& packageChannel , flagNamePackageChannel , "" , "Channel of the package" )
81
81
// TODO: Consider adding support of multiple refs
82
82
flag .StringVar (& indexRef , flagNameIndexRef , "" , "Index reference (FBC image or dir)" )
@@ -89,7 +89,7 @@ func main() {
89
89
os .Exit (1 )
90
90
}
91
91
92
- err := run (ctx , packageName , packageVersion , packageChannel , indexRef , inputDir )
92
+ err := run (ctx , packageName , packageChannel , packageVersionRange , indexRef , inputDir )
93
93
if err != nil {
94
94
fmt .Fprintln (os .Stderr , err )
95
95
os .Exit (1 )
@@ -108,7 +108,19 @@ func validateFlags(packageName, indexRef string) error {
108
108
return nil
109
109
}
110
110
111
- func run (ctx context.Context , packageName , packageVersion , packageChannel , indexRef , inputDir string ) error {
111
+ func run (ctx context.Context , packageName , packageChannel , packageVersionRange , indexRef , inputDir string ) error {
112
+ // Using the fake Kubernetes client and creating objects
113
+ // in it from manifests & CLI flags is fine for PoC.
114
+ // But when/if we decide to proceed with CLI/offline resolution
115
+ // we will need to come up with a better way to create inputs
116
+ // for resolver when working with CLI.
117
+ //
118
+ // We will need to think about multiple types of inputs:
119
+ // - How to read required package (what we want to install/update)
120
+ // - How to read bundles from multiple catalogs
121
+ // - How to take into account cluster information. Some package
122
+ // will have constraints like "need Kubernetes version to be >= X"
123
+ // or "need >= 3 worker nodes").
112
124
clientBuilder := fake .NewClientBuilder ().WithScheme (scheme )
113
125
114
126
if inputDir != "" {
@@ -120,14 +132,22 @@ func run(ctx context.Context, packageName, packageVersion, packageChannel, index
120
132
clientBuilder .WithRuntimeObjects (objects ... )
121
133
}
122
134
135
+ clientBuilder .WithRuntimeObjects (& operatorsv1alpha1.Operator {
136
+ ObjectMeta : metav1.ObjectMeta {
137
+ Name : "resolutioncli-input-operator" ,
138
+ },
139
+ Spec : operatorsv1alpha1.OperatorSpec {
140
+ PackageName : packageName ,
141
+ Channel : packageChannel ,
142
+ Version : packageVersionRange ,
143
+ },
144
+ })
145
+
123
146
cl := clientBuilder .Build ()
124
147
catalogClient := newIndexRefClient (indexRef )
125
148
126
149
resolver := solver .NewDeppySolver (
127
- append (
128
- variablesources.NestedVariableSource {newPackageVariableSource (catalogClient , packageName , packageVersion , packageChannel )},
129
- controllers .NewVariableSource (cl , catalogClient )... ,
130
- ),
150
+ controllers .NewVariableSource (cl , catalogClient ),
131
151
)
132
152
133
153
bundleImage , err := resolve (ctx , resolver , packageName )
0 commit comments