tuskar-ui/tuskar_ui/api/flavor.py
Lennart Regebro 36f030793e List deployed flavors
The list of flavors that are deployed actually lists flavors that are
not deployed.

Change-Id: I8bba731d4172a1738b6c1c94965f6b152b55cff9
2014-09-23 12:17:07 +02:00

117 lines
3.7 KiB
Python

# Licensed 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 logging
from django.utils.translation import ugettext_lazy as _
from horizon.utils import memoized
from openstack_dashboard.api import nova
import tuskar_ui
from tuskar_ui.cached_property import cached_property # noqa
from tuskar_ui.handle_errors import handle_errors # noqa
LOG = logging.getLogger(__name__)
class Flavor(object):
def __init__(self, flavor):
"""Construct by wrapping Nova flavor
:param flavor: Nova flavor
:type flavor: novaclient.v1_1.flavors.Flavor
"""
self._flavor = flavor
def __getattr__(self, name):
return getattr(self._flavor, name)
@property
def ram_bytes(self):
"""Get RAM size in bytes
Default RAM size is in MB.
"""
return self.ram * 1024 * 1024
@property
def disk_bytes(self):
"""Get disk size in bytes
Default disk size is in GB.
"""
return self.disk * 1024 * 1024 * 1024
@cached_property
def extras_dict(self):
"""Return extra flavor parameters
:return: Nova flavor keys
:rtype: dict
"""
return self._flavor.get_keys()
@property
def cpu_arch(self):
return self.extras_dict.get('cpu_arch', '')
@property
def kernel_image_id(self):
return self.extras_dict.get('baremetal:deploy_kernel_id', '')
@property
def ramdisk_image_id(self):
return self.extras_dict.get('baremetal:deploy_ramdisk_id', '')
@classmethod
def create(cls, request, name, memory, vcpus, disk, cpu_arch,
kernel_image_id, ramdisk_image_id):
extras_dict = {'cpu_arch': cpu_arch,
'baremetal:deploy_kernel_id': kernel_image_id,
'baremetal:deploy_ramdisk_id': ramdisk_image_id}
return cls(nova.flavor_create(request, name, memory, vcpus, disk,
metadata=extras_dict))
@classmethod
@handle_errors(_("Unable to load flavor."))
def get(cls, request, flavor_id):
return cls(nova.flavor_get(request, flavor_id))
@classmethod
@handle_errors(_("Unable to load flavor."))
def get_by_name(cls, request, name):
for flavor in cls.list(request):
if flavor.name == name:
return flavor
@classmethod
@handle_errors(_("Unable to retrieve flavor list."), [])
def list(cls, request):
return [cls(item) for item in nova.flavor_list(request)]
@classmethod
@memoized.memoized
@handle_errors(_("Unable to retrieve existing servers list."), [])
def list_deployed_ids(cls, request):
"""Get and memoize ID's of deployed flavors."""
servers = nova.server_list(request)[0]
deployed_ids = set(server.flavor['id'] for server in servers)
deployed_names = []
for plan in tuskar_ui.api.tuskar.Plan.list(request):
deployed_names.extend(
[plan.parameter_value(role.flavor_parameter_name)
for role in plan.role_list])
return [flavor.id for flavor in cls.list(request)
if flavor.id in deployed_ids or flavor.name in deployed_names]