Expose useful configuration options
Remove unuseful configuration options added by layers. Update first supported release to be bionic-train / eoan. Add gerrit add zuul bits. Change-Id: Icbfe337f5231a39310d0846f3bce38a25925e819
This commit is contained in:
parent
3953fa9f54
commit
967ea9b41b
4
.gitreview
Normal file
4
.gitreview
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[gerrit]
|
||||||
|
host=review.opendev.org
|
||||||
|
port=29418
|
||||||
|
project=openstack/charm-neutron-api-plugin-ovn.git
|
4
.zuul.yaml
Normal file
4
.zuul.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
- project:
|
||||||
|
templates:
|
||||||
|
- openstack-python3-train-jobs
|
||||||
|
- openstack-cover-jobs
|
94
src/config.yaml
Normal file
94
src/config.yaml
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
options:
|
||||||
|
ovn-l3-scheduler:
|
||||||
|
type: string
|
||||||
|
default: leastloaded
|
||||||
|
description: >
|
||||||
|
The OVN L3 Scheduler type to use when scheduling router gateway ports.
|
||||||
|
|
||||||
|
Available schedulers:
|
||||||
|
|
||||||
|
- leastloaded - chassis with fewest gateway ports selected (default)
|
||||||
|
|
||||||
|
- chance - chassis randomly selected
|
||||||
|
ovn-metadata-enabled:
|
||||||
|
type: boolean
|
||||||
|
default: True
|
||||||
|
description: >
|
||||||
|
Whether to use the metadata service.
|
||||||
|
|
||||||
|
Note: The ``ovn-chassis:nova-compute - nova-compute:neutron-plugin``
|
||||||
|
subordinate relation is a prerequisite for this to work.
|
||||||
|
enable-distributed-floating-ip:
|
||||||
|
type: boolean
|
||||||
|
default: False
|
||||||
|
description: >
|
||||||
|
This is for specifc use cases only, not generally recommended, see note
|
||||||
|
below.
|
||||||
|
|
||||||
|
Perform NAT action for floating IPs locally on each chassis.
|
||||||
|
|
||||||
|
Enabling this requires making external Layer3 connectivity available
|
||||||
|
globally and configuring bridge mappings on all chassis in the
|
||||||
|
deployment.
|
||||||
|
|
||||||
|
Note: OVN gives you distributed East/West and highly available
|
||||||
|
North/South routing by default. You do not need to enable this option
|
||||||
|
to get that. This is for very specific use cases only.
|
||||||
|
|
||||||
|
Enabling it will create a scaling problem at the physical network layer
|
||||||
|
that needs to be resolved with globally shared Layer2 (does not scale) or
|
||||||
|
tunneling at the top-of-rack switch layer (adds complexity) and is
|
||||||
|
generally not a recommended configuration.
|
||||||
|
geneve-vni-ranges:
|
||||||
|
type: string
|
||||||
|
default: "1001:2000"
|
||||||
|
description: >
|
||||||
|
Space-delimited list of <vni_min>:<vni_max> tuples enumerating ranges of
|
||||||
|
Geneve VNI IDs that are available for tenant network allocation.
|
||||||
|
dns-servers:
|
||||||
|
type: string
|
||||||
|
default:
|
||||||
|
description: >
|
||||||
|
Space-delimited list of DNS servers to use as forwarders if a subnets
|
||||||
|
``dns_nameservers`` field is empty.
|
||||||
|
dhcp-default-lease-time:
|
||||||
|
type: int
|
||||||
|
default: 43200
|
||||||
|
description: >
|
||||||
|
Default lease time (in seconds) to use with OVN's native DHCP service.
|
||||||
|
ovn-dhcp4-global-options:
|
||||||
|
type: string
|
||||||
|
default:
|
||||||
|
description: >
|
||||||
|
Dictionary of global DHCPv4 options which will be automatically set on
|
||||||
|
each subnet upon creation and on all existing subnets when Neutron
|
||||||
|
starts.
|
||||||
|
|
||||||
|
An empty value for a DHCP option will cause that option to be unset
|
||||||
|
globally.
|
||||||
|
|
||||||
|
EXAMPLES:
|
||||||
|
|
||||||
|
- ntp_server:1.2.3.4,wpad:1.2.3.5 - Set ntp_server and wpad
|
||||||
|
|
||||||
|
- ntp_server:,wpad:1.2.3.5 - Unset ntp_server and set wpad
|
||||||
|
|
||||||
|
See the ovn-nb(5) man page for available options.
|
||||||
|
ovn-dhcp6-global-options:
|
||||||
|
type: string
|
||||||
|
default:
|
||||||
|
description: >
|
||||||
|
Dictionary of global DHCPv4 options which will be automatically set on
|
||||||
|
each subnet upon creation and on all existing subnets when Neutron
|
||||||
|
starts.
|
||||||
|
|
||||||
|
An empty value for a DHCP option will cause that option to be unset
|
||||||
|
globally.
|
||||||
|
|
||||||
|
EXAMPLES:
|
||||||
|
|
||||||
|
- ntp_server:1.2.3.4,wpad:1.2.3.5 - Set ntp_server and wpad
|
||||||
|
|
||||||
|
- ntp_server:,wpad:1.2.3.5 - Unset ntp_server and set wpad
|
||||||
|
|
||||||
|
See the ovn-nb(5) man page for available options.
|
@ -10,4 +10,10 @@ options:
|
|||||||
repo: https://github.com/openstack/charm-neutron-api-plugin-ovn
|
repo: https://github.com/openstack/charm-neutron-api-plugin-ovn
|
||||||
config:
|
config:
|
||||||
deletes:
|
deletes:
|
||||||
|
- debug
|
||||||
- verbose
|
- verbose
|
||||||
|
- ssl_ca
|
||||||
|
- ssl_cert
|
||||||
|
- ssl_key
|
||||||
|
- use-internal-endpoints
|
||||||
|
- use-syslog
|
||||||
|
@ -38,7 +38,7 @@ def ovn_ca_cert(cls):
|
|||||||
|
|
||||||
|
|
||||||
class NeutronAPIPluginCharm(charms_openstack.charm.OpenStackCharm):
|
class NeutronAPIPluginCharm(charms_openstack.charm.OpenStackCharm):
|
||||||
release = 'stein'
|
release = 'train'
|
||||||
name = 'neutron-api-plugin-ovn'
|
name = 'neutron-api-plugin-ovn'
|
||||||
packages = ['python3-networking-ovn']
|
packages = ['python3-networking-ovn']
|
||||||
required_relations = ['neutron-plugin', 'ovsdb-cms']
|
required_relations = ['neutron-plugin', 'ovsdb-cms']
|
||||||
|
@ -9,7 +9,7 @@ tags:
|
|||||||
- networking
|
- networking
|
||||||
series:
|
series:
|
||||||
- bionic
|
- bionic
|
||||||
- disco
|
- eoan
|
||||||
subordinate: true
|
subordinate: true
|
||||||
requires:
|
requires:
|
||||||
container:
|
container:
|
||||||
|
@ -61,7 +61,42 @@ def configure_neutron():
|
|||||||
tenant_network_types = neutron.neutron_config_data.get(
|
tenant_network_types = neutron.neutron_config_data.get(
|
||||||
'tenant_network_types', '').split(',')
|
'tenant_network_types', '').split(',')
|
||||||
tenant_network_types.insert(0, 'geneve')
|
tenant_network_types.insert(0, 'geneve')
|
||||||
|
|
||||||
|
def _split_if_str(s):
|
||||||
|
_s = s or ''
|
||||||
|
return _s.split()
|
||||||
|
|
||||||
with charm.provide_charm_instance() as instance:
|
with charm.provide_charm_instance() as instance:
|
||||||
|
options = instance.adapters_instance.options
|
||||||
|
sections = {
|
||||||
|
'ovn': [
|
||||||
|
('ovn_nb_connection', ','.join(ovsdb.db_nb_connection_strs)),
|
||||||
|
('ovn_nb_private_key', options.ovn_key),
|
||||||
|
('ovn_nb_certificate', options.ovn_cert),
|
||||||
|
('ovn_nb_ca_cert', options.ovn_ca_cert),
|
||||||
|
('ovn_sb_connection', ','.join(ovsdb.db_sb_connection_strs)),
|
||||||
|
('ovn_sb_private_key', options.ovn_key),
|
||||||
|
('ovn_sb_certificate', options.ovn_cert),
|
||||||
|
('ovn_sb_ca_cert', options.ovn_ca_cert),
|
||||||
|
('ovn_l3_scheduler', options.ovn_l3_scheduler),
|
||||||
|
('ovn_metadata_enabled', options.ovn_metadata_enabled),
|
||||||
|
('enable_distributed_floating_ip',
|
||||||
|
options.enable_distributed_floating_ip),
|
||||||
|
('dns_servers', ','.join(_split_if_str(options.dns_servers))),
|
||||||
|
('dhcp_default_lease_time', options.dhcp_default_lease_time),
|
||||||
|
('ovn_dhcp4_global_options',
|
||||||
|
','.join(_split_if_str(
|
||||||
|
options.ovn_dhcp4_global_options))),
|
||||||
|
('ovn_dhcp6_global_options',
|
||||||
|
','.join(
|
||||||
|
_split_if_str(options.ovn_dhcp6_global_options))),
|
||||||
|
],
|
||||||
|
'ml2_type_geneve': [
|
||||||
|
('vni_ranges', ','.join(
|
||||||
|
_split_if_str(options.geneve_vni_ranges))),
|
||||||
|
('max_header_size', '38'),
|
||||||
|
],
|
||||||
|
}
|
||||||
neutron.configure_plugin(
|
neutron.configure_plugin(
|
||||||
'ovn',
|
'ovn',
|
||||||
service_plugins=','.join(service_plugins),
|
service_plugins=','.join(service_plugins),
|
||||||
@ -70,35 +105,7 @@ def configure_neutron():
|
|||||||
subordinate_configuration={
|
subordinate_configuration={
|
||||||
'neutron-api': {
|
'neutron-api': {
|
||||||
'/etc/neutron/plugins/ml2/ml2_conf.ini': {
|
'/etc/neutron/plugins/ml2/ml2_conf.ini': {
|
||||||
'sections': {
|
'sections': sections,
|
||||||
'ovn': [
|
|
||||||
('ovn_nb_connection',
|
|
||||||
','.join(ovsdb.db_nb_connection_strs)),
|
|
||||||
('ovn_nb_private_key',
|
|
||||||
instance.adapters_instance.options.ovn_key),
|
|
||||||
('ovn_nb_certificate',
|
|
||||||
instance.adapters_instance.options.ovn_cert),
|
|
||||||
('ovn_nb_ca_cert',
|
|
||||||
instance.adapters_instance.options.ovn_ca_cert
|
|
||||||
),
|
|
||||||
('ovn_sb_connection',
|
|
||||||
','.join(ovsdb.db_sb_connection_strs)),
|
|
||||||
('ovn_sb_private_key',
|
|
||||||
instance.adapters_instance.options.ovn_key),
|
|
||||||
('ovn_sb_certificate',
|
|
||||||
instance.adapters_instance.options.ovn_cert),
|
|
||||||
('ovn_sb_ca_cert',
|
|
||||||
instance.adapters_instance.options.ovn_ca_cert
|
|
||||||
),
|
|
||||||
# XXX config
|
|
||||||
('ovn_l3_scheduler', 'leastloaded'),
|
|
||||||
('ovn_metadata_enabled', 'true'), # XXX config
|
|
||||||
],
|
|
||||||
'ml2_type_geneve': [
|
|
||||||
('vni_ranges', '1000:2000'), # XXX config
|
|
||||||
('max_header_size', '38'),
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -8,4 +8,4 @@ flake8>=2.2.4,<=2.4.1
|
|||||||
stestr>=2.2.0
|
stestr>=2.2.0
|
||||||
requests>=2.18.4
|
requests>=2.18.4
|
||||||
git+https://github.com/openstack-charmers/zaza.git#egg=zaza
|
git+https://github.com/openstack-charmers/zaza.git#egg=zaza
|
||||||
git+https://github.com/openstack-charmers/zaza-openstack-tests.git@add-ovn#egg=zaza.openstack
|
git+https://github.com/openstack-charmers/zaza-openstack-tests.git#egg=zaza.openstack
|
||||||
|
@ -4,20 +4,19 @@ applications:
|
|||||||
charm: cs:~openstack-charmers-next/keystone
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
num_units: 1
|
num_units: 1
|
||||||
options:
|
options:
|
||||||
openstack-origin: cloud:bionic-stein
|
openstack-origin: cloud:bionic-train
|
||||||
mysql:
|
mysql:
|
||||||
charm: cs:~openstack-charmers-next/percona-cluster
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
num_units: 1
|
num_units: 1
|
||||||
neutron-api:
|
neutron-api:
|
||||||
series: bionic
|
|
||||||
charm: cs:~openstack-charmers-next/neutron-api
|
charm: cs:~openstack-charmers-next/neutron-api
|
||||||
num_units: 3
|
num_units: 3
|
||||||
options:
|
options:
|
||||||
manage-neutron-plugin-legacy-mode: false
|
manage-neutron-plugin-legacy-mode: false
|
||||||
openstack-origin: cloud:bionic-stein
|
openstack-origin: cloud:bionic-train
|
||||||
neutron-api-plugin-ovn:
|
neutron-api-plugin-ovn:
|
||||||
series: bionic
|
series: bionic
|
||||||
charm: neutron-api-plugin-ovn
|
charm: cs:~openstack-charmers-next/neutron-api-plugin-ovn
|
||||||
rabbitmq-server:
|
rabbitmq-server:
|
||||||
charm: cs:~openstack-charmers-next/rabbitmq-server
|
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||||
num_units: 1
|
num_units: 1
|
||||||
@ -25,11 +24,10 @@ applications:
|
|||||||
charm: cs:~openstack-charmers-next/vault
|
charm: cs:~openstack-charmers-next/vault
|
||||||
num_units: 1
|
num_units: 1
|
||||||
ovn-central:
|
ovn-central:
|
||||||
series: bionic
|
|
||||||
charm: cs:~openstack-charmers-next/ovn-central
|
charm: cs:~openstack-charmers-next/ovn-central
|
||||||
num_units: 3
|
num_units: 3
|
||||||
options:
|
options:
|
||||||
source: cloud:bionic-stein
|
source: cloud:bionic-train
|
||||||
relations:
|
relations:
|
||||||
- - mysql:shared-db
|
- - mysql:shared-db
|
||||||
- keystone:shared-db
|
- keystone:shared-db
|
53
src/tests/bundles/eoan.yaml
Normal file
53
src/tests/bundles/eoan.yaml
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
series: eoan
|
||||||
|
applications:
|
||||||
|
keystone:
|
||||||
|
charm: cs:~openstack-charmers-next/keystone
|
||||||
|
num_units: 1
|
||||||
|
options:
|
||||||
|
openstack-origin: distro
|
||||||
|
mysql:
|
||||||
|
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||||
|
num_units: 3
|
||||||
|
neutron-api:
|
||||||
|
charm: cs:~openstack-charmers-next/neutron-api
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
manage-neutron-plugin-legacy-mode: false
|
||||||
|
openstack-origin: distro
|
||||||
|
neutron-api-plugin-ovn:
|
||||||
|
series: eoan
|
||||||
|
charm: cs:~openstack-charmers-next/neutron-api-plugin-ovn
|
||||||
|
rabbitmq-server:
|
||||||
|
charm: cs:~openstack-charmers-next/rabbitmq-server
|
||||||
|
num_units: 1
|
||||||
|
vault:
|
||||||
|
charm: cs:~openstack-charmers-next/vault
|
||||||
|
num_units: 1
|
||||||
|
ovn-central:
|
||||||
|
charm: cs:~openstack-charmers-next/ovn-central
|
||||||
|
num_units: 3
|
||||||
|
options:
|
||||||
|
source: distro
|
||||||
|
relations:
|
||||||
|
- - mysql:shared-db
|
||||||
|
- keystone:shared-db
|
||||||
|
- - mysql:shared-db
|
||||||
|
- neutron-api:shared-db
|
||||||
|
- - neutron-api:amqp
|
||||||
|
- rabbitmq-server:amqp
|
||||||
|
- - neutron-api:identity-service
|
||||||
|
- keystone:identity-service
|
||||||
|
- - neutron-api-plugin-ovn:neutron-plugin
|
||||||
|
- neutron-api:neutron-plugin-api-subordinate
|
||||||
|
- - neutron-api-plugin-ovn:ovsdb-cms
|
||||||
|
- ovn-central:ovsdb-cms
|
||||||
|
- - vault:shared-db
|
||||||
|
- mysql:shared-db
|
||||||
|
- - ovn-central:certificates
|
||||||
|
- vault:certificates
|
||||||
|
- - neutron-api-plugin-ovn:certificates
|
||||||
|
- vault:certificates
|
||||||
|
- - keystone:certificates
|
||||||
|
- vault:certificates
|
||||||
|
- - neutron-api:certificates
|
||||||
|
- vault:certificates
|
@ -1,11 +1,14 @@
|
|||||||
charm_name: neutron-api-plugin-ovn
|
charm_name: neutron-api-plugin-ovn
|
||||||
smoke_bundles:
|
smoke_bundles:
|
||||||
- bionic-stein
|
- bionic-train
|
||||||
|
gate_bundles:
|
||||||
|
- eoan
|
||||||
|
- bionic-train
|
||||||
target_deploy_status:
|
target_deploy_status:
|
||||||
neutron-api-plugin-ovn:
|
neutron-api-plugin-ovn:
|
||||||
workload-status: waiting
|
workload-status: waiting
|
||||||
workload-status-message: "'ovsdb-cms' incomplete"
|
workload-status-message: "'ovsdb-cms' incomplete"
|
||||||
ovn:
|
ovn-central:
|
||||||
workload-status: blocked
|
workload-status: blocked
|
||||||
workload-status-message: "'certificates' missing"
|
workload-status-message: "'certificates' missing"
|
||||||
vault:
|
vault:
|
||||||
|
@ -65,6 +65,10 @@ class TestOvnHandlers(test_utils.PatchHelper):
|
|||||||
self.charm
|
self.charm
|
||||||
self.provide_charm_instance().__exit__.return_value = None
|
self.provide_charm_instance().__exit__.return_value = None
|
||||||
|
|
||||||
|
def pmock(self, return_value=None):
|
||||||
|
p = mock.PropertyMock().return_value = return_value
|
||||||
|
return p
|
||||||
|
|
||||||
def test_flag_db_migration(self):
|
def test_flag_db_migration(self):
|
||||||
self.patch_object(handlers.reactive, 'set_flag')
|
self.patch_object(handlers.reactive, 'set_flag')
|
||||||
handlers.flag_db_migration()
|
handlers.flag_db_migration()
|
||||||
@ -81,6 +85,18 @@ class TestOvnHandlers(test_utils.PatchHelper):
|
|||||||
'lbaasv2',
|
'lbaasv2',
|
||||||
'gre,vlan,flat,local',
|
'gre,vlan,flat,local',
|
||||||
]
|
]
|
||||||
|
options = self.charm.adapters_instance.options
|
||||||
|
options.ovn_key = self.pmock('aKey')
|
||||||
|
options.ovn_cert = self.pmock('aCert')
|
||||||
|
options.ovn_ca_cert = self.pmock('aCaCert')
|
||||||
|
options.ovn_l3_scheduler = self.pmock('aSched')
|
||||||
|
options.ovn_metadata_enabled = self.pmock('aMetaData')
|
||||||
|
options.enable_distributed_floating_ip = self.pmock('dont')
|
||||||
|
options.dns_servers = self.pmock('dns1 dns2')
|
||||||
|
options.geneve_vni_ranges = self.pmock('vnia:vniA vnib:vniB')
|
||||||
|
options.dhcp_default_lease_time = self.pmock(42)
|
||||||
|
options.ovn_dhcp4_global_options = self.pmock('a:A4 b:B4')
|
||||||
|
options.ovn_dhcp6_global_options = self.pmock('a:A6 b:B6')
|
||||||
handlers.configure_neutron()
|
handlers.configure_neutron()
|
||||||
neutron.configure_plugin.assert_called_once_with(
|
neutron.configure_plugin.assert_called_once_with(
|
||||||
'ovn',
|
'ovn',
|
||||||
@ -97,19 +113,24 @@ class TestOvnHandlers(test_utils.PatchHelper):
|
|||||||
'ovn': [
|
'ovn': [
|
||||||
('ovn_nb_connection',
|
('ovn_nb_connection',
|
||||||
''), # FIXME
|
''), # FIXME
|
||||||
('ovn_nb_private_key', mock.ANY),
|
('ovn_nb_private_key', 'aKey'),
|
||||||
('ovn_nb_certificate', mock.ANY),
|
('ovn_nb_certificate', 'aCert'),
|
||||||
('ovn_nb_ca_cert', mock.ANY),
|
('ovn_nb_ca_cert', 'aCaCert'),
|
||||||
('ovn_sb_connection',
|
('ovn_sb_connection',
|
||||||
''), # FIXME
|
''), # FIXME
|
||||||
('ovn_sb_private_key', mock.ANY),
|
('ovn_sb_private_key', 'aKey'),
|
||||||
('ovn_sb_certificate', mock.ANY),
|
('ovn_sb_certificate', 'aCert'),
|
||||||
('ovn_sb_ca_cert', mock.ANY),
|
('ovn_sb_ca_cert', 'aCaCert'),
|
||||||
('ovn_l3_scheduler', 'leastloaded'),
|
('ovn_l3_scheduler', 'aSched'),
|
||||||
('ovn_metadata_enabled', 'true'),
|
('ovn_metadata_enabled', 'aMetaData'),
|
||||||
|
('enable_distributed_floating_ip', 'dont'),
|
||||||
|
('dns_servers', 'dns1,dns2'),
|
||||||
|
('dhcp_default_lease_time', 42),
|
||||||
|
('ovn_dhcp4_global_options', 'a:A4,b:B4'),
|
||||||
|
('ovn_dhcp6_global_options', 'a:A6,b:B6'),
|
||||||
],
|
],
|
||||||
'ml2_type_geneve': [
|
'ml2_type_geneve': [
|
||||||
('vni_ranges', '1000:2000'),
|
('vni_ranges', 'vnia:vniA,vnib:vniB'),
|
||||||
('max_header_size', '38'),
|
('max_header_size', '38'),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user