266 lines
8.2 KiB
Python
266 lines
8.2 KiB
Python
# Copyright 2015 Objectif Libre
|
|
# 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 cloudkittyclient.common import utils
|
|
from cloudkittyclient import exc
|
|
|
|
|
|
@utils.arg('-n', '--name',
|
|
help='Service name',
|
|
required=True)
|
|
def do_hashmap_service_create(cc, args={}):
|
|
"""Create a service."""
|
|
arg_to_field_mapping = {
|
|
'name': 'name'
|
|
}
|
|
fields = {}
|
|
for k, v in vars(args).items():
|
|
if k in arg_to_field_mapping:
|
|
if v is not None:
|
|
fields[arg_to_field_mapping.get(k, k)] = v
|
|
out = cc.hashmap_services.create(**fields)
|
|
utils.print_dict(out.to_dict())
|
|
|
|
|
|
def do_hashmap_service_list(cc, args={}):
|
|
"""List services."""
|
|
try:
|
|
services = cc.hashmap_services.list()
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Services not found: %s' % args.counter_name)
|
|
else:
|
|
field_labels = ['Name', 'Service id']
|
|
fields = ['name', 'service_id']
|
|
utils.print_list(services, fields, field_labels,
|
|
sortby=0)
|
|
|
|
|
|
@utils.arg('-s', '--service-id',
|
|
help='Service uuid',
|
|
required=True)
|
|
def do_hashmap_service_delete(cc, args={}):
|
|
"""Delete a service."""
|
|
try:
|
|
cc.hashmap_services.delete(service_id=args.service_id)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Service not found: %s' % args.counter_name)
|
|
|
|
|
|
@utils.arg('-n', '--name',
|
|
help='Field name',
|
|
required=True)
|
|
@utils.arg('-s', '--service-id',
|
|
help='Service id',
|
|
required=True)
|
|
def do_hashmap_field_create(cc, args={}):
|
|
"""Create a field."""
|
|
arg_to_field_mapping = {
|
|
'name': 'name',
|
|
'service_id': 'service_id'
|
|
}
|
|
fields = {}
|
|
for k, v in vars(args).items():
|
|
if k in arg_to_field_mapping:
|
|
if v is not None:
|
|
fields[arg_to_field_mapping.get(k, k)] = v
|
|
out = cc.hashmap_fields.create(**fields)
|
|
utils.print_dict(out.to_dict())
|
|
|
|
|
|
@utils.arg('-s', '--service-id',
|
|
help='Service id',
|
|
required=True)
|
|
def do_hashmap_field_list(cc, args={}):
|
|
"""Create a field."""
|
|
try:
|
|
created_field = cc.hashmap_fields.list(service_id=args.service_id)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Fields not found: %s' % args.counter_name)
|
|
else:
|
|
field_labels = ['Name', 'Field id']
|
|
fields = ['name', 'field_id']
|
|
utils.print_list(created_field, fields, field_labels,
|
|
sortby=0)
|
|
|
|
|
|
@utils.arg('-f', '--field-id',
|
|
help='Field uuid',
|
|
required=True)
|
|
def do_hashmap_field_delete(cc, args={}):
|
|
"""Delete a field."""
|
|
try:
|
|
cc.hashmap_fields.delete(field_id=args.field_id)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Field not found: %s' % args.counter_name)
|
|
|
|
|
|
@utils.arg('-c', '--cost',
|
|
help='Mapping cost',
|
|
required=True)
|
|
@utils.arg('-v', '--value',
|
|
help='Mapping value',
|
|
required=False)
|
|
@utils.arg('-t', '--type',
|
|
help='Mapping type (flat, rate)',
|
|
required=False)
|
|
@utils.arg('-s', '--service-id',
|
|
help='Service id',
|
|
required=False)
|
|
@utils.arg('-f', '--field-id',
|
|
help='Field id',
|
|
required=False)
|
|
@utils.arg('-g', '--group-id',
|
|
help='Group id',
|
|
required=False)
|
|
def do_hashmap_mapping_create(cc, args={}):
|
|
"""Create a ampping."""
|
|
arg_to_field_mapping = {
|
|
'cost': 'cost',
|
|
'value': 'value',
|
|
'type': 'type',
|
|
'service_id': 'service_id',
|
|
'field_id': 'field_id',
|
|
'group_id': 'group_id',
|
|
}
|
|
fields = {}
|
|
for k, v in vars(args).items():
|
|
if k in arg_to_field_mapping:
|
|
if v is not None:
|
|
fields[arg_to_field_mapping.get(k, k)] = v
|
|
out = cc.hashmap_mappings.create(**fields)
|
|
utils.print_dict(out)
|
|
|
|
|
|
@utils.arg('-m', '--mapping-id',
|
|
help='Mapping id',
|
|
required=True)
|
|
@utils.arg('-c', '--cost',
|
|
help='Mapping cost',
|
|
required=False)
|
|
@utils.arg('-v', '--value',
|
|
help='Mapping value',
|
|
required=False)
|
|
@utils.arg('-t', '--type',
|
|
help='Mapping type (flat, rate)',
|
|
required=False)
|
|
@utils.arg('-g', '--group-id',
|
|
help='Group id',
|
|
required=False)
|
|
def do_hashmap_mapping_update(cc, args={}):
|
|
"""Update a mapping."""
|
|
arg_to_field_mapping = {
|
|
'mapping_id': 'mapping_id',
|
|
'cost': 'cost',
|
|
'value': 'value',
|
|
'type': 'type',
|
|
'group_id': 'group_id',
|
|
}
|
|
try:
|
|
mapping = cc.hashmap_mappings.get(mapping_id=args.mapping_id)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Modules not found: %s' % args.counter_name)
|
|
for k, v in vars(args).items():
|
|
if k in arg_to_field_mapping:
|
|
if v is not None:
|
|
setattr(mapping, k, v)
|
|
cc.hashmap_mappings.update(**mapping.dirty_fields)
|
|
|
|
|
|
@utils.arg('-s', '--service-id',
|
|
help='Service id',
|
|
required=False)
|
|
@utils.arg('-f', '--field-id',
|
|
help='Field id',
|
|
required=False)
|
|
@utils.arg('-g', '--group-id',
|
|
help='Group id',
|
|
required=False)
|
|
def do_hashmap_mapping_list(cc, args={}):
|
|
"""List mappings."""
|
|
if args.service_id is None and args.field_id is None:
|
|
raise exc.CommandError("Provide either service-id or field-id")
|
|
try:
|
|
mappings = cc.hashmap_mappings.list(service_id=args.service_id,
|
|
field_id=args.field_id,
|
|
group_id=args.group_id)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Mapping not found: %s' % args.counter_name)
|
|
else:
|
|
field_labels = ['Mapping id', 'Value', 'Cost',
|
|
'Type', 'Field id',
|
|
'Service id', 'Group id']
|
|
fields = ['mapping_id', 'value', 'cost',
|
|
'type', 'field_id',
|
|
'service_id', 'group_id']
|
|
utils.print_list(mappings, fields, field_labels,
|
|
sortby=0)
|
|
|
|
|
|
@utils.arg('-m', '--mapping-id',
|
|
help='Mapping uuid',
|
|
required=True)
|
|
def do_hashmap_mapping_delete(cc, args={}):
|
|
"""Delete a mapping."""
|
|
try:
|
|
cc.hashmap_mappings.delete(mapping_id=args.mapping_id)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Mapping not found: %s' % args.mapping_id)
|
|
|
|
|
|
@utils.arg('-n', '--name',
|
|
help='Group name',
|
|
required=True)
|
|
def do_hashmap_group_create(cc, args={}):
|
|
"""Create a group."""
|
|
arg_to_field_mapping = {
|
|
'name': 'name',
|
|
}
|
|
fields = {}
|
|
for k, v in vars(args).items():
|
|
if k in arg_to_field_mapping:
|
|
if v is not None:
|
|
fields[arg_to_field_mapping.get(k, k)] = v
|
|
cc.hashmap_groups.create(**fields)
|
|
|
|
|
|
def do_hashmap_group_list(cc, args={}):
|
|
"""List groups."""
|
|
try:
|
|
groups = cc.hashmap_groups.list()
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Mapping not found: %s' % args.counter_name)
|
|
else:
|
|
field_labels = ['Name',
|
|
'Group id']
|
|
fields = ['name', 'group_id']
|
|
utils.print_list(groups, fields, field_labels,
|
|
sortby=0)
|
|
|
|
|
|
@utils.arg('-g', '--group-id',
|
|
help='Group uuid',
|
|
required=True)
|
|
@utils.arg('-r', '--recursive',
|
|
help="""Delete the group's mappings""",
|
|
required=False,
|
|
default=False)
|
|
def do_hashmap_group_delete(cc, args={}):
|
|
"""Delete a group."""
|
|
try:
|
|
cc.hashmap_groups.delete(group_id=args.group_id,
|
|
recursive=args.recursive)
|
|
except exc.HTTPNotFound:
|
|
raise exc.CommandError('Group not found: %s' % args.group_id)
|