Skip to content

Commit 7411e68

Browse files
authored
Remove offline resolution CLI variable source (#495)
Signed-off-by: Mikalai Radchuk <[email protected]>
1 parent 7156464 commit 7411e68

File tree

2 files changed

+36
-60
lines changed

2 files changed

+36
-60
lines changed

cmd/resolutioncli/main.go

+36-16
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ import (
2222
"fmt"
2323
"os"
2424

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"
2726
"k8s.io/apimachinery/pkg/runtime"
2827
"k8s.io/apimachinery/pkg/runtime/serializer"
2928
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -32,24 +31,25 @@ import (
3231
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3332

3433
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"
3536

3637
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
3738
"github.com/operator-framework/operator-controller/internal/catalogmetadata"
3839
"github.com/operator-framework/operator-controller/internal/controllers"
3940
olmvariables "github.com/operator-framework/operator-controller/internal/resolution/variables"
40-
"github.com/operator-framework/operator-controller/internal/resolution/variablesources"
4141
)
4242

4343
const pocMessage = `This command is a proof of concept for off-cluster resolution and is not intended for production use!
4444
4545
Please provide your feedback and ideas via https://github.com/operator-framework/operator-controller/discussions/262`
4646

4747
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"
5353
)
5454

5555
var (
@@ -71,12 +71,12 @@ func main() {
7171
ctx := context.Background()
7272

7373
var packageName string
74-
var packageVersion string
74+
var packageVersionRange string
7575
var packageChannel string
7676
var indexRef string
7777
var inputDir string
7878
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")
8080
flag.StringVar(&packageChannel, flagNamePackageChannel, "", "Channel of the package")
8181
// TODO: Consider adding support of multiple refs
8282
flag.StringVar(&indexRef, flagNameIndexRef, "", "Index reference (FBC image or dir)")
@@ -89,7 +89,7 @@ func main() {
8989
os.Exit(1)
9090
}
9191

92-
err := run(ctx, packageName, packageVersion, packageChannel, indexRef, inputDir)
92+
err := run(ctx, packageName, packageChannel, packageVersionRange, indexRef, inputDir)
9393
if err != nil {
9494
fmt.Fprintln(os.Stderr, err)
9595
os.Exit(1)
@@ -108,7 +108,19 @@ func validateFlags(packageName, indexRef string) error {
108108
return nil
109109
}
110110

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").
112124
clientBuilder := fake.NewClientBuilder().WithScheme(scheme)
113125

114126
if inputDir != "" {
@@ -120,14 +132,22 @@ func run(ctx context.Context, packageName, packageVersion, packageChannel, index
120132
clientBuilder.WithRuntimeObjects(objects...)
121133
}
122134

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+
123146
cl := clientBuilder.Build()
124147
catalogClient := newIndexRefClient(indexRef)
125148

126149
resolver := solver.NewDeppySolver(
127-
append(
128-
variablesources.NestedVariableSource{newPackageVariableSource(catalogClient, packageName, packageVersion, packageChannel)},
129-
controllers.NewVariableSource(cl, catalogClient)...,
130-
),
150+
controllers.NewVariableSource(cl, catalogClient),
131151
)
132152

133153
bundleImage, err := resolve(ctx, resolver, packageName)

cmd/resolutioncli/variable_source.go

-44
This file was deleted.

0 commit comments

Comments
 (0)