Request A Demo
Back to All Blog Articles

Automate Creation of ADF 12c WebLogic Domain

In a previous post, we talked about automating the installation of fusion middleware binaries. Now let’s review how we can create ADF Domain using scripts. This process will create single node domain, but you can extend it to meet your needs.

You can download necessary scripts from HERE.

If you are on Windows use createDomain.bat and for Unix use createDomain.sh. Both scripts have variables defined in first 21 lines, modify them according to your requirements before execution.

Here are scripts for quick reference.

createWLSDomain.py

from java.util import Date
from java.lang import System

def fdLog(methodName, message):
    print str(Date()) + " - " + str(methodName) + " - " + str(message)

# Using java.lang.System as os.getenv has issues at times
# in WLST script
def fdGetEnv(environmentKey):
    val=System.getenv(environmentKey)
    if val == None:
        raise "Environment variable not found " + str(environmentKey)
    return val

def fdGetEnvOfDefault(environmentKey, defaultValue):
    val=System.getenv(environmentKey)
    if val == None:
        val=defaultValue
    return val
    
def fdDisconnect():
    thisMethodName="fdDisconnect"
    fdLog(thisMethodName, "Entering")
    disconnect()
    fdLog(thisMethodName, "Exiting")

def fdConnect():
    thisMethodName="fdConnect"
    fdLog(thisMethodName, "Entering")
    
    user=fdGetEnv('FDWLS_ADMIN_USER')
    password=fdGetEnv('FDWLS_ADMIN_PASSWORD')
    listenaddress=fdGetEnv('FDWLS_ADMIN_LISTEN_ADDRESS')
    listenport=fdGetEnv('FDWLS_ADMIN_LISTEN_PORT')
    isusessl=fdGetEnvOfDefault('FDWLS_ADMIN_USE_SSL', False)
    adminurl="t3://" + str(listenaddress) + ":" + str(listenport)
    if isusessl == True:
        adminurl="t3s://" + str(listenaddress) + ":" + str(listenport)

    connect(user,password,adminurl)
    
    fdLog(thisMethodName, "Exiting")

def fdReadDomain():
    thisMethodName="fdReadDomain"
    
    domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
    fdLog(thisMethodName, "Reading domain from " + str(domainDir))
    if os.path.exists(domainDir) == False:
        raise "Domain directory does not exists " + str(domainDir)
    
    readDomain(domainDir)
    
def fdWriteDomain():
    thisMethodName="fdWriteDomain"
    
    domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
    fdLog(thisMethodName, "Writing domain to " + str(domainDir))
    
    writeDomain(domainDir)

def fdUpdateDomain():
    thisMethodName="fdWriteDomain"
    
    domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
    fdLog(thisMethodName, "Updating domain " + str(domainDir))
    
    updateDomain()
    closeDomain()

def createBootPropertiesFile(directoryPath, fileName, username, password):
    # writing unencryted credentials, it will be encrypted when server is started.
    thisMethodName="createBootPropertiesFile"
    fdLog(thisMethodName, "Create " + str(fileName) + " file in  " + str(directoryPath))
    
    serverDir = File(directoryPath)
    bool = serverDir.mkdirs()
    fileNew=open(directoryPath + '/'+fileName, 'w')
    fileNew.write('username=%s\n' % username)
    fileNew.write('password=%s\n' % password)
    fileNew.flush()
    fileNew.close()

# FIXME - implement derive logic to support 11g
def deriveWebLogicTemplateFilePath():
    thisMethodName="deriveWebLogicTemplateFilePath"
    
    oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
    templateFilePath=oracleMWHome + "/wlserver/common/templates/wls/wls.jar"
    
    fdLog(thisMethodName, "WebLogic template file path " + str(templateFilePath))
    if os.path.exists(templateFilePath) == False:
        raise "WebLogic template not found " + str(templateFilePath)

    return templateFilePath

