/biemond-orawls

Linux WebLogic module optimized for Hiera

Primary LanguagePuppet

Oracle WebLogic / Fusion Middleware puppet module V2

Got the same options as the wls module but optimized for Hiera, totally refactored and only for Linux and Solaris

For full hiera examples, see the usages below this page

created by Edwin Biemond email biemond at gmail dot com
biemond.blogspot.com
Github homepage

Should work for all Linux,Solaris versions like RedHat, CentOS, Ubuntu, Debian, Suse SLES, OracleLinux, Solaris 10 sparc and x86

Reference implementation, the vagrant test case for full working WebLogic 10.3.6 cluster example
https://github.com/biemond/biemond-orawls-vagrant

Reference Solaris implementation, the vagrant test case for full working WebLogic 12.1.2 cluster example
https://github.com/biemond/biemond-orawls-vagrant-solaris

Reference Oracle SOA Suite, the vagrant test case for full working WebLogic 10.3.6 SOA Suite + OSB cluster example
https://github.com/biemond/vagrant-soasuite or https://github.com/biemond/biemond-orawls-vagrant-solaris-soa

Orawls WebLogic Features

  • installs WebLogic 10g,11g,12c( 12.1.1 & 12.1.2 + FMW infra )
  • installs FMW add-on to a middleware home like OSB,SOA Suite, Oracle Identity Management, Web Center + Content
  • apply a BSU patch on a Middleware home ( < 12.1.2 )
  • apply an OPatch on a Middleware home or a Oracle product home
  • creates a standard WebLogic domain
  • pack a WebLogic domain
  • copy a WebLogic domain to a other node with SSH, unpack and enroll to a nodemanager
  • SOA Suite ( with BPM ) and BAM Cluster configuration ( convert single soa/bam servers to clusters )
  • startup the nodemanager
  • start or stop AdminServer, Managed or a Cluster
  • storeUserConfig for storing WebLogic Credentials and using in WLST
  • create Machines, Managed Servers, Clusters, Server templates, Dynamic Clusters, Coherence clusters ( all 12.1.2 )
  • create Persistence Store
  • create JMS Server, Module, SubDeployment, Quota, Connection Factory, JMS (distributed) Queue or Topic
  • basically can run every WLST script with the flexible WLST define manifest
  • WLST bulk creation

Domain creation options (Dev or Prod mode)

all templates creates a WebLogic domain, logs the domain creation output

  • domain 'standard' -> a default WebLogic
  • domain 'adf' -> JRF + EM + Coherence (12.1.2) + OWSM (12.1.2) + JAX-WS Advanced + Soap over JMS (12.1.2)
  • domain 'osb' -> OSB + JRF + EM + OWSM
  • domain 'osb_soa' -> OSB + SOA Suite + BAM + JRF + EM + OWSM
  • domain 'osb_soa_bpm' -> OSB + SOA Suite + BAM + BPM + JRF + EM + OWSM
  • domain 'soa' -> SOA Suite + BAM + JRF + EM + OWSM
  • domain 'soa_bpm' -> SOA Suite + BAM + BPM + JRF + EM + OWSM

orawls::utils::wlstbulk is for now disabled so you can also use this in puppet Enterprise 3.0
requirements

  • needs puppet version > 3.2 ( make use of iteration and lambda expressions )
  • need to set --parser future ( puppet agent )
  • to use this you need uncomment this orawls::utils::wlstbulk define and enable future parser

Override the default Oracle operating system user

default this orawls module uses oracle as weblogic install user
you can override this by setting the following fact 'override_weblogic_user', like override_weblogic_user=wls or set FACTER_override_weblogic_user=wls

Override the default Weblogic domains folder like user_projects

set the following fact 'override_weblogic_domain_folder', override_weblogic_domain_folder = /opt/oracle/wlsdomains or set FACTER_override_weblogic_domain_folder=/opt/oracle/wlsdomains

Linux low on entropy or urandom fix

can cause certain operations to be very slow. Encryption operations need entropy to ensure randomness. Entropy is generated by the OS when you use the keyboard, the mouse or the disk.

If an encryption operation is missing entropy it will wait until enough is generated.

three options

  • use rngd service (use this orawls::urandomfix class)
  • set java.security in JDK ( jre/lib/security in my jdk7 module )
  • set -Djava.security.egd=file:/dev/./urandom param

Oracle Big files and alternate download location

Some manifests like orawls:weblogic bsu opatch fmw supports an alternative mountpoint for the big oracle setup/install files.
When not provided it uses the files folder located in the orawls puppet module
else you can use $source =>

  • "/mnt"
  • "/vagrant"
  • "puppet:///modules/orawls/" (default)
  • "puppet:///middleware/"

when the files are also accesiable locally then you can also set $remote_file => false this will not move the files to the download folder, just extract or install

Orawls WebLogic Facter

Contains WebLogic Facter which displays the following

  • Middleware homes
  • Oracle Software
  • BSU & OPatch patches
  • Domain configuration ( everything of a WebLogic Domain like deployments, datasource, JMS, SAF)

My orawls module Files folder

you need to download all the Oracle binaries and agree to the Oracle (Developer) License

WebLogic 11g:

  • wls1036_generic.jar

WebLogic 11g BSU patches:

  • p17071663_1036_Generic.zip

WebLogic 12.1.2:

  • wls_121200.jar
  • fmw_infra_121200.jar

WebLogic 12.1.2 OPatch:

  • p16175470_121200_Generic.zip

WebLogic Operating Settings like User, Group, ULimits and kernel parameters

install the following module to set the kernel parameters
puppet module install fiddyspence-sysctl

