Skip to content
Snippets Groups Projects
rac.pp 8.28 KiB
Newer Older
#  Oracle RAC setup
# TODO: look at using a define to solve some of these deps
# TODO: does this need to modify nsswitch.conf to set hosts: dns files?

# REQUIRES:
## hosts file entries for dns names, pvt, and vip
######
## ssh setup files
# file {
#   '/u01/app/oracle/.ssh/authorized_keys':
#            ensure   => file,
#            source   => "puppet:///CLIENT/u01/app/oracle/dotssh/authorized_keys.${hostname}",
#            mode     => 640,
#            owner    => oracle,
#            require  => File['/u01/app/oracle/.ssh'];
#         '/u01/app/oracle/.ssh/id_rsa.pub':
#            ensure   => file,
#            source   => "puppet:///CLIENT/u01/app/oracle/dotssh/id_rsa.pub.${hostname}",
#            mode     => 640,
#            owner    => oracle,
#            require  => File['/u01/app/oracle/.ssh'];
#
#   '/u01/11.2.0/grid/.ssh/authorized_keys':
#      ensure   => file,
#      source   => "puppet:///CLIENT/u01/11.2.0/grid/dotssh/authorized_keys.${hostname}",
#      mode     => 640,
#      owner    => grid,
#      require  => File['/u01/11.2.0/grid/.ssh'];
#   '/u01/11.2.0/grid/.ssh/id_rsa.pub':
#      ensure   => file,
#      source   => "puppet:///CLIENT/u01/11.2.0/grid/dotssh/id_rsa.pub.${hostname}",
#      mode     => 640,
#      owner    => grid,
#      require  => File['/u01/11.2.0/grid/.ssh'];
# }
#######
## wallet setup
#   base::wallet { "unix-${hostname}-grid-ssh-rsa":
#    path    => '/u01/11.2.0/grid/.ssh/id_rsa',
#    owner   => grid, 
#    group   => oinstall,
#    type    => "file",
#    mode    => 600,
#    require => File['/u01/11.2.0/grid/.ssh'];
#  }
#  base::wallet { "unix-${hostname}-oracle-ssh-rsa":
#    path    => '/u01/app/oracle/.ssh/id_rsa',
#    owner   => oracle,
#    group   => oinstall,
#    type    => "file",
#    mode    => 600,
#    require => File['/u01/app/oracle/.ssh'];
#  }
## bonding setup for NICs to setup LACP mode 1 on nic pairs
# file { "/etc/modprobe.d/bonding.conf": 
#   source => "puppet:///CLIENT/etc/modprobe.d/bonding.conf",
# }


class oracledb::rac inherits oracledb::rhel5 {
  include oracledb::rac::ntirety
  include oracledb::rac::ntpd
  include oracledb::rac::root
  include oracledb::rac::users
  include oracledb::rac::v11g
  include powerpath
  include base::ssh::pubkey

  if (! ( $operatingsystem == "redhat" and $lsbmajdistrelease == '5' )) {
    fail "Must be running RHEL5 to use RAC"
  }

  # Oracle modules need to be rewritten!!! This is hacked to work around it.
  if ! defined (Package['libaio-devel.i386']) {
    package { 'libaio-devel.i386': ensure => present }
  }

  if ! defined (Package['libaio-devel.x86_64']) {
    package { 'libaio-devel.x86_64': ensure => present }
  }

  if ! defined (Package['unixODBC.i386']) {
    package { 'unixODBC.i386': ensure => present }
  }

  if ! defined (Package['unixODBC.x86_64']) {
    package { 'unixODBC.x86_64': ensure => present }
  }

  if ! defined (Package['unixODBC-devel.i386']) {
    package { 'unixODBC-devel.i386': ensure => present }
  }

  if ! defined (Package['unixODBC-devel.x86_64']) {
    package { 'unixODBC-devel.x86_64': ensure => present }
  }

  if ! defined (Package['compat-libstdc++-33.x86_64']) {
    package { 'compat-libstdc++-33.x86_64': ensure => present }
  }

  File['/etc/security/limits.conf'] {
    source => 'puppet:///oracledb/etc/security/limits.conf'
  }

  class { 'base::newsyslog::messages::sa::override':
    group   => 'dba',
    require => Group['dba'],
  }

  file { "/etc/oraInst.loc":
    source  => "puppet:///oracledb/etc/oraInst.loc",
    require => User['oracle'],
    owner   => 'root',
    mode    => 0644;
  }

  # link in sqlplus to /usr/local/bin
  file { "/usr/local/bin/sqlplus":
    ensure  => link,
    target  => "/u01/app/oracle/product/10.2.0/db_1/bin/sqlplus";
  }

  # oracle and dba group needs access to powerpath devices
  exec { "chown oracle:dba /dev/emcpower*":
    command => "chown oracle:dba /dev/emcpower* && chmod 660 /dev/emcpower*",
    onlyif  => "ls -l /dev/emcpower* | egrep -q 'root|disk|brw-r-'",
    require => Package['EMCpower.LINUX'],
  }

