Added extended network management support.
This commit is contained in:
parent
c8eff431e1
commit
725fd68845
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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"],
|
||||
}
|
||||
}
|
|
@ -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') }
|
||||
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue