summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/utils/nova_utils.py
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-07-06 13:09:46 -0600
committerspisarski <s.pisarski@cablelabs.com>2017-07-06 13:18:37 -0600
commit8bd26c2d75108037430fde83ea57ab0b964f0058 (patch)
treebc7a2985000041e9c46eaec46e8aec28e45ca355 /snaps/openstack/utils/nova_utils.py
parent5616cafabcc5f8ab75ee6fcaefa87e3fbd126ce9 (diff)
Created domain object for flavors.
OpenStack implementation details were leaking out into the flavor creator. JIRA: SNAPS-111 Change-Id: I59a77d02e30065a7f4560e74295b2084a83686df Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/openstack/utils/nova_utils.py')
-rw-r--r--snaps/openstack/utils/nova_utils.py97
1 files changed, 81 insertions, 16 deletions
diff --git a/snaps/openstack/utils/nova_utils.py b/snaps/openstack/utils/nova_utils.py
index bab0533..d6f9a19 100644
--- a/snaps/openstack/utils/nova_utils.py
+++ b/snaps/openstack/utils/nova_utils.py
@@ -21,6 +21,8 @@ from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from novaclient.client import Client
from novaclient.exceptions import NotFound
+
+from snaps.domain.flavor import Flavor
from snaps.domain.vm_inst import VmInst
from snaps.openstack.utils import keystone_utils, glance_utils, neutron_utils
@@ -290,12 +292,45 @@ def delete_vm_instance(nova, vm_inst):
nova.servers.delete(vm_inst.id)
-def get_flavor_by_name(nova, name):
+def get_os_flavor(nova, flavor):
"""
- Returns a flavor by name
+ Returns to OpenStack flavor object by name
:param nova: the Nova client
- :param name: the flavor name to return
- :return: the OpenStack flavor object or None if not exists
+ :param flavor: the SNAPS flavor domain object
+ :return: the OpenStack Flavor object
+ """
+ try:
+ return nova.flavors.get(flavor.id)
+ except NotFound:
+ return None
+
+
+def get_flavor(nova, flavor):
+ """
+ Returns to OpenStack flavor object by name
+ :param nova: the Nova client
+ :param flavor: the SNAPS flavor domain object
+ :return: the SNAPS Flavor domain object
+ """
+ os_flavor = get_os_flavor(nova, flavor)
+ if os_flavor:
+ return Flavor(
+ name=os_flavor.name, id=os_flavor.id, ram=os_flavor.ram,
+ disk=os_flavor.disk, vcpus=os_flavor.vcpus,
+ ephemeral=os_flavor.ephemeral, swap=os_flavor.swap,
+ rxtx_factor=os_flavor.rxtx_factor, is_public=os_flavor.is_public)
+ try:
+ return nova.flavors.get(flavor.id)
+ except NotFound:
+ return None
+
+
+def get_os_flavor_by_name(nova, name):
+ """
+ Returns to OpenStack flavor object by name
+ :param nova: the Nova client
+ :param name: the name of the flavor to query
+ :return: OpenStack flavor object
"""
try:
return nova.flavors.find(name=name)
@@ -303,31 +338,61 @@ def get_flavor_by_name(nova, name):
return None
+def get_flavor_by_name(nova, name):
+ """
+ Returns a flavor by name
+ :param nova: the Nova client
+ :param name: the flavor name to return
+ :return: the SNAPS flavor domain object or None if not exists
+ """
+ os_flavor = get_os_flavor_by_name(nova, name)
+ if os_flavor:
+ return Flavor(
+ name=os_flavor.name, id=os_flavor.id, ram=os_flavor.ram,
+ disk=os_flavor.disk, vcpus=os_flavor.vcpus,
+ ephemeral=os_flavor.ephemeral, swap=os_flavor.swap,
+ rxtx_factor=os_flavor.rxtx_factor, is_public=os_flavor.is_public)
+
+
def create_flavor(nova, flavor_settings):
"""
Creates and returns and OpenStack flavor object
:param nova: the Nova client
:param flavor_settings: the flavor settings
- :return: the Flavor
+ :return: the SNAPS flavor domain object
"""
- return nova.flavors.create(name=flavor_settings.name,
- flavorid=flavor_settings.flavor_id,
- ram=flavor_settings.ram,
- vcpus=flavor_settings.vcpus,
- disk=flavor_settings.disk,
- ephemeral=flavor_settings.ephemeral,
- swap=flavor_settings.swap,
- rxtx_factor=flavor_settings.rxtx_factor,
- is_public=flavor_settings.is_public)
+ os_flavor = nova.flavors.create(
+ name=flavor_settings.name, flavorid=flavor_settings.flavor_id,
+ ram=flavor_settings.ram, vcpus=flavor_settings.vcpus,
+ disk=flavor_settings.disk, ephemeral=flavor_settings.ephemeral,
+ swap=flavor_settings.swap, rxtx_factor=flavor_settings.rxtx_factor,
+ is_public=flavor_settings.is_public)
+ return Flavor(
+ name=os_flavor.name, id=os_flavor.id, ram=os_flavor.ram,
+ disk=os_flavor.disk, vcpus=os_flavor.vcpus,
+ ephemeral=os_flavor.ephemeral, swap=os_flavor.swap,
+ rxtx_factor=os_flavor.rxtx_factor, is_public=os_flavor.is_public)
def delete_flavor(nova, flavor):
"""
Deletes a flavor
:param nova: the Nova client
- :param flavor: the OpenStack flavor object
+ :param flavor: the SNAPS flavor domain object
+ """
+ nova.flavors.delete(flavor.id)
+
+
+def set_flavor_keys(nova, flavor, metadata):
+ """
+ Sets metadata on the flavor
+ :param nova: the Nova client
+ :param flavor: the SNAPS flavor domain object
+ :param metadata: the metadata to set
"""
- nova.flavors.delete(flavor)
+ os_flavor = get_os_flavor(nova, flavor)
+ if os_flavor:
+ os_flavor.set_keys(metadata)
def add_security_group(nova, vm, security_group_name):