install the following module to set the user limits parameters
puppet module install erwbgy-limits

 sysctl { 'kernel.msgmnb':                 ensure => 'present', permanent => 'yes', value => '65536',}
 sysctl { 'kernel.msgmax':                 ensure => 'present', permanent => 'yes', value => '65536',}
 sysctl { 'kernel.shmmax':                 ensure => 'present', permanent => 'yes', value => '2147483648',}
 sysctl { 'kernel.shmall':                 ensure => 'present', permanent => 'yes', value => '2097152',}
 sysctl { 'fs.file-max':                   ensure => 'present', permanent => 'yes', value => '344030',}
 sysctl { 'net.ipv4.tcp_keepalive_time':   ensure => 'present', permanent => 'yes', value => '1800',}
 sysctl { 'net.ipv4.tcp_keepalive_intvl':  ensure => 'present', permanent => 'yes', value => '30',}
 sysctl { 'net.ipv4.tcp_keepalive_probes': ensure => 'present', permanent => 'yes', value => '5',}
 sysctl { 'net.ipv4.tcp_fin_timeout':      ensure => 'present', permanent => 'yes', value => '30',}

 class { 'limits':
   config => {'*'       => {  'nofile'  => { soft => '2048'   , hard => '8192',   },},
              'oracle'  => {  'nofile'  => { soft => '65535'  , hard => '65535',  },
                              'nproc'   => { soft => '2048'   , hard => '2048',   },
                              'memlock' => { soft => '1048576', hard => '1048576',},},},
   use_hiera => false,}

create user and group

group { 'dba' :
  ensure => present,
}

# http://raftaman.net/?p=1311 for generating password
user { 'oracle' :
  ensure     => present,
  groups     => 'dba',
  shell      => '/bin/bash',
  password   => '$1$DSJ51vh6$4XzzwyIOk6Bi/54kglGk3.',
  home       => "/home/oracle",
  comment    => 'Oracle user created by Puppet',
  managehome => true,
  require    => Group['dba'],
}

Necessary Hiera setup for global vars and Facter

if you don't want to provide the same parameters in all the defines and classes

hiera.yaml main configuration

 ---
 :backends: yaml
 :yaml:
   :datadir: /vagrant/puppet/hieradata
 :hierarchy:
   - "%{::fqdn}"
   - common

vagrantcentos64.example.com.yaml

 ---

common.yaml

---
# global WebLogic vars
wls_oracle_base_home_dir: &wls_oracle_base_home_dir "/opt/oracle"
wls_weblogic_user:        &wls_weblogic_user        "weblogic"

# 12.1.2 settings
#wls_weblogic_home_dir:    &wls_weblogic_home_dir    "/opt/oracle/middleware12c/wlserver"
#wls_middleware_home_dir:  &wls_middleware_home_dir  "/opt/oracle/middleware12c"
#wls_version:              &wls_version              1212

# 10.3.6 settings
wls_weblogic_home_dir:    &wls_weblogic_home_dir    "/opt/oracle/middleware11g/wlserver_10.3"
wls_middleware_home_dir:  &wls_middleware_home_dir  "/opt/oracle/middleware11g"
wls_version:              &wls_version              1036

# global OS vars
wls_os_user:              &wls_os_user              "oracle"
wls_os_group:             &wls_os_group             "dba"
wls_download_dir:         &wls_download_dir         "/data/install"
wls_source:               &wls_source               "/vagrant"
wls_jdk_home_dir:         &wls_jdk_home_dir         "/usr/java/jdk1.7.0_45"
wls_log_dir:              &wls_log_dir              "/data/logs"


#WebLogic installation variables 
orawls::weblogic::version:              *wls_version
orawls::weblogic::filename:             "wls1036_generic.jar"

# weblogic 12.1.2
#orawls::weblogic::filename:             "wls_121200.jar"
# or with 12.1.2 FMW infra
#orawls::weblogic::filename:             "fmw_infra_121200.jar"
#orawls::weblogic::fmw_infra:            true

orawls::weblogic::middleware_home_dir:  *wls_middleware_home_dir
orawls::weblogic::log_output:           false

# hiera default anchors
orawls::weblogic::jdk_home_dir:         *wls_jdk_home_dir
orawls::weblogic::oracle_base_home_dir: *wls_oracle_base_home_dir
orawls::weblogic::os_user:              *wls_os_user
orawls::weblogic::os_group:             *wls_os_group
orawls::weblogic::download_dir:         *wls_download_dir
orawls::weblogic::source:               *wls_source

WebLogic Module Usage

###orawls::weblogic installs WebLogic 10.3.[0-6], 12.1.1 or 12.1.2
these settings works for wls_121200.jar when you want to install the 12.1.2 FMW infra version
use fmw_infra_121200.jar as filename and set fmw_infra parameter to true

class{'orawls::weblogic':                             
  version              => 1212,                       # 1036|1211|1212
  filename             => 'wls_121200.jar',           # wls1036_generic.jar|wls1211_generic.jar|wls_121200.jar
  jdk_home_dir         => '/usr/java/jdk1.7.0_45',    
  oracle_base_home_dir => "/opt/oracle",              
  middleware_home_dir  => "/opt/oracle/middleware12c",
  os_user              => "oracle",                   
  os_group             => "dba",                      
  download_dir         => "/data/install",            
  source               => "/vagrant",                 # puppet:///modules/orawls/ | /mnt |
  log_output           => true,                      
}

Same configuration but then with Hiera ( need to have puppet > 3.0 )

include orawls::weblogic

or this

class{'orawls::weblogic':
  log_output => true,
}

vagrantcentos64.example.com.yaml

 ---
 orawls::weblogic::log_output:   true

###orawls::opatch apply an OPatch on a Middleware home or a Oracle product home

orawls::opatch {'16175470':
  oracle_product_home_dir => "/opt/oracle/middleware12c",
  jdk_home_dir            => "/usr/java/jdk1.7.0_45",
  patch_id                => "16175470",
  patch_file              => "p16175470_121200_Generic.zip",
  os_user                 => "oracle",
  os_group                => "dba",
  download_dir            => "/data/install",
  source                  => "/vagrant",
  log_output              => false,
}

or when you set the defaults hiera variables

orawls::opatch {'16175470':
  oracle_product_home_dir => "/opt/oracle/middleware12c",
  patch_id                => "16175470",
  patch_file              => "p16175470_121200_Generic.zip",
}

Same configuration but then with Hiera ( need to have puppet > 3.0 )

$default_params = {}
$opatch_instances = hiera('opatch_instances', [])
create_resources('orawls::opatch',$opatch_instances, $default_params)

