aboutsummaryrefslogtreecommitdiffstats
path: root/onap-client/onap_client/engine.py
diff options
context:
space:
mode:
authorstark, steven <steven.stark@att.com>2020-09-17 13:04:35 -0700
committerstark, steven <steven.stark@att.com>2020-09-17 13:04:35 -0700
commit35375724d9657de99adb8e530e1be21305555a40 (patch)
tree28806a1a1317426546ffdb9755d6f632ce088605 /onap-client/onap_client/engine.py
parent591c548e569423dad8d106d4d2cd26bc5ce24b19 (diff)
[VVP] Updating onap-client
Removing dependency on distutils moving etc/ to package resource Adding support for volume creation and delete Removing module level imports Adding delete capability to spec-engine Adding kwarg to pass Client instance to functions Issue-ID: VVP-469 Signed-off-by: stark, steven <steven.stark@att.com> Change-Id: Ie00065f54411c8ff40ea20c35fe919ce15f65e6a
Diffstat (limited to 'onap-client/onap_client/engine.py')
-rw-r--r--onap-client/onap_client/engine.py70
1 files changed, 60 insertions, 10 deletions
diff --git a/onap-client/onap_client/engine.py b/onap-client/onap_client/engine.py
index 8f42507..f04d36d 100644
--- a/onap-client/onap_client/engine.py
+++ b/onap-client/onap_client/engine.py
@@ -70,7 +70,7 @@ def show_resource_spec(resource_name):
list_spec_resources()
-def load_spec(input_spec, validate_only=False, submit=True, suppress_out=False, config=None):
+def load_spec(input_spec, validate_only=False, submit=True, suppress_out=False, config=None, delete=False):
try:
with open(input_spec, "r") as f:
jdata = json.loads(f.read())
@@ -79,7 +79,7 @@ def load_spec(input_spec, validate_only=False, submit=True, suppress_out=False,
raise
engine = SpecEngine(config_file=config)
- return engine.load_spec(jdata, validate_only=validate_only, distribute=submit, suppress_out=suppress_out)
+ return engine.load_spec(jdata, validate_only=validate_only, distribute=submit, suppress_out=suppress_out, delete=delete)
def spec_cli(args):
@@ -92,6 +92,12 @@ def spec_cli(args):
)
parser.add_argument(
+ "--delete-spec",
+ required=False,
+ help="Delete the resources from a local spec file.",
+ )
+
+ parser.add_argument(
"--validate-spec",
required=False,
help="Validates a local spec file for the spec engine.",
@@ -127,9 +133,41 @@ def spec_cli(args):
elif arguments.show_resource_spec:
show_resource_spec(arguments.show_resource_spec)
elif arguments.validate_spec:
- print(json.dumps(load_spec(arguments.validate_spec, validate_only=True, suppress_out=arguments.no_outputs), indent=4))
+ print(
+ json.dumps(
+ load_spec(
+ arguments.validate_spec,
+ validate_only=True,
+ suppress_out=arguments.no_outputs
+ ),
+ indent=4
+ )
+ )
elif arguments.load_spec:
- print(json.dumps(load_spec(arguments.load_spec, submit=arguments.no_submit, suppress_out=arguments.no_outputs, config=arguments.oc_config), indent=4))
+ print(
+ json.dumps(
+ load_spec(
+ arguments.load_spec,
+ submit=arguments.no_submit,
+ suppress_out=arguments.no_outputs,
+ config=arguments.oc_config
+ ),
+ indent=4
+ )
+ )
+ elif arguments.delete_spec:
+ print(
+ json.dumps(
+ load_spec(
+ arguments.delete_spec,
+ submit=arguments.no_submit,
+ suppress_out=arguments.no_outputs,
+ config=arguments.oc_config,
+ delete=True
+ ),
+ indent=4
+ )
+ )
class SpecEngine:
@@ -137,7 +175,7 @@ class SpecEngine:
self.spec = {}
self.oc = get_client(config_file=config_file, **oc_kwargs)
- def load_spec(self, spec, distribute=True, validate_only=False, suppress_out=False):
+ def load_spec(self, spec, distribute=True, validate_only=False, suppress_out=False, delete=False):
self.spec = resolve_spec(spec)
self.validate(self.spec.get("spec", {}))
@@ -146,7 +184,9 @@ class SpecEngine:
out = self.spec
if not validate_only:
- out = self._create(self.spec.get("spec", {}), distribute, suppress_out)
+ resources = self.spec.get("spec", [])
+ resources = list(reversed(resources)) if delete else resources
+ out = self._load(resources, distribute, suppress_out, delete)
return out
@@ -182,22 +222,32 @@ class SpecEngine:
)
subclass.validate(resource_spec)
- def _create(self, spec, distribute, suppress_out):
+ def _load(self, resources, distribute, suppress_out, delete):
full_engine_spec = []
- for item_spec in spec:
+ for item_spec in resources:
resource_type = item_spec.get("type")
resource_spec = item_spec.get("resource_spec")
subclass = get_resource_subclass(resource_type)
+
if not subclass:
raise ResourceTypeNotFoundException(
"Resource type {} was not found".format(resource_type)
)
+
full_spec = subclass.validate(resource_spec)
+
logger.debug(json.dumps(full_spec, indent=4))
- t = subclass.create_from_spec(full_spec, submit=distribute)
+
+ if delete:
+ t = subclass.delete_from_spec(full_spec, oc=self.oc)
+ else:
+ t = subclass.create_from_spec(full_spec, submit=distribute, oc=self.oc)
+
finished_spec = {"type": resource_type, "resource_spec": full_spec}
- if not suppress_out:
+
+ if not suppress_out and not delete:
finished_spec["output"] = t._output()
+
full_engine_spec.append(finished_spec)
return {"spec": full_engine_spec}