# FIXME - implement derive logic to support 11g and other version of 12c
def deriveADFTemplateFilePath():
    thisMethodName="deriveADFTemplateFilePath"
    
    oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
    templateFilePath=oracleMWHome + "/oracle_common/common/templates/wls/oracle.jrf_template_12.1.3.jar"
    
    fdLog(thisMethodName, "ADF template file path " + str(templateFilePath))
    if os.path.exists(templateFilePath) == False:
        raise "ADF template not found " + str(templateFilePath)

    return templateFilePath

# FIXME - implement derive logic to support 11g and other version of 12c
def deriveFMWEMTemplateFilePath():
    thisMethodName="deriveFMWEMTemplateFilePath"
    
    oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
    templateFilePath=oracleMWHome + "/em/common/templates/wls/oracle.em_wls_template_12.1.3.jar"
    
    fdLog(thisMethodName, "FMW EM template file path " + str(templateFilePath))
    if os.path.exists(templateFilePath) == False:
        raise "FMW EM template not found " + str(templateFilePath)

    return templateFilePath

# Common code - ends here....

thisMethodName="main"
# update these variables if necessary
DEVELOPMENT_MODE=False

# first get all values that we may need ( using Property names defined by FlexDeploy )
domainName=fdGetEnv('FDWLS_DOMAIN_NAME')
fdLog(thisMethodName, "domainName=" + str(domainName))

domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
fdLog(thisMethodName, "domainDir=" + str(domainDir))

adminServerUser=fdGetEnv('FDWLS_ADMIN_USER')
fdLog(thisMethodName, "adminServerUser=" + str(adminServerUser))

adminServerPassword=fdGetEnv('FDWLS_ADMIN_PASSWORD')

adminServerListenaddress=fdGetEnv('FDWLS_ADMIN_LISTEN_ADDRESS')
fdLog(thisMethodName, "adminServerListenaddress=" + str(adminServerListenaddress))

adminServerListenport=fdGetEnv('FDWLS_ADMIN_LISTEN_PORT')
fdLog(thisMethodName, "adminServerListenport=" + str(adminServerListenport))

oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
fdLog(thisMethodName, "oracleMWHome=" + str(oracleMWHome))

applicationsHome=fdGetEnv('FDWLS_BASE_INSTALL_DIRECTORY')
fdLog(thisMethodName, "applicationsHome=" + str(applicationsHome))

nmHost=fdGetEnv('FDWLS_NODEMANAGER_HOST')
fdLog(thisMethodName, "nmHost=" + str(nmHost))

nmName=nmHost.split('.')[0]
fdLog(thisMethodName, "nmName=" + str(nmName))

nmPort=fdGetEnv('FDWLS_NODEMANAGER_PORT')
fdLog(thisMethodName, "nmPort=" + str(nmPort))

nmUser=fdGetEnv('FDWLS_NODEMANAGER_USER')
fdLog(thisMethodName, "nmUser=" + str(nmUser))

nmPassword=fdGetEnv('FDWLS_NODEMANAGER_PASSWORD')

nmType=fdGetEnv('FDWLS_NODEMANAGER_TYPE')
fdLog(thisMethodName, "nmType=" + str(nmType))

if domainDir.endswith(domainName) == False:
    raise "invalid domain dir, domain name must be last folder " + str(domainDir)

if applicationsHome.endswith(domainName) == False:
    raise "invalid applications dir, domain name must be last folder " + str(applicationsHome)
    
wlsTemplateFilePath=deriveWebLogicTemplateFilePath()
fdLog(thisMethodName, "Start domain creation with - " + str(wlsTemplateFilePath))

readTemplate(wlsTemplateFilePath)

fdLog(thisMethodName, "Update weblogic mode")
if DEVELOPMENT_MODE == True: 
    cmo.setProductionModeEnabled(False)
else:
    cmo.setProductionModeEnabled(True)

