summaryrefslogtreecommitdiffstats
path: root/moonclient/moonclient
diff options
context:
space:
mode:
authorasteroide <thomas.duval@orange.com>2015-09-04 17:12:29 +0200
committerasteroide <thomas.duval@orange.com>2015-09-04 17:12:29 +0200
commit7ecd1573fd6ec625fb89b72ffa428ddf658b62f2 (patch)
tree04dbdaf52ef084a952b8432c6ff4d3af9a6494cc /moonclient/moonclient
parent92fd2dbfb672d7b2b1cdfd5dd5cf89f7716b3e12 (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.py25
-rw-r--r--moonclient/moonclient/configuration.py70
-rw-r--r--moonclient/moonclient/shell.py4
-rw-r--r--moonclient/moonclient/tenants.py199
-rw-r--r--moonclient/moonclient/tests.py57
-rw-r--r--moonclient/moonclient/tests/functional_tests.json0
-rw-r--r--moonclient/moonclient/tests/tests_intra_extensions.json43
-rw-r--r--moonclient/moonclient/tests/tests_tenants.json43
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