diff --git a/packstack/plugins/nova_300.py b/packstack/plugins/nova_300.py index 92dbd1335..5e85eae22 100644 --- a/packstack/plugins/nova_300.py +++ b/packstack/plugins/nova_300.py @@ -182,6 +182,18 @@ def initConfig(controllerObject): "USE_DEFAULT" : False, "NEED_CONFIRM" : False, "CONDITION" : False }, + {"CMD_OPTION" : "novanetwork-manager", + "USAGE" : "Nova network manager", + "PROMPT" : "Enter the Nova network manager", + "OPTION_LIST" : [r'^nova\.network\.manager\.\w+Manager$'], + "VALIDATORS" : [validators.validate_regexp], + "DEFAULT_VALUE" : "nova.network.manager.FlatDHCPManager", + "MASK_INPUT" : False, + "LOOSE_VALIDATION": True, + "CONF_NAME" : "CONFIG_NOVA_NETWORK_MANAGER", + "USE_DEFAULT" : False, + "NEED_CONFIRM" : False, + "CONDITION" : False }, {"CMD_OPTION" : "novanetwork-pubif", "USAGE" : "Public interface on the Nova network server", "PROMPT" : "Enter the Public interface on the Nova network server", @@ -195,8 +207,8 @@ def initConfig(controllerObject): "NEED_CONFIRM" : False, "CONDITION" : False }, {"CMD_OPTION" : "novanetwork-privif", - "USAGE" : "Private interface for Flat DHCP on the Nova network server", - "PROMPT" : "Enter the Private interface for Flat DHCP on the Nova network server", + "USAGE" : "Private interface for network manager on the Nova network server", + "PROMPT" : "Enter the Private interface for network manager on the Nova network server", "OPTION_LIST" : [], "VALIDATORS" : [validators.validate_not_empty], "DEFAULT_VALUE" : secondary_netif, @@ -207,8 +219,8 @@ def initConfig(controllerObject): "NEED_CONFIRM" : False, "CONDITION" : False }, {"CMD_OPTION" : "novanetwork-fixed-range", - "USAGE" : "IP Range for Flat DHCP", - "PROMPT" : "Enter the IP Range for Flat DHCP", + "USAGE" : "IP Range for network manager", + "PROMPT" : "Enter the IP Range for network manager", "OPTION_LIST" : ["^[\:\.\da-fA-f]+(\/\d+){0,1}$"], "PROCESSORS" : [processors.process_cidr], "VALIDATORS" : [validators.validate_regexp], @@ -257,25 +269,75 @@ def initConfig(controllerObject): "NEED_CONFIRM" : False, "CONDITION" : False }, ], + "NOVA_NETWORK_VLAN" : [ + {"CMD_OPTION" : "novanetwork-vlan-start", + "USAGE" : "First VLAN for private networks", + "PROMPT" : "Enter first VLAN for private networks", + "OPTION_LIST" : [], + "VALIDATORS" : [validators.validate_not_empty], + "DEFAULT_VALUE" : 100, + "MASK_INPUT" : False, + "LOOSE_VALIDATION": True, + "CONF_NAME" : "CONFIG_NOVA_NETWORK_VLAN_START", + "USE_DEFAULT" : False, + "NEED_CONFIRM" : False, + "CONDITION" : False }, + {"CMD_OPTION" : "novanetwork-num-networks", + "USAGE" : "Number of networks to support", + "PROMPT" : "How many networks should be supported", + "OPTION_LIST" : [], + "VALIDATORS" : [validators.validate_not_empty], + "DEFAULT_VALUE" : 1, + "MASK_INPUT" : False, + "LOOSE_VALIDATION": True, + "CONF_NAME" : "CONFIG_NOVA_NETWORK_NUMBER", + "USE_DEFAULT" : False, + "NEED_CONFIRM" : False, + "CONDITION" : False }, + {"CMD_OPTION" : "novanetwork-network-size", + "USAGE" : "Number of addresses in each private subnet", + "PROMPT" : "How many addresses should be in each private subnet", + "OPTION_LIST" : [], + "VALIDATORS" : [validators.validate_not_empty], + "DEFAULT_VALUE" : 255, + "MASK_INPUT" : False, + "LOOSE_VALIDATION": True, + "CONF_NAME" : "CONFIG_NOVA_NETWORK_SIZE", + "USE_DEFAULT" : False, + "NEED_CONFIRM" : False, + "CONDITION" : False }, + ], } def use_nova_network(config): return config['CONFIG_NOVA_INSTALL'] == 'y' and \ config['CONFIG_NEUTRON_INSTALL'] != 'y' + def use_nova_network_vlan(config): + manager = 'nova.network.manager.VlanManager' + return config['CONFIG_NOVA_INSTALL'] == 'y' and \ + config['CONFIG_NEUTRON_INSTALL'] != 'y' and \ + config['CONFIG_NOVA_NETWORK_MANAGER'] == manager + nova_groups = [ - { "GROUP_NAME" : "NOVA", + {"GROUP_NAME" : "NOVA", "DESCRIPTION" : "Nova Options", "PRE_CONDITION" : "CONFIG_NOVA_INSTALL", "PRE_CONDITION_MATCH" : "y", "POST_CONDITION" : False, "POST_CONDITION_MATCH" : True}, - { "GROUP_NAME" : "NOVA_NETWORK", + {"GROUP_NAME" : "NOVA_NETWORK", "DESCRIPTION" : "Nova Network Options", "PRE_CONDITION" : use_nova_network, "PRE_CONDITION_MATCH" : True, "POST_CONDITION" : False, "POST_CONDITION_MATCH" : True}, + {"GROUP_NAME" : "NOVA_NETWORK_VLAN", + "DESCRIPTION" : "Nova Network VLAN Options", + "PRE_CONDITION" : use_nova_network_vlan, + "PRE_CONDITION_MATCH" : True, + "POST_CONDITION" : False, + "POST_CONDITION_MATCH" : True}, ] for group in nova_groups: @@ -390,9 +452,9 @@ def createcomputemanifest(config): check_ifcfg(host, controller.CONF['CONFIG_NOVA_COMPUTE_PRIVIF']) try: bring_up_ifcfg(host, controller.CONF['CONFIG_NOVA_COMPUTE_PRIVIF']) - except ScriptRuntimeError, ex: + except ScriptRuntimeError as ex: # just warn user to do it by himself - controller.MESSAGES.append(str(ScriptRuntimeError)) + controller.MESSAGES.append(str(ex)) appendManifestFile(manifestfile, manifestdata + "\n" + nova_config_options.getManifestEntry()) @@ -406,9 +468,9 @@ def createnetworkmanifest(config): check_ifcfg(host, controller.CONF[i]) try: bring_up_ifcfg(host, controller.CONF[i]) - except ScriptRuntimeError, ex: + except ScriptRuntimeError as ex: # just warn user to do it by himself - controller.MESSAGES.append(str(ScriptRuntimeError)) + controller.MESSAGES.append(str(ex)) if controller.CONF['CONFIG_NOVA_NETWORK_AUTOASSIGNFLOATINGIP'] == "y": controller.CONF['CONFIG_NOVA_NETWORK_AUTOASSIGNFLOATINGIP'] = True diff --git a/packstack/puppet/templates/nova_network.pp b/packstack/puppet/templates/nova_network.pp index eac123e33..48f975d54 100644 --- a/packstack/puppet/templates/nova_network.pp +++ b/packstack/puppet/templates/nova_network.pp @@ -3,14 +3,30 @@ nova_config{ "DEFAULT/auto_assign_floating_ip": value => '%(CONFIG_NOVA_NETWORK_AUTOASSIGNFLOATINGIP)s'; } + +$manager = '%(CONFIG_NOVA_NETWORK_MANAGER)s' +$overrides = {} +if $manager in ['nova.network.manager.VlanManager', 'nova.network.manager.FlatDHCPManager'] { + $overrides['force_dhcp_release'] = false +} +if $manager == 'nova.network.manager.VlanManager' { + $overrides['vlan_start'] = '%(CONFIG_NOVA_NETWORK_VLAN_START)s' + $net_size = '%(CONFIG_NOVA_NETWORK_SIZE)s' + $net_num = '%(CONFIG_NOVA_NETWORK_NUMBER)s' +} else { + $net_size = '%(CONFIG_NOVA_NETWORK_FIXEDSIZE)s' + $net_num = 1 +} class {"nova::network": enabled => true, + network_manager => $manager, + num_networks => $net_num , + network_size => $net_size, private_interface => '%(CONFIG_NOVA_NETWORK_PRIVIF)s', public_interface => '%(CONFIG_NOVA_NETWORK_PUBIF)s', fixed_range => '%(CONFIG_NOVA_NETWORK_FIXEDRANGE)s', - network_size => '%(CONFIG_NOVA_NETWORK_FIXEDSIZE)s', floating_range => '%(CONFIG_NOVA_NETWORK_FLOATRANGE)s', - config_overrides => {force_dhcp_release => false} + config_overrides => $overrides, } package { 'dnsmasq': ensure => present }