diff options
author | 2015-09-04 17:12:29 +0200 | |
---|---|---|
committer | 2015-09-04 17:12:29 +0200 | |
commit | 7ecd1573fd6ec625fb89b72ffa428ddf658b62f2 (patch) | |
tree | 04dbdaf52ef084a952b8432c6ff4d3af9a6494cc /moonclient/moonclient | |
parent | 92fd2dbfb672d7b2b1cdfd5dd5cf89f7716b3e12 (diff) |
First modifications of moonclient to comply with the current Moon API.
Change-Id: I8c5e2f6edb17409729d5735f3d49fbdc906a2ca8
Diffstat (limited to 'moonclient/moonclient')
-rw-r--r-- | moonclient/moonclient/authz_policies.py | 25 | ||||
-rw-r--r-- | moonclient/moonclient/configuration.py | 70 | ||||
-rw-r--r-- | moonclient/moonclient/shell.py | 4 | ||||
-rw-r--r-- | moonclient/moonclient/tenants.py | 199 | ||||
-rw-r--r-- | moonclient/moonclient/tests.py | 57 | ||||
-rw-r--r-- | moonclient/moonclient/tests/functional_tests.json | 0 | ||||
-rw-r--r-- | moonclient/moonclient/tests/tests_intra_extensions.json | 43 | ||||
-rw-r--r-- | moonclient/moonclient/tests/tests_tenants.json | 43 |
8 files changed, 415 insertions, 26 deletions
diff --git a/moonclient/moonclient/authz_policies.py b/moonclient/moonclient/authz_policies.py deleted file mode 100644 index 66ab39c0..00000000 --- a/moonclient/moonclient/authz_policies.py +++ /dev/null @@ -1,25 +0,0 @@ -# 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 - - -class AuthzPolicies(Lister): - """List all Intra_Extensions.""" - - log = logging.getLogger(__name__) - - def get_parser(self, prog_name): - parser = super(AuthzPolicies, self).get_parser(prog_name) - return parser - - def take_action(self, parsed_args): - policies = self.app.get_url("/v3/OS-MOON/authz_policies", authtoken=True)["authz_policies"] - return ( - ("name",), - ((_name, ) for _name in policies) - ) diff --git a/moonclient/moonclient/configuration.py b/moonclient/moonclient/configuration.py new file mode 100644 index 00000000..df80d71e --- /dev/null +++ b/moonclient/moonclient/configuration.py @@ -0,0 +1,70 @@ +# 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 + + +class TemplatesList(Lister): + """List all policy templates.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(TemplatesList, self).get_parser(prog_name) + return parser + + def take_action(self, parsed_args): + templates = self.app.get_url("/v3/OS-MOON/configuration/templates", authtoken=True) + self.app.stdout.write(templates) + self.app.stdout.write("\n") + return ( + ("id", "name", "description"), + ((template_id, templates[template_id]["name"], templates[template_id]["description"]) + for template_id in templates) + ) + + +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) + return parser + + def take_action(self, parsed_args): + templates = self.app.get_url("/v3/OS-MOON/configuration/aggregation_algorithms", authtoken=True) + self.app.stdout.write(templates) + self.app.stdout.write("\n") + return ( + ("id", "name", "description"), + ((template_id, templates[template_id]["name"], templates[template_id]["description"]) + for template_id in templates) + ) + + +class SubMetaRuleAlgorithmsList(Lister): + """List all aggregation algorithms.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(SubMetaRuleAlgorithmsList, self).get_parser(prog_name) + return parser + + def take_action(self, parsed_args): + templates = self.app.get_url("/v3/OS-MOON/configuration/sub_meta_rule_algorithms", authtoken=True) + self.app.stdout.write(templates) + self.app.stdout.write("\n") + return ( + ("id", "name", "description"), + ((template_id, templates[template_id]["name"], templates[template_id]["description"]) + for template_id in templates) + ) + + diff --git a/moonclient/moonclient/shell.py b/moonclient/moonclient/shell.py index 406e0a7f..5005095e 100644 --- a/moonclient/moonclient/shell.py +++ b/moonclient/moonclient/shell.py @@ -90,6 +90,9 @@ class MoonClient(App): break return self._intraextension + def get_tenant_uuid(self, tenant_name): + return self.get_url("/v3/projects?name={}".format(tenant_name), authtoken=True)["projects"][0]["id"] + def get_url(self, url, post_data=None, delete_data=None, method="GET", authtoken=None): if post_data: method = "POST" @@ -97,6 +100,7 @@ class MoonClient(App): method = "DELETE" self.log.debug("\033[32m{} {}\033[m".format(method, url)) conn = httplib.HTTPConnection(self.host, self.port) + self.log.info("Host: {}:{}".format(self.host, self.port)) headers = { "Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", diff --git a/moonclient/moonclient/tenants.py b/moonclient/moonclient/tenants.py new file mode 100644 index 00000000..b51b00ee --- /dev/null +++ b/moonclient/moonclient/tenants.py @@ -0,0 +1,199 @@ +# 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 + + +class TenantList(Lister): + """List all tenants.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(TenantList, self).get_parser(prog_name) + return parser + + def take_action(self, parsed_args): + tenants = self.app.get_url("/v3/OS-MOON/tenants", authtoken=True) + self.log.debug(tenants) + return ( + ("id", "name", "description", "intra_authz_extension_id", "intra_admin_extension_id"), + (( + tenant_id, + tenants[tenant_id]["name"], + tenants[tenant_id]["description"], + tenants[tenant_id]["intra_authz_extension_id"], + tenants[tenant_id]["intra_admin_extension_id"], + ) + for tenant_id in tenants) + ) + + +class TenantAdd(Command): + """Add a tenant.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(TenantAdd, self).get_parser(prog_name) + parser.add_argument( + 'tenant_name', + metavar='<tenant-name>', + help='Tenant name', + ) + parser.add_argument( + '--authz', + metavar='<authz-intraextension-uuid>', + help='Authz IntraExtension UUID', + ) + parser.add_argument( + '--admin', + metavar='<admin-intraextension-uuid>', + help='Admin IntraExtension UUID', + ) + parser.add_argument( + '--desc', + metavar='<tenant-description-str>', + help='Tenant description', + ) + return parser + + def take_action(self, parsed_args): + post_data = dict() + post_data["tenant_name"] = parsed_args.tenant_name + if parsed_args.authz: + post_data["tenant_intra_authz_extension_id"] = parsed_args.authz + if parsed_args.admin: + post_data["tenant_intra_admin_extension_id"] = parsed_args.admin + if parsed_args.desc: + post_data["description"] = parsed_args.desc + tenants = self.app.get_url("/v3/OS-MOON/tenants", + post_data=post_data, + authtoken=True) + return ( + ("id", "name", "description", "intra_authz_extension_id", "intra_admin_extension_id"), + (( + tenant_id, + tenants[tenant_id]["name"], + tenants[tenant_id]["description"], + tenants[tenant_id]["intra_authz_extension_id"], + tenants[tenant_id]["intra_admin_extension_id"], + ) + for tenant_id in tenants) + ) + + +class TenantShow(Command): + """Show information about a tenant.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(TenantShow, self).get_parser(prog_name) + parser.add_argument( + 'tenant_name', + metavar='<tenant-name>', + help='Tenant name', + ) + return parser + + def take_action(self, parsed_args): + tenants = self.app.get_url("/v3/OS-MOON/tenants/{}".format(parsed_args.tenant_name), + authtoken=True) + return ( + ("id", "name", "description", "intra_authz_extension_id", "intra_admin_extension_id"), + (( + tenant_id, + tenants[tenant_id]["name"], + tenants[tenant_id]["description"], + tenants[tenant_id]["intra_authz_extension_id"], + tenants[tenant_id]["intra_admin_extension_id"], + ) + for tenant_id in tenants) + ) + + +class TenantSet(Command): + """Modify a tenant.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(TenantSet, self).get_parser(prog_name) + parser.add_argument( + 'tenant_id', + metavar='<tenant-id>', + help='Tenant UUID', + ) + parser.add_argument( + '--name', + metavar='<tenant-name>', + help='Tenant name', + ) + parser.add_argument( + '--authz', + metavar='<authz-intraextension-uuid>', + help='Authz IntraExtension UUID', + ) + parser.add_argument( + '--admin', + metavar='<admin-intraextension-uuid>', + help='Admin IntraExtension UUID', + ) + parser.add_argument( + '--desc', + metavar='<tenant-description-str>', + help='Tenant description', + ) + return parser + + def take_action(self, parsed_args): + post_data = dict() + post_data["id"] = parsed_args.tenant_id + if parsed_args.name: + post_data["name"] = parsed_args.tenant_name + if parsed_args.authz: + post_data["intra_authz_extension_id"] = parsed_args.authz + if parsed_args.admin: + post_data["intra_admin_extension_id"] = parsed_args.admin + if parsed_args.desc: + post_data["description"] = parsed_args.desc + tenants = self.app.get_url("/v3/OS-MOON/tenants/{}".format(post_data["id"]), + post_data=post_data, + authtoken=True) + return ( + ("id", "name", "description", "intra_authz_extension_id", "intra_admin_extension_id"), + (( + tenant_id, + tenants[tenant_id]["name"], + tenants[tenant_id]["description"], + tenants[tenant_id]["intra_authz_extension_id"], + tenants[tenant_id]["intra_admin_extension_id"], + ) + for tenant_id in tenants) + ) + + +class TenantDelete(Command): + """Modify a tenant.""" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(TenantDelete, self).get_parser(prog_name) + parser.add_argument( + 'tenant_id', + metavar='<tenant-id>', + help='Tenant UUID', + ) + return parser + + def take_action(self, parsed_args): + self.app.get_url("/v3/OS-MOON/tenants/{}".format(parsed_args.tenant_id), + method="DELETE", + authtoken=True) diff --git a/moonclient/moonclient/tests.py b/moonclient/moonclient/tests.py index 5b02576c..e058fd9b 100644 --- a/moonclient/moonclient/tests.py +++ b/moonclient/moonclient/tests.py @@ -1 +1,56 @@ -__author__ = 'vdsq3226' +# 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 +import json +import shlex +import re +from cliff.lister import Lister +from cliff.command import Command + + +class TestsLaunch(Lister): + """List all Intra_Extensions.""" + + log = logging.getLogger(__name__) + result_vars = dict() + + def get_parser(self, prog_name): + parser = super(TestsLaunch, self).get_parser(prog_name) + parser.add_argument( + '--testfile', + metavar='<filename>', + help='Filename that contains tests to run', + ) + return parser + + def __replace_var_in_str(self, data_str): + for exp in re.findall("\$\w+"): + if exp.replace("$", "") in self.result_vars: + data_str.replace(exp, self.result_vars[exp.replace("$", "")]) + return data_str + + def __compare_results(self, expected, observed): + if expected in observed: + return True + return False + + def take_action(self, parsed_args): + tests_dict = json.load(open(parsed_args.testfile)) + data = list() + for group_name, tests_list in tests_dict.iteritems(): + for test in tests_list: + data_tmp = list() + command = self.__replace_var_in_str(test["command"]) + result = self.app.run_subcommand(shlex.split(command)) + data_tmp.append(test["name"]) + data_tmp.append(self.__compare_results(test["result"], result)) + data_tmp.append(test["description"]) + data.append(data_tmp) + + return ( + ("test_name", "result", "description"), + data + ) diff --git a/moonclient/moonclient/tests/functional_tests.json b/moonclient/moonclient/tests/functional_tests.json deleted file mode 100644 index e69de29b..00000000 --- a/moonclient/moonclient/tests/functional_tests.json +++ /dev/null diff --git a/moonclient/moonclient/tests/tests_intra_extensions.json b/moonclient/moonclient/tests/tests_intra_extensions.json new file mode 100644 index 00000000..a6d369aa --- /dev/null +++ b/moonclient/moonclient/tests/tests_intra_extensions.json @@ -0,0 +1,43 @@ +{ + "command_prefix": "moon", + "tests_group": { + "group1": [ + { + "name": "create_intraextension_authz", + "command": "intraextension create --policy_model policy_authz func_test", + "result": "%uuid_authz%", + "description": "Create an authz intra extension" + }, + { + "name": "list_intraextension_authz", + "command": "intraextension list", + "result": "$uuid_authz", + "description": "Check the existence of that authz intra extension" + }, + { + "name": "create_intraextension_admin", + "command": "intraextension create --policy_model policy_admin func_test", + "result": "%uuid_admin%", + "description": "Create an admin intra extension" + }, + { + "name": "list_intraextension_admin", + "command": "intraextension list", + "result": "$uuid_admin", + "description": "Check the existence of that admin intra extension" + }, + { + "name": "set_tenant_authz", + "command": "intraextension tenant set authz $uuid_authz demo", + "result": "", + "description": "Connect the authz intra extension to the tenant demo" + }, + { + "name": "set_tenant_admin", + "command": "intraextension tenant set authz $uuid_authz demo", + "result": "", + "description": "Connect the admin intra extension to the tenant demo" + } + ] + } +}
\ No newline at end of file diff --git a/moonclient/moonclient/tests/tests_tenants.json b/moonclient/moonclient/tests/tests_tenants.json new file mode 100644 index 00000000..76e2b10c --- /dev/null +++ b/moonclient/moonclient/tests/tests_tenants.json @@ -0,0 +1,43 @@ +{ + "command_prefix": "moon", + "tests_group": { + "group1": [ + { + "name": "list tenant", + "command": "tenant list", + "result": "^$", + "description": "List all tenants (must be empty)" + }, + { + "name": "add tenant demo", + "command": "tenant add demo", + "result": "Tenant created: (?P<uuid>\\w+)", + "description": "Add a new tenant" + }, + { + "name": "create_intraextension_admin", + "command": "intraextension create --policy_model policy_admin func_test", + "result": "%uuid_admin%", + "description": "Create an admin intra extension" + }, + { + "name": "list_intraextension_admin", + "command": "intraextension list", + "result": "$uuid_admin", + "description": "Check the existence of that admin intra extension" + }, + { + "name": "set_tenant_authz", + "command": "intraextension tenant set authz $uuid_authz demo", + "result": "", + "description": "Connect the authz intra extension to the tenant demo" + }, + { + "name": "set_tenant_admin", + "command": "intraextension tenant set authz $uuid_authz demo", + "result": "", + "description": "Connect the admin intra extension to the tenant demo" + } + ] + } +}
\ No newline at end of file |