Skip to content

Commit e2646a9

Browse files
committed
Provide a get around for wlst returning incorrect listening port/ssl port values, there is a discrepancy between what the wls core is using and what is returned from wlst.
1 parent 30a51ce commit e2646a9

File tree

2 files changed

+109
-50
lines changed

2 files changed

+109
-50
lines changed

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

Lines changed: 72 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,15 @@
9797
from utils import *
9898
from weblogic.management.configuration import LegalHelper
9999

100+
100101
class OfflineWlstEnv(object):
101102

102103
def open(self):
103104

104105
# before doing anything, get each env var and verify it exists
106+
global server_template_sslports
107+
global server_listening_ports
108+
105109

106110
self.DOMAIN_UID = self.getEnv('DOMAIN_UID')
107111
self.DOMAIN_HOME = self.getEnv('DOMAIN_HOME')
@@ -177,7 +181,8 @@ def open(self):
177181
if os.path.isfile(the_file_path):
178182
os.unlink(the_file_path)
179183

180-
184+
server_template_sslports, server_listening_ports = get_server_template_listening_ports_from_configxml(self.getDomainHome() + os.sep
185+
+ 'config' + os.sep + 'config.xml')
181186
trace("About to load domain from "+self.getDomainHome())
182187
readDomain(self.getDomainHome())
183188
self.domain = cmo
@@ -442,26 +447,6 @@ def validateNonDynamicClusterNotReferencedByAnyServerTemplates(self, cluster):
442447
ADMIN_LISTEN_PORT = 'admin listen port'
443448
ADMIN_LISTEN_PORT_ENABLED = 'admin listen port enabled'
444449

445-
def getServerClusterPortPropertyValue(self, server, clusterListenPortProperty):
446-
sslListenPort = None
447-
sslListenPortEnabled = None
448-
ssl = getSSLOrNone(server)
449-
if ssl is not None:
450-
sslListenPort = ssl.getListenPort()
451-
sslListenPortEnabled = ssl.isEnabled()
452-
elif ssl is None and isSecureModeEnabledForDomain(self.env.getDomain()):
453-
sslListenPort = "7002"
454-
sslListenPortEnabled = True
455-
456-
return {
457-
LISTEN_PORT: server.getListenPort(),
458-
LISTEN_PORT_ENABLED: isListenPortEnabledForServer(server, self.env.getDomain()),
459-
SSL_LISTEN_PORT: sslListenPort,
460-
SSL_LISTEN_PORT_ENABLED: sslListenPortEnabled,
461-
ADMIN_LISTEN_PORT: getAdministrationPort(server, self.env.getDomain()),
462-
ADMIN_LISTEN_PORT_ENABLED: isAdministrationPortEnabledForServer(server, self.env.getDomain())
463-
}[clusterListenPortProperty]
464-
465450
def validateNonDynamicClusterServersHaveSameListenPort(self, cluster):
466451
firstServer = None
467452
firstListenPort = None
@@ -472,13 +457,13 @@ def validateNonDynamicClusterServersHaveSameListenPort(self, cluster):
472457
firstAdminPortEnabled = None
473458
for server in self.env.getDomain().getServers():
474459
if cluster is self.env.getClusterOrNone(server):
475-
listenPort = server.getListenPort()
460+
listenPort = getRealListenPort(server)
476461
listenPortEnabled = isListenPortEnabledForServer(server, self.env.getDomain())
477462
ssl = getSSLOrNone(server)
478463
sslListenPort = None
479464
sslListenPortEnabled = None
480465
if ssl is not None:
481-
sslListenPort = ssl.getListenPort()
466+
sslListenPort = getRealSSLListenPort(server, ssl.getListenPort())
482467
sslListenPortEnabled = ssl.isEnabled()
483468
elif isSecureModeEnabledForDomain(self.env.getDomain()):
484469
sslListenPort = 7002
@@ -508,19 +493,19 @@ def validateNonDynamicClusterServersHaveSameListenPort(self, cluster):
508493
if adminPortEnabled != firstAdminPortEnabled:
509494
self.addError("The WebLogic configured cluster " + self.name(cluster) + "'s server " + self.name(firstServer) + " has ssl listen port enabled: " + self.booleanToString(firstAdminPortEnabled) + " but its server " + self.name(server) + "'s ssl listen port enabled: " + self.booleanToString(adminPortEnabled) + ". Channels in a cluster must be either all enabled or disabled.")
510495

