@@ -27,13 +27,6 @@ public function init()
27
27
$ pluginConfig = $ this ->getConfig ();
28
28
$ nodeLabelSelector = $ pluginConfig ['nodeLabelSelector ' ] ?? null ;
29
29
$ nodeFieldSelector = $ pluginConfig ['nodeFieldSelector ' ] ?? null ;
30
- $ configMap = $ pluginConfig ['configMap ' ] ?? "metallb-system/config " ;
31
- $ configMapNamespace = explode ("/ " , $ configMap )[0 ];
32
- $ configMapName = explode ("/ " , $ configMap )[1 ];
33
-
34
- // metallb config
35
- $ watch = $ controller ->getKubernetesClient ()->createWatch ("/api/v1/watch/namespaces/ {$ configMapNamespace }/configmaps/ {$ configMapName }" , [], $ this ->getMetalLbConfigWatchCallback ());
36
- $ this ->addWatch ($ watch );
37
30
38
31
// initial load of nodes
39
32
$ params = [
@@ -54,28 +47,6 @@ public function init()
54
47
$ this ->delayedAction ();
55
48
}
56
49
57
- /**
58
- * Callback for the metallb configmqp
59
- *
60
- * @return \Closure
61
- */
62
- private function getMetalLbConfigWatchCallback ()
63
- {
64
- return function ($ event , $ watch ) {
65
- $ this ->logEvent ($ event );
66
- switch ($ event ['type ' ]) {
67
- case 'ADDED ' :
68
- case 'MODIFIED ' :
69
- $ this ->state ['metallb-config ' ] = yaml_parse ($ event ['object ' ]['data ' ]['config ' ]);
70
- $ this ->delayedAction ();
71
- break ;
72
- case 'DELETED ' :
73
- $ this ->state ['metallb-config ' ] = null ;
74
- break ;
75
- }
76
- };
77
- }
78
-
79
50
/**
80
51
* Deinit the plugin
81
52
*/
@@ -104,13 +75,8 @@ public function postReadWatches()
104
75
*/
105
76
public function doAction ()
106
77
{
107
- $ metalConfig = $ this ->state ['metallb-config ' ] ?? [];
108
78
$ pluginConfig = $ this ->getConfig ();
109
79
110
- if (empty ($ metalConfig )) {
111
- return false ;
112
- }
113
-
114
80
switch ($ pluginConfig ['bgp-implementation ' ]) {
115
81
case 'openbgp ' :
116
82
case 'frr ' :
@@ -130,7 +96,6 @@ public function doAction()
130
96
*/
131
97
private function doActionGeneric ()
132
98
{
133
- $ metalConfig = $ this ->state ['metallb-config ' ];
134
99
$ pluginConfig = $ this ->getConfig ();
135
100
136
101
switch ($ pluginConfig ['bgp-implementation ' ]) {
@@ -154,146 +119,106 @@ private function doActionGeneric()
154
119
$ bgpConfig ->data ['config ' ] = [];
155
120
}
156
121
157
- $ bgpEnabled = false ;
158
- foreach ($ metalConfig ['address-pools ' ] as $ pool ) {
159
- if ($ pool ['protocol ' ] == 'bgp ' ) {
160
- $ bgpEnabled = true ;
122
+ // add/remove as necessary
123
+ $ template = $ pluginConfig ['options ' ][$ pluginConfig ['bgp-implementation ' ]]['template ' ];
124
+ switch ($ pluginConfig ['bgp-implementation ' ]) {
125
+ case 'openbgp ' :
126
+ $ defaults = [
127
+ 'md5sigkey ' => (string ) $ template ['md5sigkey ' ],
128
+ 'md5sigpass ' => (string ) $ template ['md5sigpass ' ],
129
+ 'groupname ' => (string ) $ template ['groupname ' ],
130
+ ];
131
+ $ template = array_merge ($ defaults , $ template );
132
+ $ template = array_map (function ($ v ) {
133
+ return $ v ?: '' ;
134
+ }, $ template );
135
+ break ;
136
+ case 'frr ' :
137
+ $ defaults = [
138
+ "sendcommunity " => "disabled " ,
139
+ ];
140
+ $ template = array_merge ($ defaults , $ template );
141
+ $ template = array_map (function ($ v ) {
142
+ return $ v ?: '' ;
143
+ }, $ template );
161
144
break ;
162
- }
163
145
}
164
146
165
- if ($ bgpEnabled ) {
166
- // add/remove as necessary
167
- $ template = $ pluginConfig ['options ' ][$ pluginConfig ['bgp-implementation ' ]]['template ' ];
147
+ $ nodes = $ this ->state ['nodes ' ];
148
+ $ neighbors = [];
149
+ $ managedNeighborsPreSave = [];
150
+ foreach ($ nodes as $ node ) {
151
+ $ host = 'kpc- ' .KubernetesUtils::getNodeIp ($ node );
152
+ $ managedNeighborsPreSave [$ host ] = [
153
+ 'resource ' => $ this ->getKubernetesResourceDetails ($ node ),
154
+ ];
155
+ $ neighbor = $ template ;
156
+
168
157
switch ($ pluginConfig ['bgp-implementation ' ]) {
169
158
case 'openbgp ' :
170
- $ defaults = [
171
- 'md5sigkey ' => (string ) $ template ['md5sigkey ' ],
172
- 'md5sigpass ' => (string ) $ template ['md5sigpass ' ],
173
- 'groupname ' => (string ) $ template ['groupname ' ],
174
- ];
175
- $ template = array_merge ($ defaults , $ template );
176
- $ template = array_map (function ($ v ) {
177
- return $ v ?: '' ;
178
- }, $ template );
159
+ $ neighbor ['descr ' ] = $ host ;
160
+ $ neighbor ['neighbor ' ] = KubernetesUtils::getNodeIp ($ node );
179
161
break ;
180
162
case 'frr ' :
181
- $ defaults = [
182
- "sendcommunity " => "disabled " ,
183
- ];
184
- $ template = array_merge ($ defaults , $ template );
185
- $ template = array_map (function ($ v ) {
186
- return $ v ?: '' ;
187
- }, $ template );
163
+ $ neighbor ['descr ' ] = $ host ;
164
+ $ neighbor ['peer ' ] = KubernetesUtils::getNodeIp ($ node );
188
165
break ;
189
166
}
190
167
191
- $ nodes = $ this ->state ['nodes ' ];
192
- $ neighbors = [];
193
- $ managedNeighborsPreSave = [];
194
- foreach ($ nodes as $ node ) {
195
- $ host = 'kpc- ' .KubernetesUtils::getNodeIp ($ node );
196
- $ managedNeighborsPreSave [$ host ] = [
197
- 'resource ' => $ this ->getKubernetesResourceDetails ($ node ),
198
- ];
199
- $ neighbor = $ template ;
200
-
201
- switch ($ pluginConfig ['bgp-implementation ' ]) {
202
- case 'openbgp ' :
203
- $ neighbor ['descr ' ] = $ host ;
204
- $ neighbor ['neighbor ' ] = KubernetesUtils::getNodeIp ($ node );
205
- break ;
206
- case 'frr ' :
207
- $ neighbor ['descr ' ] = $ host ;
208
- $ neighbor ['peer ' ] = KubernetesUtils::getNodeIp ($ node );
209
- break ;
210
- }
211
-
212
- $ neighbors [] = $ neighbor ;
213
- }
214
-
215
- // get store data
216
- $ store = $ this ->getStore ();
217
- if (empty ($ store )) {
218
- $ store = [];
219
- }
220
-
221
- $ store [$ pluginConfig ['bgp-implementation ' ]] = $ store [$ pluginConfig ['bgp-implementation ' ]] ?? [];
222
- $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] = $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] ?? [];
168
+ $ neighbors [] = $ neighbor ;
169
+ }
223
170
224
- $ managedNeighborNamesPreSave = @ array_keys ( $ managedNeighborsPreSave );
225
- $ managedNeighborNames = @ array_keys ( $ store [ $ pluginConfig [ ' bgp-implementation ' ]][ ' managed_neighbors ' ] );
226
- if (empty ($ managedNeighborNames )) {
227
- $ managedNeighborNames = [];
228
- }
171
+ // get store data
172
+ $ store = $ this -> getStore ( );
173
+ if (empty ($ store )) {
174
+ $ store = [];
175
+ }
229
176
230
- // update config with new/updated items
231
- foreach ($ neighbors as $ neighbor ) {
232
- Utils::putListItem ($ bgpConfig ->data ['config ' ], $ neighbor , 'descr ' );
233
- }
177
+ $ store [$ pluginConfig ['bgp-implementation ' ]] = $ store [$ pluginConfig ['bgp-implementation ' ]] ?? [];
178
+ $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] = $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] ?? [];
234
179
235
- // remove items from config
236
- $ toDeleteItemNames = array_diff ( $ managedNeighborNames , $ managedNeighborNamesPreSave );
237
- foreach ( $ toDeleteItemNames as $ itemId ) {
238
- Utils:: removeListItem ( $ bgpConfig -> data [ ' config ' ], $ itemId , ' descr ' ) ;
239
- }
180
+ $ managedNeighborNamesPreSave = @ array_keys ( $ managedNeighborsPreSave );
181
+ $ managedNeighborNames = @ array_keys ( $ store [ $ pluginConfig [ ' bgp-implementation ' ]][ ' managed_neighbors ' ] );
182
+ if ( empty ( $ managedNeighborNames ) ) {
183
+ $ managedNeighborNames = [] ;
184
+ }
240
185
241
- // prep config for save
242
- if (empty ($ bgpConfig ->data ['config ' ])) {
243
- $ bgpConfig ->data = null ;
244
- }
186
+ // update config with new/updated items
187
+ foreach ($ neighbors as $ neighbor ) {
188
+ $ this ->log ('ensuring peer: ' .$ neighbor ['descr ' ]);
189
+ Utils::putListItem ($ bgpConfig ->data ['config ' ], $ neighbor , 'descr ' );
190
+ }
245
191
246
- // save newly managed configuration
247
- try {
248
- $ this ->savePfSenseConfigBlock ($ bgpConfig );
249
- switch ($ pluginConfig ['bgp-implementation ' ]) {
250
- case 'openbgp ' :
251
- $ this ->reloadOpenbgp ();
252
- break ;
253
- case 'frr ' :
254
- $ this ->reloadFrrBgp ();
255
- break ;
256
- }
257
- $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] = $ managedNeighborsPreSave ;
258
- $ this ->saveStore ($ store );
192
+ // remove items from config
193
+ $ toDeleteItemNames = array_diff ($ managedNeighborNames , $ managedNeighborNamesPreSave );
194
+ foreach ($ toDeleteItemNames as $ itemId ) {
195
+ $ this ->log ('removing peer: ' .$ itemId );
196
+ Utils::removeListItem ($ bgpConfig ->data ['config ' ], $ itemId , 'descr ' );
197
+ }
259
198
260
- return true ;
261
- } catch (\Exception $ e ) {
262
- $ this ->log ('failed update/reload: ' .$ e ->getMessage ().' ( ' .$ e ->getCode ().') ' );
263
- return false ;
264
- }
265
- } else {
266
- //remove any nodes from config
267
- // get storage data
268
- $ store = $ this ->getStore ();
269
- $ managedNeighborNames = @array_keys ($ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ]);
270
- if (empty ($ managedNeighborNames )) {
271
- return true ;
272
- }
199
+ // prep config for save
200
+ if (empty ($ bgpConfig ->data ['config ' ])) {
201
+ $ bgpConfig ->data = null ;
202
+ }
273
203
274
- foreach ($ managedNeighborNames as $ itemId ) {
275
- Utils::removeListItem ($ bgpConfig ->data ['config ' ], $ itemId , 'descr ' );
204
+ // save newly managed configuration
205
+ try {
206
+ $ this ->savePfSenseConfigBlock ($ bgpConfig );
207
+ switch ($ pluginConfig ['bgp-implementation ' ]) {
208
+ case 'openbgp ' :
209
+ $ this ->reloadOpenbgp ();
210
+ break ;
211
+ case 'frr ' :
212
+ $ this ->reloadFrrBgp ();
213
+ break ;
276
214
}
215
+ $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] = $ managedNeighborsPreSave ;
216
+ $ this ->saveStore ($ store );
277
217
278
- // save newly managed configuration
279
- try {
280
- $ this ->savePfSenseConfigBlock ($ bgpConfig );
281
- switch ($ pluginConfig ['bgp-implementation ' ]) {
282
- case 'openbgp ' :
283
- $ this ->reloadOpenbgp ();
284
- break ;
285
- case 'frr ' :
286
- $ this ->reloadFrrBgp ();
287
- break ;
288
- }
289
- $ store [$ pluginConfig ['bgp-implementation ' ]]['managed_neighbors ' ] = [];
290
- $ this ->saveStore ($ store );
291
-
292
- return true ;
293
- } catch (\Exception $ e ) {
294
- $ this ->log ('failed update/reload: ' .$ e ->getMessage ().' ( ' .$ e ->getCode ().') ' );
295
- return false ;
296
- }
218
+ return true ;
219
+ } catch (\Exception $ e ) {
220
+ $ this ->log ('failed update/reload: ' .$ e ->getMessage ().' ( ' .$ e ->getCode ().') ' );
221
+ return false ;
297
222
}
298
223
}
299
224
}
0 commit comments