common.yaml

---
opatch_instances:
  '16175470':
     oracle_product_home_dir:  "/opt/oracle/middleware12c"
     patch_id:                 "16175470"
     patch_file:               "p16175470_121200_Generic.zip"
     jdk_home_dir              "/usr/java/jdk1.7.0_45"
     os_user:                  "oracle"
     os_group:                 "dba"
     download_dir:             "/data/install"
     source:                   "/vagrant"
     log_output:               true

or when you set the defaults hiera variables

---
opatch_instances:
  '16175470':
     oracle_product_home_dir:  "/opt/oracle/middleware12c"
     patch_id:                 "16175470"
     patch_file:               "p16175470_121200_Generic.zip"

###orawls::bsu apply a WebLogic BSU Patch

orawls::bsu {'BYJ1':
  middleware_home_dir     => "/opt/oracle/middleware11gR1",
  weblogic_home_dir       => "/opt/oracle/middleware11gR1/wlserver",
  jdk_home_dir            => "/usr/java/jdk1.7.0_45",
  patch_id                => "BYJ1",
  patch_file              => "p17071663_1036_Generic.zip",
  os_user                 => "oracle",
  os_group                => "dba",
  download_dir            => "/data/install",
  source                  => "/vagrant",
  log_output              => false,
}

or when you set the defaults hiera variables

orawls::bsu {'BYJ1':
  patch_id                => "BYJ1",
  patch_file              => "p17071663_1036_Generic.zip",
  log_output              => false,
}

Same configuration but then with Hiera ( need to have puppet > 3.0 )

$default_params = {}
$bsu_instances = hiera('bsu_instances', [])
create_resources('orawls::bsu',$bsu_instances, $default_params)

common.yaml

---
bsu_instances:
  'BYJ1':
     middleware_home_dir:     "/opt/oracle/middleware11gR1"
     weblogic_home_dir:       "/opt/oracle/middleware11gR1/wlserver"
     jdk_home_dir:            "/usr/java/jdk1.7.0_45"
     patch_id:                "BYJ1"
     patch_file:              "p17071663_1036_Generic.zip"
     os_user:                 "oracle"
     os_group:                "dba"
     download_dir:            "/data/install"
     source:                  "/vagrant"
     log_output:              false

or when you set the defaults hiera variables

---
bsu_instances:
  'BYJ1':
     patch_id:                "BYJ1"
     patch_file:              "p17071663_1036_Generic.zip"
     log_output:              false

###orawls::fmw install FMW add-on to a middleware home like OSB,SOA Suite, Oracle Identity Management, Web Center + Content

orawls::fmw{"osbPS6":
  middleware_home_dir     => "/opt/oracle/middleware11gR1",
  weblogic_home_dir       => "/opt/oracle/middleware11gR1/wlserver",
  jdk_home_dir            => "/usr/java/jdk1.7.0_45",
  oracle_base_home_dir    => "/opt/oracle",
  fmw_product             => "osb",  # adf|soa|osb|oim|wc|wcc
  fmw_file1               => "ofm_osb_generic_11.1.1.7.0_disk1_1of1.zip",
  os_user                 => "oracle",
  os_group                => "dba",
  download_dir            => "/data/install",
  source                  => "/vagrant",
  log_output              => false,
}

or when you set the defaults hiera variables

orawls::fmw{"osbPS6":
  fmw_product             => "osb"  # adf|soa|osb|oim|wc|wcc
  fmw_file1               => "ofm_osb_generic_11.1.1.7.0_disk1_1of1.zip",
  log_output              => false,
}

Same configuration but then with Hiera ( need to have puppet > 3.0 )

$default_params = {}
$fmw_installations = hiera('fmw_installations', [])
create_resources('orawls::fmw',$fmw_installations, $default_params)

common.yaml

when you set the defaults hiera variables

---
# FMW installation on top of WebLogic 10.3.6
fmw_installations:
  'osbPS6':
    fmw_product:             "osb"
    fmw_file1:               "ofm_osb_generic_11.1.1.7.0_disk1_1of1.zip"
    log_output:              true
  'soaPS6':
    fmw_product:             "soa"
    fmw_file1:               "ofm_soa_generic_11.1.1.7.0_disk1_1of2.zip"
    fmw_file2:               "ofm_soa_generic_11.1.1.7.0_disk1_2of2.zip"
    log_output:              true

###orawls::domain creates WebLogic a standard | OSB or SOA Suite WebLogic Domain

orawls::domain { 'wlsDomain12c':
  version                    => 1212,  # 1036|1111|1211|1212
  weblogic_home_dir          => "/opt/oracle/middleware12c/wlserver",
  middleware_home_dir        => "/opt/oracle/middleware12c",
  jdk_home_dir               => "/usr/java/jdk1.7.0_45",
  domain_template            => "standard",  #standard|adf|osb|osb_soa|osb_soa_bpm|soa|soa_bpm
  domain_name                => "Wls12c",
  development_mode           => false,
  adminserver_name           => "AdminServer",
  adminserver_address        => "localhost",
  adminserver_port           => 7001,
  nodemanager_port           => 5556,
  weblogic_user              => "weblogic",
  weblogic_password          => "weblogic1",
  os_user                    => "oracle",
  os_group                   => "dba",
  log_dir                    => "/data/logs",
  download_dir               => "/data/install",
  log_output                 => true,
}                             

or when you set the defaults hiera variables

orawls::domain { 'wlsDomain12c':
  domain_template            => "standard",
  domain_name                => "Wls12c",
  development_mode           => false,
  adminserver_name           => "AdminServer",
  adminserver_address        => "localhost",
  adminserver_port           => 7001,
  nodemanager_port           => 5556,
  weblogic_password          => "weblogic1",
  log_output                 => true,
}                             

Same configuration but then with Hiera ( need to have puppet > 3.0 )

$default = {}
$domain_instances = hiera('domain_instances', [])
create_resources('orawls::domain',$domain_instances, $default)

vagrantcentos64.example.com.yaml

