From c07826d2b21579e07790ed46eeb0ed5c66600691 Mon Sep 17 00:00:00 2001 From: Gardouille Date: Fri, 23 Jan 2015 18:12:10 +0100 Subject: [PATCH] * (#3) Add a new class and subclass: proxmox::vm::openvz to manage OpenVZ CT --- CHANGELOG.md | 1 + manifests/params.pp | 16 ++++++++- manifests/vm.pp | 44 +++++++++++++++++++++++++ manifests/vm/openvz.pp | 39 ++++++++++++++++++++++ templates/vm/openzv_interfaces.erb | 12 +++++++ templates/vm/openzv_interfaces.tail.erb | 15 +++++++++ 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 manifests/vm.pp create mode 100644 manifests/vm/openvz.pp create mode 100644 templates/vm/openzv_interfaces.erb create mode 100644 templates/vm/openzv_interfaces.tail.erb diff --git a/CHANGELOG.md b/CHANGELOG.md index 43c61bd..7e26d9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * (#2) Add an array and a file to load additionnal modules. * Correct module's dependencies. * (#9) Add a puppetlabs-firewall rule. +* (#3) Add a new class and subclass: proxmox::vm::openvz to manage OpenVZ CT --------------------------------------- diff --git a/manifests/params.pp b/manifests/params.pp index 55448ff..0869d84 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -41,11 +41,25 @@ class proxmox::params { # Firewall $labs_firewall_rule = false + + ## VM - OpenVZ + # Network + $vm_interfaces_path = '/etc/network/interfaces' + $vm_interfaces_content = 'proxmox/vm/openzv_interfaces.erb' + $vm_interfaces_tail_path = '/etc/network/interfaces.tail' + $vm_interfaces_tail_content = 'proxmox/vm/openzv_interfaces.tail.erb' + $network_service_name = 'networking' + $network_service_manage = true + $network_service_enabled = true + + } } default: { - fail("Proxmox only works with Debian system; osfamily (${::osfamily}) or lsbdistid (${::lsbdistid}) is unsupported") + fail("Proxmox Virtual Environment only works with Debian system; And the OpenVZ configuration has been tested only with Debian; So osfamily (${::osfamily}) or lsbdistid (${::lsbdistid}) is unsupported") + } + } diff --git a/manifests/vm.pp b/manifests/vm.pp new file mode 100644 index 0000000..699713a --- /dev/null +++ b/manifests/vm.pp @@ -0,0 +1,44 @@ +# == Class: proxmox::vm +# +# Manage Virtual Machines/VM (only OpenVZ right now) +# +# === Parameters +# +# +# +# === Variables +# +# +# === Examples +# +# include proxmox::vm +# +# === Authors +# +# Gardouille +# +# Copyright +# +# WTFPL +# +class proxmox::vm ( + $vm_interfaces_path = $proxmox::params::vm_interfaces_path, + $vm_interfaces_content = $proxmox::params::vm_interfaces_content, + $vm_interfaces_tail_path = $proxmox::params::vm_interfaces_tail_path, + $vm_interfaces_tail_content = $proxmox::params::vm_interfaces_tail_content, + $network_service_name = $proxmox::params::network_service_name, + $network_service_manage = $proxmox::params::network_service_manage, + $network_service_enabled = $proxmox::params::network_service_enabled, +) inherits proxmox::params { + + case $::virtual { + 'openvz': { + include proxmox::vm::openvz + } + default: { + fail(" => ${::virtual} <= virtual machines type is not yet supported.") + } + + } + +} # Public class: proxmox::vm diff --git a/manifests/vm/openvz.pp b/manifests/vm/openvz.pp new file mode 100644 index 0000000..d3e0685 --- /dev/null +++ b/manifests/vm/openvz.pp @@ -0,0 +1,39 @@ +# == Class: proxmox::vm::openvz +# +# Manage OpenVZ virtual machines (CT aka Containers) +# +class proxmox::vm::openvz { + + File { + owner => root, + group => root, + mode => 644, + } + + # Test if a virtual interface is available + if $::ipaddress_eth0 { + + if $::ipaddress_venet0_0 { # Virtual network available too? + + # Need to configure eth0 in an interfaces.tail file because + # the main interfaces file is auto-generated by PVE (for venet config) + file { "${proxmox::vm::path_interfaces_tail_vm}": + ensure => present, + content => template("${proxmox::vm::content_interfaces_tail_vm}"), + } + + } + else { # Only virtual interface is available + + # If eth0 is the only interface, push it's configuration in the standard interfaces file + file { "${proxmox::vm::path_interfaces_vm}": + ensure => present, + content => template("${proxmox::vm::content_interfaces_vm}"), + } + + } # fi + } # fi; don't need any additionnal network configuration + + + +} # Private class: proxmox::vm::openvz diff --git a/templates/vm/openzv_interfaces.erb b/templates/vm/openzv_interfaces.erb new file mode 100644 index 0000000..a953e51 --- /dev/null +++ b/templates/vm/openzv_interfaces.erb @@ -0,0 +1,12 @@ +# file generated by puppet +# Don't edit, please see https://forge.puppetlabs.com/gardouille/proxmox + +# Auto generated lo interface +auto lo +iface lo inet loopback + +# The main network interface +auto eth0 +iface eth0 inet dhcp + + diff --git a/templates/vm/openzv_interfaces.tail.erb b/templates/vm/openzv_interfaces.tail.erb new file mode 100644 index 0000000..abe6b7c --- /dev/null +++ b/templates/vm/openzv_interfaces.tail.erb @@ -0,0 +1,15 @@ +# file generated by puppet +# Don't edit, please see https://forge.puppetlabs.com/gardouille/proxmox + +# The main network interface +auto eth0 +iface eth0 inet dhcp + # Need to delete routes creates for venet interfaces + up ip route flush table main + # Add the default gateway throught eth0 + # <%= scope.lookupvar('::ipaddress_eth0') %> + up ip route add default dev eth0 + up ip route add <%= scope.lookupvar('::network_eth0') %>/<%= scope.lookupvar('::netmask_eth0') %> dev eth0 protocol kernel src <%= scope.lookupvar('::ipaddress_eth0') %> + up ip route add <%= scope.lookupvar('::network_venet0') %>/<%= scope.lookupvar('::netmask_venet0') %> dev venet0 + down ip route del default dev eth0 + down ip route del <%= scope.lookupvar('::network_venet0') %>/<%= scope.lookupvar('::netmask_venet0') %> dev venet0