fdLog(thisMethodName, "Setup AdminServer.")
cd('/Servers/AdminServer')
# name of adminserver
set('Name', 'AdminServer')
cd('/Servers/AdminServer')
set('ListenAddress', adminServerListenaddress)
set('ListenPort', int(adminServerListenport))
cd('/Servers/AdminServer')
create('AdminServer','SSL')
cd('SSL/AdminServer')
set('Enabled', 'False')
set('HostNameVerificationIgnored', 'True')

fdLog(thisMethodName, "Setup NodeManager.")
cd('/')
create(nmName,'UnixMachine')
cd('UnixMachine/' + nmName)
create(nmName,'NodeManager')
cd('NodeManager/' + nmName)
set('ListenAddress', nmHost)
set('ListenPort', int(nmPort))
set('NMType', nmType)

fdLog(thisMethodName, "Assign NodeManager for AdminServer.")
cd('/Servers/AdminServer')
set('Machine',nmName)

setOption( "AppDir", applicationsHome )

fdLog(thisMethodName, "Setup weblogic user credentials.")
cd('/')
cd('Security/base_domain/User/weblogic')
# template has weblogic user, but we may have some other user name, so update it
set('Name', adminServerUser)
cmo.setPassword(adminServerPassword)

if DEVELOPMENT_MODE == True:
    setOption('ServerStartMode', 'dev')
else:
    setOption('ServerStartMode', 'prod')
    
fdWriteDomain()
closeTemplate()

applicationsHomeFileObject=File(applicationsHome)
fdLog(thisMethodName, "Creating " + str(applicationsHome))
applicationsHomeFileObject.mkdirs()

# admin server boot.properties, so that we don't have to enter password on start
createBootPropertiesFile(domainDir + '/servers/AdminServer/security','boot.properties', adminServerUser, adminServerPassword)
# node manager user and password, so that communication would work between AdminServer and Node Manager
createBootPropertiesFile(domainDir+'/config/nodemanager', 'nm_password.properties', nmUser, nmPassword)

# read and update node manager credentials
fdReadDomain()

#nmPasswordEncrypted = encrypt(nmPassword, domainDir)

cd('/SecurityConfiguration/' + domainName)
#set('NodeManagerUsername', nmUser)
cmo.setNodeManagerUsername(nmUser)
cmo.setNodeManagerPasswordEncrypted(nmPassword)
#set('NodeManagerPasswordEncrypted', nmPasswordEncrypted)
cd('/')
setOption( "AppDir", applicationsHome )

fdUpdateDomain()

createADFDomain.py

from java.util import Date
from java.lang import System

def fdLog(methodName, message):
    print str(Date()) + " - " + str(methodName) + " - " + str(message)

# Using java.lang.System as os.getenv has issues at times
# in WLST script
def fdGetEnv(environmentKey):
    val=System.getenv(environmentKey)
    if val == None:
        raise "Environment variable not found " + str(environmentKey)
    return val

def fdGetEnvOfDefault(environmentKey, defaultValue):
    val=System.getenv(environmentKey)
    if val == None:
        val=defaultValue
    return val
    
def fdDisconnect():
    thisMethodName="fdDisconnect"
    fdLog(thisMethodName, "Entering")
    disconnect()
    fdLog(thisMethodName, "Exiting")

def fdConnect():
    thisMethodName="fdConnect"
    fdLog(thisMethodName, "Entering")
    
    user=fdGetEnv('FDWLS_ADMIN_USER')
    password=fdGetEnv('FDWLS_ADMIN_PASSWORD')
    listenaddress=fdGetEnv('FDWLS_ADMIN_LISTEN_ADDRESS')
    listenport=fdGetEnv('FDWLS_ADMIN_LISTEN_PORT')
    isusessl=fdGetEnvOfDefault('FDWLS_ADMIN_USE_SSL', False)
    adminurl="t3://" + str(listenaddress) + ":" + str(listenport)
    if isusessl == True:
        adminurl="t3s://" + str(listenaddress) + ":" + str(listenport)

    connect(user,password,adminurl)
    
    fdLog(thisMethodName, "Exiting")