---
domain_instances:
  'wlsDomain12c':
     version:              1212
     weblogic_home_dir     "/opt/oracle/middleware12c/wlserver"
     middleware_home_dir   "/opt/oracle/middleware12c"
     jdk_home_dir          "/usr/java/jdk1.7.0_45"
     domain_template:      "standard"
     domain_name:          "Wls12c"
     development_mode:     false
     adminserver_name:     "AdminServer"
     adminserver_address:  "localhost"
     adminserver_port:     7001
     nodemanager_port:     5556
     weblogic_user:        "weblogic"
     weblogic_password:    "weblogic1"
     os_user:              "oracle"
     os_group:             "dba"
     log_dir:              "/data/logs"
     download_dir:         "/data/install"
     log_output:           true

or when you set the defaults hiera variables

---
domain_instances:
  'wlsDomain12c':
     domain_template:      "standard"
     domain_name:          "Wls12c"
     development_mode:     false
     adminserver_name:     "AdminServer"
     adminserver_address:  "localhost"
     adminserver_port:     7001
     nodemanager_port:     5556
     weblogic_password:    "weblogic1"
     log_output:           true

when you just have one WebLogic domain on a server

--- 
# when you have just one domain on a server
domain_name:                "Wls1036"
domain_adminserver:         "AdminServer"
domain_adminserver_address: "localhost"
domain_adminserver_port:    7001
domain_nodemanager_port:    5556
domain_wls_password:        "weblogic1"

# create a standard domain
domain_instances:
  'wlsDomain':
     domain_template:      "standard"
     development_mode:     false
     log_output:           *logoutput

###orawls::packdomain pack a WebLogic Domain and add this to the download folder

$default_params = {}
$pack_domain_instances = hiera('pack_domain_instances', [])
create_resources('orawls::packdomain',$pack_domain_instances, $default_params)


# pack domains
pack_domain_instances:
  'wlsDomain':
     log_output:               *logoutput

###orawls::copydomain copies a WebLogic domain with SSH, unpack and enroll to a nodemanager

Configuration with Hiera ( need to have puppet > 3.0 )

$default_params = {}
$copy_instances = hiera('copy_instances', [])
create_resources('orawls::copydomain',$copy_instances, $default_params)

when you just have one WebLogic domain on a server

--- 
# when you have just one domain on a server
domain_name:                "Wls1036"
domain_adminserver:         "AdminServer"
domain_adminserver_address: "localhost"
domain_adminserver_port:    7001
domain_nodemanager_port:    5556
domain_wls_password:        "weblogic1"

# copy domains to other nodes
copy_instances:
  'wlsDomain':
     log_output:              *logoutput

###orawls::nodemanager start the nodemanager of a WebLogic Domain or Middleware Home

orawls::nodemanager{'nodemanager12c':
  version                    => 1212, # 1036|1111|1211|1212
  weblogic_home_dir          => "/opt/oracle/middleware12c/wlserver",
  jdk_home_dir               => "/usr/java/jdk1.7.0_45",
  nodemanager_port           => 5556,
  domain_name                => "Wls12c",     
  os_user                    => "oracle",
  os_group                   => "dba",
  log_dir                    => "/data/logs",
  download_dir               => "/data/install",
  log_output                 => true,
}  

or when you set the defaults hiera variables

orawls::nodemanager{'nodemanager12c':
  nodemanager_port           => 5556,
  domain_name                => "Wls12c",     
  log_output                 => true,
}

Same configuration but then with Hiera ( need to have puppet > 3.0 )

$default = {}
$nodemanager_instances = hiera('nodemanager_instances', [])
create_resources('orawls::nodemanager',$nodemanager_instances, $default)

vagrantcentos64.example.com.yaml

---
nodemanager_instances:
  'nodemanager12c':
     version:              1212
     weblogic_home_dir     "/opt/oracle/middleware12c/wlserver"
     jdk_home_dir          "/usr/java/jdk1.7.0_45"
     nodemanager_port:     5556
     domain_name:          "Wls12c"
     os_user:              "oracle"
     os_group:             "dba"
     log_dir:              "/data/logs"
     download_dir:         "/data/install"
     log_output:           true

or when you set the defaults hiera variables

---
nodemanager_instances:
  'nodemanager12c':
     nodemanager_port:     5556
     domain_name:          "Wls12c"
     log_output:           true

when you just have one WebLogic domain on a server

#when you just have one domain on a server
domain_name:                "Wls1036"
domain_nodemanager_port:    5556

---
nodemanager_instances:
  'nodemanager12c':
     log_output:           true

###orawls::control start or stops the AdminServer,Managed Server or a Cluster of a WebLogic Domain

orawls::control{'startWLSAdminServer12c':
  domain_name                => "Wls12c",
  domain_dir                 => "/opt/oracle/middleware12c/user_projects/domains/Wls12c",
  server_type                => 'admin',  # admin|managed
  target                     => 'Server', # Server|Cluster
  server                     => 'AdminServer',
  action                     => 'start',
  weblogic_home_dir          => "/opt/oracle/middleware12c/wlserver",
  jdk_home_dir               => "/usr/java/jdk1.7.0_45",
  weblogic_user              => "weblogic",
  weblogic_password          => "weblogic1",
  adminserver_address        => 'localhost',
  adminserver_port           => 7001,
  nodemanager_port           => 5556,
  os_user                    => "oracle",
  os_group                   => "dba",
  download_dir               => "/data/install",
  log_output                 => true,
}

or when you set the defaults hiera variables

orawls::control{'startWLSAdminServer12c':
  domain_name                => "Wls12c",
  domain_dir                 => "/opt/oracle/middleware12c/user_projects/domains/Wls12c",
  server_type                => 'admin',  # admin|managed
  target                     => 'Server', # Server|Cluster
  server                     => 'AdminServer',
  action                     => 'start',
  weblogic_password          => "weblogic1",
  adminserver_address        => 'localhost',
  adminserver_port           => 7001,
  nodemanager_port           => 5556,
  log_output                 => true,
 }

Same configuration but then with Hiera ( need to have puppet > 3.0 )

$default = {}
$control_instances = hiera('control_instances', [])
create_resources('orawls::control',$control_instances, $default)

