Configurable network labels used for showing IPs in instance details
The ip shown in the instance detail was hard coded to be obtained from a nova netwok label 'private' or 'usenet'. With this change, the labels is configurable based on a regex pattern. Fixes bug 1206303 Change-Id: I73d896e6b85bdebe342a777219b9b60d6954f8b6
This commit is contained in:
parent
4307d36e2d
commit
7e57dbddcd
@ -47,6 +47,7 @@ swift_url = http://localhost:8080/v1/AUTH_
|
|||||||
|
|
||||||
# Config option for showing the IP address that nova doles out
|
# Config option for showing the IP address that nova doles out
|
||||||
add_addresses = True
|
add_addresses = True
|
||||||
|
network_label_regex = ^private$
|
||||||
|
|
||||||
# Config options for enabling volume service
|
# Config options for enabling volume service
|
||||||
trove_volume_support = True
|
trove_volume_support = True
|
||||||
|
@ -68,7 +68,8 @@ nova_service_type = compute
|
|||||||
nova_service_name = Compute Service
|
nova_service_name = Compute Service
|
||||||
|
|
||||||
# Config option for showing the IP address that nova doles out
|
# Config option for showing the IP address that nova doles out
|
||||||
add_addresses = False
|
add_addresses = True
|
||||||
|
network_label_regex = ^private$
|
||||||
|
|
||||||
# Config options for enabling volume service
|
# Config options for enabling volume service
|
||||||
trove_volume_support = True
|
trove_volume_support = True
|
||||||
|
@ -172,7 +172,8 @@ common_opts = [
|
|||||||
cfg.StrOpt('nova_proxy_admin_pass', default='',
|
cfg.StrOpt('nova_proxy_admin_pass', default='',
|
||||||
help="Admin password used to connect to Nova"),
|
help="Admin password used to connect to Nova"),
|
||||||
cfg.StrOpt('nova_proxy_admin_tenant_name', default='',
|
cfg.StrOpt('nova_proxy_admin_tenant_name', default='',
|
||||||
help="Admin tenant used to connect to Nova")
|
help="Admin tenant used to connect to Nova"),
|
||||||
|
cfg.StrOpt('network_label_regex', default='^private$'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import re
|
||||||
from trove.openstack.common import log as logging
|
from trove.openstack.common import log as logging
|
||||||
from trove.common import cfg
|
from trove.common import cfg
|
||||||
from trove.common import utils
|
|
||||||
from trove.common.views import create_links
|
from trove.common.views import create_links
|
||||||
from trove.instance import models
|
from trove.instance import models
|
||||||
|
|
||||||
@ -27,14 +27,14 @@ CONF = cfg.CONF
|
|||||||
|
|
||||||
|
|
||||||
def get_ip_address(addresses):
|
def get_ip_address(addresses):
|
||||||
if (addresses is not None and
|
if addresses is None:
|
||||||
addresses.get('private') is not None and
|
return None
|
||||||
len(addresses['private']) > 0):
|
IPs = []
|
||||||
return [addr.get('addr') for addr in addresses['private']]
|
for label in addresses:
|
||||||
if (addresses is not None and
|
if (re.search(CONF.network_label_regex, label) and
|
||||||
addresses.get('usernet') is not None and
|
len(addresses[label]) > 0):
|
||||||
len(addresses['usernet']) > 0):
|
IPs.extend([addr.get('addr') for addr in addresses[label]])
|
||||||
return [addr.get('addr') for addr in addresses['usernet']]
|
return IPs
|
||||||
|
|
||||||
|
|
||||||
class InstanceView(object):
|
class InstanceView(object):
|
||||||
|
60
trove/tests/unittests/instance/test_instance_views.py
Normal file
60
trove/tests/unittests/instance/test_instance_views.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
from testtools import TestCase
|
||||||
|
from trove.common import cfg
|
||||||
|
from trove.instance.views import get_ip_address
|
||||||
|
|
||||||
|
|
||||||
|
CONF = cfg.CONF
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceViewsTest(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(InstanceViewsTest, self).setUp()
|
||||||
|
self.addresses = {"private": [{"addr": "123.123.123.123"}],
|
||||||
|
"internal": [{"addr": "10.123.123.123"}],
|
||||||
|
"public": [{"addr": "15.123.123.123"}]}
|
||||||
|
self.orig_conf = CONF.network_label_regex
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(InstanceViewsTest, self).tearDown()
|
||||||
|
CONF.network_label_regex = self.orig_conf
|
||||||
|
|
||||||
|
def test_one_network_label_exact(self):
|
||||||
|
CONF.network_label_regex = '^internal$'
|
||||||
|
ip = get_ip_address(self.addresses)
|
||||||
|
self.assertEqual(['10.123.123.123'], ip)
|
||||||
|
|
||||||
|
def test_one_network_label(self):
|
||||||
|
CONF.network_label_regex = 'public'
|
||||||
|
ip = get_ip_address(self.addresses)
|
||||||
|
self.assertEqual(['15.123.123.123'], ip)
|
||||||
|
|
||||||
|
def test_two_network_labels(self):
|
||||||
|
CONF.network_label_regex = '^(private|public)$'
|
||||||
|
ip = get_ip_address(self.addresses)
|
||||||
|
self.assertTrue(len(ip) == 2)
|
||||||
|
self.assertTrue('123.123.123.123' in ip)
|
||||||
|
self.assertTrue('15.123.123.123' in ip)
|
||||||
|
|
||||||
|
def test_all_network_labels(self):
|
||||||
|
CONF.network_label_regex = '.*'
|
||||||
|
ip = get_ip_address(self.addresses)
|
||||||
|
self.assertTrue(len(ip) == 3)
|
||||||
|
self.assertTrue('10.123.123.123' in ip)
|
||||||
|
self.assertTrue('123.123.123.123' in ip)
|
||||||
|
self.assertTrue('15.123.123.123' in ip)
|
Loading…
Reference in New Issue
Block a user