def fdReadDomain():
    thisMethodName="fdReadDomain"
    
    domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
    fdLog(thisMethodName, "Reading domain from " + str(domainDir))
    if os.path.exists(domainDir) == False:
        raise "Domain directory does not exists " + str(domainDir)
    
    readDomain(domainDir)
    
def fdWriteDomain():
    thisMethodName="fdWriteDomain"
    
    domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
    fdLog(thisMethodName, "Writing domain to " + str(domainDir))
    
    writeDomain(domainDir)

def fdUpdateDomain():
    thisMethodName="fdWriteDomain"
    
    domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
    fdLog(thisMethodName, "Updating domain " + str(domainDir))
    
    updateDomain()
    closeDomain()

def createBootPropertiesFile(directoryPath,fileName, username, password):
    # writing unencryted credentials, it will be encrypted when server is started.
    thisMethodName="createBootPropertiesFile"
    fdLog(thisMethodName, "Create boot.properties file in  " + str(directoryPath))
    
    serverDir = File(directoryPath)
    bool = serverDir.mkdirs()
    fileNew=open(directoryPath + '/'+fileName, 'w')
    fileNew.write('username=%s\n' % username)
    fileNew.write('password=%s\n' % password)
    fileNew.flush()
    fileNew.close()

# FIXME - implement derive logic to support 11g
def deriveWebLogicTemplateFilePath():
    thisMethodName="deriveWebLogicTemplateFilePath"
    
    oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
    templateFilePath=oracleMWHome + "/wlserver/common/templates/wls/wls.jar"
    
    fdLog(thisMethodName, "WebLogic template file path " + str(templateFilePath))
    if os.path.exists(templateFilePath) == False:
        raise "WebLogic template not found " + str(templateFilePath)

    return templateFilePath

# FIXME - implement derive logic to support 11g and other version of 12c
def deriveADFTemplateFilePath():
    thisMethodName="deriveADFTemplateFilePath"
    
    oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
    templateFilePath=oracleMWHome + "/oracle_common/common/templates/wls/oracle.jrf_template_12.1.3.jar"
    
    fdLog(thisMethodName, "ADF template file path " + str(templateFilePath))
    if os.path.exists(templateFilePath) == False:
        raise "ADF template not found " + str(templateFilePath)

    return templateFilePath

# FIXME - implement derive logic to support 11g and other version of 12c
def deriveFMWEMTemplateFilePath():
    thisMethodName="deriveFMWEMTemplateFilePath"
    
    oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
    templateFilePath=oracleMWHome + "/em/common/templates/wls/oracle.em_wls_template_12.1.3.jar"
    
    fdLog(thisMethodName, "FMW EM template file path " + str(templateFilePath))
    if os.path.exists(templateFilePath) == False:
        raise "FMW EM template not found " + str(templateFilePath)

    return templateFilePath

# Common code - ends here....

thisMethodName="main"
# update these variables if necessary
DEVELOPMENT_MODE=False

# first get all values that we may need ( using Property names defined by FlexDeploy )
domainName=fdGetEnv('FDWLS_DOMAIN_NAME')
fdLog(thisMethodName, "domainName=" + str(domainName))

domainDir=fdGetEnv('FDWLS_ADMIN_DOMAIN_DIRECTORY')
fdLog(thisMethodName, "domainDir=" + str(domainDir))

adminServerUser=fdGetEnv('FDWLS_ADMIN_USER')
fdLog(thisMethodName, "adminServerUser=" + str(adminServerUser))

adminServerPassword=fdGetEnv('FDWLS_ADMIN_PASSWORD')

