Skip to content

Commit 3e231aa

Browse files
committed
integrate resolver with reconciler
Signed-off-by: perdasilva <[email protected]>
1 parent c2e96f3 commit 3e231aa

File tree

3 files changed

+99
-35
lines changed

3 files changed

+99
-35
lines changed

controllers/operator_controller.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,10 @@ func (r *OperatorReconciler) reconcile(ctx context.Context, op *operatorsv1alpha
113113

114114
// todo(perdasilva): more hacks - need to fix up the solution structure to be more useful
115115
packageVariableIDMap := map[string]string{}
116-
if solution != nil {
117-
for variableID, ok := range solution {
118-
if ok {
119-
idComponents := strings.Split(string(variableID), "/")
120-
packageVariableIDMap[idComponents[1]] = string(variableID)
121-
}
116+
for variableID, ok := range solution {
117+
if ok {
118+
idComponents := strings.Split(string(variableID), "/")
119+
packageVariableIDMap[idComponents[1]] = string(variableID)
122120
}
123121
}
124122

controllers/suite_test.go

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,39 @@ import (
2121
"fmt"
2222
"path/filepath"
2323
"testing"
24+
"time"
2425

2526
. "github.com/onsi/ginkgo/v2"
2627
. "github.com/onsi/gomega"
27-
28+
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
29+
"github.com/operator-framework/operator-controller/controllers"
30+
operatorutil "github.com/operator-framework/operator-controller/internal/util"
2831
apimeta "k8s.io/apimachinery/pkg/api/meta"
2932
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30-
"k8s.io/apimachinery/pkg/types"
3133
"k8s.io/apimachinery/pkg/util/rand"
3234
"k8s.io/client-go/kubernetes/scheme"
3335
"k8s.io/client-go/rest"
36+
ctrl "sigs.k8s.io/controller-runtime"
3437
"sigs.k8s.io/controller-runtime/pkg/client"
3538
"sigs.k8s.io/controller-runtime/pkg/envtest"
3639
logf "sigs.k8s.io/controller-runtime/pkg/log"
3740
"sigs.k8s.io/controller-runtime/pkg/log/zap"
38-
"sigs.k8s.io/controller-runtime/pkg/reconcile"
39-
40-
operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
41-
"github.com/operator-framework/operator-controller/controllers"
42-
operatorutil "github.com/operator-framework/operator-controller/internal/util"
4341
//+kubebuilder:scaffold:imports
4442
)
4543

4644
// These tests use Ginkgo (BDD-style Go testing framework). Refer to
4745
// http://onsi.github.io/ginkgo/ to learn more about Ginkgo.
4846

49-
var cfg *rest.Config
50-
var k8sClient client.Client
51-
var testEnv *envtest.Environment
47+
var (
48+
cfg *rest.Config
49+
k8sClient client.Client
50+
testEnv *envtest.Environment
51+
ctx context.Context
52+
cancel context.CancelFunc
53+
)
5254

5355
func TestAPIs(t *testing.T) {
5456
RegisterFailHandler(Fail)
55-
5657
RunSpecs(t, "Controller Suite")
5758
}
5859

@@ -80,15 +81,39 @@ var _ = BeforeSuite(func() {
8081
Expect(err).NotTo(HaveOccurred())
8182
Expect(k8sClient).NotTo(BeNil())
8283

84+
k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{
85+
Scheme: scheme.Scheme,
86+
})
87+
Expect(err).ToNot(HaveOccurred())
88+
89+
err = (&controllers.OperatorReconciler{
90+
Client: k8sManager.GetClient(),
91+
Scheme: k8sManager.GetScheme(),
92+
}).SetupWithManager(k8sManager)
93+
Expect(err).ToNot(HaveOccurred())
94+
95+
ctx, cancel = context.WithCancel(context.Background())
96+
go func() {
97+
defer GinkgoRecover()
98+
err = k8sManager.Start(ctx)
99+
Expect(err).ToNot(HaveOccurred(), "failed to run manager")
100+
}()
101+
83102
})
84103

85104
var _ = AfterSuite(func() {
105+
cancel()
86106
By("tearing down the test environment")
87107
err := testEnv.Stop()
88108
Expect(err).NotTo(HaveOccurred())
89109
})
90110

91111
var _ = Describe("Reconcile Test", func() {
112+
const (
113+
timeout = time.Second * 10
114+
interval = time.Millisecond * 250
115+
)
116+
92117
When("an Operator is created", func() {
93118
var (
94119
operator *operatorsv1alpha1.Operator
@@ -99,10 +124,8 @@ var _ = Describe("Reconcile Test", func() {
99124
)
100125
BeforeEach(func() {
101126
ctx = context.Background()
102-
103127
opName = fmt.Sprintf("operator-test-%s", rand.String(8))
104128
pkgName = fmt.Sprintf("package-test-%s", rand.String(8))
105-
106129
operator = &operatorsv1alpha1.Operator{
107130
ObjectMeta: metav1.ObjectMeta{
108131
Name: opName,
@@ -113,29 +136,21 @@ var _ = Describe("Reconcile Test", func() {
113136
}
114137
err = k8sClient.Create(ctx, operator)
115138
Expect(err).To(Not(HaveOccurred()))
116-
117-
or := controllers.OperatorReconciler{
118-
k8sClient,
119-
scheme.Scheme,
120-
}
121-
_, err = or.Reconcile(ctx, reconcile.Request{
122-
NamespacedName: types.NamespacedName{
123-
Name: opName,
124-
},
125-
})
126-
Expect(err).To(Not(HaveOccurred()))
127139
})
128140
AfterEach(func() {
129141
err = k8sClient.Delete(ctx, operator)
130142
Expect(err).To(Not(HaveOccurred()))
131143
})
132144
It("has all Conditions created", func() {
133145
op := &operatorsv1alpha1.Operator{}
134-
135-
err = k8sClient.Get(ctx, client.ObjectKey{
136-
Name: opName,
137-
}, op)
138-
Expect(err).To(Not(HaveOccurred()))
146+
opLookupKey := client.ObjectKey{Name: opName}
147+
Eventually(func() bool {
148+
err := k8sClient.Get(ctx, opLookupKey, op)
149+
if err != nil {
150+
return false
151+
}
152+
return len(op.Status.Conditions) > 0
153+
}, timeout, interval).Should(BeTrue())
139154

140155
// All defined condition Types MUST exist after reconciliation
141156
conds := op.Status.Conditions

internal/resolution/bundle_cache.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package resolution
2+
3+
import (
4+
"github.com/operator-framework/deppy/pkg/deppy"
5+
"github.com/operator-framework/deppy/pkg/deppy/input"
6+
)
7+
8+
var HardcodedEntitySource = input.NewCacheQuerier(map[deppy.Identifier]input.Entity{
9+
"operatorhub/prometheus/0.14.0": *input.NewEntity("operatorhub/prometheus/0.14.0", map[string]string{
10+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:c78cc60ad05445f423c66e37c464bc9f520f0c0741cfd351b4f839ae0b99bd4b"`,
11+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0}",
12+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"}]",
13+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.14.0\"}",
14+
}),
15+
"operatorhub/prometheus/0.15.0": *input.NewEntity("operatorhub/prometheus/0.15.0", map[string]string{
16+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:0a5a122cef6fabebcb82122bb4f5c4fbfa205454d109987b8af71672c8ac5c0e"`,
17+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0,\"replaces\":\"prometheusoperator.0.14.0\"}",
18+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"}]",
19+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.15.0\"}",
20+
}),
21+
"operatorhub/prometheus/0.22.2": *input.NewEntity("operatorhub/prometheus/0.22.2", map[string]string{
22+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:f24b92e70ffb3bf33cc2a142f8b7a6519d28c90aa5742ddd37ac4fcecb5e5a52"`,
23+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0,\"replaces\":\"prometheusoperator.0.15.0\"}",
24+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"}]",
25+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.22.2\"}",
26+
}),
27+
"operatorhub/prometheus/0.27.0": *input.NewEntity("operatorhub/prometheus/0.27.0", map[string]string{
28+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:7aace7b24fa2587c61d37d8676e23ea24dce03f1751b94614c6af60fba364f63"`,
29+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0,\"replaces\":\"prometheusoperator.0.22.2\"}",
30+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"}]",
31+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.27.0\"}",
32+
}),
33+
"operatorhub/prometheus/0.32.0": *input.NewEntity("operatorhub/prometheus/0.32.0", map[string]string{
34+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:14f75077f01feab351f7a046ccfcff6ad357bed2393048d0f6a41f6e64c63278"`,
35+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0,\"replaces\":\"prometheusoperator.0.27.0\"}",
36+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PodMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PodMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"}]",
37+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.32.0\"}",
38+
}),
39+
"operatorhub/prometheus/0.37.0": *input.NewEntity("operatorhub/prometheus/0.37.0", map[string]string{
40+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:3e281e587de3d03011440685fc4fb782672beab044c1ebadc42788ce05a21c35"`,
41+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0,\"replaces\":\"prometheusoperator.0.32.0\"}",
42+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PodMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PodMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ThanosRuler\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ThanosRuler\",\"version\":\"v1\"}]",
43+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.37.0\"}",
44+
}),
45+
"operatorhub/prometheus/0.47.0": *input.NewEntity("operatorhub/prometheus/0.47.0", map[string]string{
46+
"olm.bundle.path": `"quay.io/operatorhubio/prometheus@sha256:5b04c49d8d3eff6a338b56ec90bdf491d501fe301c9cdfb740e5bff6769a21ed"`,
47+
"olm.channel": "{\"channelName\":\"beta\",\"priority\":0,\"replaces\":\"prometheusoperator.0.37.0\"}",
48+
"olm.gvk": "[{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Alertmanager\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"AlertmanagerConfig\",\"version\":\"v1alpha1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"AlertmanagerConfig\",\"version\":\"v1alpha1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PodMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PodMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Probe\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Probe\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"Prometheus\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"PrometheusRule\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ServiceMonitor\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ThanosRuler\",\"version\":\"v1\"},{\"group\":\"monitoring.coreos.com\",\"kind\":\"ThanosRuler\",\"version\":\"v1\"}]",
49+
"olm.package": "{\"packageName\":\"prometheus\",\"version\":\"0.47.0\"}",
50+
}),
51+
})

0 commit comments

Comments
 (0)