Import rest of modules.
This commit is contained in:
parent
02fa10f33c
commit
3f225ced9b
39 changed files with 2056 additions and 0 deletions
93
vmware/files/scripts/vmware-console
Executable file
93
vmware/files/scripts/vmware-console
Executable file
|
@ -0,0 +1,93 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
get_pipe_file() {
|
||||
vmware-vim-cmd vmsvc/device.getdevices $1 | awk '
|
||||
/backing = \(vim.vm.device.VirtualSerialPort.PipeBackingInfo\)/ {
|
||||
section = 1;
|
||||
}
|
||||
section == 1 {
|
||||
if (/},/) {
|
||||
if (pipe) {
|
||||
print pipe
|
||||
}
|
||||
section = 0;
|
||||
} else if (/pipeName = /) {
|
||||
pipe = $3;
|
||||
}
|
||||
}
|
||||
' | sed -n 's/^"\(.*\)",/\1/p'
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo "Usage: `basename $0` [-g] <vm>" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
SOCAT="`which socat 2> /dev/null`"
|
||||
|
||||
if [ $# -gt 2 ]; then
|
||||
usage
|
||||
elif [ $# -eq 2 ]; then
|
||||
case $1 in
|
||||
-g)
|
||||
serial=0
|
||||
;;
|
||||
-s)
|
||||
if [ "${SOCAT}" = "" ]; then
|
||||
echo "Serial console not avaible, socat is missing" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
serial=2
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
esac
|
||||
vm="$2"
|
||||
elif [ $# -eq 1 ]; then
|
||||
vm="$1"
|
||||
else
|
||||
usage
|
||||
fi
|
||||
|
||||
vmid="`vmid \"${vm}\"`"
|
||||
if [ "${vmid}" = "" ]; then
|
||||
echo "Cannot find virtual machine ${vm}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${serial}" != "0" -a "${SOCAT}" != "" ]; then
|
||||
pipe="`get_pipe_file ${vmid}`"
|
||||
if [ "${pipe}" != "" ]; then
|
||||
echo ${pipe} | egrep -q "^/"
|
||||
if [ $? -ne 0 ]; then
|
||||
vmpath="`abspath ${vmid}`"
|
||||
pipe="`dirname \"${vmpath}\"`/${pipe}"
|
||||
fi
|
||||
screen ${SOCAT} unix-connect:${pipe} stdio,echo=0,raw
|
||||
exit $?
|
||||
elif [ "${serial}" = "2" ]; then
|
||||
echo "Serial console not available for virtual machine ${vm}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
platform="`uname -i`"
|
||||
case ${platform} in
|
||||
x86_64)
|
||||
platform=x64
|
||||
;;
|
||||
*)
|
||||
platform=x86
|
||||
;;
|
||||
esac
|
||||
xpifile="`find /usr/lib/vmware/webAccess/tomcat/apache-tomcat-*/webapps/ui/plugin/vmware-vmrc-linux-${platform}.xpi`"
|
||||
|
||||
tmpdir="`mktemp -d /tmp/vmware-vmrc-${LOGNAME}-XXXXXXXXXX`" && {
|
||||
cd ${tmpdir}
|
||||
unzip -q ${xpifile}
|
||||
vmware-vim-cmd vmsvc/acquiremksticket ${vmid}
|
||||
./plugins/vmware-vmrc -u root -h localhost:8333 -M ${vmid}
|
||||
rm -rf ${tmpdir}
|
||||
}
|
28
vmware/files/scripts/vmware-list
Executable file
28
vmware/files/scripts/vmware-list
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
if [ "$1" != "-h" ]; then
|
||||
echo "Name ID Mem(MiB) VCPUs State"
|
||||
fi
|
||||
list_vms | while read vm ; do
|
||||
vmname="`echo ${vm} | cut -d '|' -f 2`"
|
||||
vmid=`echo ${vm} | cut -d '|' -f 1`
|
||||
printf '%-25s %5s' ${vmname} ${vmid}
|
||||
vmware-vim-cmd vmsvc/get.summary ${vmid} | \
|
||||
sed -n 's/^[ ]*\(powerState\|memorySizeMB\|numCpu\) = \(.*\),[ ]*$/\1 \2/p' | \
|
||||
awk '
|
||||
{
|
||||
if ($1 == "powerState") {
|
||||
power=substr($2, 2, length($2)-2)
|
||||
} else if ($1 == "memorySizeMB") {
|
||||
memory=$2
|
||||
} else if ($1 == "numCpu") {
|
||||
cpus=$2
|
||||
}
|
||||
}
|
||||
END {
|
||||
printf "%9s %5s %s\n", memory, cpus, power
|
||||
}
|
||||
'
|
||||
done
|
16
vmware/files/scripts/vmware-register
Executable file
16
vmware/files/scripts/vmware-register
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: `basename $0` <vmx>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vmx="`abspath \"${1}\"`"
|
||||
if [ ! -f "${vmx}" ]; then
|
||||
echo "Cannot find vmx file ${vmx}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vmware-vim-cmd solo/registervm "${vmx}"
|
18
vmware/files/scripts/vmware-start
Executable file
18
vmware/files/scripts/vmware-start
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: `basename $0` <vm>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vm="$1"
|
||||
|
||||
vmid="`vmid \"${vm}\"`"
|
||||
if [ "${vmid}" = "" ]; then
|
||||
echo "Cannot find virtual machine ${vm}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vmware-vim-cmd vmsvc/power.on ${vmid}
|
33
vmware/files/scripts/vmware-stop
Executable file
33
vmware/files/scripts/vmware-stop
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
if [ $# -eq 1 ]; then
|
||||
mode="power.shutdown"
|
||||
elif [ $# -eq 2 ]; then
|
||||
case $2 in
|
||||
hard)
|
||||
mode="power.off"
|
||||
;;
|
||||
soft)
|
||||
mode="power.shutdown"
|
||||
;;
|
||||
default)
|
||||
echo "Invalid power mode $2" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "Usage: `basename $0` <vm> [hard|soft]" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vm="$1"
|
||||
|
||||
vmid="`vmid \"${vm}\"`"
|
||||
if [ "${vmid}" = "" ]; then
|
||||
echo "Cannot find virtual machine ${vm}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vmware-vim-cmd vmsvc/${mode} ${vmid}
|
18
vmware/files/scripts/vmware-suspend
Executable file
18
vmware/files/scripts/vmware-suspend
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: `basename $0` <vm>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vm="$1"
|
||||
|
||||
vmid="`vmid \"${vm}\"`"
|
||||
if [ "${vmid}" = "" ]; then
|
||||
echo "Cannot find virtual machine ${vm}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vmware-vim-cmd vmsvc/power.suspend ${vmid}
|
18
vmware/files/scripts/vmware-unregister
Executable file
18
vmware/files/scripts/vmware-unregister
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /usr/local/lib/vmware.sh
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: `basename $0` <vm>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vm="$1"
|
||||
|
||||
vmid="`vmid \"$1\"`"
|
||||
if [ "${vmid}" == "" ]; then
|
||||
echo "Cannot find virtual machine ${vm}" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vmware-vim-cmd vmsvc/unregister ${vmid}
|
113
vmware/files/scripts/vmware.sh
Normal file
113
vmware/files/scripts/vmware.sh
Normal file
|
@ -0,0 +1,113 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# $Id: vmware.sh,v 1.4 2009/07/29 20:04:19 root Exp $
|
||||
#
|
||||
|
||||
# List all datastores on server
|
||||
list_datastores() {
|
||||
vmware-vim-cmd hostsvc/storage/fs_info | awk '
|
||||
/^[ ]*path = / {
|
||||
path = substr($3, 2, length($3)-3)
|
||||
}
|
||||
/^[ ]*name = / {
|
||||
print substr($3, 2, length($3)-3) " " path
|
||||
}
|
||||
'
|
||||
}
|
||||
|
||||
|
||||
# Get list of all registered virtual machines.
|
||||
#
|
||||
# Returns list in format:
|
||||
#
|
||||
# vmid|displayName|path
|
||||
#
|
||||
list_vms() {
|
||||
vmware-vim-cmd vmsvc/getallvms | sed -n \
|
||||
's/^\([0-9][0-9]*\)[ ]*\([^ ]*\)[ ]*\(\[[^ ]*\] [^ ]*\).*/\1|\2|\3/p'
|
||||
}
|
||||
|
||||
|
||||
# Convert given path into datastore format.
|
||||
#
|
||||
# Eg. dspath /vmfs/volumes/mystore/foo.vmx returns
|
||||
# [mystore] foo.vmx
|
||||
#
|
||||
dspath() {
|
||||
case "$1" in
|
||||
/*)
|
||||
list_datastores | while read n p ; do
|
||||
echo "$1" | egrep -q "^${p}" || continue
|
||||
echo -n "[${n}] "
|
||||
echo "$1" | cut -c `echo ${p} | wc -m`- | cut -c 2-
|
||||
break
|
||||
done
|
||||
;;
|
||||
[*)
|
||||
echo "$1"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Convert given path into filesystem format.
|
||||
#
|
||||
# Eg. abspath [mystore] foo.vmx returns
|
||||
# /vmfs/volumes/mystore/foo.vmx
|
||||
#
|
||||
abspath() {
|
||||
case "$1" in
|
||||
/*)
|
||||
echo "$1"
|
||||
;;
|
||||
[*)
|
||||
ds=`echo "$1" | sed -e 's/^\[\(.*\)\] .*$/\1/'`
|
||||
vmware-vim-cmd hostsvc/datastore/info ds-local | \
|
||||
sed -n 's/^[ ]*path = \"\(.*\)\",[ ]*/\1/p' | uniq | tr '\n' '/'
|
||||
echo "$1" | sed -e 's/^\[.*\] \(.*\)$/\1/'
|
||||
;;
|
||||
[0-9]*)
|
||||
abspath "`list_vms | sed -n \"s/^$1|.*|\(\[.*\] .*\)$/\1/p\"`"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Get id for given virtual machine
|
||||
#
|
||||
vmid() {
|
||||
case "$1" in
|
||||
/*)
|
||||
ds="`dspath "\${1}\"`"
|
||||
if [ "${ds}" == "" ]; then
|
||||
exit
|
||||
fi
|
||||
list_vms | awk -F'|' '{print $1 " " $3}' | while read vmid vmpath ; do
|
||||
if [ "${vmpath}" = "${ds}" ]; then
|
||||
echo ${vmid}
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
[*)
|
||||
list_vms | awk -F'|' '{print $1 " " $3}' | while read vmid vmpath ; do
|
||||
if [ "${vmpath}" = "${1}" ]; then
|
||||
echo ${vmid}
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*)
|
||||
list_vms | awk -F'|' '{print $1 " " $2}' | while read vmid vmname ; do
|
||||
if [ "${vmid}" = "${1}" ]; then
|
||||
echo ${vmid}
|
||||
break
|
||||
elif [ "${vmname}" = "${1}" ]; then
|
||||
echo ${vmid}
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
34
vmware/manifests/guest.pp
Normal file
34
vmware/manifests/guest.pp
Normal file
|
@ -0,0 +1,34 @@
|
|||
|
||||
class vmware::guest {
|
||||
|
||||
case $virtual {
|
||||
vmware: {
|
||||
case $kernel {
|
||||
Linux: { include vmware::guest::linux }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
class vmware::guest::linux {
|
||||
|
||||
package { "VMwareTools":
|
||||
ensure => installed,
|
||||
}
|
||||
exec { "vmware-config-tools.pl":
|
||||
command => "unset DISPLAY REMOTEHOST SSH_CONNECTION ; perl /usr/bin/vmware-config-tools.pl -d",
|
||||
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
||||
environment => [ "PAGER=/bin/cat", ],
|
||||
unless => "test -f /lib/modules/$kernelrelease/misc/vmci.ko",
|
||||
require => Package["VMwareTools"],
|
||||
}
|
||||
service { "vmware-tools":
|
||||
enable => true,
|
||||
ensure => running,
|
||||
subscribe => Exec["vmware-config-tools.pl"],
|
||||
require => Exec["vmware-config-tools.pl"],
|
||||
}
|
||||
|
||||
}
|
3
vmware/manifests/init.pp
Normal file
3
vmware/manifests/init.pp
Normal file
|
@ -0,0 +1,3 @@
|
|||
|
||||
import "guest.pp"
|
||||
import "server.pp"
|
280
vmware/manifests/server.pp
Normal file
280
vmware/manifests/server.pp
Normal file
|
@ -0,0 +1,280 @@
|
|||
|
||||
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"],
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Install puppet certificate and key to VMware.
|
||||
#
|
||||
# === Depencies
|
||||
#
|
||||
# * Class["puppet::client"]
|
||||
#
|
||||
class vmware::server::certs {
|
||||
|
||||
file { "/etc/vmware/ssl":
|
||||
ensure => directory,
|
||||
mode => 0755,
|
||||
owner => root,
|
||||
group => root,
|
||||
require => Package["VMware-server"],
|
||||
}
|
||||
|
||||
file { "/etc/vmware/ssl/rui.crt":
|
||||
ensure => present,
|
||||
source => "${puppet_ssldir}/certs/${fqdn}.pem",
|
||||
mode => 0644,
|
||||
owner => root,
|
||||
group => root,
|
||||
require => [ File["/etc/vmware/ssl"],
|
||||
Class["puppet::client"], ],
|
||||
before => Service["vmware"],
|
||||
notify => Service["vmware"],
|
||||
}
|
||||
file { "/etc/vmware/ssl/rui.key":
|
||||
ensure => present,
|
||||
source => "${puppet_ssldir}/private_keys/${fqdn}.pem",
|
||||
mode => 0600,
|
||||
owner => root,
|
||||
group => root,
|
||||
require => [ File["/etc/vmware/ssl"],
|
||||
Class["puppet::client"], ],
|
||||
before => Service["vmware"],
|
||||
notify => Service["vmware"],
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Install custom VMware support scripts
|
||||
#
|
||||
class vmware::server::scripts {
|
||||
|
||||
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
|
||||
|
||||
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 => 0755,
|
||||
owner => root,
|
||||
group => root,
|
||||
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"],
|
||||
}
|
||||
|
||||
}
|
82
vmware/plugins/puppet/type/vmware_config.rb
Normal file
82
vmware/plugins/puppet/type/vmware_config.rb
Normal file
|
@ -0,0 +1,82 @@
|
|||
|
||||
Puppet::Type.newtype(:vmware_config) do
|
||||
@doc = "Modify /etc/vmware/locations file."
|
||||
|
||||
@@locations = "/etc/vmware/locations"
|
||||
@@netmap = "/etc/vmware/netmap.conf"
|
||||
|
||||
def bucket
|
||||
filebucket = Puppet::Type.type(:filebucket)
|
||||
(filebucket["puppet"] || filebucket.mkdefaultbucket).bucket
|
||||
end
|
||||
|
||||
def netmap
|
||||
config = parse()
|
||||
data = "# This file is automatically generated.\n"
|
||||
data += "# Hand-editing this file is not recommended.\n"
|
||||
data += "\n"
|
||||
id = 0
|
||||
(0..254).each do |n|
|
||||
if name = config["VNET_#{n}_NAME"]
|
||||
data += "network#{id}.name = \"#{name}\"\n"
|
||||
data += "network#{id}.device = \"vmnet#{n}\"\n"
|
||||
id += 1
|
||||
end
|
||||
end
|
||||
current = File.open(@@netmap).read
|
||||
if data != current
|
||||
bucket.backup(@@netmap)
|
||||
File.open(@@netmap, "w").print data
|
||||
end
|
||||
end
|
||||
|
||||
def parse
|
||||
config = {}
|
||||
File.open(@@locations).each { |line|
|
||||
if m = /^answer ([A-Z0-9_]+) (.+)$/.match(line)
|
||||
config[m[1]] = m[2]
|
||||
elsif m = /^remove_answer ([A-Z0-9_]+)$/.match(line)
|
||||
config.delete(m[1])
|
||||
end
|
||||
}
|
||||
return config
|
||||
end
|
||||
|
||||
newparam(:name) do
|
||||
desc "Configuration key name"
|
||||
newvalues(/^[A-Z0-9_]+$/)
|
||||
end
|
||||
|
||||
newproperty(:ensure) do
|
||||
def retrieve
|
||||
config = @resource.parse()
|
||||
if config.has_key?(@resource.name)
|
||||
config[@resource.name]
|
||||
else
|
||||
:absent
|
||||
end
|
||||
end
|
||||
|
||||
newvalue(:absent) do
|
||||
@resource.bucket.backup(@@locations) if File.exists?(@@locations)
|
||||
open(@@locations, File::WRONLY|File::APPEND) do |f|
|
||||
f.print "remove_answer %s\n" % @resource.name
|
||||
end
|
||||
if @resource.name =~ /^VNET_/
|
||||
@resource.netmap()
|
||||
end
|
||||
end
|
||||
|
||||
newvalue(/.+/) do
|
||||
@resource.bucket.backup(@@locations) if File.exists?(@@locations)
|
||||
open(@@locations, File::WRONLY|File::APPEND) do |f|
|
||||
f.print "remove_answer %s\n" % @resource.name
|
||||
f.print "answer %s %s\n" % [@resource.name, value]
|
||||
end
|
||||
if @resource.name =~ /^VNET_/
|
||||
@resource.netmap()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue