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
changes/70/607570/1
Bart Wensley 5 years ago
parent 4873ce0772
commit e547b8c136

@ -3,12 +3,25 @@
#
# 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]
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
[keystone]
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
#
@ -33,7 +33,3 @@ def load(config_file):
config = Config()
config.read(config_file)
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
#
@ -569,7 +569,8 @@ class NFVIBlockStorageAPI(nfvi.api.v1.NFVIBlockStorageAPI):
Initialize the plugin
"""
config.load(config_file)
self._directory = openstack.get_directory(config)
self._directory = openstack.get_directory(
config, openstack.SERVICE_CATEGORY.OPENSTACK)
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
#
@ -2902,7 +2902,8 @@ class NFVIComputeAPI(nfvi.api.v1.NFVIComputeAPI):
Initialize the plugin
"""
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(
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
#
@ -850,7 +850,8 @@ class NFVIGuestAPI(nfvi.api.v1.NFVIGuestAPI):
Initialize the plugin
"""
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(
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
#
@ -114,7 +114,8 @@ class NFVIIdentityAPI(nfvi.api.v1.NFVIIdentityAPI):
Initialize the plugin
"""
config.load(config_file)
self._directory = openstack.get_directory(config)
self._directory = openstack.get_directory(
config, openstack.SERVICE_CATEGORY.OPENSTACK)
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
#
@ -591,7 +591,8 @@ class NFVIImageAPI(nfvi.api.v1.NFVIImageAPI):
Initialize the plugin
"""
config.load(config_file)
self._directory = openstack.get_directory(config)
self._directory = openstack.get_directory(
config, openstack.SERVICE_CATEGORY.OPENSTACK)
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
#
@ -759,7 +759,8 @@ class NFVINetworkAPI(nfvi.api.v1.NFVINetworkAPI):
Initialize the plugin
"""
config.load(config_file)
self._directory = openstack.get_directory(config)
self._directory = openstack.get_directory(
config, openstack.SERVICE_CATEGORY.OPENSTACK)
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
#
@ -268,7 +268,8 @@ class NFVISwMgmtAPI(nfvi.api.v1.NFVISwMgmtAPI):
Initialize the plugin
"""
config.load(config_file)
self._directory = openstack.get_directory(config)
self._directory = openstack.get_directory(
config, openstack.SERVICE_CATEGORY.PLATFORM)
def finalize(self):
"""

@ -6,7 +6,7 @@
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
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.FM)
url = token.get_service_url(PLATFORM_SERVICE.FM)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.FM)
url = token.get_service_url(PLATFORM_SERVICE.FM)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.FM)
url = token.get_service_url(PLATFORM_SERVICE.FM)
if url is None:
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
#
@ -11,7 +11,7 @@ from nfv_common.helpers import Constant
from nfv_common.helpers import Constants
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
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -109,7 +109,7 @@ def host_services_enable(token, host_uuid, host_name):
"""
Enable host services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -132,7 +132,7 @@ def host_services_disable(token, host_uuid, host_name):
"""
Disable host services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -155,7 +155,7 @@ def host_services_delete(token, host_uuid):
"""
Delete host services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -173,7 +173,7 @@ def host_services_query(token, host_uuid, host_name):
"""
Query host services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -196,7 +196,7 @@ def guest_services_create(token, instance_uuid, host_name, services):
"""
Create guest services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -220,7 +220,7 @@ def guest_services_set(token, instance_uuid, host_name, services):
"""
Set guest services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -244,7 +244,7 @@ def guest_services_delete(token, instance_uuid):
"""
Delete guest services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -262,7 +262,7 @@ def guest_services_query(token, instance_uuid):
"""
Query guest services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
raise ValueError("OpenStack Guest URL is invalid")
@ -304,7 +304,7 @@ def guest_services_notify(token, instance_uuid, host_name, action):
"""
Notify guest services
"""
url = token.get_service_url(OPENSTACK_SERVICE.GUEST)
url = token.get_service_url(PLATFORM_SERVICE.GUEST)
if url is None:
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
#
@ -11,7 +11,7 @@ from nfv_common.helpers import Constant
from nfv_common.helpers import Constants
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
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.MTC)
url = token.get_service_url(PLATFORM_SERVICE.MTC)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.MTC)
url = token.get_service_url(PLATFORM_SERVICE.MTC)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.MTC)
url = token.get_service_url(PLATFORM_SERVICE.MTC)
if url is None:
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')
@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)
class OpenStackServices(Constants):
"""
@ -24,15 +54,10 @@ class OpenStackServices(Constants):
CEILOMETER = Constant('ceilometer')
CINDER = Constant('cinder')
GLANCE = Constant('glance')
GUEST = Constant('guest')
KEYSTONE = Constant('keystone')
MTC = Constant('mtc')
NEUTRON = Constant('neutron')
NOVA = Constant('nova')
SYSINV = Constant('sysinv')
HEAT = Constant('heat')
PATCHING = Constant('patching')
FM = Constant('fm')
# OpenStack Services Constant
@ -91,9 +116,12 @@ class Directory(object):
"""
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_project_domain_name, auth_uri=None):
self._service_category = service_category
self._keyring_service = keyring_service
self._auth_protocol = auth_protocol
self._auth_host = auth_host
self._auth_port = auth_port
@ -105,6 +133,20 @@ class Directory(object):
self._auth_project_domain_name = auth_project_domain_name
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
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
#
@ -9,6 +9,8 @@ import urllib2
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.objects import SERVICE_CATEGORY
from nfv_plugins.nfvi_plugins.openstack.objects import Directory
from nfv_plugins.nfvi_plugins.openstack.objects import Token
@ -33,7 +35,8 @@ def get_token(directory):
if directory.auth_password is None:
import keyring
password = keyring.get_password('CGCS', directory.auth_username)
password = keyring.get_password(directory.keyring_service,
directory.auth_username)
else:
password = directory.auth_password
@ -75,27 +78,38 @@ def get_token(directory):
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 openstack_info is not None:
auth_uri = openstack_info.get('authorization_uri', None)
if SERVICE_CATEGORY.PLATFORM == service_category:
services = PLATFORM_SERVICE
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:
auth_uri = None
directory = Directory(config.CONF['openstack']['authorization_protocol'],
config.CONF['openstack']['authorization_ip'],
config.CONF['openstack']['authorization_port'],
config.CONF['openstack']['tenant'],
config.CONF['openstack']['username'],
config.CONF['openstack']['password'],
config.CONF['openstack']['user_domain_name'],
config.CONF['openstack']['project_domain_name'],
auth_uri)
for service in OPENSTACK_SERVICE:
directory = Directory(
service_category,
config.CONF[service_category]['keyring_service'],
config.CONF[service_category]['authorization_protocol'],
config.CONF[service_category]['authorization_ip'],
config.CONF[service_category]['authorization_port'],
config.CONF[service_category]['tenant'],
config.CONF[service_category]['username'],
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 services:
service_info = config.CONF.get(service, None)
if service_info is not 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
#
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
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
"""
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:
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
"""
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:
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
"""
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:
raise ValueError("OpenStack Patching URL is invalid")

@ -6,7 +6,7 @@
import json
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
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
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -31,7 +31,7 @@ def get_hosts(token):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -45,7 +45,7 @@ def get_host(token, host_uuid):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -59,7 +59,7 @@ def get_upgrade(token):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -73,7 +73,7 @@ def upgrade_start(token):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -95,7 +95,7 @@ def upgrade_activate(token):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -122,7 +122,7 @@ def upgrade_complete(token):
"""
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:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
raise ValueError("OpenStack SysInv URL is invalid")
@ -319,7 +319,7 @@ def lock_host(token, host_uuid):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -346,7 +346,7 @@ def unlock_host(token, host_uuid):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -373,7 +373,7 @@ def reboot_host(token, host_uuid):
"""
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:
raise ValueError("OpenStack SysInv URL is invalid")
@ -400,7 +400,7 @@ def upgrade_host(token, host_uuid):
"""
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:
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
"""
url = token.get_service_url(OPENSTACK_SERVICE.SYSINV)
url = token.get_service_url(PLATFORM_SERVICE.SYSINV)
if url is None:
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
#
@ -460,8 +460,12 @@ def do_unit_tests(test_set=None, rest_api_debug=False, test_config=None):
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
directory = openstack.get_directory(config)
token = openstack.get_token(directory)
platform_directory = openstack.get_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:
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)
if 'keystone' in test_set:
keystone_unit_tests(token, test_config)
keystone_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'ceilometer' in test_set:
ceilometer_unit_tests(token, test_config)
ceilometer_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'sysinv' in test_set:
sysinv_unit_tests(token, test_config)
sysinv_unit_tests(platform_token, test_config)
print("-" * 80)
if 'glance' in test_set:
glance_unit_tests(token, test_config)
glance_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'cinder' in test_set:
cinder_unit_tests(token, test_config)
cinder_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'neutron' in test_set:
neutron_unit_tests(token, test_config)
neutron_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'nova' in test_set:
nova_unit_tests(token, test_config)
nova_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'heat' in test_set:
heat_unit_tests(token, test_config)
heat_unit_tests(openstack_token, test_config)
print("-" * 80)
if 'guest' in test_set:
guest_unit_tests(token, test_config)
guest_unit_tests(platform_token, test_config)
print("-" * 80)
if 'rest-api' in test_set:
rest_api_unit_tests(token, test_config)
rest_api_unit_tests(platform_token, test_config)
print("-" * 80)

@ -12,6 +12,16 @@ tar_file=/var/log/nfv-vim-test.tar.gz
config_file=debug.ini
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]
username=admin
tenant=admin
@ -20,6 +30,7 @@ authorization_ip=192.168.204.2
authorization_port=5000
user_domain_name=Default
project_domain_name=Default
keyring_service=CGCS
[keystone]
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
#
@ -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 neutron
directory = openstack.get_directory(config)
directory = openstack.get_directory(config,
openstack.SERVICE_CATEGORY.OPENSTACK)
token = openstack.get_token(directory)
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 neutron
directory = openstack.get_directory(config)
directory = openstack.get_directory(config,
openstack.SERVICE_CATEGORY.OPENSTACK)
token = openstack.get_token(directory)
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
#
@ -24,7 +24,8 @@ def _get_token():
global _directory, _token
if _directory is None:
_directory = openstack.get_directory(config)
_directory = openstack.get_directory(config,
openstack.SERVICE_CATEGORY.PLATFORM)
if _token is None:
_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
#
@ -26,7 +26,8 @@ def _get_token():
global _directory, _token
if _directory is None:
_directory = openstack.get_directory(config)
_directory = openstack.get_directory(config,
openstack.SERVICE_CATEGORY.OPENSTACK)
if _token is None:
_token = openstack.get_token(_directory)

@ -35,11 +35,15 @@ class TestHost(_test_base.Test):
self._instance_names = instance_names
self._host_data = None
self._instances = dict()
self._token = None
self._platform_token = None
self._openstack_token = None
self._customer_alarms = None
self._customer_logs = 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(' ', '_')
self._output_dir = (config.CONF['test-output']['dir'] + '/' +
name.translate(None, ''.join(['(', ')'])) + '_' +
@ -68,17 +72,32 @@ class TestHost(_test_base.Test):
return _hosts.host_get_id(self._host_data)
@property
def token(self):
def platform_token(self):
"""
Returns the token
Returns the platform token
"""
if self._token is None:
self._token = openstack.get_token(self._directory)
if self._platform_token is None:
self._platform_token = openstack.get_token(self._platform_directory)
elif self._token.is_expired():
self._token = openstack.get_token(self._directory)
elif self._platform_token.is_expired():
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):
"""
@ -176,7 +195,7 @@ class TestHost(_test_base.Test):
"""
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
@ -184,15 +203,18 @@ class TestHost(_test_base.Test):
"""
Fetch the customer logs
"""
self._customer_logs = fm.get_logs(self.token, self.start_datetime,
self.end_datetime).result_data
self._customer_logs = fm.get_logs(self.platform_token,
self.start_datetime,
self.end_datetime).result_data
def _refresh_customer_alarm_history(self):
"""
Fetch the customer 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):
@ -226,7 +248,7 @@ class TestHostLock(TestHost):
success, reason = _instances.instance_on_host(instance_data,
self.host_name)
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)
max_end_datetime = (self._start_datetime +
@ -262,7 +284,7 @@ class TestHostLock(TestHost):
"""
Perform the test
"""
sysinv.lock_host(self.token, self.host_id)
sysinv.lock_host(self.platform_token, self.host_id)
return True, "host locking"
def _test_passed(self):
@ -329,7 +351,7 @@ class TestHostUnlock(TestHost):
"""
Perform the test
"""
sysinv.unlock_host(self.token, self.host_id)
sysinv.unlock_host(self.platform_token, self.host_id)
return True, "host unlocking"
def _test_passed(self):

@ -31,11 +31,15 @@ class TestInstance(_test_base.Test):
super(TestInstance, self).__init__(name, timeout_secs)
self._instance_name = instance_name
self._instance_data = None
self._token = None
self._platform_token = None
self._openstack_token = None
self._customer_alarms = None
self._customer_logs = 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(' ', '_')
self._output_dir = (config.CONF['test-output']['dir'] + '/' +
name.translate(None, ''.join(['(', ')'])) + '_' +
@ -66,17 +70,32 @@ class TestInstance(_test_base.Test):
return None
@property
def token(self):
def platform_token(self):
"""
Returns the token
Returns the platform token
"""
if self._token is None:
self._token = openstack.get_token(self._directory)
if self._platform_token is None:
self._platform_token = openstack.get_token(self._platform_directory)
elif self._token.is_expired():
self._token = openstack.get_token(self._directory)
elif self._platform_token.is_expired():
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):
"""
@ -162,21 +181,24 @@ class TestInstance(_test_base.Test):
"""
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):
"""
Fetch the customer logs
"""
self._customer_logs = fm.get_logs(self.token, self.start_datetime,
self.end_datetime).result_data
self._customer_logs = fm.get_logs(self.platform_token,
self.start_datetime,
self.end_datetime).result_data
def _refresh_customer_alarm_history(self):
"""
Fetch the customer 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):
@ -202,7 +224,7 @@ class TestInstanceStart(TestInstance):
"""
Perform test
"""
nova.start_server(self.token, self.instance_uuid)
nova.start_server(self.openstack_token, self.instance_uuid)
return True, "instance is starting"
def _test_passed(self):
@ -244,7 +266,7 @@ class TestInstanceStop(TestInstance):
"""
Perform test
"""
nova.stop_server(self.token, self.instance_uuid)
nova.stop_server(self.openstack_token, self.instance_uuid)
return True, "instance is stopping"
def _test_passed(self):
@ -295,7 +317,7 @@ class TestInstancePause(TestInstance):
"""
Perform test
"""
nova.pause_server(self.token, self.instance_uuid)
nova.pause_server(self.openstack_token, self.instance_uuid)
return True, "instance is pausing"
def _test_passed(self):
@ -337,7 +359,7 @@ class TestInstanceUnpause(TestInstance):
"""
Perform test
"""
nova.unpause_server(self.token, self.instance_uuid)
nova.unpause_server(self.openstack_token, self.instance_uuid)
return True, "instance is unpausing"
def _test_passed(self):
@ -379,7 +401,7 @@ class TestInstanceSuspend(TestInstance):
"""
Perform test
"""
nova.suspend_server(self.token, self.instance_uuid)
nova.suspend_server(self.openstack_token, self.instance_uuid)
return True, "instance is suspending"
def _test_passed(self):
@ -424,7 +446,7 @@ class TestInstanceResume(TestInstance):
"""
Perform test
"""
nova.resume_server(self.token, self.instance_uuid)
nova.resume_server(self.openstack_token, self.instance_uuid)
return True, "instance is resuming"
def _test_passed(self):
@ -482,10 +504,10 @@ class TestInstanceReboot(TestInstance):
Perform test
"""
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)
else:
nova.reboot_server(self.token, self.instance_uuid,
nova.reboot_server(self.openstack_token, self.instance_uuid,
nova.VM_REBOOT_TYPE.SOFT)
return True, "instance is rebooting"
@ -542,7 +564,8 @@ class TestInstanceRebuild(TestInstance):
"""
# try block added to work around nova bug for now
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'])