511-
def validateClusterServersListenPortProperty(self, cluster, errorMsg, clusterListenPortProperty):
512-
firstServer = None
513-
firstListenPortProperty = None
514-
for server in self.env.getDomain().getServers():
515-
if cluster is self.env.getClusterOrNone(server):
516-
listenPortProperty = getServerClusterPortPropertyValue(self, server, clusterListenPortProperty)
517-
if firstServer is None:
518-
firstServer = server
519-
firstListenPortProperty = listenPortProperty
520-
else:
521-
if listenPortProperty != firstListenPortProperty:
522-
self.addError(errorMsg.substitute(cluster=self.name(cluster), server1=self.name(firstServer), property=clusterListenPortProperty, value1=str(firstListenPortProperty), server2=self.name(server), value2=str(firstListenPortProperty)))
523-
return
496+
# def validateClusterServersListenPortProperty(self, cluster, errorMsg, clusterListenPortProperty):
497+
# firstServer = None
498+
# firstListenPortProperty = None
499+
# for server in self.env.getDomain().getServers():
500+
# if cluster is self.env.getClusterOrNone(server):
501+
# listenPortProperty = getServerClusterPortPropertyValue(self, server, clusterListenPortProperty)
502+
# if firstServer is None:
503+
# firstServer = server
504+
# firstListenPortProperty = listenPortProperty
505+
# else:
506+
# if listenPortProperty != firstListenPortProperty:
507+
# self.addError(errorMsg.substitute(cluster=self.name(cluster), server1=self.name(firstServer), property=clusterListenPortProperty, value1=str(firstListenPortProperty), server2=self.name(server), value2=str(firstListenPortProperty)))
508+
# return
524509

525510
def validateNonDynamicClusterServerHaveSameCustomChannels(self, cluster):
526511
firstServer = None
@@ -667,18 +652,24 @@ def addServer(self, server, is_server_template=False):
667652
name=self.name(server)
668653
self.writeln("- name: " + name)
669654
if isListenPortEnabledForServer(server, self.env.getDomain(), is_server_template):
670-
self.writeln(" listenPort: " + str(server.getListenPort()))
655+
listen_port = getRealListenPort(server)
656+
self.writeln(" listenPort: " + str(listen_port))
671657
self.writeln(" listenAddress: " + self.quote(self.env.toDNS1123Legal(self.env.getDomainUID() + "-" + server.getName())))
672658
if isAdministrationPortEnabledForServer(server, self.env.getDomain(), is_server_template):
673659
self.writeln(" adminPort: " + str(getAdministrationPort(server, self.env.getDomain())))
674660
self.addSSL(server)
675661
self.addNetworkAccessPoints(server, is_server_template)
676662

677663
def addSSL(self, server):
664+
'''
665+
Write the SSL topology information to the output
666+
:param server: Server or ServerTemplate
667+
'''
678668
ssl = getSSLOrNone(server)
679669
if ssl is not None and ssl.isEnabled():
670+
sslport = getRealSSLListenPort(server, ssl.getListenPort())
680671
self.indent()
681-
self.writeln("sslListenPort: " + str(ssl.getListenPort()))
672+
self.writeln("sslListenPort: " + str(sslport))
682673
self.undent()
683674
elif ssl is None and isSecureModeEnabledForDomain(self.env.getDomain()):
684675
self.indent()
@@ -722,7 +713,8 @@ def addDynamicCluster(self, cluster):
722713
self.indent()
723714
template = self.findDynamicClusterServerTemplate(cluster)
724715
dyn_servers = cluster.getDynamicServers()
725-
self.writeln("port: " + str(template.getListenPort()))
716+
listen_port = getRealListenPort(template)
717+
self.writeln("port: " + str(listen_port))
726718
self.writeln("maxServers: " + str(dyn_servers.getDynamicClusterSize()))
727719
self.writeln("baseServerName: " + self.quote(dyn_servers.getServerNamePrefix()))
728720
self.undent()
@@ -793,7 +785,7 @@ def addNetworkAccessPoint(self, server, nap, is_server_template):
793785

