Add flavor related commands
Change-Id: Idec4bdf86ef6dc79d35d77be859984af12e0bf9b
This commit is contained in:
parent
7fd5ae9e03
commit
1f417ba48c
gyanclient
@ -129,6 +129,13 @@ def list_hosts(hosts):
|
|||||||
{'versions': print_list_field('versions')},
|
{'versions': print_list_field('versions')},
|
||||||
sortby_index=None)
|
sortby_index=None)
|
||||||
|
|
||||||
|
def list_flavors(flavors):
|
||||||
|
columns = ('id', 'name', 'driver', 'cpu', 'memory', 'disk')
|
||||||
|
utils.print_list(flavors, columns,
|
||||||
|
{'versions': print_list_field('versions')},
|
||||||
|
sortby_index=None)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def list_models(models):
|
def list_models(models):
|
||||||
columns = ('id', 'name', 'status', 'ml_type', 'url',
|
columns = ('id', 'name', 'status', 'ml_type', 'url',
|
||||||
|
@ -14,6 +14,7 @@ from keystoneauth1 import loading
|
|||||||
from keystoneauth1 import session as ksa_session
|
from keystoneauth1 import session as ksa_session
|
||||||
|
|
||||||
from gyanclient.common import httpclient
|
from gyanclient.common import httpclient
|
||||||
|
from gyanclient.v1 import flavors
|
||||||
from gyanclient.v1 import hosts
|
from gyanclient.v1 import hosts
|
||||||
from gyanclient.v1 import models
|
from gyanclient.v1 import models
|
||||||
from gyanclient.v1 import versions
|
from gyanclient.v1 import versions
|
||||||
@ -116,6 +117,7 @@ class Client(object):
|
|||||||
session=session,
|
session=session,
|
||||||
api_version=api_version,
|
api_version=api_version,
|
||||||
**client_kwargs)
|
**client_kwargs)
|
||||||
|
self.flavors = flavors.FlavorManager(self.http_client)
|
||||||
self.hosts = hosts.HostManager(self.http_client)
|
self.hosts = hosts.HostManager(self.http_client)
|
||||||
self.models = models.ModelManager(self.http_client)
|
self.models = models.ModelManager(self.http_client)
|
||||||
self.versions = versions.VersionManager(self.http_client)
|
self.versions = versions.VersionManager(self.http_client)
|
||||||
|
67
gyanclient/v1/flavors.py
Normal file
67
gyanclient/v1/flavors.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# 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 six.moves.urllib import parse
|
||||||
|
|
||||||
|
from gyanclient import api_versions
|
||||||
|
from gyanclient.common import base
|
||||||
|
from gyanclient.common import utils
|
||||||
|
from gyanclient import exceptions
|
||||||
|
|
||||||
|
|
||||||
|
class Flavor(base.Resource):
|
||||||
|
def __repr__(self):
|
||||||
|
return "<Flavor %s>" % self._info
|
||||||
|
|
||||||
|
|
||||||
|
class FlavorManager(base.Manager):
|
||||||
|
resource_class = Flavor
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _path(id=None):
|
||||||
|
|
||||||
|
if id:
|
||||||
|
return '/v1/flavors/%s' % id
|
||||||
|
else:
|
||||||
|
return '/v1/flavors'
|
||||||
|
|
||||||
|
def list_flavors(self, **kwargs):
|
||||||
|
"""Retrieve a list of Flavors.
|
||||||
|
|
||||||
|
:returns: A list of flavors.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._list_pagination(self._path(''),
|
||||||
|
"flavors")
|
||||||
|
|
||||||
|
def get(self, id):
|
||||||
|
try:
|
||||||
|
return self._list(self._path(id))[0]
|
||||||
|
except IndexError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def flavor_create(self, **kwargs):
|
||||||
|
new = {
|
||||||
|
"python_version": kwargs["hints_data"]["python_version"],
|
||||||
|
"cpu": kwargs["hints_data"]["cpu"],
|
||||||
|
"memory": kwargs["hints_data"]["memory"],
|
||||||
|
"disk": kwargs["hints_data"]["disk"],
|
||||||
|
"driver": kwargs["hints_data"]["driver"],
|
||||||
|
"additional_details": kwargs["hints_data"]["additional_details"]
|
||||||
|
}
|
||||||
|
new["name"] = kwargs["name"]
|
||||||
|
|
||||||
|
return self._create(self._path(), new)
|
||||||
|
|
||||||
|
def delete_flavor(self, id):
|
||||||
|
return self._delete(self._path(id))
|
77
gyanclient/v1/flavors_shell.py
Normal file
77
gyanclient/v1/flavors_shell.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# 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 argparse
|
||||||
|
from contextlib import closing
|
||||||
|
import io
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import tarfile
|
||||||
|
import time
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
from gyanclient.common import cliutils as utils
|
||||||
|
from gyanclient.common import utils as gyan_utils
|
||||||
|
from gyanclient import exceptions as exc
|
||||||
|
|
||||||
|
|
||||||
|
def _show_flavor(flavor):
|
||||||
|
utils.print_dict(flavor._info)
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('flavor_id',
|
||||||
|
metavar='<flavor-id>',
|
||||||
|
help='ID of the Flavor to delete.')
|
||||||
|
def do_flavor_delete(cs, args):
|
||||||
|
"""Delete specified flavor."""
|
||||||
|
try:
|
||||||
|
cs.flavors.delete_flavor(args.flavor_id)
|
||||||
|
print("Request to delete flavor %s has been accepted." %
|
||||||
|
args.flavor_id)
|
||||||
|
except Exception as e:
|
||||||
|
print("Delete for flavor %(flavor)s failed: %(e)s" %
|
||||||
|
{'flavor': args.flavor_id, 'e': e})
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('flavor_id',
|
||||||
|
metavar='<flavor-id>',
|
||||||
|
help='ID or name of the flavor to show.')
|
||||||
|
def do_flavor_show(cs, args):
|
||||||
|
"""Show details of a flavors."""
|
||||||
|
flavor = cs.flavors.get(args.flavor_id)
|
||||||
|
_show_flavor(flavor)
|
||||||
|
|
||||||
|
|
||||||
|
def do_flavor_list(cs, args):
|
||||||
|
"""List flavors"""
|
||||||
|
flavors = cs.flavors.list_flavors()
|
||||||
|
gyan_utils.list_flavors(flavors)
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('name',
|
||||||
|
metavar='<name>',
|
||||||
|
help='ID or name of the flavor to train')
|
||||||
|
@utils.arg('--hints-path',
|
||||||
|
metavar='<hints_path>',
|
||||||
|
help='Absolute path for trained flavors')
|
||||||
|
def do_flavor_create(cs, args):
|
||||||
|
"""Upload and create a trained flavor"""
|
||||||
|
opts = {}
|
||||||
|
opts['name'] = args.name
|
||||||
|
opts['hints_data'] = yaml.load(open(args.hints_path))
|
||||||
|
opts = gyan_utils.remove_null_parms(**opts)
|
||||||
|
try:
|
||||||
|
flavors = cs.flavors.flavor_create(**opts)
|
||||||
|
gyan_utils.list_flavors([flavors])
|
||||||
|
except Exception as e:
|
||||||
|
print("Creation of flavor %(flavor)s "
|
||||||
|
"failed: %(e)s" % {'flavor': args.name, 'e': e})
|
@ -12,10 +12,12 @@
|
|||||||
|
|
||||||
from gyanclient.v1 import hosts_shell
|
from gyanclient.v1 import hosts_shell
|
||||||
from gyanclient.v1 import models_shell
|
from gyanclient.v1 import models_shell
|
||||||
|
from gyanclient.v1 import flavors_shell
|
||||||
from gyanclient.v1 import versions_shell
|
from gyanclient.v1 import versions_shell
|
||||||
|
|
||||||
COMMAND_MODULES = [
|
COMMAND_MODULES = [
|
||||||
hosts_shell,
|
hosts_shell,
|
||||||
models_shell,
|
models_shell,
|
||||||
|
flavors_shell,
|
||||||
versions_shell
|
versions_shell
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user