adminServerListenaddress=fdGetEnv('FDWLS_ADMIN_LISTEN_ADDRESS')
fdLog(thisMethodName, "adminServerListenaddress=" + str(adminServerListenaddress))

adminServerListenport=fdGetEnv('FDWLS_ADMIN_LISTEN_PORT')
fdLog(thisMethodName, "adminServerListenport=" + str(adminServerListenport))

oracleMWHome=fdGetEnv('FD_ORACLE_MW_HOME')
fdLog(thisMethodName, "oracleMWHome=" + str(oracleMWHome))

applicationsHome=fdGetEnv('FDWLS_BASE_INSTALL_DIRECTORY')
fdLog(thisMethodName, "applicationsHome=" + str(applicationsHome))

nmHost=fdGetEnv('FDWLS_NODEMANAGER_HOST')
fdLog(thisMethodName, "nmHost=" + str(nmHost))

nmName=nmHost.split('.')[0]
fdLog(thisMethodName, "nmName=" + str(nmName))

nmPort=fdGetEnv('FDWLS_NODEMANAGER_PORT')
fdLog(thisMethodName, "nmPort=" + str(nmPort))

nmUser=fdGetEnv('FDWLS_NODEMANAGER_USER')
fdLog(thisMethodName, "nmUser=" + str(nmUser))

nmPassword=fdGetEnv('FDWLS_NODEMANAGER_PASSWORD')

nmType=fdGetEnv('FDWLS_NODEMANAGER_TYPE')
fdLog(thisMethodName, "nmType=" + str(nmType))

if domainDir.endswith(domainName) == False:
    raise "invalid domain dir, domain name must be last folder " + str(domainDir)

if applicationsHome.endswith(domainName) == False:
    raise "invalid applications dir, domain name must be last folder " + str(applicationsHome)

rcuDbUrl=fdGetEnv('FLX_INSTALL_RCU_DB_URL')
fdLog(thisMethodName, "rcuDbUrl=" + str(rcuDbUrl))

rcuDbUser=fdGetEnv('FLX_INSTALL_RCU_DB_USER')
fdLog(thisMethodName, "rcuDbUser=" + str(rcuDbUser))
if rcuDbUser.upper().endswith('_STB') == False:
    raise "RCU user must end with _STB " + str(rcuDbUser)

rcuDbPassword=fdGetEnv('FLX_INSTALL_RCU_DB_PASSWORD')

# read and update domain with adf related templates
fdReadDomain()

adfTemplateFilePath=deriveADFTemplateFilePath()
fdLog(thisMethodName, "Update domain with - " + str(adfTemplateFilePath))
addTemplate(adfTemplateFilePath)

fdLog(thisMethodName, "Read database services information from RCU schemas")
cd('/JDBCSystemResource/LocalSvcTblDataSource/JdbcResource/LocalSvcTblDataSource/JDBCDriverParams/NO_NAME_0')
set('DriverName', 'oracle.jdbc.OracleDriver')
set('URL', rcuDbUrl)
set('PasswordEncrypted', rcuDbPassword)
cd('Properties/NO_NAME_0/Property/user')
set('Value', rcuDbUser)
 
fdLog(thisMethodName, "Read database services by calling getDatabaseDefaults.")
getDatabaseDefaults()    

fmwEMTemplateFilePath=deriveFMWEMTemplateFilePath()
fdLog(thisMethodName, "Update domain with - " + str(fmwEMTemplateFilePath))
addTemplate(fmwEMTemplateFilePath)

setOption( "AppDir", applicationsHome )

fdUpdateDomain()

createDomain.bat

REM MODIFY FOLLOWING VALUES HERE BEFORE START
REM modify if you have installed software in different folder
set ORACLE_INSTALL_HOME=c:/u01/oracle/products/fmw1213
set JAVA_HOME=C:/installs/Java/jdk1.7.0_65
REM modify this to use different domain name
set DOMAIN_LOGICAL_NAME=adf1
set DOMAIN_PASSWORD=welcome1
set WLS_SCHEMA_PASSWORD=welcome1
REM fill in sys password here
set SYS_DB_PASSWORD=welcome1
REM fill in value here (either host:port:sid or host:port@servicename)
set DB_CONNECT_STRING=localhost:1521:xe

