Skip to content

Commit 39a378f

Browse files
Merge pull request #1018 from jpeeler/add-fields-related-objects-2
Bug 1717636: Add proper name to related objects
2 parents db97a17 + c799a51 commit 39a378f

File tree

3 files changed

+64
-27
lines changed

3 files changed

+64
-27
lines changed

cmd/catalog/main.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
utilclock "k8s.io/apimachinery/pkg/util/clock"
1717
"k8s.io/client-go/tools/clientcmd"
1818

19+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client"
1920
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/operators/catalog"
2021
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
2122
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorstatus"
@@ -162,6 +163,10 @@ func main() {
162163
log.Fatalf("error configuring client: %s", err.Error())
163164
}
164165
opClient := operatorclient.NewClientFromConfig(*kubeConfigPath, logger)
166+
crClient, err := client.NewClient(*kubeConfigPath)
167+
if err != nil {
168+
log.Fatalf("error configuring client: %s", err.Error())
169+
}
165170

166171
// Create a new instance of the operator.
167172
op, err := catalog.NewOperator(ctx, *kubeConfigPath, utilclock.RealClock{}, logger, *wakeupInterval, *configmapServerImage, *catalogNamespace, namespaces...)
@@ -173,7 +178,7 @@ func main() {
173178
<-op.Ready()
174179

175180
if *writeStatusName != "" {
176-
operatorstatus.MonitorClusterStatus(*writeStatusName, *catalogNamespace, op.AtLevel(), op.Done(), opClient, configClient)
181+
operatorstatus.MonitorClusterStatus(*writeStatusName, op.AtLevel(), op.Done(), opClient, configClient, crClient)
177182
}
178183

179184
<-op.Done()

cmd/olm/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func main() {
196196
<-op.Ready()
197197

198198
if *writeStatusName != "" {
199-
operatorstatus.MonitorClusterStatus(*writeStatusName, *namespace, op.AtLevel(), ctx.Done(), opClient, configClient)
199+
operatorstatus.MonitorClusterStatus(*writeStatusName, op.AtLevel(), ctx.Done(), opClient, configClient, crClient)
200200
}
201201

202202
if *writePackageServerStatusName != "" {

pkg/lib/operatorstatus/status.go

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@ import (
88

99
configv1 "github.com/openshift/api/config/v1"
1010
configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
11+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
1112
log "github.com/sirupsen/logrus"
1213
corev1 "k8s.io/api/core/v1"
1314
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1415
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1516
"k8s.io/apimachinery/pkg/runtime/schema"
17+
"k8s.io/apimachinery/pkg/util/diff"
1618
"k8s.io/apimachinery/pkg/util/wait"
1719
"k8s.io/client-go/discovery"
1820

19-
olmv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1"
2021
olmv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
2122
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
2223
olmversion "github.com/operator-framework/operator-lifecycle-manager/pkg/version"
@@ -25,9 +26,10 @@ import (
2526
const (
2627
clusterOperatorOLM = "operator-lifecycle-manager"
2728
clusterOperatorCatalogSource = "operator-lifecycle-manager-catalog"
29+
openshiftNamespace = "openshift-operator-lifecycle-manager"
2830
)
2931

30-
func MonitorClusterStatus(name, namespace string, syncCh <-chan error, stopCh <-chan struct{}, opClient operatorclient.ClientInterface, configClient configv1client.ConfigV1Interface) {
32+
func MonitorClusterStatus(name string, syncCh <-chan error, stopCh <-chan struct{}, opClient operatorclient.ClientInterface, configClient configv1client.ConfigV1Interface, crClient versioned.Interface) {
3133
var (
3234
syncs int
3335
successfulSyncs int
@@ -113,11 +115,14 @@ func MonitorClusterStatus(name, namespace string, syncCh <-chan error, stopCh <-
113115
},
114116
},
115117
})
116-
created.Status.RelatedObjects = relatedObjects(name, namespace)
117118
if createErr != nil {
118119
log.Errorf("Failed to create cluster operator: %v\n", createErr)
119120
return
120121
}
122+
created.Status.RelatedObjects, err = relatedObjects(name, opClient, crClient)
123+
if err != nil {
124+
log.Errorf("Failed to get related objects: %v", err)
125+
}
121126
existing = created
122127
err = nil
123128
}
@@ -198,6 +203,16 @@ func MonitorClusterStatus(name, namespace string, syncCh <-chan error, stopCh <-
198203
// TODO: use % errors within a window to report available
199204
}
200205

206+
// always update the related objects in case changes have occurred
207+
existing.Status.RelatedObjects, err = relatedObjects(name, opClient, crClient)
208+
if err != nil {
209+
log.Errorf("Failed to get related objects: %v", err)
210+
}
211+
if !reflect.DeepEqual(previousStatus.RelatedObjects, existing.Status.RelatedObjects) {
212+
diffString := diff.ObjectDiff(previousStatus.RelatedObjects, existing.Status.RelatedObjects)
213+
log.Debugf("Update required for related objects: %v", diffString)
214+
}
215+
201216
// update the status
202217
if !reflect.DeepEqual(previousStatus, &existing.Status) {
203218
if _, err := configClient.ClusterOperators().UpdateStatus(existing); err != nil {
@@ -246,38 +261,55 @@ func findOperatorStatusCondition(conditions []configv1.ClusterOperatorStatusCond
246261

247262
// relatedObjects returns RelatedObjects in the ClusterOperator.Status.
248263
// RelatedObjects are consumed by https://github.com/openshift/must-gather
249-
func relatedObjects(name, namespace string) []configv1.ObjectReference {
264+
func relatedObjects(name string, opClient operatorclient.ClientInterface, crClient versioned.Interface) ([]configv1.ObjectReference, error) {
250265
var objectReferences []configv1.ObjectReference
266+
log.Infof("Adding related objects for %v", name)
267+
namespace := openshiftNamespace // hard-coded to constant
268+
251269
switch name {
252270
case clusterOperatorOLM:
253-
objectReferences = []configv1.ObjectReference{
254-
{
255-
Group: olmv1.GroupName,
256-
Resource: olmv1.OperatorGroupKind,
257-
Namespace: namespace,
258-
Name: clusterOperatorOLM,
259-
},
260-
{
271+
csvList, err := crClient.OperatorsV1alpha1().ClusterServiceVersions(namespace).List(metav1.ListOptions{})
272+
if err != nil {
273+
return nil, err
274+
}
275+
276+
for _, csv := range csvList.Items {
277+
if csv.IsCopied() {
278+
continue
279+
}
280+
objectReferences = append(objectReferences, configv1.ObjectReference{
261281
Group: olmv1alpha1.GroupName,
262282
Resource: olmv1alpha1.ClusterServiceVersionKind,
263-
Namespace: namespace,
264-
Name: clusterOperatorOLM,
265-
},
283+
Namespace: csv.GetNamespace(),
284+
Name: csv.GetName(),
285+
})
266286
}
267287
case clusterOperatorCatalogSource:
268-
objectReferences = []configv1.ObjectReference{
269-
{
288+
subList, err := crClient.OperatorsV1alpha1().Subscriptions(namespace).List(metav1.ListOptions{})
289+
if err != nil {
290+
return nil, err
291+
}
292+
293+
installPlanList, err := crClient.OperatorsV1alpha1().InstallPlans(namespace).List(metav1.ListOptions{})
294+
if err != nil {
295+
return nil, err
296+
}
297+
298+
for _, sub := range subList.Items {
299+
objectReferences = append(objectReferences, configv1.ObjectReference{
270300
Group: olmv1alpha1.GroupName,
271301
Resource: olmv1alpha1.SubscriptionKind,
272-
Namespace: namespace,
273-
Name: clusterOperatorCatalogSource,
274-
},
275-
{
302+
Namespace: sub.GetNamespace(),
303+
Name: sub.GetName(),
304+
})
305+
}
306+
for _, ip := range installPlanList.Items {
307+
objectReferences = append(objectReferences, configv1.ObjectReference{
276308
Group: olmv1alpha1.GroupName,
277309
Resource: olmv1alpha1.InstallPlanKind,
278-
Namespace: namespace,
279-
Name: clusterOperatorCatalogSource,
280-
},
310+
Namespace: ip.GetNamespace(),
311+
Name: ip.GetName(),
312+
})
281313
}
282314
}
283315
namespaces := configv1.ObjectReference{
@@ -286,5 +318,5 @@ func relatedObjects(name, namespace string) []configv1.ObjectReference {
286318
Name: namespace,
287319
}
288320
objectReferences = append(objectReferences, namespaces)
289-
return objectReferences
321+
return objectReferences, nil
290322
}

0 commit comments

Comments
 (0)