794786
def addIstioNetworkAccessPoints(self, server, is_server_template, added_nap):
795787
'''
796-
Write the container ports information for operator to create the container ports
788+
Write the container ports information for operator to create the container ports in the topology.xml file
797789
:param server: server or template mbean
798790
:param is_server_template: true if it is from ServerTemplate
799791
:param added_nap: true if there are existing nap section in the output
@@ -806,17 +798,17 @@ def addIstioNetworkAccessPoints(self, server, is_server_template, added_nap):
806798
self.writeln(" networkAccessPoints:")
807799
self.indent()
808800

809-
self.addIstioNetworkAccessPoint("tcp-ldap", "ldap", server.getListenPort(), 0)
810-
self.addIstioNetworkAccessPoint("tcp-default", "t3", server.getListenPort(), 0)
801+
self.addIstioNetworkAccessPoint("tcp-ldap", "ldap", getRealListenPort(server), 0)
802+
self.addIstioNetworkAccessPoint("tcp-default", "t3", getRealListenPort(server), 0)
811803
# No need to to http default, PodStepContext already handle it
812-
self.addIstioNetworkAccessPoint("http-default", "http", server.getListenPort(), 0)
813-
self.addIstioNetworkAccessPoint("tcp-snmp", "snmp", server.getListenPort(), 0)
814-
self.addIstioNetworkAccessPoint("tcp-iiop", "iiop", server.getListenPort(), 0)
804+
self.addIstioNetworkAccessPoint("http-default", "http", getRealListenPort(server), 0)
805+
self.addIstioNetworkAccessPoint("tcp-snmp", "snmp", getRealListenPort(server), 0)
806+
self.addIstioNetworkAccessPoint("tcp-iiop", "iiop", getRealListenPort(server), 0)
815807

816808
ssl = getSSLOrNone(server)
817809
ssl_listen_port = None
818810
if ssl is not None and ssl.isEnabled():
819-
ssl_listen_port = ssl.getListenPort()
811+
ssl_listen_port = getRealSSLListenPort(server, ssl.getListenPort())
820812
elif ssl is None and isSecureModeEnabledForDomain(self.env.getDomain()):
821813
ssl_listen_port = "7002"
822814

@@ -1191,7 +1183,7 @@ def customizeServerIstioNetworkAccessPoint(self, listen_address, server):
11911183
istio_readiness_port = self.env.getEnvOrDef("ISTIO_READINESS_PORT", None)
11921184
if istio_readiness_port is None:
11931185
return
1194-
admin_server_port = server.getListenPort()
1186+
admin_server_port = getRealListenPort(server)
11951187
# readiness probe
11961188
self._writeIstioNAP(name='http-probe', server=server, listen_address=listen_address,
11971189
listen_port=istio_readiness_port, protocol='http', http_enabled="true")
@@ -1218,7 +1210,7 @@ def customizeServerIstioNetworkAccessPoint(self, listen_address, server):
12181210
ssl = getSSLOrNone(server)
12191211
ssl_listen_port = None
12201212
if ssl is not None and ssl.isEnabled():
1221-
ssl_listen_port = ssl.getListenPort()
1213+
ssl_listen_port = getRealSSLListenPort(server, ssl.getListenPort())
12221214
elif ssl is None and isSecureModeEnabledForDomain(self.env.getDomain()):
12231215
ssl_listen_port = "7002"
12241216

@@ -1251,7 +1243,7 @@ def customizeManagedIstioNetworkAccessPoint(self, listen_address, template):
12511243
if istio_readiness_port is None:
12521244
return
12531245

1254-
listen_port = template.getListenPort()
1246+
listen_port = getRealListenPort(template)
12551247
self._writeIstioNAP(name='http-probe', server=template, listen_address=listen_address,
12561248
listen_port=istio_readiness_port, protocol='http')
12571249

@@ -1273,7 +1265,7 @@ def customizeManagedIstioNetworkAccessPoint(self, listen_address, template):
12731265
ssl = getSSLOrNone(template)
12741266
ssl_listen_port = None
12751267
if ssl is not None and ssl.isEnabled():
1276-
ssl_listen_port = ssl.getListenPort()
1268+
ssl_listen_port = getRealSSLListenPort(template, ssl.getListenPort())
12771269
elif ssl is None and isSecureModeEnabledForDomain(self.env.getDomain()):
12781270
ssl_listen_port = "7002"
12791271

@@ -1676,8 +1668,38 @@ def getSSLOrNone(server):
16761668
except:
16771669
trace("Ignoring getSSL() exception, this is expected.")
16781670
ret = None
1671+
16791672
return ret
16801673

1674+
def getRealSSLListenPort(server, sslport):
1675+
# default ssl port for ssl template if not specified
1676+
# this is the actual weblogic will start with, although it is supposed
1677+
# to be 8100 but if the config.xml element is empty, then the
1678+
# wlst mbean returns 8100 and we cannot use this in the topology.xml
1679+
# when setting up the container port since the actual listening port is
1680+
# 7002
1681+
if server_template_sslports.has_key(server.getName()):
1682+
configxml_ssl_port = server_template_sslports[server.getName()]
1683+
if configxml_ssl_port is None:
1684+
return 7002
1685+
1686+
return sslport
1687+
1688+
def getRealListenPort(server):
1689+
# default listening port for template if not specified
1690+
# this is the actual weblogic will start with, although it is supposed
1691+
# to be 7100 but if the config.xml element is empty, then the
1692+
# wlst mbean returns 7100 and we cannot use this in the topology.xml
1693+
# when setting up the container port since the actual listening port is
1694+
# 7001
1695+
if server_listening_ports.has_key(server.getName()):
1696+
port = server_listening_ports[server.getName()]
1697+
if port is None:
1698+
return 7001
1699+
1700+
return server.getListenPort()
1701+
1702+
16811703
# Derive the default value for SecureMode of a domain
16821704
def isSecureModeEnabledForDomain(domain):
16831705
secureModeEnabled = false

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import inspect
2828
import os
2929
from datetime import datetime
30+
import xml.dom.minidom
31+
from xml.dom.minidom import parse
3032

3133
# NOTE: This may be parsed by the operator. Do not change the date or log format without
3234
# also updating the parser.
@@ -61,3 +63,38 @@ def trace(arg1,arg2='SENTINEL'):
6163
traceInner('FINE',arg1)
6264
else:
6365
traceInner(arg1,arg2)
66+
67+
def get_server_template_listening_ports_from_configxml(config_xml):
68+
'''
69+
get_server_tempalates_sslport
70+
:param config_xml: config.xml
71+
:param server_template: server_template element
72+
:return: dictionary of server template name and ssl port
73+
'''
74+
DOMTree = parse(config_xml)
75+
collection = DOMTree.documentElement
76+
77+
templates = collection.getElementsByTagName("server-template")
78+
server_template_ssls = dict()
79+
server_template_ports = dict()
80+
81+
for template in templates:
82+
sslport = None
83+
port = None
84+
if template.parentNode.nodeName != 'domain':
85+
continue
86+
template_name = template.getElementsByTagName('name')[0].firstChild.nodeValue
87+
listen_ports = template.getElementsByTagName('listen-port')
88+
if len(listen_ports) > 0:
89+
port = listen_ports[0].firstChild.nodeValue
90+
server_template_ports[template_name] = port
91+
ssls = template.getElementsByTagName('ssl')
92+
if len(ssls) > 0:
93+
ssl = ssls.item(0)
94+
listen_port = ssl.getElementsByTagName('listen-port')
95+
if len(listen_port) > 0:
96+
sslport = listen_port[0].firstChild.nodeValue
97+
server_template_ssls[template_name] = sslport
98+
99+
return server_template_ssls, server_template_ports
100+

0 commit comments

Comments
 (0)