From 26bd2c13785c2a06e0a56955cff687e9a998841e Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Tue, 26 Feb 2019 14:32:01 -0800 Subject: [PATCH] lorax-composer: Delete workspace copy when deleting blueprint Also extends the blueprint delete test to also check the workspace. --- src/pylorax/api/v0.py | 4 +++- tests/pylorax/test_server.py | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/pylorax/api/v0.py b/src/pylorax/api/v0.py index 5f8724a0..d9e52844 100644 --- a/src/pylorax/api/v0.py +++ b/src/pylorax/api/v0.py @@ -201,7 +201,8 @@ DELETE `/api/v0/blueprints/delete/` Delete a blueprint. The blueprint is deleted from the branch, and will no longer be listed by the `list` route. A blueprint can be undeleted using the `undo` route - to revert to a previous commit. + to revert to a previous commit. This will also delete the workspace copy of the + blueprint. The response will be a status response with `status` set to true, or an error response with it set to false and an error message included. @@ -1212,6 +1213,7 @@ def v0_api(api): try: with api.config["GITLOCK"].lock: + workspace_delete(api.config["GITLOCK"].repo, branch, blueprint_name) delete_recipe(api.config["GITLOCK"].repo, branch, blueprint_name) except Exception as e: log.error("(v0_blueprints_delete) %s", str(e)) diff --git a/tests/pylorax/test_server.py b/tests/pylorax/test_server.py index c2cacc01..045c38a9 100644 --- a/tests/pylorax/test_server.py +++ b/tests/pylorax/test_server.py @@ -370,6 +370,25 @@ class ServerTestCase(unittest.TestCase): def test_10_blueprints_delete(self): """Test DELETE /api/v0/blueprints/delete/""" + + # Push a new workspace blueprint first + test_blueprint = {"description": "An example GlusterFS server with samba, ws version", + "name":"example-glusterfs", + "version": "1.4.0", + "modules":[{"name":"glusterfs", "version":"5.*"}, + {"name":"glusterfs-cli", "version":"5.*"}], + "packages":[{"name":"samba", "version":"4.*.*"}, + {"name":"tmux", "version":"2.8"}], + "groups": []} + resp = self.server.post("/api/v0/blueprints/workspace", + data=json.dumps(test_blueprint), + content_type="application/json") + data = json.loads(resp.data) + self.assertEqual(data, {"status":True}) + # Make sure the workspace file is present + self.assertEqual(os.path.exists(joinpaths(self.repo_dir, "git/workspace/master/example-glusterfs.toml")), True) + + # This should delete the git blueprint and the workspace copy resp = self.server.delete("/api/v0/blueprints/delete/example-glusterfs") data = json.loads(resp.data) self.assertEqual(data, {"status":True}) @@ -381,6 +400,9 @@ class ServerTestCase(unittest.TestCase): blueprints = data.get("blueprints") self.assertEqual("example-glusterfs" in blueprints, False) + # Make sure the workspace file is gone + self.assertEqual(os.path.exists(joinpaths(self.repo_dir, "git/workspace/master/example-glusterfs.toml")), False) + def test_11_blueprints_undo(self): """Test POST /api/v0/blueprints/undo//""" resp = self.server.get("/api/v0/blueprints/changes/example-glusterfs")