Added extended network management support.

This commit is contained in:
Dan Bode 2011-06-15 15:20:09 -07:00
parent c8eff431e1
commit 725fd68845
7 changed files with 137 additions and 0 deletions

View File

@ -0,0 +1,16 @@
Puppet::Type.type(:nova_network).provide(:default) do
desc "This is a default provider that does nothing. This allows us to install nova-manage on the same puppet run where we want to use it."
def create
return false
end
def destroy
return false
end
def exists?
fail('This is just the default provider for nova_admin, all it does is fail')
end
end

View File

@ -0,0 +1,22 @@
Puppet::Type.type(:nova_network).provide(:nova_manage) do
desc "Manage nova network"
defaultfor :kernel => 'Linux'
commands :nova_manage => 'nova-manage'
def exists?
nova_manage("network", "list").match(/^#{resource[:network]}\/[0-9]{1,2} /)
end
def create
nova_manage("network", "create", resource[:network], "1", resource[:available_ips])
end
def destroy
nova_manage("network", "delete", resource[:network])
end
end

View File

@ -0,0 +1,25 @@
Puppet::Type.newtype(:nova_network) do
@doc = "Manage creation/deletion of nova networks. During creation, network
CIDR and netmask will be calculated automatically"
ensurable
# there are concerns about determining uniqiueness of network
# segments b/c it is actually the combination of network/prefix
# that determine uniqueness
newparam(:network, :namevar => true) do
desc "Network (ie, 192.168.1.0)"
newvalues(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.0$/)
end
newparam(:available_ips) do
desc "# of available IPs. Must be greater than 4."
validate do |value|
if value.to_i < 4
raise Puppet::Error, "ERROR - nova_network: Parameter available_ips must be an integer greater than 4."
end
end
end
end

View File

@ -0,0 +1,10 @@
define nova::manage::network ( $network, $available_ips ) {
nova_network { $name:
ensure => present,
network => $network,
available_ips => $available_ips,
provider => 'nova_manage',
notify => Exec["nova-db-sync"],
require => Class["nova::db"],
}
}

View File

@ -0,0 +1,26 @@
# bridge.pp
define nova::network::bridge ( $ip, $netmask = "255.255.255.0" )
{
case $operatingsystem {
'debian', 'ubuntu': {
$context = "/files/etc/network/interfaces"
augeas { "bridge_${name}":
context => $context,
changes => [
"set auto[child::1 = '${name}']/1 ${name}",
"set iface[. = '${name}'] ${name}",
"set iface[. = '${name}']/family inet",
"set iface[. = '${name}']/method static",
"set iface[. = '${name}']/address ${ip}",
"set iface[. = '${name}']/netmask ${netmask}",
"set iface[. = '${name}']/bridge_ports none",
],
notify => Exec["networking-refresh"],
}
}
default: { fail('nova::network_bridge currently only supports Debian and Ubuntu') }
}
}

View File

@ -0,0 +1,18 @@
# flatdhcp.pp
class nova::network::flat ( $flat_network_bridge,
$flat_network_bridge_ip,
$flat_network_bridge_netmask,
$enabled = "true" ) inherits nova::network {
nova_config {
'network_manager': value => 'nova.network.manager.FlatManager';
'flat_network_bridge': value => $flat_network_bridge;
}
# flatManager requires a network bridge be manually setup.
nova::network::bridge { $flat_network_bridge:
ip => $flat_network_bridge_ip,
netmask => $flat_network_bridge_netmask,
}
}

View File

@ -0,0 +1,20 @@
# flatdhcp.pp
class nova::network::flatdhcp ( $public_interface,
$flat_interface,
$flat_dhcp_start,
$flat_injected = 'false',
$dhcpbridge = '/usr/bin/nova-dhcpbridge',
$dhcpbridge_flagfile='/etc/nova/nova.conf',
$enabled = 'true' ) inherits nova::network {
# we only need to setup configuration, nova does the rest
nova_config {
'network_manage': value => 'nova.network.manager.FlatDHCPManager';
'public_interface': value => $public_interface;
'flat_interface': value => $flat_interface;
'flat_dhcp_start': value => $flat_dhcp_start;
'flat_injected': value => $flat_injected;
'dhcpbridge': value => $dhcpbridge;
'dhcpbridge_flagfile': value => $dhcpbridge_flagfile;
}
}