1aaed59b4b
Update Copyright statements that previously said 'OpenStack LLC' to now say 'OpenStack Foundation'. Note that the files under openstack/common/ were not updated, as those changes should be brought in by syncing with oslo-incubator. Change-Id: I22db9858e899cff72053a4b48100fcc039f5d9dd
122 lines
3.9 KiB
Python
122 lines
3.9 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
|
|
# Copyright 2011 OpenStack Foundation
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
from reddwarf.openstack.common import log as logging
|
|
from reddwarf.common import cfg
|
|
from reddwarf.common import utils
|
|
from reddwarf.common.views import create_links
|
|
from reddwarf.instance import models
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
def get_ip_address(addresses):
|
|
if (addresses is not None and
|
|
addresses.get('private') is not None and
|
|
len(addresses['private']) > 0):
|
|
return [addr.get('addr') for addr in addresses['private']]
|
|
if (addresses is not None and
|
|
addresses.get('usernet') is not None and
|
|
len(addresses['usernet']) > 0):
|
|
return [addr.get('addr') for addr in addresses['usernet']]
|
|
|
|
|
|
class InstanceView(object):
|
|
"""Uses a SimpleInstance."""
|
|
|
|
def __init__(self, instance, req=None):
|
|
self.instance = instance
|
|
self.req = req
|
|
|
|
def data(self):
|
|
instance_dict = {
|
|
"id": self.instance.id,
|
|
"name": self.instance.name,
|
|
"status": self.instance.status,
|
|
"links": self._build_links(),
|
|
"flavor": self._build_flavor_info(),
|
|
}
|
|
if CONF.reddwarf_volume_support:
|
|
instance_dict['volume'] = {'size': self.instance.volume_size}
|
|
LOG.debug(instance_dict)
|
|
return {"instance": instance_dict}
|
|
|
|
def _build_links(self):
|
|
return create_links("instances", self.req, self.instance.id)
|
|
|
|
def _build_flavor_info(self):
|
|
return {
|
|
"id": self.instance.flavor_id,
|
|
"links": self._build_flavor_links()
|
|
}
|
|
|
|
def _build_flavor_links(self):
|
|
return create_links("flavors", self.req,
|
|
self.instance.flavor_id)
|
|
|
|
|
|
class InstanceDetailView(InstanceView):
|
|
"""Works with a full-blown instance."""
|
|
|
|
def __init__(self, instance, req):
|
|
super(InstanceDetailView, self).__init__(instance,
|
|
req=req)
|
|
|
|
def _to_gb(self, bytes):
|
|
return bytes / 1024.0 ** 3
|
|
|
|
def data(self):
|
|
result = super(InstanceDetailView, self).data()
|
|
result['instance']['created'] = self.instance.created
|
|
result['instance']['updated'] = self.instance.updated
|
|
|
|
dns_support = CONF.reddwarf_dns_support
|
|
if dns_support:
|
|
result['instance']['hostname'] = self.instance.hostname
|
|
|
|
if CONF.add_addresses:
|
|
ip = get_ip_address(self.instance.addresses)
|
|
if ip is not None and len(ip) > 0:
|
|
result['instance']['ip'] = ip
|
|
if CONF.reddwarf_volume_support:
|
|
if (isinstance(self.instance, models.DetailInstance) and
|
|
self.instance.volume_used):
|
|
used = self._to_gb(self.instance.volume_used)
|
|
result['instance']['volume']['used'] = used
|
|
return result
|
|
|
|
|
|
class InstancesView(object):
|
|
"""Shows a list of SimpleInstance objects."""
|
|
|
|
def __init__(self, instances, req=None):
|
|
self.instances = instances
|
|
self.req = req
|
|
|
|
def data(self):
|
|
data = []
|
|
# These are model instances
|
|
for instance in self.instances:
|
|
data.append(self.data_for_instance(instance))
|
|
return {'instances': data}
|
|
|
|
def data_for_instance(self, instance):
|
|
view = InstanceView(instance, req=self.req)
|
|
return view.data()['instance']
|