vagrantcentos64.example.com.yaml

---
control_instances:
  'startWLSAdminServer12c':
     domain_name:          "Wls12c"
     domain_dir:           "/opt/oracle/middleware12c/user_projects/domains/Wls12c"
     server_type:          'admin'
     target:               'Server'
     server:               'AdminServer'
     action:               'start'
     weblogic_home_dir     "/opt/oracle/middleware12c/wlserver"
     jdk_home_dir          "/usr/java/jdk1.7.0_45"
     weblogic_user:        "weblogic"
     weblogic_password:    "weblogic1"
     adminserver_address:  'localhost'
     adminserver_port:     7001
     nodemanager_port:     5556
     os_user:              "oracle"
     os_group:             "dba"
     download_dir:         "/data/install"
     log_output:           true

or when you set the defaults hiera variables

---
control_instances:
  'startWLSAdminServer12c':
     domain_name:          "Wls12c"
     domain_dir:           "/opt/oracle/middleware12c/user_projects/domains/Wls12c"
     server_type:          'admin'
     target:               'Server'
     server:               'AdminServer'
     action:               'start'
     weblogic_password:    "weblogic1"
     adminserver_address:  'localhost'
     adminserver_port:     7001
     nodemanager_port:     5556
     log_output:           true

when you just have one WebLogic domain on a server

---
#when you just have one domain on a server
domain_name:                "Wls1036"
domain_adminserver_address: "localhost"
domain_adminserver_port:    7001
domain_nodemanager_port:    5556
domain_wls_password:        "weblogic1"


    
# startup adminserver for extra configuration
control_instances:
  'startWLSAdminServer':
     domain_dir:           "/opt/oracle/middleware11g/user_projects/domains/Wls1036"
     server_type:          'admin'
     target:               'Server'
     server:               'AdminServer'
     action:               'start'
     log_output:           *logoutput

###orawls::control Linux low on entropy or urandom fix can cause certain operations to be very slow. Encryption operations need entropy to ensure randomness. Entropy is generated by the OS when you use the keyboard, the mouse or the disk.

If an encryption operation is missing entropy it will wait until enough is generated.

three options

  • use rngd service (use this wls::urandomfix class)
  • set java.security in JDK ( jre/lib/security in my jdk7 module )
  • set -Djava.security.egd=file:/dev/./urandom param

###orawls::storeuserconfig Creates WLST user config for WLST , this way you don't need to know the weblogic password. when you set the defaults hiera variables

orawls::storeuserconfig{'Wls12c':
  domain_name                => "Wls12c",
  adminserver_address        => "localhost",
  adminserver_port           => 7001,
  weblogic_password          => "weblogic1",
  user_config_dir            => '/home/oracle',
  weblogic_password          => undef,
  log_output                 => false,
}

Same configuration but then with Hiera ( need to have puppet > 3.0 )

notify { 'class userconfig':} 
$default_params = {}
$userconfig_instances = hiera('userconfig_instances', [])
create_resources('orawls::storeuserconfig',$userconfig_instances, $default_params)

vagrantcentos64.example.com.yaml or when you set the defaults hiera variables

---
userconfig_instances:
  'Wls12c':
     domain_name:          "Wls12c"
     adminserver_address:  "localhost"
     adminserver_port:     7001
     weblogic_password:    "weblogic1"
     log_output:           true
     user_config_dir:      '/home/oracle'

when you just have one WebLogic domain on a server

#when you just have one domain on a server
domain_name:                "Wls1036"
domain_adminserver_address: "localhost"
domain_adminserver_port:    7001
domain_wls_password:        "weblogic1"

---
userconfig_instances:
  'Wls12c':
     log_output:           true
     user_config_dir:      '/home/oracle'

orawls::utils::fmwcluster

convert existing cluster to a soa suite cluster and BPM is optional and also convert BAM to a cluster
see this for an example https://github.com/biemond/biemond-orawls-vagrant-solaris-soa
you need to create a soa or bam cluster with some managed servers first for the soa suite managed servers make sure to set the coherence arguments parameters

$default_params = {}
$fmw_cluster_instances = hiera('fmw_cluster_instances', $default_params)
create_resources('orawls::utils::fmwcluster',$fmw_cluster_instances, $default_params)

hiera configuration

fmw_cluster_instances:
  'soaCluster':
     domain_dir:           "/opt/oracle/middleware11g/user_projects/domains/soa_basedomain"
     soa_cluster_name:     "SoaCluster"
     bam_cluster_name:     "BamCluster"
     log_output:           *logoutput
     bpm_enabled:          true
     bam_enabled:          true
     soa_enabled:          true

###orawls::wlstexec execute any WLST script you want

here some WLST examples and the matching Hiera configuration

for bulk insert of WebLogic Objects see orawls::utils::wlstbulk

full example

orawls::wlstexec{'createMachine_node1':
  version                    => 1111, 
  domain_name                => "Wls12c",
  weblogic_home_dir          => "/opt/oracle/middleware12c/wlserver",
  jdk_home_dir               => "/usr/java/jdk1.7.0_45",
  weblogic_user              => "weblogic",
  weblogic_password          => "weblogic1",
  adminserver_address        => 'localhost',
  adminserver_port           => 7001,
  os_user                    => "oracle",
  os_group                   => "dba",
  download_dir               => "/data/install",
  log_output                 => true,
  script                     => 'createMachine.py',
  weblogic_type              => "machine",
  weblogic_object_name       => "Node1",
  params                     => ["machineName      = 'Node1'",
                                 "machineDnsName   = 'node1.alfa.local'",
                                ],
}

or when you want to work with hiera

class file with create_resources utility

node 'vagrantcentos64' {
  
  include machines,managed_servers,clusters
  include jms_servers,file_persistences,jms_modules,jms_module_subdeployments
  include jms_module_quotas,jms_module_cfs,jms_module_objects_errors,jms_module_objects

  Class['machines'] ->
    Class['managed_servers'] ->
      Class['clusters'] ->
        Class['file_persistences'] ->
          Class['jms_servers'] ->
            Class['jms_modules'] ->
              Class['jms_module_subdeployments'] ->
                Class['jms_module_quotas'] ->
                  Class['jms_module_cfs'] ->
                    Class['jms_module_objects_errors'] ->
                      Class['jms_module_objects']
}


