Merge "Adding node group template editing to CLI"

This commit is contained in:
Jenkins
2015-05-15 22:05:13 +00:00
committed by Gerrit Code Review
2 changed files with 80 additions and 1 deletions

View File

@@ -355,6 +355,8 @@ def do_cluster_delete(cs, args):
#
# node-group-template-delete --name <template>|--id <template_id>
#
# node-group-template-update --name <template>|--id <template_id> --json <file>
#
def do_node_group_template_list(cs, args):
"""Print a list of available node group templates."""
@@ -409,6 +411,36 @@ def do_node_group_template_delete(cs, args):
# TODO(mattf): No indication of result
@utils.arg('--name',
help='Name of the node group template to update.')
@utils.arg('--id',
metavar='<template_id>',
help='ID of the node group template to update')
@utils.arg('--json',
default=sys.stdin,
type=argparse.FileType('r'),
help='JSON representation of the node group template update')
def do_node_group_template_update(cs, args):
"""Update a node group template."""
template = _get_by_id_or_name(cs.node_group_templates,
name=args.name,
id=args.id)
update_template = json.loads(args.json.read())
_filter_call_args(update_template, cs.node_group_templates.update)
for param in ["plugin_name", "hadoop_version", "name", "flavor_id"]:
if param not in update_template:
update_template[param] = getattr(template, param, None)
result = cs.node_group_templates.update(
args.id or
template._get_by_id_or_name(cs.node_group_templates,
name=args.name).id,
**update_template
)
_show_node_group_template(result)
#
# Cluster Templates
# ~~~~~~~~~~~~~~~~~

View File

@@ -27,7 +27,20 @@ class NodeGroupTemplateTest(base.BaseTestCase):
"description": "description",
"volumes_per_node": "3",
"volumes_size": "4",
"node_processes": ["datanode"]
"node_processes": ["datanode"],
}
update_json = {
"node_group_template": {
"name": "UpdatedName",
"plugin_name": "new_plugin",
"hadoop_version": "2",
"flavor_id": "7",
"description": "description",
"volumes_per_node": "3",
"volumes_size": "4",
"node_processes": ["datanode", "namenode"],
}
}
def test_create_node_group_template(self):
@@ -69,3 +82,37 @@ class NodeGroupTemplateTest(base.BaseTestCase):
self.client.node_group_templates.delete('id')
self.assertEqual(url, self.responses.last_request.url)
def test_update_node_group_template(self):
url = self.URL + '/node-group-templates'
self.responses.post(url, status_code=202,
json={'node_group_template': self.body})
resp = self.client.node_group_templates.create(**self.body)
update_url = self.URL + '/node-group-templates/id'
self.responses.put(update_url, status_code=202, json=self.update_json)
updated = self.client.node_group_templates.update(
"id",
resp.name,
resp.plugin_name,
resp.hadoop_version,
resp.flavor_id,
description=getattr(resp, "description", None),
volumes_per_node=getattr(resp, "volumes_per_node", None),
node_configs=getattr(resp, "node_configs", None),
floating_ip_pool=getattr(resp, "floating_ip_pool", None),
security_groups=getattr(resp, "security_groups", None),
auto_security_group=getattr(resp, "auto_security_group", None),
availability_zone=getattr(resp, "availability_zone", None),
volumes_availability_zone=getattr(resp,
"volumes_availability_zone",
None),
volume_type=getattr(resp, "volume_type", None),
image_id=getattr(resp, "image_id", None),
is_proxy_gateway=getattr(resp, "is_proxy_gateway", None),
volume_local_to_instance=getattr(resp,
"volume_local_to_instance",
None))
self.assertIsInstance(updated, ng.NodeGroupTemplate)
self.assertFields(self.update_json["node_group_template"], updated)