REM modify if you are using different folder structure, domain will be created under this structure
set ORACLE_CONFIG_DIRECTORY=c:/u01/oracle/config

set FDWLS_ADMIN_LISTEN_ADDRESS=%COMPUTERNAME%
set FDWLS_ADMIN_LISTEN_PORT=7001
set FDWLS_NODEMANAGER_HOST=%COMPUTERNAME%
set FDWLS_NODEMANAGER_PORT=5556
set FDWLS_NODEMANAGER_TYPE=SSL


REM Process starts here

echo > PasswordFile.txt
echo %SYS_DB_PASSWORD%>PasswordFile.txt
echo %WLS_SCHEMA_PASSWORD%>>PasswordFile.txt


set WLS_SCHEMA_PREFIX=%DOMAIN_LOGICAL_NAME%
call %ORACLE_INSTALL_HOME%/oracle_common/bin/rcu.bat -silent -databaseType ORACLE -createRepository -connectString %DB_CONNECT_STRING% -dbUser sys -dbRole SYSDBA -useSamePasswordForAllSchemaUsers true -schemaPrefix %WLS_SCHEMA_PREFIX% -component STB -component MDS -component IAU -component IAU_APPEND -component IAU_VIEWER -component OPSS -component WLS -f < PasswordFile.txt

del PasswordFile.txt

set FDWLS_DOMAIN_NAME=%DOMAIN_LOGICAL_NAME%_domain
set FDWLS_ADMIN_DOMAIN_DIRECTORY=%ORACLE_CONFIG_DIRECTORY%/domains/%FDWLS_DOMAIN_NAME%
set FDWLS_ADMIN_USER=weblogic
set FDWLS_ADMIN_PASSWORD=%DOMAIN_PASSWORD%
set FD_ORACLE_MW_HOME=%ORACLE_INSTALL_HOME%
set FDWLS_BASE_INSTALL_DIRECTORY=%ORACLE_CONFIG_DIRECTORY%/applications/%FDWLS_DOMAIN_NAME%
set FDWLS_NODEMANAGER_USER=weblogic
set FDWLS_NODEMANAGER_PASSWORD=%DOMAIN_PASSWORD%
REM FILL IN JDBC URL HERE to RCU schema database, For example - jdbc:oracle:thin:@host:port:sid or jdbc:oracle:thin:@host:port/servicename
set FLX_INSTALL_RCU_DB_URL=jdbc:oracle:thin:@%DB_CONNECT_STRING%
set FLX_INSTALL_RCU_DB_USER=%WLS_SCHEMA_PREFIX%_STB
set FLX_INSTALL_RCU_DB_PASSWORD=%WLS_SCHEMA_PASSWORD%


call %FD_ORACLE_MW_HOME%/wlserver/common/bin/wlst.cmd createWLSDomain.py

call %FD_ORACLE_MW_HOME%/wlserver/common/bin/wlst.cmd createADFDomain.py

 createDomain.sh

# FILL IN VALUES HERE BEFORE START
# modify if you have installed software in different folder
export ORACLE_INSTALL_HOME=/u01/oracle/products/fmw1213
export JAVA_HOME=/u01/oracle/products/java/jdk1.7.0_65
# modify this to use different domain name
export DOMAIN_LOGICAL_NAME=adf1
export DOMAIN_PASSWORD=welcome1
export WLS_SCHEMA_PASSWORD=welcome1
# fill in sys password here
export SYS_DB_PASSWORD=welcome1
# fill in value here (either host:port:sid or host:port@servicename)
export DB_CONNECT_STRING=localhost:1521:xe

