diff options
Diffstat (limited to 'moonclient/moonclient/metarules.py')
-rw-r--r-- | moonclient/moonclient/metarules.py | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/moonclient/moonclient/metarules.py b/moonclient/moonclient/metarules.py new file mode 100644 index 00000000..74473d1c --- /dev/null +++ b/moonclient/moonclient/metarules.py @@ -0,0 +1,210 @@ +# Copyright 2015 Open Platform for NFV Project, Inc. and its contributors +# This software is distributed under the terms and conditions of the 'Apache-2.0' +# license which can be found in the file 'LICENSE' in this package distribution +# or at 'http://www.apache.org/licenses/LICENSE-2.0'. + +import logging + +from cliff.lister import Lister +from cliff.command import Command +from cliff.show import ShowOne + + +class AggregationAlgorithmsList(Lister): + """List all aggregation algorithms.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(AggregationAlgorithmsList, self).get_parser(prog_name) + parser.add_argument( + '--intraextension', + metavar='<intraextension-uuid>', + help='IntraExtension UUID', + ) + return parser + + def take_action(self, parsed_args): + if not parsed_args.intraextension: + parsed_args.intraextension = self.app.intraextension + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/aggregation_algorithms".format( + parsed_args.intraextension), + authtoken=True) + if "aggregation_algorithms" not in data: + raise Exception("Error in command {}: {}".format("AggregationAlgorithmsList", data)) + return ( + ("aggregation_algorithms",), + ((_uuid, ) for _uuid in data["aggregation_algorithms"]) + ) + + +class AggregationAlgorithmShow(ShowOne): + """List the current aggregation algorithm.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(AggregationAlgorithmShow, self).get_parser(prog_name) + parser.add_argument( + '--intraextension', + metavar='<intraextension-uuid>', + help='IntraExtension UUID', + ) + return parser + + def take_action(self, parsed_args): + if not parsed_args.intraextension: + parsed_args.intraextension = self.app.intraextension + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/aggregation_algorithm".format( + parsed_args.intraextension), + authtoken=True) + if "aggregation_algorithm" not in data: + raise Exception("Error in command {}: {}".format("AggregationAlgorithmList", data)) + return ( + ("aggregation_algorithm",), + (data["aggregation_algorithm"],) + ) + + +class AggregationAlgorithmSet(ShowOne): + """Set the current aggregation algorithm.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(AggregationAlgorithmSet, self).get_parser(prog_name) + parser.add_argument( + 'aggregation_algorithm', + metavar='<aggregation_algorithm-uuid>', + help='Aggregation algorithm UUID', + ) + parser.add_argument( + '--intraextension', + metavar='<intraextension-uuid>', + help='IntraExtension UUID', + ) + return parser + + def take_action(self, parsed_args): + if not parsed_args.intraextension: + parsed_args.intraextension = self.app.intraextension + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/aggregation_algorithm".format( + parsed_args.intraextension), + post_data={"aggregation_algorithm": parsed_args.aggregation_algorithm}, + authtoken=True) + if "aggregation_algorithm" not in data: + raise Exception("Error in command {}: {}".format("AggregationAlgorithmSet", data)) + return ( + ("aggregation_algorithm",), + (data["aggregation_algorithm"],) + ) + + +class SubMetaRuleShow(Lister): + """Show the current sub meta rule.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(SubMetaRuleShow, self).get_parser(prog_name) + parser.add_argument( + '--intraextension', + metavar='<intraextension-uuid>', + help='IntraExtension UUID', + ) + return parser + + def take_action(self, parsed_args): + if not parsed_args.intraextension: + parsed_args.intraextension = self.app.intraextension + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/sub_meta_rule".format(parsed_args.intraextension), + authtoken=True) + if "sub_meta_rule" not in data: + raise Exception("Error in command {}".format(data)) + return ( + ("relation", "values"), + ((key, value) for key, value in data["sub_meta_rule"].items()) + ) + + +class SubMetaRuleSet(Command): + """Set the current sub meta rule.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(SubMetaRuleSet, self).get_parser(prog_name) + parser.add_argument( + 'relation', + metavar='<relation-uuid>', + help='relation UUID (example: "relation_super")', + ) + parser.add_argument( + 'subject_categories', + metavar='<subject_categories-uuid>', + help='subject_categories UUID (example: "role,")', + ) + parser.add_argument( + 'action_categories', + metavar='<action_categories-uuid>', + help='action_categories UUID (example: "compute_action,network_action")', + ) + parser.add_argument( + 'object_categories', + metavar='<object_categories-uuid>', + help='object_categories UUID (example: "id,")', + ) + parser.add_argument( + '--intraextension', + metavar='<intraextension-uuid>', + help='IntraExtension UUID', + ) + return parser + + def take_action(self, parsed_args): + if not parsed_args.intraextension: + parsed_args.intraextension = self.app.intraextension + subject_categories = map(lambda x: x.strip(), parsed_args.subject_categories.split(',')) + action_categories = map(lambda x: x.strip(), parsed_args.action_categories.split(',')) + object_categories = map(lambda x: x.strip(), parsed_args.object_categories.split(',')) + relation = parsed_args.relation + self.app.get_url("/v3/OS-MOON/intra_extensions/{}/sub_meta_rule".format(parsed_args.intraextension), + post_data={ + relation: { + "subject_categories": subject_categories, + "action_categories": action_categories, + "object_categories": object_categories, + } + }, + method="DELETE", + authtoken=True) + + +class SubMetaRuleRelationList(Lister): + """List all sub meta rule relations.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(SubMetaRuleRelationList, self).get_parser(prog_name) + parser.add_argument( + '--intraextension', + metavar='<intraextension-uuid>', + help='IntraExtension UUID', + ) + return parser + + def take_action(self, parsed_args): + if not parsed_args.intraextension: + parsed_args.intraextension = self.app.intraextension + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/sub_meta_rule_relations".format( + parsed_args.intraextension), + authtoken=True) + if "sub_meta_rule_relations" not in data: + raise Exception("Error in command {}: {}".format("AggregationAlgorithmList", data)) + return ( + ("sub_meta_rule_relations",), + ((_uuid, ) for _uuid in data["sub_meta_rule_relations"]) + ) + + |