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')},
|
||||
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):
|
||||
columns = ('id', 'name', 'status', 'ml_type', 'url',
|
||||
|
@ -14,6 +14,7 @@ from keystoneauth1 import loading
|
||||
from keystoneauth1 import session as ksa_session
|
||||
|
||||
from gyanclient.common import httpclient
|
||||
from gyanclient.v1 import flavors
|
||||
from gyanclient.v1 import hosts
|
||||
from gyanclient.v1 import models
|
||||
from gyanclient.v1 import versions
|
||||
@ -116,6 +117,7 @@ class Client(object):
|
||||
session=session,
|
||||
api_version=api_version,
|
||||
**client_kwargs)
|
||||
self.flavors = flavors.FlavorManager(self.http_client)
|
||||
self.hosts = hosts.HostManager(self.http_client)
|
||||
self.models = models.ModelManager(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 models_shell
|
||||
from gyanclient.v1 import flavors_shell
|
||||
from gyanclient.v1 import versions_shell
|
||||
|
||||
COMMAND_MODULES = [
|
||||
hosts_shell,
|
||||
models_shell,
|
||||
flavors_shell,
|
||||
versions_shell
|
||||
]
|
||||
|
Loading…
x
Reference in New Issue
Block a user