class machines{

  notify { 'class machines':} 
  $default_params = {}
  $machines_instances = hiera('machines_instances', [])
  create_resources('orawls::wlstexec',$machines_instances, $default_params)
}

class managed_servers{

  notify { 'class managed_servers':} 
  $default_params = {}
  $managed_servers_instances = hiera('managed_servers_instances', [])
  create_resources('orawls::wlstexec',$managed_servers_instances, $default_params)
}

class clusters{

  notify { 'class clusters':} 
  $default_params = {}
  $cluster_instances = hiera('cluster_instances', [])
  create_resources('orawls::wlstexec',$cluster_instances, $default_params)
}

class file_persistences {

  notify { 'class file_persistences':} 
  $default_params = {}
  $file_persistence_instances = hiera('file_persistence_instances', [])
  create_resources('orawls::wlstexec',$file_persistence_instances, $default_params)

}

class jms_servers{

  notify { 'class jms_servers':} 
  $default_params = {}
  $jms_servers_instances = hiera('jms_servers_instances', [])
  create_resources('orawls::wlstexec',$jms_servers_instances, $default_params)

}

class jms_modules{

  notify { 'class jms_modules':} 
  $default_params = {}
  $jms_module_instances = hiera('jms_module_instances', [])
  create_resources('orawls::wlstexec',$jms_module_instances, $default_params)

}

class jms_module_subdeployments{

  notify { 'class jms_module_subdeployments':} 
  $default_params = {}
  $jms_module_subdeployments_instances = hiera('jms_module_subdeployments_instances', [])
  create_resources('orawls::wlstexec',$jms_module_subdeployments_instances, $default_params)

}
class jms_module_quotas{

  notify { 'class jms_module_quotas':} 
  $default_params = {}
  $jms_module_quotas_instances = hiera('jms_module_quotas_instances', [])
  create_resources('orawls::wlstexec',$jms_module_quotas_instances, $default_params)

}

class jms_module_cfs{

  notify { 'class jms_module_cfs':} 
  $default_params = {}
  $jms_module_cf_instances = hiera('jms_module_cf_instances', [])  
  create_resources('orawls::wlstexec',$jms_module_cf_instances, $default_params)
}

class jms_module_objects_errors{

  notify { 'class jms_module_objects_errors':} 
  $default_params = {}
  $jms_module_jms_errors_instances = hiera('jms_module_jms_errors_instances', [])
  create_resources('orawls::wlstexec',$jms_module_jms_errors_instances, $default_params)
}

class jms_module_objects{

  notify { 'class jms_module_objects':} 
  $default_params = {}
  $jms_module_jms_instances = hiera('jms_module_jms_instances', [])
  create_resources('orawls::wlstexec',$jms_module_jms_instances, $default_params)
}

Hiera configuration

here we have some options, when you just have one domain you don't need to provide all the domain parameters

default parameters

logoutput:                     &logoutput                     true

when you have just one WebLogic domain on a server

#when you have just one domain on a server
domain_name:                "Wls1036"
domain_adminserver:         "AdminServer"
domain_adminserver_address: "localhost"
domain_adminserver_port:    7001
domain_nodemanager_port:    5556

# provide the password or the user config and key file
#domain_wls_password:        "weblogic1"
domain_user_config_file:    "/home/oracle/oracle-Wls1036-WebLogicConfig.properties"
domain_user_key_file:       "/home/oracle/oracle-Wls1036-WebLogicKey.properties"

when you have more than one domain on a server and you need to provide these parameters to wlstexec define

# when you have more than one domain on a server
domain_1_wls_password:        &domain_1_wls_password         "weblogic1"
domain_1_name:                &domain_1_name                 "Wls1036"
domain_1_adminserver:         &domain_1_adminserver          "AdminServer"
domain_1_adminserver_address: &domain_1_adminserver_address  "localhost"
domain_1_adminserver_port:    &domain_1_adminserver_port     7001
domain_1_nodemanager_port:    &domain_1_nodemanager_port     5556

Create 2 machines

machines_instances:
  'createMachine_node1':
     domain_name:          *domain_1_name
     adminserver_address:  *domain_1_adminserver_address
     adminserver_port:     *domain_1_adminserver_port
     weblogic_password:    *domain_1_wls_password
     log_output:           *logoutput
     weblogic_type:        "machine"
     weblogic_object_name: "Node1"
     script:               'createMachine.py'
     params:
        - "machineName      = 'Node1'"
        - "machineDnsName   = 'node1.alfa.local'"
  'createMachine_node2':
     log_output:           *logoutput
     weblogic_type:        "machine"
     weblogic_object_name: "Node2"
     script:               'createMachine.py'
     params:
        - "machineName      = 'Node2'"
        - "machineDnsName   = 'node2.alfa.local'"

Create 2 managed servers and assign them to the machines

managed_servers_instances:
  'wlsServer1_node1':
     domain_name:          *domain_1_name
     adminserver_address:  *domain_1_adminserver_address
     adminserver_port:     *domain_1_adminserver_port
     weblogic_password:    *domain_1_wls_password
     log_output:           *logoutput
     weblogic_type:        "server"
     weblogic_object_name: "wlsServer1"
     script:               'createServer.py'
     params:
        - "javaArguments    = '-XX:PermSize=256m -XX:MaxPermSize=512m -Xms1024m -Xmx1024m -Dweblogic.Stdout=/data/logs/wlsServer1.out -Dweblogic.Stderr=/data/logs/wlsServer1_err.out'"
        - "wlsServerName    = 'wlsServer1'"
        - "machineName      = 'Node1'"
        - "listenAddress    = 9201"
        - "nodeMgrLogDir    = '/data/logs'"
  'wlsServer2_node2':
     log_output:           *logoutput
     weblogic_type:        "server"
     weblogic_object_name: "wlsServer2"
     script:               'createServer.py'
     params:
        - "javaArguments    = '-XX:PermSize=256m -XX:MaxPermSize=512m -Xms1024m -Xmx1024m -Dweblogic.Stdout=/data/logs/wlsServer2.out -Dweblogic.Stderr=/data/logs/wlsServer2_err.out'"
        - "wlsServerName    = 'wlsServer2'"
        - "machineName      = 'Node2'"
        - "listenAddress    = 9201"
        - "nodeMgrLogDir    = '/data/logs'"

