diff options
Diffstat (limited to 'moonclient/moonclient/metarules.py')
-rw-r--r-- | moonclient/moonclient/metarules.py | 157 |
1 files changed, 92 insertions, 65 deletions
diff --git a/moonclient/moonclient/metarules.py b/moonclient/moonclient/metarules.py index 74473d1c..c922afb5 100644 --- a/moonclient/moonclient/metarules.py +++ b/moonclient/moonclient/metarules.py @@ -15,36 +15,14 @@ class AggregationAlgorithmsList(Lister): 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_aggregation_algorithm_from_id(self, algorithm_id): + algorithms = self.app.get_url("/v3/OS-MOON/configuration/aggregation_algorithms", authtoken=True) + if algorithm_id in algorithms: + return algorithms[algorithm_id] + return dict() def get_parser(self, prog_name): - parser = super(AggregationAlgorithmShow, self).get_parser(prog_name) + parser = super(AggregationAlgorithmsList, self).get_parser(prog_name) parser.add_argument( '--intraextension', metavar='<intraextension-uuid>', @@ -58,19 +36,24 @@ class AggregationAlgorithmShow(ShowOne): 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)) + algorithm = self.__get_aggregation_algorithm_from_id(data['content']) return ( - ("aggregation_algorithm",), - (data["aggregation_algorithm"],) + ("id", "name", "description"), + ((data['content'], algorithm["name"], algorithm["description"]), ) ) -class AggregationAlgorithmSet(ShowOne): +class AggregationAlgorithmSet(Command): """Set the current aggregation algorithm.""" log = logging.getLogger(__name__) + def __get_aggregation_algorithm_from_id(self, algorithm_id): + algorithms = self.app.get_url("/v3/OS-MOON/configuration/aggregation_algorithms", authtoken=True) + if algorithm_id in algorithms: + return algorithms[algorithm_id] + return dict() + def get_parser(self, prog_name): parser = super(AggregationAlgorithmSet, self).get_parser(prog_name) parser.add_argument( @@ -90,13 +73,12 @@ class AggregationAlgorithmSet(ShowOne): 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}, + post_data={"aggregation_algorithm_id": parsed_args.aggregation_algorithm}, authtoken=True) - if "aggregation_algorithm" not in data: - raise Exception("Error in command {}: {}".format("AggregationAlgorithmSet", data)) + algorithm = self.__get_aggregation_algorithm_from_id(data['content']) return ( - ("aggregation_algorithm",), - (data["aggregation_algorithm"],) + ("id", "name", "description"), + ((data['content'], algorithm["name"], algorithm["description"]), ) ) @@ -114,16 +96,41 @@ class SubMetaRuleShow(Lister): ) return parser + def __get_subject_category_name(self, intraextension, category_id): + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/subject_categories".format(intraextension), + authtoken=True) + if category_id in data: + return data[category_id]["name"] + + def __get_object_category_name(self, intraextension, category_id): + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/object_categories".format(intraextension), + authtoken=True) + if category_id in data: + return data[category_id]["name"] + + def __get_action_category_name(self, intraextension, category_id): + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/action_categories".format(intraextension), + authtoken=True) + if category_id in data: + return data[category_id]["name"] + 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), + data = self.app.get_url("/v3/OS-MOON/intra_extensions/{}/sub_meta_rules".format(parsed_args.intraextension), authtoken=True) - if "sub_meta_rule" not in data: - raise Exception("Error in command {}".format(data)) + import json + self.log.debug(json.dumps(data, indent=4)) return ( - ("relation", "values"), - ((key, value) for key, value in data["sub_meta_rule"].items()) + ("id", "name", "algorithm", "subject categories", "object categories", "action categories"), + (( + key, + value["name"], + value["algorithm"], + ", ".join([self.__get_subject_category_name(parsed_args.intraextension, cat) for cat in value["subject_categories"]]), + ", ".join([self.__get_object_category_name(parsed_args.intraextension, cat) for cat in value["object_categories"]]), + ", ".join([self.__get_action_category_name(parsed_args.intraextension, cat) for cat in value["action_categories"]]), + ) for key, value in data.iteritems()) ) @@ -135,24 +142,34 @@ class SubMetaRuleSet(Command): 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")', + 'id', + metavar='<sub_meta_rule-uuid>', + help='Sub Meta Rule UUID (example: "12346")', + ) + parser.add_argument( + '--algorithm', + metavar='<algorithm-str>', + help='algorithm to use (example: "inclusion")', + ) + parser.add_argument( + '--name', + metavar='<name-str>', + help='name to set (example: "my new sub meta rule")', ) parser.add_argument( - 'subject_categories', + '--subject_categories', metavar='<subject_categories-uuid>', - help='subject_categories UUID (example: "role,")', + help='subject_categories UUID (example: "12346,")', ) parser.add_argument( - 'action_categories', + '--action_categories', metavar='<action_categories-uuid>', - help='action_categories UUID (example: "compute_action,network_action")', + help='action_categories UUID (example: "12346,0987654")', ) parser.add_argument( - 'object_categories', + '--object_categories', metavar='<object_categories-uuid>', - help='object_categories UUID (example: "id,")', + help='object_categories UUID (example: "12346")', ) parser.add_argument( '--intraextension', @@ -164,19 +181,29 @@ class SubMetaRuleSet(Command): 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", + subject_categories = parsed_args.subject_categories + if not subject_categories: + subject_categories = "" + object_categories = parsed_args.object_categories + if not object_categories: + object_categories = "" + action_categories = parsed_args.action_categories + if not action_categories: + action_categories = "" + self.log.debug("object_categories = {}".format(object_categories)) + subject_categories = map(lambda x: x.strip(), subject_categories.split(',')) + action_categories = map(lambda x: x.strip(), action_categories.split(',')) + object_categories = map(lambda x: x.strip(), object_categories.split(',')) + sub_meta_rule_id = parsed_args.id + post_data = dict() + post_data["sub_meta_rule_name"] = parsed_args.name + post_data["sub_meta_rule_algorithm"] = parsed_args.algorithm + post_data["sub_meta_rule_subject_categories"] = filter(lambda x: x, subject_categories) + post_data["sub_meta_rule_object_categories"] = filter(lambda x: x, object_categories) + post_data["sub_meta_rule_action_categories"] = filter(lambda x: x, action_categories) + self.app.get_url("/v3/OS-MOON/intra_extensions/{}/sub_meta_rules/{}".format(parsed_args.intraextension, sub_meta_rule_id), + post_data=post_data, + method="POST", authtoken=True) |