Add support for containerized keystone to VIM
Adding support to the VIM for containerized keystone. The VIM will now support two keystone instances: - platform: bare metal keystone used to authenticate with platform services (e.g. sysinv, patching) - openstack: containerized keystone used to authenticate with openstack services (e.g. nova, neutron, cinder) For now, the VIM will use the same baremetal keystone for both the platform and openstack, because we still only deploy with the baremetal keystone. Story: 2002876 Task: 26872 Depends-On: If4bd46a4c14cc65978774001cb2887e5d3e3607b Change-Id: Id1ec639aa347e0c4e4019576d3c36c8c72aefedf
This commit is contained in:
parent
4873ce0772
commit
e547b8c136
@ -3,12 +3,25 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
|
[platform]
|
||||||
|
username=admin
|
||||||
|
tenant=admin
|
||||||
|
authorization_protocol=http
|
||||||
|
authorization_ip=192.168.204.2
|
||||||
|
authorization_port=5000
|
||||||
|
user_domain_name=Default
|
||||||
|
project_domain_name=Default
|
||||||
|
keyring_service=CGCS
|
||||||
|
|
||||||
[openstack]
|
[openstack]
|
||||||
username=admin
|
username=admin
|
||||||
tenant=admin
|
tenant=admin
|
||||||
authorization_protocol=http
|
authorization_protocol=http
|
||||||
authorization_ip=192.168.204.2
|
authorization_ip=192.168.204.2
|
||||||
authorization_port=5000
|
authorization_port=5000
|
||||||
|
user_domain_name=Default
|
||||||
|
project_domain_name=Default
|
||||||
|
keyring_service=CGCS
|
||||||
|
|
||||||
[keystone]
|
[keystone]
|
||||||
region_name=RegionOne
|
region_name=RegionOne
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -33,7 +33,3 @@ def load(config_file):
|
|||||||
config = Config()
|
config = Config()
|
||||||
config.read(config_file)
|
config.read(config_file)
|
||||||
CONF = config.as_dict()
|
CONF = config.as_dict()
|
||||||
|
|
||||||
password = CONF['openstack'].get('password', None)
|
|
||||||
if password is None:
|
|
||||||
CONF['openstack']['password'] = None
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -569,7 +569,8 @@ class NFVIBlockStorageAPI(nfvi.api.v1.NFVIBlockStorageAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -2902,7 +2902,8 @@ class NFVIComputeAPI(nfvi.api.v1.NFVIComputeAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
|
||||||
self._rpc_listener = rpc_listener.RPCListener(
|
self._rpc_listener = rpc_listener.RPCListener(
|
||||||
config.CONF['amqp']['host'], config.CONF['amqp']['port'],
|
config.CONF['amqp']['host'], config.CONF['amqp']['port'],
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -850,7 +850,8 @@ class NFVIGuestAPI(nfvi.api.v1.NFVIGuestAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
|
||||||
self._rest_api_server = rest_api.rest_api_get_server(
|
self._rest_api_server = rest_api.rest_api_get_server(
|
||||||
config.CONF['guest-rest-api']['host'],
|
config.CONF['guest-rest-api']['host'],
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -114,7 +114,8 @@ class NFVIIdentityAPI(nfvi.api.v1.NFVIIdentityAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -591,7 +591,8 @@ class NFVIImageAPI(nfvi.api.v1.NFVIImageAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
"""
|
"""
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -759,7 +759,8 @@ class NFVINetworkAPI(nfvi.api.v1.NFVINetworkAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2016 Wind River Systems, Inc.
|
# Copyright (c) 2016-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -268,7 +268,8 @@ class NFVISwMgmtAPI(nfvi.api.v1.NFVISwMgmtAPI):
|
|||||||
Initialize the plugin
|
Initialize the plugin
|
||||||
"""
|
"""
|
||||||
config.load(config_file)
|
config.load(config_file)
|
||||||
self._directory = openstack.get_directory(config)
|
self._directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
"""
|
"""
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
from nfv_common import debug
|
from nfv_common import debug
|
||||||
|
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
||||||
|
|
||||||
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.fm')
|
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.fm')
|
||||||
@ -16,7 +16,7 @@ def get_alarms(token):
|
|||||||
"""
|
"""
|
||||||
Asks Fault Management for customer alarms
|
Asks Fault Management for customer alarms
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.FM)
|
url = token.get_service_url(PLATFORM_SERVICE.FM)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack FM URL is invalid")
|
raise ValueError("OpenStack FM URL is invalid")
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ def get_logs(token, start=None, end=None):
|
|||||||
"""
|
"""
|
||||||
Asks Fault Management for customer logs
|
Asks Fault Management for customer logs
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.FM)
|
url = token.get_service_url(PLATFORM_SERVICE.FM)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack FM URL is invalid")
|
raise ValueError("OpenStack FM URL is invalid")
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ def get_alarm_history(token, start=None, end=None):
|
|||||||
"""
|
"""
|
||||||
Asks Fault Management for customer alarm history
|
Asks Fault Management for customer alarm history
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.FM)
|
url = token.get_service_url(PLATFORM_SERVICE.FM)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack FM URL is invalid")
|
raise ValueError("OpenStack FM URL is invalid")
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -11,7 +11,7 @@ from nfv_common.helpers import Constant
|
|||||||
from nfv_common.helpers import Constants
|
from nfv_common.helpers import Constants
|
||||||
from nfv_common.helpers import Singleton
|
from nfv_common.helpers import Singleton
|
||||||
|
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
||||||
|
|
||||||
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.guest')
|
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.guest')
|
||||||
@ -86,7 +86,7 @@ def host_services_create(token, host_uuid, host_name):
|
|||||||
"""
|
"""
|
||||||
Create host services
|
Create host services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ def host_services_enable(token, host_uuid, host_name):
|
|||||||
"""
|
"""
|
||||||
Enable host services
|
Enable host services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ def host_services_disable(token, host_uuid, host_name):
|
|||||||
"""
|
"""
|
||||||
Disable host services
|
Disable host services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ def host_services_delete(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Delete host services
|
Delete host services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -173,7 +173,7 @@ def host_services_query(token, host_uuid, host_name):
|
|||||||
"""
|
"""
|
||||||
Query host services
|
Query host services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -196,7 +196,7 @@ def guest_services_create(token, instance_uuid, host_name, services):
|
|||||||
"""
|
"""
|
||||||
Create guest services
|
Create guest services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ def guest_services_set(token, instance_uuid, host_name, services):
|
|||||||
"""
|
"""
|
||||||
Set guest services
|
Set guest services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -244,7 +244,7 @@ def guest_services_delete(token, instance_uuid):
|
|||||||
"""
|
"""
|
||||||
Delete guest services
|
Delete guest services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -262,7 +262,7 @@ def guest_services_query(token, instance_uuid):
|
|||||||
"""
|
"""
|
||||||
Query guest services
|
Query guest services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ def guest_services_vote(token, instance_uuid, host_name, action):
|
|||||||
"""
|
"""
|
||||||
Ask guest services to vote
|
Ask guest services to vote
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
@ -304,7 +304,7 @@ def guest_services_notify(token, instance_uuid, host_name, action):
|
|||||||
"""
|
"""
|
||||||
Notify guest services
|
Notify guest services
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
|
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Guest URL is invalid")
|
raise ValueError("OpenStack Guest URL is invalid")
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -11,7 +11,7 @@ from nfv_common.helpers import Constant
|
|||||||
from nfv_common.helpers import Constants
|
from nfv_common.helpers import Constants
|
||||||
from nfv_common.helpers import Singleton
|
from nfv_common.helpers import Singleton
|
||||||
|
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
||||||
|
|
||||||
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.mtc')
|
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.mtc')
|
||||||
@ -35,7 +35,7 @@ def system_query(token):
|
|||||||
"""
|
"""
|
||||||
Query Maintenance for the system information
|
Query Maintenance for the system information
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.MTC)
|
url = token.get_service_url(PLATFORM_SERVICE.MTC)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Mtc URL is invalid")
|
raise ValueError("OpenStack Mtc URL is invalid")
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ def host_query(token, host_uuid, host_name):
|
|||||||
"""
|
"""
|
||||||
Query Maintenance for the host information
|
Query Maintenance for the host information
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.MTC)
|
url = token.get_service_url(PLATFORM_SERVICE.MTC)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Mtc URL is invalid")
|
raise ValueError("OpenStack Mtc URL is invalid")
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ def notify_host_severity(token, host_uuid, host_name, host_severity):
|
|||||||
"""
|
"""
|
||||||
Notify Maintenance the severity of a host
|
Notify Maintenance the severity of a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.MTC)
|
url = token.get_service_url(PLATFORM_SERVICE.MTC)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Mtc URL is invalid")
|
raise ValueError("OpenStack Mtc URL is invalid")
|
||||||
|
|
||||||
|
@ -16,6 +16,36 @@ from nfv_common.helpers import Singleton
|
|||||||
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.objects')
|
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.objects')
|
||||||
|
|
||||||
|
|
||||||
|
@six.add_metaclass(Singleton)
|
||||||
|
class ServiceCategory(Constants):
|
||||||
|
"""
|
||||||
|
Service Category Constants
|
||||||
|
"""
|
||||||
|
PLATFORM = Constant('platform')
|
||||||
|
OPENSTACK = Constant('openstack')
|
||||||
|
|
||||||
|
|
||||||
|
# Service Category Constant
|
||||||
|
SERVICE_CATEGORY = ServiceCategory()
|
||||||
|
|
||||||
|
|
||||||
|
@six.add_metaclass(Singleton)
|
||||||
|
class PlatformServices(Constants):
|
||||||
|
"""
|
||||||
|
Platform Services Constants
|
||||||
|
"""
|
||||||
|
GUEST = Constant('guest')
|
||||||
|
KEYSTONE = Constant('keystone')
|
||||||
|
MTC = Constant('mtc')
|
||||||
|
SYSINV = Constant('sysinv')
|
||||||
|
PATCHING = Constant('patching')
|
||||||
|
FM = Constant('fm')
|
||||||
|
|
||||||
|
|
||||||
|
# Platform Services Constant
|
||||||
|
PLATFORM_SERVICE = PlatformServices()
|
||||||
|
|
||||||
|
|
||||||
@six.add_metaclass(Singleton)
|
@six.add_metaclass(Singleton)
|
||||||
class OpenStackServices(Constants):
|
class OpenStackServices(Constants):
|
||||||
"""
|
"""
|
||||||
@ -24,15 +54,10 @@ class OpenStackServices(Constants):
|
|||||||
CEILOMETER = Constant('ceilometer')
|
CEILOMETER = Constant('ceilometer')
|
||||||
CINDER = Constant('cinder')
|
CINDER = Constant('cinder')
|
||||||
GLANCE = Constant('glance')
|
GLANCE = Constant('glance')
|
||||||
GUEST = Constant('guest')
|
|
||||||
KEYSTONE = Constant('keystone')
|
KEYSTONE = Constant('keystone')
|
||||||
MTC = Constant('mtc')
|
|
||||||
NEUTRON = Constant('neutron')
|
NEUTRON = Constant('neutron')
|
||||||
NOVA = Constant('nova')
|
NOVA = Constant('nova')
|
||||||
SYSINV = Constant('sysinv')
|
|
||||||
HEAT = Constant('heat')
|
HEAT = Constant('heat')
|
||||||
PATCHING = Constant('patching')
|
|
||||||
FM = Constant('fm')
|
|
||||||
|
|
||||||
|
|
||||||
# OpenStack Services Constant
|
# OpenStack Services Constant
|
||||||
@ -91,9 +116,12 @@ class Directory(object):
|
|||||||
"""
|
"""
|
||||||
Directory
|
Directory
|
||||||
"""
|
"""
|
||||||
def __init__(self, auth_protocol, auth_host, auth_port, auth_project,
|
def __init__(self, service_category, keyring_service, auth_protocol,
|
||||||
|
auth_host, auth_port, auth_project,
|
||||||
auth_username, auth_password, auth_user_domain_name,
|
auth_username, auth_password, auth_user_domain_name,
|
||||||
auth_project_domain_name, auth_uri=None):
|
auth_project_domain_name, auth_uri=None):
|
||||||
|
self._service_category = service_category
|
||||||
|
self._keyring_service = keyring_service
|
||||||
self._auth_protocol = auth_protocol
|
self._auth_protocol = auth_protocol
|
||||||
self._auth_host = auth_host
|
self._auth_host = auth_host
|
||||||
self._auth_port = auth_port
|
self._auth_port = auth_port
|
||||||
@ -105,6 +133,20 @@ class Directory(object):
|
|||||||
self._auth_project_domain_name = auth_project_domain_name
|
self._auth_project_domain_name = auth_project_domain_name
|
||||||
self._entries = dict()
|
self._entries = dict()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def service_category(self):
|
||||||
|
"""
|
||||||
|
Returns the service category
|
||||||
|
"""
|
||||||
|
return self._service_category
|
||||||
|
|
||||||
|
@property
|
||||||
|
def keyring_service(self):
|
||||||
|
"""
|
||||||
|
Returns the keyring service
|
||||||
|
"""
|
||||||
|
return self._keyring_service
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def auth_protocol(self):
|
def auth_protocol(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -9,6 +9,8 @@ import urllib2
|
|||||||
from nfv_common import debug
|
from nfv_common import debug
|
||||||
|
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
||||||
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
|
from nfv_plugins.nfvi_plugins.openstack.objects import SERVICE_CATEGORY
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import Directory
|
from nfv_plugins.nfvi_plugins.openstack.objects import Directory
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import Token
|
from nfv_plugins.nfvi_plugins.openstack.objects import Token
|
||||||
|
|
||||||
@ -33,7 +35,8 @@ def get_token(directory):
|
|||||||
|
|
||||||
if directory.auth_password is None:
|
if directory.auth_password is None:
|
||||||
import keyring
|
import keyring
|
||||||
password = keyring.get_password('CGCS', directory.auth_username)
|
password = keyring.get_password(directory.keyring_service,
|
||||||
|
directory.auth_username)
|
||||||
else:
|
else:
|
||||||
password = directory.auth_password
|
password = directory.auth_password
|
||||||
|
|
||||||
@ -75,27 +78,38 @@ def get_token(directory):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_directory(config):
|
def get_directory(config, service_category):
|
||||||
"""
|
"""
|
||||||
Get directory information from the given configuration
|
Get directory information from the given configuration for the given
|
||||||
|
service category.
|
||||||
"""
|
"""
|
||||||
openstack_info = config.CONF.get('openstack', None)
|
if SERVICE_CATEGORY.PLATFORM == service_category:
|
||||||
if openstack_info is not None:
|
services = PLATFORM_SERVICE
|
||||||
auth_uri = openstack_info.get('authorization_uri', None)
|
elif SERVICE_CATEGORY.OPENSTACK == service_category:
|
||||||
|
services = OPENSTACK_SERVICE
|
||||||
|
else:
|
||||||
|
raise ValueError("service_category is invalid: %s" % service_category)
|
||||||
|
|
||||||
|
auth_info = config.CONF.get(service_category, None)
|
||||||
|
if auth_info is not None:
|
||||||
|
auth_uri = auth_info.get('authorization_uri', None)
|
||||||
else:
|
else:
|
||||||
auth_uri = None
|
auth_uri = None
|
||||||
|
|
||||||
directory = Directory(config.CONF['openstack']['authorization_protocol'],
|
directory = Directory(
|
||||||
config.CONF['openstack']['authorization_ip'],
|
service_category,
|
||||||
config.CONF['openstack']['authorization_port'],
|
config.CONF[service_category]['keyring_service'],
|
||||||
config.CONF['openstack']['tenant'],
|
config.CONF[service_category]['authorization_protocol'],
|
||||||
config.CONF['openstack']['username'],
|
config.CONF[service_category]['authorization_ip'],
|
||||||
config.CONF['openstack']['password'],
|
config.CONF[service_category]['authorization_port'],
|
||||||
config.CONF['openstack']['user_domain_name'],
|
config.CONF[service_category]['tenant'],
|
||||||
config.CONF['openstack']['project_domain_name'],
|
config.CONF[service_category]['username'],
|
||||||
auth_uri)
|
config.CONF[service_category].get('password', None),
|
||||||
|
config.CONF[service_category]['user_domain_name'],
|
||||||
|
config.CONF[service_category]['project_domain_name'],
|
||||||
|
auth_uri)
|
||||||
|
|
||||||
for service in OPENSTACK_SERVICE:
|
for service in services:
|
||||||
service_info = config.CONF.get(service, None)
|
service_info = config.CONF.get(service, None)
|
||||||
if service_info is not None:
|
if service_info is not None:
|
||||||
region_name = service_info.get('region_name', None)
|
region_name = service_info.get('region_name', None)
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2016 Wind River Systems, Inc.
|
# Copyright (c) 2016-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
from nfv_common import debug
|
from nfv_common import debug
|
||||||
|
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
||||||
|
|
||||||
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.patching')
|
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.patching')
|
||||||
@ -15,7 +15,7 @@ def query_patches(token):
|
|||||||
"""
|
"""
|
||||||
Asks Patch Controller for information about the patches in the system
|
Asks Patch Controller for information about the patches in the system
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.PATCHING, strip_version=True)
|
url = token.get_service_url(PLATFORM_SERVICE.PATCHING, strip_version=True)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Patching URL is invalid")
|
raise ValueError("OpenStack Patching URL is invalid")
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ def query_hosts(token):
|
|||||||
"""
|
"""
|
||||||
Asks Patch Controller for information about the hosts in the system
|
Asks Patch Controller for information about the hosts in the system
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.PATCHING, strip_version=True)
|
url = token.get_service_url(PLATFORM_SERVICE.PATCHING, strip_version=True)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Patching URL is invalid")
|
raise ValueError("OpenStack Patching URL is invalid")
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ def host_install_async(token, host_name):
|
|||||||
"""
|
"""
|
||||||
Asks Patch Controller to perform a software upgrade on a host
|
Asks Patch Controller to perform a software upgrade on a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.PATCHING, strip_version=True)
|
url = token.get_service_url(PLATFORM_SERVICE.PATCHING, strip_version=True)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack Patching URL is invalid")
|
raise ValueError("OpenStack Patching URL is invalid")
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
import json
|
import json
|
||||||
from nfv_common import debug
|
from nfv_common import debug
|
||||||
|
|
||||||
from nfv_plugins.nfvi_plugins.openstack.objects import OPENSTACK_SERVICE
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
from nfv_plugins.nfvi_plugins.openstack.rest_api import rest_api_request
|
||||||
|
|
||||||
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.sysinv')
|
DLOG = debug.debug_get_logger('nfv_plugins.nfvi_plugins.openstack.sysinv')
|
||||||
@ -17,7 +17,7 @@ def get_system_info(token):
|
|||||||
Asks System Inventory for information about the system, such as
|
Asks System Inventory for information about the system, such as
|
||||||
the name of the system
|
the name of the system
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ def get_hosts(token):
|
|||||||
"""
|
"""
|
||||||
Asks System Inventory for a list of hosts
|
Asks System Inventory for a list of hosts
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ def get_host(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Asks System Inventory for a host details
|
Asks System Inventory for a host details
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ def get_upgrade(token):
|
|||||||
"""
|
"""
|
||||||
Asks System Inventory for information about the upgrade
|
Asks System Inventory for information about the upgrade
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ def upgrade_start(token):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to start an upgrade
|
Ask System Inventory to start an upgrade
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ def upgrade_activate(token):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to activate an upgrade
|
Ask System Inventory to activate an upgrade
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ def upgrade_complete(token):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to complete an upgrade
|
Ask System Inventory to complete an upgrade
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ def get_host_lvgs(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Asks System Inventory for a list logical volume groups for a host
|
Asks System Inventory for a list logical volume groups for a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ def notify_host_services_enabled(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Notify System Inventory that host services are enabled
|
Notify System Inventory that host services are enabled
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ def notify_host_services_disabled(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Notify System Inventory that host services are disabled
|
Notify System Inventory that host services are disabled
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ def notify_host_services_disable_extend(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Notify System Inventory that host services disable needs to be extended
|
Notify System Inventory that host services disable needs to be extended
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -235,7 +235,7 @@ def notify_host_services_disable_failed(token, host_uuid, reason):
|
|||||||
"""
|
"""
|
||||||
Notify System Inventory that host services disable failed
|
Notify System Inventory that host services disable failed
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ def notify_host_services_deleted(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Notify System Inventory that host services have been deleted
|
Notify System Inventory that host services have been deleted
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ def notify_host_services_delete_failed(token, host_uuid, reason):
|
|||||||
"""
|
"""
|
||||||
Notify System Inventory that host services delete failed
|
Notify System Inventory that host services delete failed
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ def lock_host(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to lock a host
|
Ask System Inventory to lock a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ def unlock_host(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to unlock a host
|
Ask System Inventory to unlock a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -373,7 +373,7 @@ def reboot_host(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to reboot a host
|
Ask System Inventory to reboot a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -400,7 +400,7 @@ def upgrade_host(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to upgrade a host
|
Ask System Inventory to upgrade a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
@ -422,7 +422,7 @@ def swact_from_host(token, host_uuid):
|
|||||||
"""
|
"""
|
||||||
Ask System Inventory to swact from a host
|
Ask System Inventory to swact from a host
|
||||||
"""
|
"""
|
||||||
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
|
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
|
||||||
if url is None:
|
if url is None:
|
||||||
raise ValueError("OpenStack SysInv URL is invalid")
|
raise ValueError("OpenStack SysInv URL is invalid")
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -460,8 +460,12 @@ def do_unit_tests(test_set=None, rest_api_debug=False, test_config=None):
|
|||||||
opener = urllib2.build_opener(handler)
|
opener = urllib2.build_opener(handler)
|
||||||
urllib2.install_opener(opener)
|
urllib2.install_opener(opener)
|
||||||
|
|
||||||
directory = openstack.get_directory(config)
|
platform_directory = openstack.get_directory(
|
||||||
token = openstack.get_token(directory)
|
config, openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
openstack_directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
platform_token = openstack.get_token(platform_directory)
|
||||||
|
openstack_token = openstack.get_token(openstack_directory)
|
||||||
|
|
||||||
if test_set is None:
|
if test_set is None:
|
||||||
test_set = ['keystone', 'ceilometer', 'sysinv', 'glance', 'cinder',
|
test_set = ['keystone', 'ceilometer', 'sysinv', 'glance', 'cinder',
|
||||||
@ -469,43 +473,43 @@ def do_unit_tests(test_set=None, rest_api_debug=False, test_config=None):
|
|||||||
|
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
if 'keystone' in test_set:
|
if 'keystone' in test_set:
|
||||||
keystone_unit_tests(token, test_config)
|
keystone_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'ceilometer' in test_set:
|
if 'ceilometer' in test_set:
|
||||||
ceilometer_unit_tests(token, test_config)
|
ceilometer_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'sysinv' in test_set:
|
if 'sysinv' in test_set:
|
||||||
sysinv_unit_tests(token, test_config)
|
sysinv_unit_tests(platform_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'glance' in test_set:
|
if 'glance' in test_set:
|
||||||
glance_unit_tests(token, test_config)
|
glance_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'cinder' in test_set:
|
if 'cinder' in test_set:
|
||||||
cinder_unit_tests(token, test_config)
|
cinder_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'neutron' in test_set:
|
if 'neutron' in test_set:
|
||||||
neutron_unit_tests(token, test_config)
|
neutron_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'nova' in test_set:
|
if 'nova' in test_set:
|
||||||
nova_unit_tests(token, test_config)
|
nova_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'heat' in test_set:
|
if 'heat' in test_set:
|
||||||
heat_unit_tests(token, test_config)
|
heat_unit_tests(openstack_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'guest' in test_set:
|
if 'guest' in test_set:
|
||||||
guest_unit_tests(token, test_config)
|
guest_unit_tests(platform_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
if 'rest-api' in test_set:
|
if 'rest-api' in test_set:
|
||||||
rest_api_unit_tests(token, test_config)
|
rest_api_unit_tests(platform_token, test_config)
|
||||||
print("-" * 80)
|
print("-" * 80)
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +12,16 @@ tar_file=/var/log/nfv-vim-test.tar.gz
|
|||||||
config_file=debug.ini
|
config_file=debug.ini
|
||||||
handlers=stdout
|
handlers=stdout
|
||||||
|
|
||||||
|
[platform]
|
||||||
|
username=admin
|
||||||
|
tenant=admin
|
||||||
|
authorization_protocol=http
|
||||||
|
authorization_ip=192.168.204.2
|
||||||
|
authorization_port=5000
|
||||||
|
user_domain_name=Default
|
||||||
|
project_domain_name=Default
|
||||||
|
keyring_service=CGCS
|
||||||
|
|
||||||
[openstack]
|
[openstack]
|
||||||
username=admin
|
username=admin
|
||||||
tenant=admin
|
tenant=admin
|
||||||
@ -20,6 +30,7 @@ authorization_ip=192.168.204.2
|
|||||||
authorization_port=5000
|
authorization_port=5000
|
||||||
user_domain_name=Default
|
user_domain_name=Default
|
||||||
project_domain_name=Default
|
project_domain_name=Default
|
||||||
|
keyring_service=CGCS
|
||||||
|
|
||||||
[keystone]
|
[keystone]
|
||||||
region_name=RegionOne
|
region_name=RegionOne
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -80,7 +80,8 @@ def process_do_setup(loads_dir, setup_data):
|
|||||||
from nfv_plugins.nfvi_plugins.openstack import glance
|
from nfv_plugins.nfvi_plugins.openstack import glance
|
||||||
from nfv_plugins.nfvi_plugins.openstack import neutron
|
from nfv_plugins.nfvi_plugins.openstack import neutron
|
||||||
|
|
||||||
directory = openstack.get_directory(config)
|
directory = openstack.get_directory(config,
|
||||||
|
openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
token = openstack.get_token(directory)
|
token = openstack.get_token(directory)
|
||||||
|
|
||||||
result = nova.get_flavors(token)
|
result = nova.get_flavors(token)
|
||||||
@ -491,7 +492,8 @@ def process_do_teardown(setup_data):
|
|||||||
from nfv_plugins.nfvi_plugins.openstack import glance
|
from nfv_plugins.nfvi_plugins.openstack import glance
|
||||||
from nfv_plugins.nfvi_plugins.openstack import neutron
|
from nfv_plugins.nfvi_plugins.openstack import neutron
|
||||||
|
|
||||||
directory = openstack.get_directory(config)
|
directory = openstack.get_directory(config,
|
||||||
|
openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
token = openstack.get_token(directory)
|
token = openstack.get_token(directory)
|
||||||
|
|
||||||
result = nova.get_flavors(token)
|
result = nova.get_flavors(token)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -24,7 +24,8 @@ def _get_token():
|
|||||||
global _directory, _token
|
global _directory, _token
|
||||||
|
|
||||||
if _directory is None:
|
if _directory is None:
|
||||||
_directory = openstack.get_directory(config)
|
_directory = openstack.get_directory(config,
|
||||||
|
openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
|
||||||
if _token is None:
|
if _token is None:
|
||||||
_token = openstack.get_token(_directory)
|
_token = openstack.get_token(_directory)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -26,7 +26,8 @@ def _get_token():
|
|||||||
global _directory, _token
|
global _directory, _token
|
||||||
|
|
||||||
if _directory is None:
|
if _directory is None:
|
||||||
_directory = openstack.get_directory(config)
|
_directory = openstack.get_directory(config,
|
||||||
|
openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
|
|
||||||
if _token is None:
|
if _token is None:
|
||||||
_token = openstack.get_token(_directory)
|
_token = openstack.get_token(_directory)
|
||||||
|
@ -35,11 +35,15 @@ class TestHost(_test_base.Test):
|
|||||||
self._instance_names = instance_names
|
self._instance_names = instance_names
|
||||||
self._host_data = None
|
self._host_data = None
|
||||||
self._instances = dict()
|
self._instances = dict()
|
||||||
self._token = None
|
self._platform_token = None
|
||||||
|
self._openstack_token = None
|
||||||
self._customer_alarms = None
|
self._customer_alarms = None
|
||||||
self._customer_logs = None
|
self._customer_logs = None
|
||||||
self._customer_alarm_history = None
|
self._customer_alarm_history = None
|
||||||
self._directory = openstack.get_directory(config)
|
self._platform_directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
self._openstack_directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
name = name.replace(' ', '_')
|
name = name.replace(' ', '_')
|
||||||
self._output_dir = (config.CONF['test-output']['dir'] + '/' +
|
self._output_dir = (config.CONF['test-output']['dir'] + '/' +
|
||||||
name.translate(None, ''.join(['(', ')'])) + '_' +
|
name.translate(None, ''.join(['(', ')'])) + '_' +
|
||||||
@ -68,17 +72,32 @@ class TestHost(_test_base.Test):
|
|||||||
return _hosts.host_get_id(self._host_data)
|
return _hosts.host_get_id(self._host_data)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def token(self):
|
def platform_token(self):
|
||||||
"""
|
"""
|
||||||
Returns the token
|
Returns the platform token
|
||||||
"""
|
"""
|
||||||
if self._token is None:
|
if self._platform_token is None:
|
||||||
self._token = openstack.get_token(self._directory)
|
self._platform_token = openstack.get_token(self._platform_directory)
|
||||||
|
|
||||||
elif self._token.is_expired():
|
elif self._platform_token.is_expired():
|
||||||
self._token = openstack.get_token(self._directory)
|
self._platform_token = openstack.get_token(self._platform_directory)
|
||||||
|
|
||||||
return self._token
|
return self._platform_token
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openstack_token(self):
|
||||||
|
"""
|
||||||
|
Returns the openstack token
|
||||||
|
"""
|
||||||
|
if self._openstack_token is None:
|
||||||
|
self._openstack_token = openstack.get_token(
|
||||||
|
self._openstack_directory)
|
||||||
|
|
||||||
|
elif self._openstack_token.is_expired():
|
||||||
|
self._openstack_token = openstack.get_token(
|
||||||
|
self._openstack_directory)
|
||||||
|
|
||||||
|
return self._openstack_token
|
||||||
|
|
||||||
def _save_debug(self, test_success, test_reason):
|
def _save_debug(self, test_success, test_reason):
|
||||||
"""
|
"""
|
||||||
@ -176,7 +195,7 @@ class TestHost(_test_base.Test):
|
|||||||
"""
|
"""
|
||||||
Fetch the customer alarms raised
|
Fetch the customer alarms raised
|
||||||
"""
|
"""
|
||||||
self._customer_alarms = fm.get_alarms(self.token).result_data
|
self._customer_alarms = fm.get_alarms(self.platform_token).result_data
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -184,15 +203,18 @@ class TestHost(_test_base.Test):
|
|||||||
"""
|
"""
|
||||||
Fetch the customer logs
|
Fetch the customer logs
|
||||||
"""
|
"""
|
||||||
self._customer_logs = fm.get_logs(self.token, self.start_datetime,
|
self._customer_logs = fm.get_logs(self.platform_token,
|
||||||
self.end_datetime).result_data
|
self.start_datetime,
|
||||||
|
self.end_datetime).result_data
|
||||||
|
|
||||||
def _refresh_customer_alarm_history(self):
|
def _refresh_customer_alarm_history(self):
|
||||||
"""
|
"""
|
||||||
Fetch the customer alarm history
|
Fetch the customer alarm history
|
||||||
"""
|
"""
|
||||||
self._customer_alarm_history = fm.get_alarm_history(
|
self._customer_alarm_history = fm.get_alarm_history(
|
||||||
self.token, self.start_datetime, self.end_datetime).result_data
|
self.platform_token,
|
||||||
|
self.start_datetime,
|
||||||
|
self.end_datetime).result_data
|
||||||
|
|
||||||
|
|
||||||
class TestHostLock(TestHost):
|
class TestHostLock(TestHost):
|
||||||
@ -226,7 +248,7 @@ class TestHostLock(TestHost):
|
|||||||
success, reason = _instances.instance_on_host(instance_data,
|
success, reason = _instances.instance_on_host(instance_data,
|
||||||
self.host_name)
|
self.host_name)
|
||||||
if not success:
|
if not success:
|
||||||
nova.live_migrate_server(self.token, instance_uuid,
|
nova.live_migrate_server(self.openstack_token, instance_uuid,
|
||||||
to_host_name=self.host_name)
|
to_host_name=self.host_name)
|
||||||
|
|
||||||
max_end_datetime = (self._start_datetime +
|
max_end_datetime = (self._start_datetime +
|
||||||
@ -262,7 +284,7 @@ class TestHostLock(TestHost):
|
|||||||
"""
|
"""
|
||||||
Perform the test
|
Perform the test
|
||||||
"""
|
"""
|
||||||
sysinv.lock_host(self.token, self.host_id)
|
sysinv.lock_host(self.platform_token, self.host_id)
|
||||||
return True, "host locking"
|
return True, "host locking"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -329,7 +351,7 @@ class TestHostUnlock(TestHost):
|
|||||||
"""
|
"""
|
||||||
Perform the test
|
Perform the test
|
||||||
"""
|
"""
|
||||||
sysinv.unlock_host(self.token, self.host_id)
|
sysinv.unlock_host(self.platform_token, self.host_id)
|
||||||
return True, "host unlocking"
|
return True, "host unlocking"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
|
@ -31,11 +31,15 @@ class TestInstance(_test_base.Test):
|
|||||||
super(TestInstance, self).__init__(name, timeout_secs)
|
super(TestInstance, self).__init__(name, timeout_secs)
|
||||||
self._instance_name = instance_name
|
self._instance_name = instance_name
|
||||||
self._instance_data = None
|
self._instance_data = None
|
||||||
self._token = None
|
self._platform_token = None
|
||||||
|
self._openstack_token = None
|
||||||
self._customer_alarms = None
|
self._customer_alarms = None
|
||||||
self._customer_logs = None
|
self._customer_logs = None
|
||||||
self._customer_alarm_history = None
|
self._customer_alarm_history = None
|
||||||
self._directory = openstack.get_directory(config)
|
self._platform_directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
self._openstack_directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
name = name.replace(' ', '_')
|
name = name.replace(' ', '_')
|
||||||
self._output_dir = (config.CONF['test-output']['dir'] + '/' +
|
self._output_dir = (config.CONF['test-output']['dir'] + '/' +
|
||||||
name.translate(None, ''.join(['(', ')'])) + '_' +
|
name.translate(None, ''.join(['(', ')'])) + '_' +
|
||||||
@ -66,17 +70,32 @@ class TestInstance(_test_base.Test):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def token(self):
|
def platform_token(self):
|
||||||
"""
|
"""
|
||||||
Returns the token
|
Returns the platform token
|
||||||
"""
|
"""
|
||||||
if self._token is None:
|
if self._platform_token is None:
|
||||||
self._token = openstack.get_token(self._directory)
|
self._platform_token = openstack.get_token(self._platform_directory)
|
||||||
|
|
||||||
elif self._token.is_expired():
|
elif self._platform_token.is_expired():
|
||||||
self._token = openstack.get_token(self._directory)
|
self._platform_token = openstack.get_token(self._platform_directory)
|
||||||
|
|
||||||
return self._token
|
return self._platform_token
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openstack_token(self):
|
||||||
|
"""
|
||||||
|
Returns the openstack token
|
||||||
|
"""
|
||||||
|
if self._openstack_token is None:
|
||||||
|
self._openstack_token = openstack.get_token(
|
||||||
|
self._openstack_directory)
|
||||||
|
|
||||||
|
elif self._openstack_token.is_expired():
|
||||||
|
self._openstack_token = openstack.get_token(
|
||||||
|
self._openstack_directory)
|
||||||
|
|
||||||
|
return self._openstack_token
|
||||||
|
|
||||||
def _save_debug(self, test_success, test_reason):
|
def _save_debug(self, test_success, test_reason):
|
||||||
"""
|
"""
|
||||||
@ -162,21 +181,24 @@ class TestInstance(_test_base.Test):
|
|||||||
"""
|
"""
|
||||||
Fetch the customer alarms raised
|
Fetch the customer alarms raised
|
||||||
"""
|
"""
|
||||||
self._customer_alarms = fm.get_alarms(self.token).result_data
|
self._customer_alarms = fm.get_alarms(self.platform_token).result_data
|
||||||
|
|
||||||
def _refresh_customer_logs(self):
|
def _refresh_customer_logs(self):
|
||||||
"""
|
"""
|
||||||
Fetch the customer logs
|
Fetch the customer logs
|
||||||
"""
|
"""
|
||||||
self._customer_logs = fm.get_logs(self.token, self.start_datetime,
|
self._customer_logs = fm.get_logs(self.platform_token,
|
||||||
self.end_datetime).result_data
|
self.start_datetime,
|
||||||
|
self.end_datetime).result_data
|
||||||
|
|
||||||
def _refresh_customer_alarm_history(self):
|
def _refresh_customer_alarm_history(self):
|
||||||
"""
|
"""
|
||||||
Fetch the customer alarm history
|
Fetch the customer alarm history
|
||||||
"""
|
"""
|
||||||
self._customer_alarm_history = fm.get_alarm_history(
|
self._customer_alarm_history = fm.get_alarm_history(
|
||||||
self.token, self.start_datetime, self.end_datetime).result_data
|
self.platform_token,
|
||||||
|
self.start_datetime,
|
||||||
|
self.end_datetime).result_data
|
||||||
|
|
||||||
|
|
||||||
class TestInstanceStart(TestInstance):
|
class TestInstanceStart(TestInstance):
|
||||||
@ -202,7 +224,7 @@ class TestInstanceStart(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.start_server(self.token, self.instance_uuid)
|
nova.start_server(self.openstack_token, self.instance_uuid)
|
||||||
return True, "instance is starting"
|
return True, "instance is starting"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -244,7 +266,7 @@ class TestInstanceStop(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.stop_server(self.token, self.instance_uuid)
|
nova.stop_server(self.openstack_token, self.instance_uuid)
|
||||||
return True, "instance is stopping"
|
return True, "instance is stopping"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -295,7 +317,7 @@ class TestInstancePause(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.pause_server(self.token, self.instance_uuid)
|
nova.pause_server(self.openstack_token, self.instance_uuid)
|
||||||
return True, "instance is pausing"
|
return True, "instance is pausing"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -337,7 +359,7 @@ class TestInstanceUnpause(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.unpause_server(self.token, self.instance_uuid)
|
nova.unpause_server(self.openstack_token, self.instance_uuid)
|
||||||
return True, "instance is unpausing"
|
return True, "instance is unpausing"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -379,7 +401,7 @@ class TestInstanceSuspend(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.suspend_server(self.token, self.instance_uuid)
|
nova.suspend_server(self.openstack_token, self.instance_uuid)
|
||||||
return True, "instance is suspending"
|
return True, "instance is suspending"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -424,7 +446,7 @@ class TestInstanceResume(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.resume_server(self.token, self.instance_uuid)
|
nova.resume_server(self.openstack_token, self.instance_uuid)
|
||||||
return True, "instance is resuming"
|
return True, "instance is resuming"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -482,10 +504,10 @@ class TestInstanceReboot(TestInstance):
|
|||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
if self._hard:
|
if self._hard:
|
||||||
nova.reboot_server(self.token, self.instance_uuid,
|
nova.reboot_server(self.openstack_token, self.instance_uuid,
|
||||||
nova.VM_REBOOT_TYPE.HARD)
|
nova.VM_REBOOT_TYPE.HARD)
|
||||||
else:
|
else:
|
||||||
nova.reboot_server(self.token, self.instance_uuid,
|
nova.reboot_server(self.openstack_token, self.instance_uuid,
|
||||||
nova.VM_REBOOT_TYPE.SOFT)
|
nova.VM_REBOOT_TYPE.SOFT)
|
||||||
return True, "instance is rebooting"
|
return True, "instance is rebooting"
|
||||||
|
|
||||||
@ -542,7 +564,8 @@ class TestInstanceRebuild(TestInstance):
|
|||||||
"""
|
"""
|
||||||
# try block added to work around nova bug for now
|
# try block added to work around nova bug for now
|
||||||
try:
|
try:
|
||||||
nova.rebuild_server(self.token, self.instance_uuid, self.instance_name,
|
nova.rebuild_server(self.openstack_token, self.instance_uuid,
|
||||||
|
self.instance_name,
|
||||||
self._instance_data['image']['id'])
|
self._instance_data['image']['id'])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
@ -592,7 +615,8 @@ class TestInstanceLiveMigrate(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.live_migrate_server(self.token, self.instance_uuid, self._to_host)
|
nova.live_migrate_server(self.openstack_token, self.instance_uuid,
|
||||||
|
self._to_host)
|
||||||
return True, "instance is live-migrating"
|
return True, "instance is live-migrating"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -639,7 +663,8 @@ class TestInstanceColdMigrate(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.cold_migrate_server(self.token, self.instance_uuid, self._to_host)
|
nova.cold_migrate_server(self.openstack_token, self.instance_uuid,
|
||||||
|
self._to_host)
|
||||||
return True, "instance is cold-migrating"
|
return True, "instance is cold-migrating"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -686,7 +711,7 @@ class TestInstanceColdMigrateConfirm(TestInstance):
|
|||||||
return False, ("instance needs to be migrated for test, but is not in "
|
return False, ("instance needs to be migrated for test, but is not in "
|
||||||
"the running state")
|
"the running state")
|
||||||
|
|
||||||
nova.cold_migrate_server(self.token, self.instance_uuid)
|
nova.cold_migrate_server(self.openstack_token, self.instance_uuid)
|
||||||
|
|
||||||
max_end_datetime = (self._start_datetime +
|
max_end_datetime = (self._start_datetime +
|
||||||
datetime.timedelta(seconds=self.timeout_secs))
|
datetime.timedelta(seconds=self.timeout_secs))
|
||||||
@ -711,7 +736,8 @@ class TestInstanceColdMigrateConfirm(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.cold_migrate_server_confirm(self.token, self.instance_uuid)
|
nova.cold_migrate_server_confirm(self.openstack_token,
|
||||||
|
self.instance_uuid)
|
||||||
return True, "confirming instance cold-migrate"
|
return True, "confirming instance cold-migrate"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -757,7 +783,7 @@ class TestInstanceColdMigrateRevert(TestInstance):
|
|||||||
return False, ("instance needs to be migrated for test, but is not in "
|
return False, ("instance needs to be migrated for test, but is not in "
|
||||||
"the running state")
|
"the running state")
|
||||||
|
|
||||||
nova.cold_migrate_server(self.token, self.instance_uuid)
|
nova.cold_migrate_server(self.openstack_token, self.instance_uuid)
|
||||||
|
|
||||||
max_end_datetime = (self._start_datetime +
|
max_end_datetime = (self._start_datetime +
|
||||||
datetime.timedelta(seconds=self.timeout_secs))
|
datetime.timedelta(seconds=self.timeout_secs))
|
||||||
@ -782,7 +808,8 @@ class TestInstanceColdMigrateRevert(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.cold_migrate_server_revert(self.token, self.instance_uuid)
|
nova.cold_migrate_server_revert(self.openstack_token,
|
||||||
|
self.instance_uuid)
|
||||||
return True, "reverting instance cold-migrate"
|
return True, "reverting instance cold-migrate"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -820,7 +847,7 @@ class TestInstanceResize(TestInstance):
|
|||||||
Returns the flavor id associated with the given flavor name
|
Returns the flavor id associated with the given flavor name
|
||||||
"""
|
"""
|
||||||
flavor_id = None
|
flavor_id = None
|
||||||
flavors = nova.get_flavors(self.token).result_data
|
flavors = nova.get_flavors(self.openstack_token).result_data
|
||||||
for flavor in flavors['flavors']:
|
for flavor in flavors['flavors']:
|
||||||
if flavor['name'] == flavor_name:
|
if flavor['name'] == flavor_name:
|
||||||
flavor_id = flavor['id']
|
flavor_id = flavor['id']
|
||||||
@ -857,7 +884,8 @@ class TestInstanceResize(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.resize_server(self.token, self.instance_uuid, self._flavor_id)
|
nova.resize_server(self.openstack_token, self.instance_uuid,
|
||||||
|
self._flavor_id)
|
||||||
return True, "instance is resizing"
|
return True, "instance is resizing"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -894,7 +922,7 @@ class TestInstanceResizeConfirm(TestInstance):
|
|||||||
Returns the flavor id associated with the given flavor name
|
Returns the flavor id associated with the given flavor name
|
||||||
"""
|
"""
|
||||||
flavor_id = None
|
flavor_id = None
|
||||||
flavors = nova.get_flavors(self.token).result_data
|
flavors = nova.get_flavors(self.openstack_token).result_data
|
||||||
for flavor in flavors['flavors']:
|
for flavor in flavors['flavors']:
|
||||||
if flavor['name'] == flavor_name:
|
if flavor['name'] == flavor_name:
|
||||||
flavor_id = flavor['id']
|
flavor_id = flavor['id']
|
||||||
@ -928,7 +956,7 @@ class TestInstanceResizeConfirm(TestInstance):
|
|||||||
% (self._name, self.instance_name))
|
% (self._name, self.instance_name))
|
||||||
return False, "no valid flavors given"
|
return False, "no valid flavors given"
|
||||||
|
|
||||||
nova.resize_server(self.token, self.instance_uuid, flavor_id)
|
nova.resize_server(self.openstack_token, self.instance_uuid, flavor_id)
|
||||||
|
|
||||||
max_end_datetime = (self._start_datetime +
|
max_end_datetime = (self._start_datetime +
|
||||||
datetime.timedelta(seconds=self.timeout_secs))
|
datetime.timedelta(seconds=self.timeout_secs))
|
||||||
@ -953,7 +981,7 @@ class TestInstanceResizeConfirm(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.resize_server_confirm(self.token, self.instance_uuid)
|
nova.resize_server_confirm(self.openstack_token, self.instance_uuid)
|
||||||
return True, "confirming instance resize"
|
return True, "confirming instance resize"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
@ -990,7 +1018,7 @@ class TestInstanceResizeRevert(TestInstance):
|
|||||||
Returns the flavor id associated with the given flavor name
|
Returns the flavor id associated with the given flavor name
|
||||||
"""
|
"""
|
||||||
flavor_id = None
|
flavor_id = None
|
||||||
flavors = nova.get_flavors(self.token).result_data
|
flavors = nova.get_flavors(self.openstack_token).result_data
|
||||||
for flavor in flavors['flavors']:
|
for flavor in flavors['flavors']:
|
||||||
if flavor['name'] == flavor_name:
|
if flavor['name'] == flavor_name:
|
||||||
flavor_id = flavor['id']
|
flavor_id = flavor['id']
|
||||||
@ -1024,7 +1052,7 @@ class TestInstanceResizeRevert(TestInstance):
|
|||||||
% (self._name, self.instance_name))
|
% (self._name, self.instance_name))
|
||||||
return False, "no valid flavors given"
|
return False, "no valid flavors given"
|
||||||
|
|
||||||
nova.resize_server(self.token, self.instance_uuid, flavor_id)
|
nova.resize_server(self.openstack_token, self.instance_uuid, flavor_id)
|
||||||
|
|
||||||
max_end_datetime = (self._start_datetime +
|
max_end_datetime = (self._start_datetime +
|
||||||
datetime.timedelta(seconds=self.timeout_secs))
|
datetime.timedelta(seconds=self.timeout_secs))
|
||||||
@ -1049,7 +1077,7 @@ class TestInstanceResizeRevert(TestInstance):
|
|||||||
"""
|
"""
|
||||||
Perform test
|
Perform test
|
||||||
"""
|
"""
|
||||||
nova.resize_server_revert(self.token, self.instance_uuid)
|
nova.resize_server_revert(self.openstack_token, self.instance_uuid)
|
||||||
return True, "reverting instance resize"
|
return True, "reverting instance resize"
|
||||||
|
|
||||||
def _test_passed(self):
|
def _test_passed(self):
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2016 Wind River Systems, Inc.
|
# Copyright (c) 2016-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -17,7 +17,8 @@ class AuthenticationApplication(object):
|
|||||||
self._app = app
|
self._app = app
|
||||||
self._token = None
|
self._token = None
|
||||||
self._config = openstack.config_load()
|
self._config = openstack.config_load()
|
||||||
self._directory = openstack.get_directory(self._config)
|
self._directory = openstack.get_directory(
|
||||||
|
self._config, openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_header_value(env, key, default_value=None):
|
def _get_header_value(env, key, default_value=None):
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -48,7 +48,8 @@ class HeatAPI(object):
|
|||||||
OpenStack Heat Proxy
|
OpenStack Heat Proxy
|
||||||
"""
|
"""
|
||||||
config = openstack.config_load()
|
config = openstack.config_load()
|
||||||
directory = openstack.get_directory(config)
|
directory = openstack.get_directory(
|
||||||
|
config, openstack.SERVICE_CATEGORY.OPENSTACK)
|
||||||
token = openstack.get_token(directory)
|
token = openstack.get_token(directory)
|
||||||
|
|
||||||
url_target_index = pecan.request.url.find('/api/openstack/heat')
|
url_target_index = pecan.request.url.find('/api/openstack/heat')
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
from nfv_vim.api.openstack._config import CONF # noqa: F401
|
from nfv_vim.api.openstack._config import CONF # noqa: F401
|
||||||
from nfv_vim.api.openstack._config import config_load # noqa: F401
|
from nfv_vim.api.openstack._config import config_load # noqa: F401
|
||||||
from nfv_vim.api.openstack._openstack import OPENSTACK_SERVICE # noqa: F401
|
from nfv_vim.api.openstack._openstack import OPENSTACK_SERVICE # noqa: F401
|
||||||
|
from nfv_vim.api.openstack._openstack import PLATFORM_SERVICE # noqa: F401
|
||||||
|
from nfv_vim.api.openstack._openstack import SERVICE_CATEGORY # noqa: F401
|
||||||
from nfv_vim.api.openstack._openstack import get_directory # noqa: F401
|
from nfv_vim.api.openstack._openstack import get_directory # noqa: F401
|
||||||
from nfv_vim.api.openstack._openstack import get_token # noqa: F401
|
from nfv_vim.api.openstack._openstack import get_token # noqa: F401
|
||||||
from nfv_vim.api.openstack._openstack import validate_token # noqa: F401
|
from nfv_vim.api.openstack._openstack import validate_token # noqa: F401
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -35,10 +35,6 @@ def config_load():
|
|||||||
nfvi_config.read(config.CONF['nfvi']['config_file'])
|
nfvi_config.read(config.CONF['nfvi']['config_file'])
|
||||||
CONF = nfvi_config.as_dict()
|
CONF = nfvi_config.as_dict()
|
||||||
|
|
||||||
password = CONF['openstack'].get('password', None)
|
|
||||||
if password is None:
|
|
||||||
CONF['openstack']['password'] = None
|
|
||||||
|
|
||||||
region_name = CONF['openstack'].get('region_name', None)
|
region_name = CONF['openstack'].get('region_name', None)
|
||||||
if region_name is None:
|
if region_name is None:
|
||||||
CONF['openstack']['region_name'] = "RegionOne"
|
CONF['openstack']['region_name'] = "RegionOne"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -16,6 +16,36 @@ from nfv_common.helpers import Singleton
|
|||||||
DLOG = debug.debug_get_logger('nfv_vim.api.openstack')
|
DLOG = debug.debug_get_logger('nfv_vim.api.openstack')
|
||||||
|
|
||||||
|
|
||||||
|
@six.add_metaclass(Singleton)
|
||||||
|
class ServiceCategory(Constants):
|
||||||
|
"""
|
||||||
|
Service Category Constants
|
||||||
|
"""
|
||||||
|
PLATFORM = Constant('platform')
|
||||||
|
OPENSTACK = Constant('openstack')
|
||||||
|
|
||||||
|
|
||||||
|
# Service Category Constant
|
||||||
|
SERVICE_CATEGORY = ServiceCategory()
|
||||||
|
|
||||||
|
|
||||||
|
@six.add_metaclass(Singleton)
|
||||||
|
class PlatformServices(Constants):
|
||||||
|
"""
|
||||||
|
Platform Services Constants
|
||||||
|
"""
|
||||||
|
GUEST = Constant('guest')
|
||||||
|
KEYSTONE = Constant('keystone')
|
||||||
|
MTC = Constant('mtc')
|
||||||
|
SYSINV = Constant('sysinv')
|
||||||
|
PATCHING = Constant('patching')
|
||||||
|
FM = Constant('fm')
|
||||||
|
|
||||||
|
|
||||||
|
# Platform Services Constant
|
||||||
|
PLATFORM_SERVICE = PlatformServices()
|
||||||
|
|
||||||
|
|
||||||
@six.add_metaclass(Singleton)
|
@six.add_metaclass(Singleton)
|
||||||
class OpenStackServices(Constants):
|
class OpenStackServices(Constants):
|
||||||
"""
|
"""
|
||||||
@ -24,14 +54,10 @@ class OpenStackServices(Constants):
|
|||||||
CEILOMETER = Constant('ceilometer')
|
CEILOMETER = Constant('ceilometer')
|
||||||
CINDER = Constant('cinder')
|
CINDER = Constant('cinder')
|
||||||
GLANCE = Constant('glance')
|
GLANCE = Constant('glance')
|
||||||
GUEST = Constant('guest')
|
|
||||||
KEYSTONE = Constant('keystone')
|
KEYSTONE = Constant('keystone')
|
||||||
MTC = Constant('mtc')
|
|
||||||
NEUTRON = Constant('neutron')
|
NEUTRON = Constant('neutron')
|
||||||
NOVA = Constant('nova')
|
NOVA = Constant('nova')
|
||||||
SYSINV = Constant('sysinv')
|
|
||||||
HEAT = Constant('heat')
|
HEAT = Constant('heat')
|
||||||
FM = Constant('fm')
|
|
||||||
|
|
||||||
|
|
||||||
# OpenStack Services Constant
|
# OpenStack Services Constant
|
||||||
@ -90,9 +116,12 @@ class Directory(object):
|
|||||||
"""
|
"""
|
||||||
Directory
|
Directory
|
||||||
"""
|
"""
|
||||||
def __init__(self, auth_protocol, auth_host, auth_port, auth_project,
|
def __init__(self, service_category, keyring_service, auth_protocol,
|
||||||
|
auth_host, auth_port, auth_project,
|
||||||
auth_username, auth_password, auth_user_domain_name,
|
auth_username, auth_password, auth_user_domain_name,
|
||||||
auth_project_domain_name, auth_uri=None):
|
auth_project_domain_name, auth_uri=None):
|
||||||
|
self._service_category = service_category
|
||||||
|
self._keyring_service = keyring_service
|
||||||
self._auth_protocol = auth_protocol
|
self._auth_protocol = auth_protocol
|
||||||
self._auth_host = auth_host
|
self._auth_host = auth_host
|
||||||
self._auth_port = auth_port
|
self._auth_port = auth_port
|
||||||
@ -104,6 +133,20 @@ class Directory(object):
|
|||||||
self._auth_project_domain_name = auth_project_domain_name
|
self._auth_project_domain_name = auth_project_domain_name
|
||||||
self._entries = dict()
|
self._entries = dict()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def service_category(self):
|
||||||
|
"""
|
||||||
|
Returns the service category
|
||||||
|
"""
|
||||||
|
return self._service_category
|
||||||
|
|
||||||
|
@property
|
||||||
|
def keyring_service(self):
|
||||||
|
"""
|
||||||
|
Returns the keyring service
|
||||||
|
"""
|
||||||
|
return self._keyring_service
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def auth_protocol(self):
|
def auth_protocol(self):
|
||||||
"""
|
"""
|
||||||
@ -271,7 +314,6 @@ class Token(object):
|
|||||||
for endpoint in catalog['endpoints']:
|
for endpoint in catalog['endpoints']:
|
||||||
if (endpoint['region'] == region_name and
|
if (endpoint['region'] == region_name and
|
||||||
endpoint['interface'] == endpoint_type):
|
endpoint['interface'] == endpoint_type):
|
||||||
print("HERE HERE HERE")
|
|
||||||
return endpoint['url']
|
return endpoint['url']
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -9,6 +9,8 @@ import urllib2
|
|||||||
from nfv_common import debug
|
from nfv_common import debug
|
||||||
|
|
||||||
from nfv_vim.api.openstack._objects import OPENSTACK_SERVICE
|
from nfv_vim.api.openstack._objects import OPENSTACK_SERVICE
|
||||||
|
from nfv_plugins.nfvi_plugins.openstack.objects import PLATFORM_SERVICE
|
||||||
|
from nfv_plugins.nfvi_plugins.openstack.objects import SERVICE_CATEGORY
|
||||||
from nfv_vim.api.openstack._objects import Directory
|
from nfv_vim.api.openstack._objects import Directory
|
||||||
from nfv_vim.api.openstack._objects import Token
|
from nfv_vim.api.openstack._objects import Token
|
||||||
|
|
||||||
@ -17,7 +19,7 @@ DLOG = debug.debug_get_logger('nfv_vim.api.openstack')
|
|||||||
|
|
||||||
def validate_token(directory, admin_token, token_id):
|
def validate_token(directory, admin_token, token_id):
|
||||||
"""
|
"""
|
||||||
Ask OpenStack if a token is valid
|
Ask Keystone if a token is valid
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if directory.auth_uri is None:
|
if directory.auth_uri is None:
|
||||||
@ -89,7 +91,8 @@ def get_token(directory):
|
|||||||
|
|
||||||
if directory.auth_password is None:
|
if directory.auth_password is None:
|
||||||
import keyring
|
import keyring
|
||||||
password = keyring.get_password('CGCS', directory.auth_username)
|
password = keyring.get_password(directory.keyring_service,
|
||||||
|
directory.auth_username)
|
||||||
else:
|
else:
|
||||||
password = directory.auth_password
|
password = directory.auth_password
|
||||||
|
|
||||||
@ -131,27 +134,38 @@ def get_token(directory):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_directory(config):
|
def get_directory(config, service_category):
|
||||||
"""
|
"""
|
||||||
Get directory information from the given configuration
|
Get directory information from the given configuration for the given
|
||||||
|
service category.
|
||||||
"""
|
"""
|
||||||
openstack_info = config.get('openstack', None)
|
if SERVICE_CATEGORY.PLATFORM == service_category:
|
||||||
if openstack_info is not None:
|
services = PLATFORM_SERVICE
|
||||||
auth_uri = openstack_info.get('authorization_uri', None)
|
elif SERVICE_CATEGORY.OPENSTACK == service_category:
|
||||||
|
services = OPENSTACK_SERVICE
|
||||||
|
else:
|
||||||
|
raise ValueError("service_category is invalid: %s" % service_category)
|
||||||
|
|
||||||
|
auth_info = config.get(service_category, None)
|
||||||
|
if auth_info is not None:
|
||||||
|
auth_uri = auth_info.get('authorization_uri', None)
|
||||||
else:
|
else:
|
||||||
auth_uri = None
|
auth_uri = None
|
||||||
|
|
||||||
directory = Directory(config['openstack']['authorization_protocol'],
|
directory = Directory(
|
||||||
config['openstack']['authorization_ip'],
|
service_category,
|
||||||
config['openstack']['authorization_port'],
|
config[service_category]['keyring_service'],
|
||||||
config['openstack']['tenant'],
|
config[service_category]['authorization_protocol'],
|
||||||
config['openstack']['username'],
|
config[service_category]['authorization_ip'],
|
||||||
config['openstack']['password'],
|
config[service_category]['authorization_port'],
|
||||||
config['openstack']['user_domain_name'],
|
config[service_category]['tenant'],
|
||||||
config['openstack']['project_domain_name'],
|
config[service_category]['username'],
|
||||||
auth_uri)
|
config[service_category].get('password', None),
|
||||||
|
config[service_category]['user_domain_name'],
|
||||||
|
config[service_category]['project_domain_name'],
|
||||||
|
auth_uri)
|
||||||
|
|
||||||
for service in OPENSTACK_SERVICE:
|
for service in services:
|
||||||
service_info = config.get(service, None)
|
service_info = config.get(service, None)
|
||||||
if service_info is not None:
|
if service_info is not None:
|
||||||
region_name = service_info.get('region_name', None)
|
region_name = service_info.get('region_name', None)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
# Copyright (c) 2015-2018 Wind River Systems, Inc.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#
|
#
|
||||||
@ -597,7 +597,8 @@ class SimpleHttpServer(object):
|
|||||||
self.server_thread = None
|
self.server_thread = None
|
||||||
|
|
||||||
config.load(nfvi_config['config_file'])
|
config.load(nfvi_config['config_file'])
|
||||||
_directory = openstack.get_directory(config)
|
_directory = openstack.get_directory(config,
|
||||||
|
openstack.SERVICE_CATEGORY.PLATFORM)
|
||||||
_vim_api_ip = vim_api_config['host']
|
_vim_api_ip = vim_api_config['host']
|
||||||
if ':' in _vim_api_ip:
|
if ':' in _vim_api_ip:
|
||||||
# Wrap IPv6 address for use in URLs
|
# Wrap IPv6 address for use in URLs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user