Raf Smeets 19d6578732 CLOUDSTACK-10303 : Refactor test data to nuage_test_data.py runnable against simulator (#2483)
* Refactored nuage tests

Added simulator support for ConfigDrive
Allow all nuage tests to run against simulator
Refactored nuage tests to remove code duplication

* Move test data from test_data.py to nuage_test_data.py

Nuage test data is now contained in nuage_test_data.py instead of
test_data.py
Removed all nuage test data from nuage_test_data.py

* CLOUD-1252 fixed cleanup of vpc tier network

* Import libVSD into the codebase

* CLOUDSTACK-1253: Volumes are not expunged in simulator

* Fixed some merge issues in test_nuage_vsp_mngd_subnets test

* Implement GetVolumeStatsCommand in Simulator

* Add vspk as marvin nuagevsp dependency, after removing libVSD dependency

* correct libVSD files for license purposes

pep8 pyflakes compliant
2018-03-14 17:17:36 +05:30

136 lines
4.6 KiB
Python

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import bambou
import importlib
class ApiClient(object):
"""
This class provides utilities to instantiate an API client using vspk.
Args:
address (str): ip address or hostname where the VSD API is exposed.
user (str): username to authenticate on the API.
password (str): password to authenticate on the API.
enterprise (str): VSD organization to use to authenticate on the API.
version (str): version of the API to use.
"""
def __init__(self, address, port='8443', user='csproot',
password='csproot', enterprise='csp', version=None):
if not version:
version = '5.0'
self.url = 'https://{}:{}'.format(address, port)
self.version = version
self.user = user
self.password = password
self.enterprise = enterprise
self.last_pushes = []
self.session = None
@staticmethod
def import_vspk(version):
"""
Return the vspk module corresponding to a given version of the API.
Args:
version (str): version of the API
"""
version = 'v{}'.format(str(version).replace('.', '_'))
try:
vsdk = importlib.import_module('vspk.%s' % version)
except:
vsdk = importlib.import_module('vspk.vsdk.%s' % version)
return vsdk
def import_vsdenvs(self):
"""
Return the root class a `vsdenvs`.
"""
if not self.session:
raise Exception('You must have an active session to use vsdenvs')
self.vsdenvs = __import__('vsdenvs', globals(), locals(), [], -1)
self.vsdenvs.NUCsprootEnvironment.instance = self.session.user
def new_session(self):
"""
Start a new API session via vspk an return the corresponding
`vspk.NUVSDSession` object. Note that this object is also exposed as
`self.session`
"""
vspk = self.import_vspk(self.version)
self.session = vspk.NUVSDSession(
username=self.user,
password=self.password,
enterprise=self.enterprise,
api_url=self.url)
self.session.start()
return self.session
def start_push_center(self, callback=None):
"""
Add a vspk push center to the current session.
"""
if not callback:
callback = self.default_callback
self.session.push_center.add_delegate(callback)
self.session.push_center.start()
def stop_push_center(self, callback=None):
"""
Stop the vpsk push center for the current session.
"""
self.session.push_center.stop()
def default_callback(self, data):
"""
Default callback for the push center. It just stores the new event in
a LILO queue exposed as `self.last_pushe`
"""
self.last_pushes.append(data)
# keep only the last 10 events
if len(self.last_pushes) == 100:
del self.last_pushes[-1]
def __call__(self):
if not self.session:
return self.new_session()
return self.session
def add_license(self):
"""
Add a license to the VSD
"""
vspk = self.import_vspk(self.version)
self.session.license = vspk.NULicense(license=self.license)
try:
self.session.user.create_child(self.session.license)
except bambou.exceptions.BambouHTTPError:
pass
else:
self.session.user.add_child(self.session.license)
def delete_license(self):
"""
Delete license on the VSD
"""
self.session.user.licenses.fetch()
for license in self.session.user.licenses:
try:
license.delete()
except bambou.exceptions.BambouHTTPError:
pass