  # we need Oracle ASM for currently booted kernel and other req oracle pkgs
  package {
    "cvuqdisk":                     ensure => present;
    "oracleasm-support":            ensure => present;
    "oracleasm-${kernelrelease}":   ensure => present;
    "oracleasmlib":                 ensure => present;
  }
}

# override ntp config file to use -x flag
class oracledb::rac::ntpd inherits base::ntp {
  File['/etc/sysconfig/ntpd'] {
    source => "puppet:///oracledb/etc/sysconfig/ntpd",
  }
}

class oracledb::rac::ntirety inherits user::ntirety {
  include group::asmadmin
  include group::asmdba
  include group::asmoper
  include group::oinstall

  User["ntirety"]  {
    groups => ['asmadmin','asmdba','asmoper','oinstall'],
  }
}

class oracledb::rac::oracle-user inherits user::oracle {
    include group::oinstall
    include group::asmdba

    User["oracle"]  { 
        gid     => 'dba',
        groups  => ['oinstall','asmdba'],
        require => [ Group['dba'], Group['asmdba'], Group['oinstall'] ],
    }

    File['/u01/app/oracle'] {
            mode     => 0640
    }

    file {
        '/u01/app/oracle/.ssh':
            ensure   => directory,
            mode     => 0640,
            owner    => 'oracle',
            require  => [ User['oracle'], File['/u01/app/oracle'] ];
        '/u02/app':
            ensure   => directory,
            mode     => 0664,
            owner    => 'oracle',
            group    => 'oinstall',
            require  => [ Group['oinstall'], User['oracle'], File['/u02'] ];
        '/u02/app/oracle':
            ensure   => directory,
            mode     => 0664,
            owner    => 'oracle',
            group    => 'oinstall',
            require  => [ Group['oinstall'], User['oracle'], File['/u02/app'] ];
        '/u02/app/oracle/cfgtoollogs':
            ensure   => directory,
            mode     => 0664,
            owner    => 'oracle',
            group    => 'oinstall',
            require  => [ Group['oinstall'], User['oracle'], File['/u02/app/oracle'] ];
        '/u02/app/oracle/product':
            ensure   => directory,
            mode     => 0664,
            owner    => 'oracle',
            group    => 'oinstall',
            require  => [ Group['oinstall'], User['oracle'], File['/u02/app/oracle'] ];
        '/u02/app/oracle/product/11.2.0':
            ensure   => directory,
            mode     => 0664,
            owner    => 'oracle',
            group    => 'oinstall',
            require  => [ Group['oinstall'], User['oracle'], File['/u02/app/oracle/product'] ];
        '/u02/app/oracle/product/11.2.0/db_1':
            ensure   => directory,
            mode     => 0664,
            owner    => 'oracle',
            group    => 'oinstall',
            require  => [ Group['oinstall'], User['oracle'], File['/u02/app/oracle/product/11.2.0'] ];
    }
}

# add grid to dba group
class oracledb::rac::grid-user inherits user::grid {
  include group::dba

  User['grid'] {
    gid => 'dba',
  }
}

class oracledb::rac::users inherits user::virtual {
  include oracledb::ntirety
  include oracledb::rac::ntirety
  include oracledb::rac::v11g
  include oracledb::rac::grid-user
  include oracledb::rac::oracle-user

  file {
    '/etc/profile.d/oraclegrid.sh':
      ensure   => file,
      source   => "puppet:///oracledb/etc/profile.d/oraclegrid.sh",
      mode     => 0755,
      owner    => 'root',
      group    => 'root';
    '/u01/11.2.0/grid/.ssh':
      ensure   => directory,
      mode     => 0640,
      owner    => 'grid',
      require  => [ File['/u01/11.2.0/grid'], User['grid'] ];
    '/u01/app/oraInventory':
      ensure   => directory,
      mode     => 0664,
      owner    => 'grid',
      group    => 'oinstall',
      require  => [ File['/u01/app'], User['grid'], Group['oinstall'] ];
  }

  # TODO: separate into oracledb::grid?
  k5login { '/u01/11.2.0/grid/.k5login':
    purge      => true,
    require    => File['/u01/11.2.0/grid'],
    principals => $oracledb::ntirety::ntiretyusers,
  }
}

class oracledb::rac::v11g inherits oracledb::v11g {
  Base::Sysctl["net.core.rmem_default"] { ensure => "4194304" }
  Base::Sysctl["net.core.rmem_max"]     { ensure => "4194304" }
}

class oracledb::rac::root inherits user::root::sa-crc-plus-sa-non-crc {
  include oracledb::ntirety

  K5login["/root/.k5login"] {
    principals +> $oracledb::ntirety::ntiretyusers,
  }
}