277 lines
7.4 KiB
Puppet
277 lines
7.4 KiB
Puppet
|
|
class vmware::server {
|
|
|
|
package { "VMware-server":
|
|
ensure => installed,
|
|
}
|
|
|
|
service { "vmware":
|
|
ensure => running,
|
|
enable => true,
|
|
hasstatus => true,
|
|
start => "pkill 'vmnet-' ; /sbin/service vmware stop ; rm -f /etc/vmware/not_configured ; /sbin/service vmware start && sleep 5",
|
|
stop => "pkill 'vmnet-' ; /sbin/service vmware stop",
|
|
require => [ Package["VMware-server"],
|
|
Exec["vmware-config.pl"], ],
|
|
}
|
|
|
|
# seems that vmware init script fails if pid files are missing for vmnet
|
|
# processes, so kill them by force first
|
|
exec { "vmware-config.pl":
|
|
command => "pkill 'vmnet-' ; perl /usr/bin/vmware-config.pl --default EULA_AGREED=yes && rm -f /etc/vmware/not_configured",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
environment => [ "PAGER=/bin/cat", ],
|
|
unless => "test ! -f /etc/vmware/not_configured -a -f /lib/modules/$kernelrelease/misc/vmci.ko",
|
|
require => Package["VMware-server"],
|
|
notify => Service["vmware"],
|
|
}
|
|
|
|
if $vmware_serial {
|
|
exec { "vmware-set-serial":
|
|
command => "/usr/lib/vmware/bin/vmware-vmx --new-sn ${vmware_serial}",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
user => root,
|
|
creates => "/etc/vmware/license.vs.1.0-00",
|
|
require => Package["VMware-server"],
|
|
before => Exec["vmware-config.pl"],
|
|
}
|
|
}
|
|
|
|
if $vmware_admin_group {
|
|
file { "/etc/vmware/ssl/rui.key":
|
|
ensure => present,
|
|
mode => 0640,
|
|
owner => root,
|
|
group => $vmware_admin_group,
|
|
require => [ Service["vmware"],
|
|
Class["puppet::client"], ],
|
|
notify => Exec["restart-vmware-mgmt"],
|
|
}
|
|
exec { "restart-vmware-mgmt":
|
|
command => "/etc/init.d/vmware-mgmt restart && sleep 10",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
user => root,
|
|
refreshonly => true,
|
|
}
|
|
|
|
exec { "vmware-admin-add-${vmware_admin_group}":
|
|
command => "/usr/bin/vmware-vim-cmd vimsvc/auth/entity_permission_add 'vim.Folder:ha-folder-root' '${vmware_admin_group}' 'true' 'Admin' 'true'",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
user => root,
|
|
unless => "/usr/bin/vmware-vim-cmd vimsvc/auth/entity_permissions 'vim.Folder:ha-folder-root' | egrep 'principal|roleId' | cut -d= -f2 | sed -e 'N;s/\\n/ /' | fgrep -- -1 | grep '\"${vmware_admin_group}\"'",
|
|
require => Service["vmware"],
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Install custom VMware support scripts
|
|
#
|
|
class vmware::server::scripts {
|
|
|
|
include socat::package
|
|
|
|
define vmware::server::scripts::file {
|
|
file { "/usr/local/sbin/${name}":
|
|
ensure => present,
|
|
source => "puppet:///vmware/scripts/${name}",
|
|
mode => 0755,
|
|
owner => root,
|
|
group => root,
|
|
}
|
|
}
|
|
|
|
file { "/usr/local/lib/vmware.sh":
|
|
ensure => present,
|
|
source => "puppet:///vmware/scripts/vmware.sh",
|
|
mode => 0644,
|
|
owner => root,
|
|
group => root,
|
|
}
|
|
|
|
vmware::server::scripts::file { "vmware-console": }
|
|
vmware::server::scripts::file { "vmware-list": }
|
|
vmware::server::scripts::file { "vmware-register": }
|
|
vmware::server::scripts::file { "vmware-start": }
|
|
vmware::server::scripts::file { "vmware-stop": }
|
|
vmware::server::scripts::file { "vmware-suspend": }
|
|
vmware::server::scripts::file { "vmware-unregister": }
|
|
|
|
}
|
|
|
|
|
|
# Create /vmfs directory hierarcy.
|
|
#
|
|
# === Depencies
|
|
#
|
|
# * Package["VMware-server"]
|
|
#
|
|
class vmware::server::vmfs {
|
|
|
|
include vmware::server
|
|
|
|
file { "/vmfs":
|
|
ensure => directory,
|
|
mode => 0755,
|
|
owner => root,
|
|
group => root,
|
|
require => Package["VMware-server"],
|
|
}
|
|
file { "/vmfs/volumes":
|
|
ensure => directory,
|
|
mode => 0755,
|
|
owner => root,
|
|
group => root,
|
|
require => File["/vmfs"],
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Modify VMware datastores.
|
|
#
|
|
# === Parameters
|
|
#
|
|
# $name:
|
|
# Datastore name.
|
|
# $type:
|
|
# Filesystem type of datastore.
|
|
# $options:
|
|
# Filesystem mount options.
|
|
#
|
|
# === Sample usage
|
|
#
|
|
# vmware::server::datastore { "ds-001":
|
|
# device => "its1:/export/vmware/ds-001",
|
|
# options => "hard,intr,rw,nosuid,nodev,tcp,rsize=1048576,wsize=1048576",
|
|
# }
|
|
#
|
|
define vmware::server::datastore($device, $type = "auto", $options = "defaults") {
|
|
|
|
include vmware::server::vmfs
|
|
|
|
case $vmware_admin_group {
|
|
"": { $real_vmware_admin_group = "root" }
|
|
default: { $real_vmware_admin_group = $vmware_admin_group }
|
|
}
|
|
|
|
if $type == "auto" {
|
|
$server = regsubst($device, '^([a-zA-Z0-9\-]+):(/.+)$', '\1')
|
|
if $server == $device {
|
|
$fstype = $type
|
|
if $device == regsubst($device, '^(/dev/).+$', '\1') {
|
|
$mountopts = "bind"
|
|
}
|
|
} else {
|
|
$fstype = "nfs"
|
|
$path = regsubst($device, '^([a-zA-Z0-9\-]+):(/.+)$', '\2')
|
|
}
|
|
}
|
|
|
|
if !$mountopts {
|
|
$mountopts = $options
|
|
}
|
|
|
|
file { "/vmfs/volumes/${name}":
|
|
ensure => directory,
|
|
mode => $fstype ? {
|
|
nfs => 0755,
|
|
default => 0775,
|
|
},
|
|
owner => root,
|
|
group => $fstype ? {
|
|
nfs => "root",
|
|
default => $real_vmware_admin_group,
|
|
},
|
|
require => File["/vmfs/volumes"],
|
|
}
|
|
|
|
mount { "/vmfs/volumes/${name}":
|
|
ensure => mounted,
|
|
device => "${device}",
|
|
fstype => "${fstype}",
|
|
options => "${mountopts}",
|
|
require => File["/vmfs/volumes/${name}"],
|
|
}
|
|
|
|
exec { "vmware-create-datastore-${name}":
|
|
command => $fstype ? {
|
|
nfs => "vmware-vim-cmd hostsvc/datastore/nas_create ${name} ${server} ${path} 0",
|
|
default => "vmware-vim-cmd hostsvc/datastore/localds_create ${name} /vmfs/volumes/${name}",
|
|
},
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
user => root,
|
|
unless => "vmware-vim-cmd hostsvc/datastore/summary ${name}",
|
|
require => [ Mount["/vmfs/volumes/${name}"],
|
|
Service["vmware"], ],
|
|
notify => Exec["vmware-refresh-datastore-${name}"],
|
|
}
|
|
|
|
exec { "vmware-refresh-datastore-${name}":
|
|
command => "vmware-vim-cmd hostsvc/datastore/refresh ${name}",
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
user => root,
|
|
refreshonly => true,
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Modify VMware bridge interfaces.
|
|
#
|
|
# === Parameters
|
|
#
|
|
# $name:
|
|
# vmnet device name.
|
|
# $description:
|
|
# Interface description.
|
|
# $device:
|
|
# Physical network device to bridge.
|
|
# $ensure:
|
|
# Set to present to enable bridge and absent to disable it.
|
|
#
|
|
# === Sample usage
|
|
#
|
|
# vmware::server::bridge { "vmnet0":
|
|
# ensure => present,
|
|
# device => "eth0",
|
|
# description => "Bunker",
|
|
# }
|
|
#
|
|
define vmware::server::bridge($description, $device, $ensure = "present") {
|
|
|
|
$vmnet = regsubst($name, '^vmnet([0-9]+)$', '\1')
|
|
if $vmnet == $name {
|
|
fail("Invalid vmnet device name.")
|
|
}
|
|
|
|
service { "${name}-bridge":
|
|
ensure => $ensure ? {
|
|
"present" => running,
|
|
"absent" => stopped,
|
|
},
|
|
pattern => "/usr/bin/vmnet-bridge -d .* -n ${vmnet}",
|
|
start => "/usr/bin/vmnet-bridge -d /var/run/vmnet-bridge-${vmnet}.pid -n ${vmnet} -i ${device}",
|
|
stop => "pkill -f '/usr/bin/vmnet-bridge -d .* -n ${vmnet}'",
|
|
provider => base,
|
|
require => Exec["vmware-config.pl"],
|
|
}
|
|
|
|
vmware_config { "VNET_${vmnet}_NAME":
|
|
ensure => $ensure ? {
|
|
absent => absent,
|
|
present => "${description}",
|
|
},
|
|
require => Exec["vmware-config.pl"],
|
|
}
|
|
vmware_config { "VNET_${vmnet}_INTERFACE":
|
|
ensure => $ensure ? {
|
|
absent => absent,
|
|
present => "${device}",
|
|
},
|
|
notify => Service["${name}-bridge"],
|
|
require => Exec["vmware-config.pl"],
|
|
}
|
|
|
|
}
|