Merge "Allow openstack provider labels to configure networks"

This commit is contained in:
Zuul 2019-05-04 06:52:50 +00:00 committed by Gerrit Code Review
commit 2e8f286c4f
7 changed files with 65 additions and 10 deletions

View File

@ -841,6 +841,11 @@ Selecting the OpenStack driver adds the following options to the
min-ram: 8192
flavor-name: 'something to match'
console-log: True
- name: trusty
min-ram: 8192
networks:
- public
- private
Each entry is a dictionary with the following keys
@ -904,6 +909,15 @@ Selecting the OpenStack driver adds the following options to the
If given, the label for use in this pool will create a
volume from the image and boot the node from it.
.. attr:: networks
:type: list
Specify custom Neutron networks that get attached to each
node. Specify the name or id of the network as a string.
.. note:: This value will override the value for
:attr:`providers.[openstack].pools.networks`.
.. attr:: key-name
:type: string

View File

@ -88,6 +88,7 @@ class ProviderLabel(ConfigValue):
self.volume_size = None
self.instance_properties = None
self.userdata = None
self.networks = []
# The ProviderPool object that owns this label.
self.pool = None
@ -105,7 +106,8 @@ class ProviderLabel(ConfigValue):
other.boot_from_volume == self.boot_from_volume and
other.volume_size == self.volume_size and
other.instance_properties == self.instance_properties and
other.userdata == self.userdata)
other.userdata == self.userdata and
other.networks == self.networks)
return False
def __repr__(self):
@ -206,6 +208,7 @@ class ProviderPool(ConfigPool):
pl.instance_properties = label.get('instance-properties',
None)
pl.userdata = label.get('userdata', None)
pl.networks = label.get('networks', self.networks)
top_label = full_config.labels[pl.name]
top_label.pools.append(self)
@ -359,6 +362,7 @@ class OpenStackProviderConfig(ProviderConfig):
'volume-size': int,
'instance-properties': dict,
'userdata': str,
'networks': [str],
}
label_min_ram = v.Schema({v.Required('min-ram'): int}, extra=True)

View File

@ -135,7 +135,7 @@ class OpenStackNodeLauncher(NodeLauncher):
nodepool_node_id=self.node.id,
nodepool_node_label=self.node.type[0],
nodepool_image_name=image_name,
networks=self.pool.networks,
networks=self.label.networks,
security_groups=self.pool.security_groups,
boot_from_volume=self.label.boot_from_volume,
volume_size=self.label.volume_size,

View File

@ -44,11 +44,16 @@ providers:
node-attributes:
key1: value1
key2: value2
networks:
- public
- private
labels:
- name: trusty
diskimage: trusty
min-ram: 8192
console-log: True
networks:
- public
- name: trusty-2-node
diskimage: trusty
min-ram: 8192
@ -93,6 +98,9 @@ providers:
- name: trusty
diskimage: trusty
min-ram: 8192
networks:
- public
- private
- name: trusty-2-node
diskimage: trusty
min-ram: 8192

View File

@ -8,7 +8,9 @@ zookeeper-servers:
chroot: {zookeeper_chroot}
labels:
- name: fake-label
- name: fake-label1
min-ready: 1
- name: fake-label2
min-ready: 1
providers:
@ -26,9 +28,16 @@ providers:
- 'fake-public-network-name'
- 'fake-private-network-name'
labels:
- name: fake-label
- name: fake-label1
diskimage: fake-image
min-ram: 8192
- name: fake-label2
diskimage: fake-image
min-ram: 8192
networks:
# This activates a flag in fakeprovider to give us an ipv6
# network
- 'fake-ipv6-network-name'
diskimages:
- name: fake-image

View File

@ -636,17 +636,31 @@ class TestLauncher(tests.DBTestCase):
self.assertEqual([], self.zk.getNodes())
def test_node_net_name(self):
"""Test that a node is created with a net name"""
"""Test that a node is created with proper net name"""
configfile = self.setup_config('node_net_name.yaml')
pool = self.useNodepool(configfile, watermark_sleep=1)
self.useBuilder(configfile)
pool.start()
self.waitForImage('fake-provider', 'fake-image')
nodes = self.waitForNodes('fake-label')
self.assertEqual(len(nodes), 1)
self.assertEqual(nodes[0].provider, 'fake-provider')
self.assertEqual(nodes[0].type, ['fake-label'])
self.assertEqual(nodes[0].username, 'zuul')
label1_nodes = self.waitForNodes('fake-label1')
label2_nodes = self.waitForNodes('fake-label2')
self.assertEqual(len(label1_nodes), 1)
self.assertEqual(len(label2_nodes), 1)
# ipv6 address unavailable
self.assertEqual(label1_nodes[0].provider, 'fake-provider')
self.assertEqual(label1_nodes[0].public_ipv4, 'fake')
self.assertEqual(label1_nodes[0].public_ipv6, '')
self.assertEqual(label1_nodes[0].interface_ip, 'fake')
self.assertEqual(label1_nodes[0].host_id, 'fake')
# ipv6 address available
self.assertEqual(label2_nodes[0].provider, 'fake-provider')
self.assertEqual(label2_nodes[0].public_ipv4, 'fake')
self.assertEqual(label2_nodes[0].public_ipv6, 'fake_v6')
self.assertEqual(label2_nodes[0].interface_ip, 'fake_v6')
self.assertEqual(label2_nodes[0].host_id, 'fake_host_id')
def test_node_security_group(self):
"""Test that an image and node are created with sec_group specified"""

View File

@ -0,0 +1,6 @@
---
features:
- |
Provider labels for the OpenStack driver are now able to select which
networks to be attached to. This overrides any networks defined by
:attr:`providers.[openstack].pools.networks`.