Skip to content

Commit 805124e

Browse files
authored
Fix adminservername problem (#3957)
* Fix cases where the AdminServerName is not defined or set to something that's not in the model
1 parent 57dd94d commit 805124e

File tree

3 files changed

+81
-42
lines changed

3 files changed

+81
-42
lines changed

operator/src/main/resources/scripts/model-wdt-create-filter.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2018, 2021, Oracle and/or its affiliates.
1+
# Copyright (c) 2018, 2023, Oracle and/or its affiliates.
22
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33
#
44
# ------------
@@ -10,22 +10,25 @@
1010
def filter_model(model):
1111
if model and 'topology' in model:
1212
topology = model['topology']
13-
if model['topology']['AdminServerName'] != None:
13+
if 'AdminServerName' in model['topology']:
1414
admin_server = topology['AdminServerName']
15-
model['topology'] = {}
16-
model['topology']['AdminServerName'] = admin_server
17-
model['topology']['Server'] = {}
18-
model['topology']['Server'][admin_server] = topology['Server'][admin_server]
1915
else:
20-
model['topology'] = {}
16+
# weblogic default
17+
admin_server = 'AdminServer'
18+
model['topology'] = {}
19+
model['topology']['AdminServerName'] = admin_server
20+
model['topology']['Server'] = {}
21+
if admin_server in topology['Server']:
22+
model['topology']['Server'][admin_server] = topology['Server'][admin_server]
23+
else:
24+
model['topology']['Server'][admin_server] = {}
2125

2226
if 'Name' in topology:
2327
model['topology']['Name'] = topology['Name']
2428

2529
if 'Security' in topology:
2630
model['topology']['Security'] = topology['Security']
2731

28-
2932
if model and 'appDeployments' in model:
3033
model['appDeployments'] = {}
3134

operator/src/main/resources/scripts/model_wdt_mii_filter.py

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2018, 2022, Oracle and/or its affiliates.
1+
# Copyright (c) 2018, 2023, Oracle and/or its affiliates.
22
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33
#
44
# ------------
@@ -47,13 +47,15 @@
4747
import copy
4848
import inspect
4949
import os
50-
import sys
50+
import sys, traceback
5151

5252
tmp_callerframerecord = inspect.stack()[0] # 0 represents this line # 1 represents line at caller
5353
tmp_info = inspect.getframeinfo(tmp_callerframerecord[0])
5454
tmp_scriptdir=os.path.dirname(tmp_info[0])
5555
sys.path.append(tmp_scriptdir)
5656

57+
import utils
58+
5759
env = None
5860
ISTIO_NAP_NAMES = ['tcp-cbt', 'tcp-ldap', 'tcp-iiop', 'tcp-snmp', 'http-default', 'tcp-default', 'https-secure', 'tls-ldaps', 'tls-default', 'tls-cbts', 'tls-iiops', 'https-admin']
5961

@@ -157,31 +159,49 @@ def readCredentialsSecret(self, key):
157159

158160

159161
def filter_model(model):
160-
if model is not None:
161-
if getOfflineWlstEnv() is None:
162+
163+
try:
164+
if model is not None:
165+
166+
if getOfflineWlstEnv() is None:
162167
initOfflineWlstEnv(model)
163168

164-
initSecretManager(env)
169+
initSecretManager(env)
165170

166-
if model and 'resources' in model:
167-
customizeCustomFileStores(model)
171+
if model and 'resources' in model:
172+
customizeCustomFileStores(model)
168173

169-
if model and 'topology' in model:
170-
topology = model['topology']
171-
customizeNodeManagerCreds(topology)
172-
customizeDomainLogPath(topology)
174+
if model and 'topology' in model:
175+
topology = model['topology']
176+
customizeNodeManagerCreds(topology)
177+
customizeDomainLogPath(topology)
173178

174-
if 'Cluster' in topology:
175-
# If Istio enabled, inject replication channel for each cluster
176-
# before creating the corresponding NAP for each server and
177-
# server-template
178-
customizeIstioClusters(model)
179+
if 'Cluster' in topology:
180+
# If Istio enabled, inject replication channel for each cluster
181+
# before creating the corresponding NAP for each server and
182+
# server-template
183+
customizeIstioClusters(model)
184+
185+
if 'AdminServerName' in topology:
186+
admin_server = topology['AdminServerName']
187+
else:
188+
# weblogic default
189+
admin_server = 'AdminServer'
190+
topology['AdminServerName'] = admin_server
191+
192+
if admin_server not in topology['Server']:
193+
topology['Server'][admin_server] = {}
179194

180-
if 'Server' in topology:
181195
customizeServers(model)
182196

183-
if 'ServerTemplate' in topology:
184-
customizeServerTemplates(model)
197+
if 'ServerTemplate' in topology:
198+
customizeServerTemplates(model)
199+
except:
200+
exc_type, exc_obj, exc_tb = sys.exc_info()
201+
ee_string = traceback.format_exception(exc_type, exc_obj, exc_tb)
202+
utils.trace('SEVERE', 'Error in applying MII filter:\n ' + str(ee_string))
203+
raise
204+
185205

186206
def initOfflineWlstEnv(model):
187207
global env
@@ -450,11 +470,8 @@ def customizeServerIstioNetworkAccessPoint(server, listen_address):
450470
istio_readiness_port = env.getEnvOrDef("ISTIO_READINESS_PORT", None)
451471
if istio_readiness_port is None:
452472
return
453-
admin_server_port = server['ListenPort']
454-
# Set the default if it is not provided to avoid nap default to 0 which fails validation.
455473

456-
if admin_server_port is None:
457-
admin_server_port = 7001
474+
admin_server_port = _get_default_listen_port(server)
458475

459476
# readiness probe
460477
_writeIstioNAP(name='http-probe', server=server, listen_address=listen_address,
@@ -585,10 +602,8 @@ def customizeManagedIstioNetworkAccessPoint(template, listen_address):
585602
istio_readiness_port = env.getEnvOrDef("ISTIO_READINESS_PORT", None)
586603
if istio_readiness_port is None:
587604
return
588-
listen_port = template['ListenPort']
589-
# Set the default if it is not provided to avoid nap default to 0 which fails validation.
590-
if listen_port is None:
591-
listen_port = 7001
605+
606+
listen_port = _get_default_listen_port(template)
592607

593608
# readiness probe
594609
_writeIstioNAP(name='http-probe', server=template, listen_address=listen_address,
@@ -651,12 +666,8 @@ def addAdminChannelPortForwardNetworkAccessPoints(server):
651666
if (admin_channel_port_forwarding_enabled == 'false') or \
652667
(istio_enabled == 'true' and istioVersionRequiresLocalHostBindings()):
653668
return
654-
655-
admin_server_port = server['ListenPort']
656669
# Set the default if it is not provided to avoid nap default to 0 which fails validation.
657-
658-
if admin_server_port is None:
659-
admin_server_port = 7001
670+
admin_server_port = _get_default_listen_port(server)
660671

661672
model = env.getModel()
662673

@@ -837,5 +848,10 @@ def getSecretManager():
837848
def istioVersionRequiresLocalHostBindings():
838849
if env.getEnvOrDef("ISTIO_USE_LOCALHOST_BINDINGS", "true") == 'true':
839850
return True
851+
return False
840852

841-
return False
853+
def _get_default_listen_port(server):
854+
if 'ListenPort' not in server:
855+
return 7001
856+
else:
857+
return server['ListenPort']

operator/src/test/python/test_wdt_mii_filter.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2021, 2022, Oracle and/or its affiliates.
1+
# Copyright (c) 2021, 2023, Oracle and/or its affiliates.
22
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
import ast
@@ -464,6 +464,26 @@ def test_isSecureModeEnabledForDomain_importLegalHelperError(self):
464464
except ImportError as ie:
465465
self.assertTrue(ie is not None)
466466

467+
def test_adminserver_name_missing(self):
468+
try:
469+
model = self.getModel()
470+
topology = model['topology']
471+
del topology['AdminServerName']
472+
model_wdt_mii_filter.filter_model(model)
473+
self.assertEqual('AdminServer', topology['AdminServerName'],
474+
"Expected AdminServerName set to AdminServer after filter")
475+
admin_server_exists = 'AdminServer' in topology['Server']
476+
self.assertTrue(admin_server_exists, "Expected AdminServer added if AdminServerName is not set")
477+
478+
topology['AdminServerName'] = 'MyAdminServer'
479+
model_wdt_mii_filter.filter_model(model)
480+
self.assertEqual('MyAdminServer', topology['AdminServerName'],
481+
"Expected AdminServerName set to MyAdminServer after filter")
482+
admin_server_exists = 'MyAdminServer' in topology['Server']
483+
self.assertTrue(admin_server_exists, "Expected MyAdminServer added if AdminServerName is not set")
484+
485+
except ImportError as ie:
486+
self.assertTrue(ie is not None)
467487

468488

469489

0 commit comments

Comments
 (0)