Create cluster and assign the managed servers

cluster_instances:
  'cluster_web':
     log_output:           *logoutput
     weblogic_type:        "cluster"
     weblogic_object_name: "WebCluster"
     script:               'createCluster.py'
     params:
        - "clusterName      = 'WebCluster'"
        - "clusterNodes     = 'wlsServer1,wlsServer2'"

Create File Persistence locations for the JMS servers

file_persistence_instances:
  'filePersistenceNode1':
     log_output:           *logoutput
     weblogic_type:        "filestore"
     weblogic_object_name: "jmsFilePersistenceNode1"
     script:               'createFilePersistenceStore.py'
     params:
        - "fileStoreName    = 'jmsFilePersistenceNode1'"
        - "target           = 'wlsServer1'"
        - "targetType       = 'Server'"
  'filePersistenceNode2':
     log_output:           *logoutput
     weblogic_type:        "filestore"
     weblogic_object_name: "jmsFilePersistenceNode2"
     script:               'createFilePersistenceStore.py'
     params:
        - "fileStoreName    = 'jmsFilePersistenceNode2'"
        - "target           = 'wlsServer2'"
        - "targetType       = 'Server'"

Create JMS servers with a Server & File persistence reference

jms_servers_instances:
  'jmsServerNode1':
     log_output:           *logoutput
     weblogic_type:        "jmsserver"
     weblogic_object_name: "jmsServer1"
     script:               'createJmsServer.py'
     params:
        - "storeName        = 'jmsFilePersistenceNode1'"
        - "target           = 'wlsServer1'"
        - "targetType       = 'Server'"
        - "storeType        = 'file'"
        - "jmsServerName    = 'jmsServer1'"
  'jmsServerNode2':
     log_output:           *logoutput
     weblogic_type:        "jmsserver"
     weblogic_object_name: "jmsServer2"
     script:               'createJmsServer.py'
     params:
        - "storeName        = 'jmsFilePersistenceNode2'"
        - "target           = 'wlsServer2'"
        - "targetType       = 'Server'"
        - "storeType        = 'file'"
        - "jmsServerName    = 'jmsServer2'"

Create JMS module for a cluster

jms_module_instances:
  'jmsClusterModule':
     log_output:           *logoutput
     weblogic_type:        "jmsmodule"
     weblogic_object_name: "jmsClusterModule"
     script:               'createJmsModule.py'
     params:
        - "target           = 'WebCluster'"
        - "targetType       = 'Cluster'"
        - "jmsModuleName    = 'jmsClusterModule'"

Create JMS subdeployment for the jms module ( targets Clusters and all the JMS servers )

jms_module_subdeployments_instances:
  'SubDeploymentWLSforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmssubdeployment"
     weblogic_object_name: "jmsClusterModule/wlsServers"
     script:               'createJmsSubDeployment.py'
     params:
        - "target           = 'WebCluster'"
        - "targetType       = 'Cluster'"
        - "subName          = 'wlsServers'"
        - "jmsModuleName    = 'jmsClusterModule'"
  'SubDeploymentJMSforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmssubdeployment"
     weblogic_object_name: "jmsClusterModule/jmsServers"
     script:               'createJmsSubDeployment.py'
     params:
        - "target           = 'jmsServer1,jmsServer2'"
        - "targetType       = 'JMSServer'"
        - "subName          = 'jmsServers'"
        - "jmsModuleName    = 'jmsClusterModule'"

Create JMS quotas for the jms module

jms_module_quotas_instances:
  'QuotaBigforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmsquota"
     weblogic_object_name: "jmsClusterModule/QuotaBig"
     script:               'createJmsQuota.py'
     params:
        - "jmsQuotaName     = 'QuotaBig'"
        - "bytesMaximum     = 9223372036854775807"
        - "messagesMaximum  = 9223372036854775807"
        - "jmsModuleName    = 'jmsClusterModule'"
        - "shared           = false"
        - "policy           = 'FIFO'"
  'QuotaLowforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmsquota"
     weblogic_object_name: "jmsClusterModule/QuotaLow"
     script:               'createJmsQuota.py'
     params:
        - "jmsQuotaName     = 'QuotaLow'"
        - "bytesMaximum     = 10000000000"
        - "messagesMaximum  = 10000"
        - "jmsModuleName    = 'jmsClusterModule'"
        - "shared           = false"
        - "policy           = 'FIFO'"

Create JMS connection factory in a JMS module

jms_module_cf_instances:
  'createJmsConnectionFactoryforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmsobject"
     weblogic_object_name: "cf"
     script:               'createJmsConnectionFactory.py'
     params:
        - "subDeploymentName = 'wlsServers'"
        - "jmsModuleName     = 'jmsClusterModule'"
        - "cfName            = 'cf'"
        - "cfJNDIName        = 'jms/cf'"
        - "transacted        = 'false'"
        - "timeout           = 'xxxx'"

create Error JMS object for JMS redirect of Queue and Topics

jms_module_jms_errors_instances:
  'createJmsErrorQueueforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmsobject"
     weblogic_object_name: "ErrorQueue"
     script:               'createJmsQueueOrTopic.py'
     params:
        - "subDeploymentName = 'jmsServers'"
        - "jmsModuleName     = 'jmsClusterModule'"
        - "jmsName           = 'ErrorQueue'"
        - "jmsJNDIName       = 'jms/ErrorQueue'"
        - "jmsType           = 'queue'"
        - "distributed       = 'true'"
        - "balancingPolicy   = 'Round-Robin'"
        - "useRedirect       = 'false'"
        - "limit             = 'xxxxx'"
        - "policy            = 'xxxxx'"
        - "errorObject       = 'xxxxx'"

create JMS objects ( Queue and a Topic ) in a JMS module

