summaryrefslogtreecommitdiffstats
path: root/vio/vio/pub/vim/vimapi/nova/OperateFlavors.py
blob: 569e3332f52f8a73a39a4e657e65c18569b8b12a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Copyright (c) 2017 VMware, Inc.
#
# 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.

import logging

from openstack import exceptions

from vio.pub.vim.vimapi.nova.OperateNova import OperateNova

logger = logging.getLogger(__name__)


class OperateFlavors(OperateNova):

    def __init__(self, **kwargs):
        super(OperateFlavors, self).__init__(**kwargs)

    def create_flavor(self, data, project_id, create_req):
        req = {
            "name": create_req.get('name'),
            "vcpus": create_req.get('vcpu'),
            "ram": create_req.get('memory'),
            "disk": create_req.get('disk'),
            "ephemeral": create_req.get('ephemeral', 0),
            "swap": create_req.get('swap', 0),
            "is_public": create_req.get('isPublic', True)
        }

        flavor = self.request('create_flavor', data,
                              project_id=project_id, **req)
        extra_specs_spec = {l['keyName']: l['value']
                            for l in create_req.get('extraSpecs', [])}
        extra_specs = None
        if extra_specs_spec:
            extra_specs = self.request('create_flavor_extra_specs', data,
                                       project_id=project_id,
                                       flavor_id=flavor.id,
                                       extra_specs=extra_specs_spec)
        return flavor, extra_specs

    def list_flavors(self, data, project_id, **query):
        flavors = self.request('list_flavors', data, project_id=project_id, **query)
        flavors = list(flavors)
        result = []
        for flavor in flavors:
            # Since flavor filter didn't work, need to manually do it.
            # query['name'] is a list here.
            if query.get('name') and flavor.name not in query['name']:
                continue
            extra_specs = self.request('get_flavor_extra_specs', data,
                                       project_id=project_id, flavor_id=flavor.id)
            result.append((flavor, extra_specs))
        return result

    def get_flavor(self, data, project_id, flavor_id):
        try:
            flavor = self.request('get_flavor', data,
                                  project_id=project_id, flavor_id=flavor_id)
            extra_specs = self.request('get_flavor_extra_specs', data,
                                       project_id=project_id, flavor_id=flavor_id)
            return flavor, extra_specs

        except exceptions.ResourceNotFound:
            return None, None

    def find_flavor(self, data, project_id, flavor_id):
        param = {'username': data['username'],
                 'user_domain_name': 'default',
                 'project_domain_name': 'default',
                 'password': data['password'],
                 'auth_url': data['url'],
                 'project_id': project_id}
        cc = self.compute(param)
        flavor = cc.find_flavor(flavor_id, ignore_missing=True)
        return flavor

    def delete_flavor(self, data, project_id, flavor_id):
        return self.request('delete_flavor', data, project_id=project_id,
                            flavor_id=flavor_id)