|
| 1 | +# Copyright 2014, 2019, Oracle Corporation and/or its affiliates. All rights reserved. |
| 2 | +# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl. |
| 3 | + |
| 4 | +import os |
| 5 | +import sys |
| 6 | + |
| 7 | +import com.oracle.cie.domain.script.jython.WLSTException as WLSTException |
| 8 | + |
| 9 | +class Infra12213Provisioner: |
| 10 | + |
| 11 | + MACHINES = { |
| 12 | + 'machine1' : { |
| 13 | + 'NMType': 'SSL', |
| 14 | + 'ListenAddress': 'localhost', |
| 15 | + 'ListenPort': 5658 |
| 16 | + } |
| 17 | + } |
| 18 | + |
| 19 | + JRF_12213_TEMPLATES = { |
| 20 | + 'baseTemplate' : '@@ORACLE_HOME@@/wlserver/common/templates/wls/wls.jar', |
| 21 | + 'extensionTemplates' : [ |
| 22 | + '@@ORACLE_HOME@@/oracle_common/common/templates/wls/oracle.jrf_restricted_template.jar', |
| 23 | + '@@ORACLE_HOME@@/em/common/templates/wls/oracle.em_wls_restricted_template.jar' |
| 24 | + ], |
| 25 | + 'serverGroupsToTarget' : [ 'JRF-MAN-SVR', 'WSMPM-MAN-SVR' ] |
| 26 | + } |
| 27 | + |
| 28 | + def __init__(self, oracleHome, javaHome, domainParentDir, adminListenPort, adminName, managedNameBase, managedServerPort, prodMode, managedCount, clusterName): |
| 29 | + self.oracleHome = self.validateDirectory(oracleHome) |
| 30 | + self.javaHome = self.validateDirectory(javaHome) |
| 31 | + self.domainParentDir = self.validateDirectory(domainParentDir, create=True) |
| 32 | + return |
| 33 | + |
| 34 | + def createInfraDomain(self, domainName, user, password, adminListenPort, adminName, |
| 35 | + managedNameBase, managedServerPort, prodMode, managedCount, clusterName, |
| 36 | + exposeAdminT3Channel=None, t3ChannelPublicAddress=None, t3ChannelPort=None): |
| 37 | + domainHome = self.createBaseDomain(domainName, user, password, adminListenPort, adminName, managedNameBase, |
| 38 | + managedServerPort, prodMode, managedCount, clusterName |
| 39 | + ) |
| 40 | + self.extendDomain(domainHome, exposeAdminT3Channel, t3ChannelPublicAddress, t3ChannelPort) |
| 41 | + |
| 42 | + def createBaseDomain(self, domainName, user, password, adminListenPort, adminName, managedNameBase, managedServerPort, prodMode, managedCount, clusterName): |
| 43 | + baseTemplate = self.replaceTokens(self.JRF_12213_TEMPLATES['baseTemplate']) |
| 44 | + |
| 45 | + readTemplate(baseTemplate) |
| 46 | + setOption('DomainName', domainName) |
| 47 | + setOption('JavaHome', self.javaHome) |
| 48 | + if (prodMode == 'true'): |
| 49 | + setOption('ServerStartMode', 'prod') |
| 50 | + else: |
| 51 | + setOption('ServerStartMode', 'dev') |
| 52 | + set('Name', domainName) |
| 53 | + |
| 54 | + admin_port = int(adminListenPort) |
| 55 | + ms_port = int(managedServerPort) |
| 56 | + ms_count = int(managedCount) |
| 57 | + |
| 58 | + # Create Admin Server |
| 59 | + # ======================= |
| 60 | + print 'Creating Admin Server...' |
| 61 | + cd('/Servers/AdminServer') |
| 62 | + #set('ListenAddress', '%s-%s' % (domain_uid, admin_server_name_svc)) |
| 63 | + set('ListenPort', admin_port) |
| 64 | + set('Name', adminName) |
| 65 | + |
| 66 | + # Define the user password for weblogic |
| 67 | + # ===================================== |
| 68 | + cd('/Security/' + domainName + '/User/weblogic') |
| 69 | + set('Name', user) |
| 70 | + set('Password', password) |
| 71 | + |
| 72 | + # Create a cluster |
| 73 | + # ====================== |
| 74 | + print 'Creating cluster...' |
| 75 | + cd('/') |
| 76 | + cl=create(clusterName, 'Cluster') |
| 77 | + |
| 78 | + # Create managed servers |
| 79 | + for index in range(0, ms_count): |
| 80 | + cd('/') |
| 81 | + msIndex = index+1 |
| 82 | + cd('/') |
| 83 | + name = '%s%s' % (managedNameBase, msIndex) |
| 84 | + create(name, 'Server') |
| 85 | + cd('/Servers/%s/' % name ) |
| 86 | + print('managed server name is %s' % name); |
| 87 | + set('ListenPort', ms_port) |
| 88 | + set('NumOfRetriesBeforeMSIMode', 0) |
| 89 | + set('RetryIntervalBeforeMSIMode', 1) |
| 90 | + set('Cluster', clusterName) |
| 91 | + |
| 92 | + # Create Node Manager |
| 93 | + # ======================= |
| 94 | + print 'Creating Node Managers...' |
| 95 | + for machine in self.MACHINES: |
| 96 | + cd('/') |
| 97 | + create(machine, 'Machine') |
| 98 | + cd('Machine/' + machine) |
| 99 | + create(machine, 'NodeManager') |
| 100 | + cd('NodeManager/' + machine) |
| 101 | + for param in self.MACHINES[machine]: |
| 102 | + set(param, self.MACHINES[machine][param]) |
| 103 | + |
| 104 | + |
| 105 | + setOption('OverwriteDomain', 'true') |
| 106 | + domainHome = self.domainParentDir + '/' + domainName |
| 107 | + print 'Will create Base domain at ' + domainHome |
| 108 | + |
| 109 | + print 'Writing base domain...' |
| 110 | + writeDomain(domainHome) |
| 111 | + closeTemplate() |
| 112 | + print 'Base domain created at ' + domainHome |
| 113 | + return domainHome |
| 114 | + |
| 115 | + |
| 116 | + def extendDomain(self, domainHome, exposeAdminT3Channel, t3ChannelPublicAddress, |
| 117 | + t3ChannelPort): |
| 118 | + print 'Extending domain at ' + domainHome |
| 119 | + readDomain(domainHome) |
| 120 | + setOption('AppDir', self.domainParentDir + '/applications') |
| 121 | + |
| 122 | + print 'ExposeAdminT3Channel %s with %s:%s ' % (exposeAdminT3Channel, t3ChannelPublicAddress, t3ChannelPort) |
| 123 | + if 'true' == exposeAdminT3Channel: |
| 124 | + self.enable_admin_channel(t3ChannelPublicAddress, t3ChannelPort) |
| 125 | + |
| 126 | + print 'Applying JRF templates...' |
| 127 | + for extensionTemplate in self.JRF_12213_TEMPLATES['extensionTemplates']: |
| 128 | + addTemplate(self.replaceTokens(extensionTemplate)) |
| 129 | + |
| 130 | + print 'Extension Templates added' |
| 131 | + |
| 132 | + print 'Preparing to update domain...' |
| 133 | + updateDomain() |
| 134 | + print 'Domain updated successfully' |
| 135 | + closeDomain() |
| 136 | + return |
| 137 | + |
| 138 | + |
| 139 | + ########################################################################### |
| 140 | + # Helper Methods # |
| 141 | + ########################################################################### |
| 142 | + |
| 143 | + def validateDirectory(self, dirName, create=False): |
| 144 | + directory = os.path.realpath(dirName) |
| 145 | + if not os.path.exists(directory): |
| 146 | + if create: |
| 147 | + os.makedirs(directory) |
| 148 | + else: |
| 149 | + message = 'Directory ' + directory + ' does not exist' |
| 150 | + raise WLSTException(message) |
| 151 | + elif not os.path.isdir(directory): |
| 152 | + message = 'Directory ' + directory + ' is not a directory' |
| 153 | + raise WLSTException(message) |
| 154 | + return self.fixupPath(directory) |
| 155 | + |
| 156 | + |
| 157 | + def fixupPath(self, path): |
| 158 | + result = path |
| 159 | + if path is not None: |
| 160 | + result = path.replace('\\', '/') |
| 161 | + return result |
| 162 | + |
| 163 | + |
| 164 | + def replaceTokens(self, path): |
| 165 | + result = path |
| 166 | + if path is not None: |
| 167 | + result = path.replace('@@ORACLE_HOME@@', oracleHome) |
| 168 | + return result |
| 169 | + |
| 170 | + def enable_admin_channel(self, admin_channel_address, admin_channel_port): |
| 171 | + if admin_channel_address == None or admin_channel_port == 'None': |
| 172 | + return |
| 173 | + cd('/') |
| 174 | + admin_server_name = get('AdminServerName') |
| 175 | + print('setting admin server t3channel for ' + admin_server_name) |
| 176 | + cd('/Servers/' + admin_server_name) |
| 177 | + create('T3Channel', 'NetworkAccessPoint') |
| 178 | + cd('/Servers/' + admin_server_name + '/NetworkAccessPoint/T3Channel') |
| 179 | + set('ListenPort', int(admin_channel_port)) |
| 180 | + set('PublicPort', int(admin_channel_port)) |
| 181 | + set('PublicAddress', admin_channel_address) |
| 182 | + |
| 183 | +############################# |
| 184 | +# Entry point to the script # |
| 185 | +############################# |
| 186 | + |
| 187 | +def usage(): |
| 188 | + print sys.argv[0] + ' -oh <oracle_home> -jh <java_home> -parent <domain_parent_dir> -name <domain-name> ' + \ |
| 189 | + '-user <domain-user> -password <domain-password> ' + \ |
| 190 | + '-rcuDb <rcu-database> -rcuPrefix <rcu-prefix> -rcuSchemaPwd <rcu-schema-password> ' \ |
| 191 | + '-adminListenPort <adminListenPort> -adminName <adminName> ' \ |
| 192 | + '-managedNameBase <managedNameBase> -managedServerPort <managedServerPort> -prodMode <prodMode> ' \ |
| 193 | + '-managedServerCount <managedCount> -clusterName <clusterName> ' \ |
| 194 | + '-exposeAdminT3Channel <quoted true or false> -t3ChannelPublicAddress <address of the cluster> ' \ |
| 195 | + '-t3ChannelPort <t3 channel port> ' |
| 196 | + sys.exit(0) |
| 197 | + |
| 198 | +# Uncomment for Debug only |
| 199 | +#print str(sys.argv[0]) + " called with the following sys.argv array:" |
| 200 | +#for index, arg in enumerate(sys.argv): |
| 201 | +# print "sys.argv[" + str(index) + "] = " + str(sys.argv[index]) |
| 202 | + |
| 203 | +if len(sys.argv) < 16: |
| 204 | + usage() |
| 205 | + |
| 206 | +#oracleHome will be passed by command line parameter -oh. |
| 207 | +oracleHome = None |
| 208 | +#javaHome will be passed by command line parameter -jh. |
| 209 | +javaHome = None |
| 210 | +#domainParentDir will be passed by command line parameter -parent. |
| 211 | +domainParentDir = None |
| 212 | +#domainUser is hard-coded to weblogic. You can change to other name of your choice. Command line paramter -user. |
| 213 | +domainUser = 'weblogic' |
| 214 | +#domainPassword will be passed by Command line parameter -password. |
| 215 | +domainPassword = None |
| 216 | +#rcuDb will be passed by command line parameter -rcuDb. |
| 217 | +rcuDb = None |
| 218 | +#change rcuSchemaPrefix to your infra schema prefix. Command line parameter -rcuPrefix. |
| 219 | +rcuSchemaPrefix = 'DEV12' |
| 220 | +#change rcuSchemaPassword to your infra schema password. Command line parameter -rcuSchemaPwd. |
| 221 | +rcuSchemaPassword = None |
| 222 | +exposeAdminT3Channel = None |
| 223 | +t3ChannelPort = None |
| 224 | +t3ChannelPublicAddress = None |
| 225 | +i = 1 |
| 226 | +while i < len(sys.argv): |
| 227 | + if sys.argv[i] == '-oh': |
| 228 | + oracleHome = sys.argv[i + 1] |
| 229 | + i += 2 |
| 230 | + elif sys.argv[i] == '-jh': |
| 231 | + javaHome = sys.argv[i + 1] |
| 232 | + i += 2 |
| 233 | + elif sys.argv[i] == '-parent': |
| 234 | + domainParentDir = sys.argv[i + 1] |
| 235 | + i += 2 |
| 236 | + elif sys.argv[i] == '-name': |
| 237 | + domainName = sys.argv[i + 1] |
| 238 | + i += 2 |
| 239 | + elif sys.argv[i] == '-user': |
| 240 | + domainUser = sys.argv[i + 1] |
| 241 | + i += 2 |
| 242 | + elif sys.argv[i] == '-password': |
| 243 | + domainPassword = sys.argv[i + 1] |
| 244 | + i += 2 |
| 245 | + elif sys.argv[i] == '-rcuDb': |
| 246 | + rcuDb = sys.argv[i + 1] |
| 247 | + i += 2 |
| 248 | + elif sys.argv[i] == '-rcuPrefix': |
| 249 | + rcuSchemaPrefix = sys.argv[i + 1] |
| 250 | + i += 2 |
| 251 | + elif sys.argv[i] == '-rcuSchemaPwd': |
| 252 | + rcuSchemaPassword = sys.argv[i + 1] |
| 253 | + i += 2 |
| 254 | + elif sys.argv[i] == '-adminListenPort': |
| 255 | + adminListenPort = sys.argv[i + 1] |
| 256 | + i += 2 |
| 257 | + elif sys.argv[i] == '-adminName': |
| 258 | + adminName = sys.argv[i + 1] |
| 259 | + i += 2 |
| 260 | + elif sys.argv[i] == '-managedNameBase': |
| 261 | + managedNameBase = sys.argv[i + 1] |
| 262 | + i += 2 |
| 263 | + elif sys.argv[i] == '-managedServerPort': |
| 264 | + managedServerPort = sys.argv[i + 1] |
| 265 | + i += 2 |
| 266 | + elif sys.argv[i] == '-prodMode': |
| 267 | + prodMode = sys.argv[i + 1] |
| 268 | + i += 2 |
| 269 | + elif sys.argv[i] == '-managedServerCount': |
| 270 | + managedCount = sys.argv[i + 1] |
| 271 | + i += 2 |
| 272 | + elif sys.argv[i] == '-clusterName': |
| 273 | + clusterName = sys.argv[i + 1] |
| 274 | + i += 2 |
| 275 | + elif sys.argv[i] == '-t3ChannelPublicAddress': |
| 276 | + t3ChannelPublicAddress = sys.argv[i + 1] |
| 277 | + i += 2 |
| 278 | + elif sys.argv[i] == '-t3ChannelPort': |
| 279 | + t3ChannelPort = sys.argv[i + 1] |
| 280 | + i += 2 |
| 281 | + elif sys.argv[i] == '-exposeAdminT3Channel': |
| 282 | + exposeAdminT3Channel = sys.argv[i + 1] |
| 283 | + i += 2 |
| 284 | + else: |
| 285 | + print 'Unexpected argument switch at position ' + str(i) + ': ' + str(sys.argv[i]) |
| 286 | + usage() |
| 287 | + sys.exit(1) |
| 288 | + |
| 289 | +provisioner = Infra12213Provisioner(oracleHome, javaHome, domainParentDir, adminListenPort, adminName, managedNameBase, managedServerPort, prodMode, managedCount, clusterName) |
| 290 | +provisioner.createInfraDomain(domainName, domainUser, domainPassword, adminListenPort, adminName, managedNameBase, managedServerPort, prodMode, managedCount, |
| 291 | + clusterName, exposeAdminT3Channel, t3ChannelPublicAddress, t3ChannelPort) |
0 commit comments