init.pp 8.52 KiB
#
# Handles an Oracle database system. All of our Oracle databases are run
# essentially the same way and this module contains all the standard bits.
# TODO: parameterized class for Oracle versions (10 and 11).
class oracledb {
# TODO: change to include each individual class, no commas
include compatlibs,
group::dba,
base::libstdc,
oracledb::directories,
oracledb::packages,
oracledb::oracleusers,
user::ntirety,
user::oracle
# TODO: since this is only RH specific, just fail on non-RH instead of large case statement.
case $operatingsystem {
'redhat': {
case $lsbmajdistrelease {
# rhel4 only required packages
# need to add openmotif .
'4': {
# TODO: switch to array of packages
package {
'glibc-kernheaders': ensure => present;
'gnome-libs': ensure => present;
'openmotif21': ensure => present;
'pdksh': ensure => present;
'xorg-x11-deprecated-libs': ensure => present;
'xscreensaver': ensure => present;
}
# TODO: verify <name>.ARCH doesn't work on RHEL4 with puppet now
# install i386 RPM
exec {
' oracle 64 bit server required compat-db':
command => 'up2date --arch=i386 compat-db',
unless => "rpm -q --qf \"%{ARCH}\n\" compat-db | grep -q i386";
'oracle 64bit server required glibc-devel':
command => 'up2date --arch=i386 glibc-devel',
unless => "rpm -q --qf \"%{ARCH}\n\" glibc-devel | grep -q i386";
'oracle 64bit server required libaio':
command => 'up2date --arch=i386 libaio',
unless => "rpm -q --qf \"%{ARCH}\n\" libaio | grep -q i386";
}
# TODO: verify this is needed on all RHEL versions - might not be needed on RHEL5/6
# TODO: verify this should be different than RHEL5/6 - goal: unify
base::sysctl { "net.ipv4.ip_local_port_range": ensure => "1024 65000" }
# Override limits.conf to increase stack size and nofiles.
file { '/etc/security/limits.conf':
source => $architecture ? {
'x86_64' => "puppet:///oracledb/etc/limits.conf.$architecture",
default => 'puppet:///oracledb/etc/limits.conf',
}
}
}
## this is for rhel5
'5': {
include oracledb::rhel5
file {'/etc/security/limits.conf':
source => "puppet:///oracledb/etc/limits.conf.rhel5"
}
base::sysctl { "net.ipv4.ip_local_port_range": ensure => "9000 65500" }
}
}
}
}
base::sysctl {
'kernel.shmmax': ensure => '4294967295';
'kernel.sem': ensure => '250 32000 100 128';
'kernel.shmall': ensure => '2097152';
'kernel.shmmni': ensure => '4096';
'fs.file-max': ensure => '65536';
# 'net.ipv4.ip_local_port_range': ensure => '1024 65000';
'net.core.rmem_default': ensure => '262144';
'net.core.rmem_max': ensure => '262144';
'net.core.wmem_default': ensure => '262144';
'net.core.wmem_max': ensure => '262144';
}
# Drop in iptables rules to allow connections in to the listeners
#iptables::fragment { 'oracle-listeners': ensure => present }
base::iptables::rule { 'oracle-listeners':
protocol => 'tcp',
source => [ '171.64.0.0/14',
'172.24.0.0/14',
'192.168.220.96/19',
'192.168.15.0/24'],
port => ['1533','1534','1535','1568','1542'],
}
# init script and filter-syslog rules for oracle
file {
'/etc/init.d/oracle':
source => 'puppet:///oracledb/oracle.init',
mode => 755,
notify => Exec['chkconfig oracle'];
'/etc/filter-syslog/oracle':
source => 'puppet:///oracledb/filter-syslog';
}
# TODO: use service - don't ensure running, just enabled
exec { 'chkconfig oracle':
command => 'chkconfig --add oracle',
refreshonly => true,
}
# TODO: Cleanup leftover bits
# Override limits.conf to increase stack size and nofiles.
#file { '/etc/security/limits.conf':
# source => $architecture ? {
# 'x86_64' => "puppet:///oracledb/etc/limits.conf.$architecture",
# default => 'puppet:///oracledb/etc/limits.conf',
# }
#}
}
# TODO: separate out into own file because:
# - it doesn't inherit/override from another class
# - and it is used outside this one class (well, not true here)
# - or if it is longer than ~10 lines
#
# It is all about logical separation.
# Is it easier to understand if you separate it into another file?
class oracledb::packages {
# TODO: convert to array of packages
package {
'binutils': ensure => present;
'control-center': ensure => present;
'gcc': ensure => present;
'gcc-c++': ensure => present;
'glibc': ensure => present;
'glibc-common': ensure => present;
'glibc-devel': ensure => present;
'glibc-headers': ensure => present;
'libgcc': ensure => present;
'libaio': ensure => present;
'make': ensure => present;
# 'pdksh': ensure => present;
'sysstat': ensure => present;
# 'stanford-TDPO': ensure => present;
# 'TDP-Oracle': ensure => present;
# 'TDP-Oracle.Utility': ensure => present;
'xorg-x11-xauth': ensure => present;
}
## tpdo rpms exist in rhel4 and rhel5. Need to create 64bits tdpo rpms for rhel6
## install tdpo by hand in rhel6
case $lsbmajdistrelease {
"4","5" : {
package { [
'stanford-TDPO',
'TDP-Oracle',
'TDP-Oracle.Utility'
]:
ensure => present,
}
}
# rhel6 will give you an error if tdp BIN file not installed
default: {
exec { 'check el6 tdp bin installed':
command => 'echo TDP is not installed! Install it by hand from \
/afs/ir/product/storage/TDPO_LINUX_LATEST',
unless => 'ls /opt/tivoli/tsm/client/oracle/properties/version/TSM_Data_Protection_Oracle.cmptag',
}
}
}
}
# TODO: separate file for this class
# TODO: use array for files
class oracledb::directories {
# additional directories usually needed
file {
'/var/opt/oracle':
ensure => directory,
owner => 'oracle',
group => 'dba',
mode => 770;
'/u02':
ensure => directory,
owner => 'oracle',
group => 'dba',
mode => 770;
'/u03':
ensure => directory,
owner => 'oracle',
group => 'dba',
mode => 770;
'/u01/app/rman':
ensure => directory,
owner => 'oracle',
group => 'dba',
mode => 770
}
}
# TODO: separate out to another file
class oracledb::oracleusers {
include oracledb::ntirety
# Standard sudoers file for Oracle DBAs.
# TODO: long term strategy is to use /etc/sudoers.d fragments
base::textline {
'%dba ALL = NOPASSWD: /usr/bin/dsmc q se':
ensure => "/etc/sudoers";
'oracle ALL= NOPASSWD: /usr/bin/tdpoconf PassWord *':
escaped_name => 'oracle ALL= NOPASSWD: /usr/bin/tdpoconf PassWord \*',
ensure => "/etc/sudoers";
}
k5login {
'/u01/app/oracle/.k5login':
purge => true,
principals => $oracledb::ntirety::ntiretyusers,
}
}