@@ -41,16 +41,85 @@ func (a *Operator) syncOperatorGroups(obj interface{}) error {
41
41
}
42
42
nsListJoined := strings .Join (nsList , "," )
43
43
44
- if err := a .annotateDeployments (op .GetNamespace (), nsListJoined ); err != nil {
45
- log .Errorf ("annotateDeployments error: %v" , err )
46
- return err
47
- }
48
- log .Debug ("Deployment annotation completed" )
44
+ // if err := a.annotateDeployments(op.GetNamespace(), nsListJoined); err != nil {
45
+ // log.Errorf("annotateDeployments error: %v", err)
46
+ // return err
47
+ // }
48
+ // log.Debug("Deployment annotation completed")
49
49
50
50
// annotate csvs
51
51
csvsInNamespace := a .csvsInNamespace (op .Namespace )
52
52
for _ , csv := range csvsInNamespace {
53
- // create new CSV instead of DeepCopy as namespace and resource version (and status) will be different
53
+ a .addAnnotationsToCSV (csv , op , nsListJoined )
54
+ // TODO: generate a patch
55
+ if _ , err := a .client .OperatorsV1alpha1 ().ClusterServiceVersions (csv .GetNamespace ()).Update (csv ); err != nil {
56
+ log .Errorf ("Update for existing CSV failed: %v" , err )
57
+ return err
58
+ }
59
+
60
+ if err := a .copyCsvToTargetNamespace (csv , op , targetedNamespaces ); err != nil {
61
+ return err
62
+ }
63
+ }
64
+
65
+ // // create new CSV instead of DeepCopy as namespace and resource version (and status) will be different
66
+ // newCSV := v1alpha1.ClusterServiceVersion{
67
+ // ObjectMeta: metav1.ObjectMeta{
68
+ // Name: csv.Name,
69
+ // },
70
+ // Spec: *csv.Spec.DeepCopy(),
71
+ // Status: v1alpha1.ClusterServiceVersionStatus{
72
+ // Message: "CSV copied to target namespace",
73
+ // Reason: v1alpha1.CSVReasonCopied,
74
+ // LastUpdateTime: timeNow(),
75
+ // },
76
+ // }
77
+ //
78
+ // a.addAnnotationsToCSV(&newCSV, op, nsListJoined)
79
+ //
80
+ //
81
+ // for _, ns := range targetedNamespaces {
82
+ // newCSV.SetNamespace(ns.Name)
83
+ // if ns.Name != op.Namespace {
84
+ // log.Debugf("Copying CSV %v to namespace %v", csv.GetName(), ns.GetName())
85
+ // _, err := a.client.OperatorsV1alpha1().ClusterServiceVersions(ns.GetName()).Create(&newCSV)
86
+ // if k8serrors.IsAlreadyExists(err) {
87
+ // a.addAnnotationsToCSV(csv, op, nsListJoined)
88
+ // if _, err := a.client.OperatorsV1alpha1().ClusterServiceVersions(ns.GetName()).Update(csv); err != nil {
89
+ // log.Errorf("Update CSV in target namespace failed: %v", err)
90
+ // return err
91
+ // }
92
+ // } else if err != nil {
93
+ // log.Errorf("Create for new CSV failed: %v", err)
94
+ // return err
95
+ // }
96
+ // } else {
97
+ // a.addAnnotationsToCSV(csv, op, nsListJoined)
98
+ // if _, err := a.client.OperatorsV1alpha1().ClusterServiceVersions(ns.GetName()).Update(csv); err != nil {
99
+ // log.Errorf("Update for existing CSV failed: %v", err)
100
+ // return err
101
+ // }
102
+ // }
103
+ // }
104
+ //}
105
+ log .Debug ("CSV annotation completed" )
106
+ //TODO: ensure RBAC on operator serviceaccount
107
+
108
+ return nil
109
+ }
110
+
111
+ func (a * Operator ) copyCsvToTargetNamespace (csv * v1alpha1.ClusterServiceVersion , operatorGroup * v1alpha2.OperatorGroup , targetNamespaces []* corev1.Namespace ) error {
112
+ var nsList []string
113
+ for _ , ns := range targetNamespaces {
114
+ nsList = append (nsList , ns .Name )
115
+ }
116
+ nsListJoined := strings .Join (nsList , "," )
117
+
118
+
119
+ for _ , ns := range targetNamespaces {
120
+ if ns .Name == operatorGroup .GetNamespace () {
121
+ continue
122
+ }
54
123
newCSV := v1alpha1.ClusterServiceVersion {
55
124
ObjectMeta : metav1.ObjectMeta {
56
125
Name : csv .Name ,
@@ -62,36 +131,21 @@ func (a *Operator) syncOperatorGroups(obj interface{}) error {
62
131
LastUpdateTime : timeNow (),
63
132
},
64
133
}
134
+ a .addAnnotationsToCSV (& newCSV , operatorGroup , nsListJoined )
135
+ newCSV .SetNamespace (ns .Name )
65
136
66
- a .addAnnotationsToCSV (& newCSV , op , nsListJoined )
67
-
68
- for _ , ns := range targetedNamespaces {
69
- newCSV .SetNamespace (ns .Name )
70
- if ns .Name != op .Namespace {
71
- log .Debugf ("Copying CSV %v to namespace %v" , csv .GetName (), ns .GetName ())
72
- _ , err := a .client .OperatorsV1alpha1 ().ClusterServiceVersions (ns .GetName ()).Create (& newCSV )
73
- if k8serrors .IsAlreadyExists (err ) {
74
- a .addAnnotationsToCSV (csv , op , nsListJoined )
75
- if _ , err := a .client .OperatorsV1alpha1 ().ClusterServiceVersions (ns .GetName ()).Update (csv ); err != nil {
76
- log .Errorf ("Update CSV in target namespace failed: %v" , err )
77
- return err
78
- }
79
- } else if err != nil {
80
- log .Errorf ("Create for new CSV failed: %v" , err )
81
- return err
82
- }
83
- } else {
84
- a .addAnnotationsToCSV (csv , op , nsListJoined )
85
- if _ , err := a .client .OperatorsV1alpha1 ().ClusterServiceVersions (ns .GetName ()).Update (csv ); err != nil {
86
- log .Errorf ("Update for existing CSV failed: %v" , err )
87
- return err
88
- }
137
+ log .Debugf ("Copying CSV %v to namespace %v" , csv .GetName (), ns .Name )
138
+ _ , err := a .client .OperatorsV1alpha1 ().ClusterServiceVersions (ns .Name ).Create (& newCSV )
139
+ if k8serrors .IsAlreadyExists (err ) {
140
+ if _ , err := a .client .OperatorsV1alpha1 ().ClusterServiceVersions (ns .Name ).Update (& newCSV ); err != nil {
141
+ log .Errorf ("Update CSV in target namespace failed: %v" , err )
142
+ return err
89
143
}
144
+ } else if err != nil {
145
+ log .Errorf ("Create for new CSV failed: %v" , err )
146
+ return err
90
147
}
91
148
}
92
- log .Debug ("CSV annotation completed" )
93
- //TODO: ensure RBAC on operator serviceaccount
94
-
95
149
return nil
96
150
}
97
151
0 commit comments