cloudstack: add route to the metadata base url
If the CloudStack metadata url is 169.254.169.254, Windows requires special logic to enable the static route. The same logic is used on AWS / OpenStack metadata implementation. More info: https://bugs.launchpad.net/quantum/+bug/1174657 Change-Id: Iab9b1d082d4c48ced362b816881c39564dcaaf91
This commit is contained in:
parent
303ce0ed6f
commit
cd8eca0f91
@ -43,6 +43,9 @@ class CloudStackOptions(conf_base.Options):
|
||||
"https_ca_bundle", default=None,
|
||||
help="The path to a CA_BUNDLE file or directory with "
|
||||
"certificates of trusted CAs."),
|
||||
cfg.BoolOpt(
|
||||
"add_metadata_private_ip_route", default=False,
|
||||
help="Add a route for the metadata ip address to the gateway"),
|
||||
]
|
||||
|
||||
def register(self):
|
||||
|
@ -23,6 +23,7 @@ from cloudbaseinit import conf as cloudbaseinit_conf
|
||||
from cloudbaseinit.metadata.services import base
|
||||
from cloudbaseinit.osutils import factory as osutils_factory
|
||||
from cloudbaseinit.utils import encoding
|
||||
from cloudbaseinit.utils import network
|
||||
|
||||
CONF = cloudbaseinit_conf.CONF
|
||||
LOG = oslo_logging.getLogger(__name__)
|
||||
@ -83,6 +84,10 @@ class CloudStack(base.BaseHTTPMetadataService):
|
||||
def load(self):
|
||||
"""Obtain all the required information."""
|
||||
super(CloudStack, self).load()
|
||||
|
||||
if CONF.cloudstack.add_metadata_private_ip_route:
|
||||
network.check_metadata_ip_route(CONF.cloudstack.metadata_base_url)
|
||||
|
||||
if self._test_api(CONF.cloudstack.metadata_base_url):
|
||||
return True
|
||||
|
||||
|
@ -35,6 +35,7 @@ class CloudStackTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
CONF.set_override('retry_count_interval', 0)
|
||||
CONF.set_override('retry_count', 1)
|
||||
CONF.set_override('add_metadata_private_ip_route', True, 'cloudstack')
|
||||
self._service = self._get_service()
|
||||
self._service._metadata_uri = "http://10.1.1.1/latest/meta-data/"
|
||||
|
||||
@ -75,15 +76,18 @@ class CloudStackTest(unittest.TestCase):
|
||||
self.assertTrue(self._service.load())
|
||||
self.assertEqual(4, mock_test_api.call_count)
|
||||
|
||||
@mock.patch('cloudbaseinit.utils.network.check_metadata_ip_route')
|
||||
@mock.patch('cloudbaseinit.metadata.services.cloudstack.CloudStack'
|
||||
'._test_api')
|
||||
def test_load_default(self, mock_test_api):
|
||||
def test_load_default(self, mock_test_api, mock_check_metadata_ip_route):
|
||||
mock_test_api.side_effect = [True]
|
||||
self._service._test_api = mock_test_api
|
||||
|
||||
self.assertTrue(self._service.load())
|
||||
mock_test_api.assert_called_once_with(
|
||||
CONF.cloudstack.metadata_base_url)
|
||||
mock_check_metadata_ip_route.assert_called_once_with(
|
||||
CONF.cloudstack.metadata_base_url)
|
||||
|
||||
@mock.patch('cloudbaseinit.osutils.factory.get_os_utils')
|
||||
@mock.patch('cloudbaseinit.metadata.services.cloudstack.CloudStack'
|
||||
|
Loading…
x
Reference in New Issue
Block a user