# modify if you are using different folder structure, domain will be created under this structure
export ORACLE_CONFIG_DIRECTORY=/u01/oracle/config

export FDWLS_ADMIN_LISTEN_ADDRESS=`hostname`
export FDWLS_ADMIN_LISTEN_PORT=7001
export FDWLS_NODEMANAGER_HOST=`hostname`
export FDWLS_NODEMANAGER_PORT=5556
export FDWLS_NODEMANAGER_TYPE=SSL


# Process starts here

> PasswordFile.txt
chmod 700 PasswordFile.txt
echo $SYS_DB_PASSWORD>PasswordFile.txt
echo $WLS_SCHEMA_PASSWORD>>PasswordFile.txt


export WLS_SCHEMA_PREFIX=${DOMAIN_LOGICAL_NAME}
${ORACLE_INSTALL_HOME}/oracle_common/bin/rcu -silent -databaseType ORACLE -createRepository -connectString ${DB_CONNECT_STRING} -dbUser sys -dbRole SYSDBA -useSamePasswordForAllSchemaUsers true -schemaPrefix ${WLS_SCHEMA_PREFIX} -component STB -component MDS -component IAU -component IAU_APPEND -component IAU_VIEWER -component OPSS -component WLS -f < PasswordFile.txt

rm PasswordFile.txt


export FDWLS_DOMAIN_NAME=${DOMAIN_LOGICAL_NAME}_domain
export FDWLS_ADMIN_DOMAIN_DIRECTORY=${ORACLE_CONFIG_DIRECTORY}/domains/${FDWLS_DOMAIN_NAME}
export FDWLS_ADMIN_USER=weblogic
export FDWLS_ADMIN_PASSWORD=${DOMAIN_PASSWORD}
export FD_ORACLE_MW_HOME=${ORACLE_INSTALL_HOME}
export FDWLS_BASE_INSTALL_DIRECTORY=${ORACLE_CONFIG_DIRECTORY}/applications/${FDWLS_DOMAIN_NAME}
export FDWLS_NODEMANAGER_USER=weblogic
export FDWLS_NODEMANAGER_PASSWORD=${DOMAIN_PASSWORD}
# FILL IN JDBC URL HERE to RCU schema database, For example - jdbc:oracle:thin:@host:port:sid or jdbc:oracle:thin:@host:port/servicename
export FLX_INSTALL_RCU_DB_URL=jdbc:oracle:thin:@${DB_CONNECT_STRING}
export FLX_INSTALL_RCU_DB_USER=${WLS_SCHEMA_PREFIX}_STB
export FLX_INSTALL_RCU_DB_PASSWORD=${WLS_SCHEMA_PASSWORD}


${FD_ORACLE_MW_HOME}/wlserver/common/bin/wlst.sh createWLSDomain.py

${FD_ORACLE_MW_HOME}/wlserver/common/bin/wlst.sh createADFDomain.py

Here is example of Windows execution.

You can start AdminServer and NodeManager as shown below.

You can customize the provided files to create multiple node domain easily.

Additional Resources:

Related Resources

DevOps to the Cloud Best Practices

DevOps Best Practices for Oracle Cloud Migration

It’s now common for enterprises to move software to the cloud as part of their digital transformation. Upgrading from traditional, ...
Infrastructure of a tall building

Automating Infrastructure Deployment with Terraform and FlexDeploy

What is Terraform? Terraform is an infrastructure as code tool, allowing you to build, change, and version infrastructure. Your infrastructure ...
On-Demand Webinar - Simple and Automated Provisioning with Terraform and FlexDeploy

Webinar Recap: Simple and Automated Provisioning with Terraform and FlexDeploy

The following is a summary of the information covered in the webinar: Simple and Automated Provisioning with Terraform and FlexDeploy, ...

Join DevOps leaders across the globe who receive analysis, tips, and trends in their inbox