jms_module_jms_instances:
  'createJmsQueueforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmsobject"
     weblogic_object_name: "Queue1"
     script:               'createJmsQueueOrTopic.py'
     params:
        - "subDeploymentName = 'jmsServers'"
        - "jmsModuleName     = 'jmsClusterModule'"
        - "jmsName           = 'Queue1'"
        - "jmsJNDIName       = 'jms/Queue1'"
        - "jmsType           = 'queue'"
        - "distributed       = 'true'"
        - "balancingPolicy   = 'Round-Robin'"
        - "useRedirect       = 'true'"
        - "limit             = '3'"
        - "policy            = 'Redirect'"
        - "errorObject       = 'ErrorQueue'"
  'createJmsTopicforJmsModule':
     log_output:           *logoutput
     weblogic_type:        "jmsobject"
     weblogic_object_name: "Topic1"
     script:               'createJmsQueueOrTopic.py'
     params:
        - "subDeploymentName = 'jmsServers'"
        - "jmsModuleName     = 'jmsClusterModule'"
        - "jmsName           = 'Topic1'"
        - "jmsJNDIName       = 'jms/Topic1'"
        - "jmsType           = 'topic'"
        - "distributed       = 'true'"
        - "balancingPolicy   = 'Round-Robin'"
        - "useRedirect       = 'true'"
        - "limit             = '3'"
        - "policy            = 'Redirect'"
        - "errorObject       = 'ErrorQueue'"

###orawls::utils::wlstbulk execute any WLST script you want( bulk mode )

requirements

  • need puppet version > 3.2 ( make use of iteration and lambda expressions
  • need to set --parser future ( puppet agent )

to use this you need uncomment this orawls::utils::wlstbulk define and enable future parser

use hiera_array, this will search for this entry in all hiera data files

example how to call this wlstbulk define

$allHieraEntries = hiera_array('jms_module_jms_instances')

orawls::utils::wlstbulk{ 'jms_module_jms_instances':
  entries_array => $allHieraEntries,
}

possible hiera examples ( use hiera_array )

with global parameters and inside with params

jms_module_instances:
  - clusterOne:
     global_parameters:
        log_output:           *logoutput
        weblogic_type:        "jmsmodule"
        script:               'createJmsModule.py'
        params:
           - "jmsModuleName    = 'jmsClusterModule'"
     jmsClusterModule:
        weblogic_object_name: "jmsClusterModule"
        params:
           - "target           = 'WebCluster'"
           - "targetType       = 'Cluster'"

with global parameters

managed_servers_instances:
  - clusterOne:
     global_parameters:
        log_output:           *logoutput
        weblogic_type:        "server"
        script:               'createServer.py'
     wlsServer1_node1:
        weblogic_object_name: "wlsServer1"
        params:
           - "javaArguments    = '-XX:PermSize=256m -XX:MaxPermSize=256m -Xms752m -Xmx752m -Dweblogic.Stdout=/data/logs/wlsServer1.out -Dweblogic.Stderr=/data/logs/wlsServer1_err.out'"
           - "wlsServerName    = 'wlsServer1'"
           - "machineName      = 'Node1'"
           - "listenAddress    = 8001"
           - "nodeMgrLogDir    = '/data/logs'"
     wlsServer2_node2:
        weblogic_object_name: "wlsServer2"
        params:
           - "javaArguments    = '-XX:PermSize=256m -XX:MaxPermSize=256m -Xms752m -Xmx752m -Dweblogic.Stdout=/data/logs/wlsServer2.out -Dweblogic.Stderr=/data/logs/wlsServer2_err.out'"
           - "wlsServerName    = 'wlsServer2'"
           - "machineName      = 'Node2'"
           - "listenAddress    = 8001"
           - "nodeMgrLogDir    = '/data/logs'"

no global parameters

cluster_instances:
  - clusterOne:
     cluster_web:
        weblogic_object_name: "WebCluster"
        log_output:           *logoutput
        weblogic_type:        "cluster"
        script:               'createCluster.py'
        params:
           - "clusterName      = 'WebCluster'"
           - "clusterNodes     = 'wlsServer1,wlsServer2'"

with empty global parameters

jms_servers_instances:
  - clusterOne:
     global_parameters:
     jmsServerNode1:
        log_output:           *logoutput
        weblogic_type:        "jmsserver"
        script:               'createJmsServer.py'
        weblogic_object_name: "jmsServer1"
        params:
           - "target           = 'wlsServer1'"
           - "jmsServerName    = 'jmsServer1'"
           - "targetType       = 'Server'"
     jmsServerNode2:
        log_output:           *logoutput
        weblogic_type:        "jmsserver"
        script:               'createJmsServer.py'
        weblogic_object_name: "jmsServer2"
        params:
           - "target           = 'wlsServer2'"
           - "jmsServerName    = 'jmsServer2'"
           - "targetType       = 'Server'"

or inside puppet

$entries_array = 
 [{  'ClusterOne' => {
         'global_parameters' => 
            {
             log_output     => true,
             weblogic_type  => "jmsobject",
             script         => 'createJmsQueueOrTopic.py',
             params         => 
               [  "subDeploymentName = 'jmsServers'",
                  "jmsModuleName     = 'jmsClusterModule'",
                  "distributed       = 'true'",
                  "balancingPolicy   = 'Round-Robin'",
                  "useRedirect       = 'true'",
                  "limit             = '3'",
                  "policy            = 'Redirect'",
                  "errorObject       = 'ErrorQueue'",
               ],
           } ,
         'createJmsQueueforJmsModule1' => 
            {
              weblogic_object_name  => "Queue1",
              params                => 
                [ "jmsType           = 'queue'",
                  "jmsName           = 'Queue1'",
                  "jmsJNDIName       = 'jms/Queue1'",
                ],
            } ,
          'createJmsQueueforJmsModule2' => 
            {
              weblogic_object_name  => "Queue2",
              params                => 
                [ "jmsType           = 'queue'",
                  "jmsName           = 'Queue2'",
                  "jmsJNDIName       = 'jms/Queue2'",
                ],
           },
     },
 },
]