]> review.fuel-infra Code Review - tools/sustaining.git/commitdiff
Script for setting up deployed_before atribute 64/23264/1
authorRodion Tikunov <rtikunov@mirantis.com>
Thu, 14 Jul 2016 13:51:52 +0000 (16:51 +0300)
committerRodion Tikunov <rtikunov@mirantis.com>
Thu, 14 Jul 2016 13:51:52 +0000 (16:51 +0300)
MOS versions <=7.0 should prevent `stop deployment` operation when
environment has already deployed. This requires that clusters have
`deployed_before` atribute in generated attributes of environment.

This script sets deployed_before in True value for all environments.
This script should be run on master node.

Change-Id: I554488217759cfedd3ce69af032b0e9426df6fb6
Related-Bug: #1529691

bugs/1529691/set_deployed_before.py [new file with mode: 0755]

diff --git a/bugs/1529691/set_deployed_before.py b/bugs/1529691/set_deployed_before.py
new file mode 100755 (executable)
index 0000000..49709dd
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+
+import json
+import subprocess
+
+
+class DockerUtils():
+    def run_psql_in_container(self, sql, db):
+        ret = []
+        cmd = ["dockerctl",
+               "shell",
+               "postgres",
+               "sudo",
+               "-u",
+               "postgres",
+               "psql",
+               db,
+               "--tuples-only",
+               "--no-align",
+               "-c",
+               sql]
+        results = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                                   stderr=subprocess.PIPE,
+                                   universal_newlines=True)
+
+        for l in results.stdout:
+            ret.append(l.strip())
+
+        return ret
+
+
+class NailgunEditor(DockerUtils):
+    db = "nailgun"
+
+    def add_deployed_before_flag(self):
+        values = []
+        for line in self.run_psql_in_container(
+                "select id, generated from attributes;", self.db):
+            c_id, c_data = line.split("|", 1)
+            data = json.loads(c_data)
+            data["deployed_before"] = {"value": True}
+            values.append("({0}, '{1}')".format(c_id, json.dumps(data)))
+
+        if values:
+            self.run_psql_in_container(
+                'update attributes as a set generated = b.generated '
+                'from (values {0}) as b(id, generated) '
+                'where a.id = b.id;'.format(','.join(values)),
+                self.db)
+
+
+if __name__ == "__main__":
+    ne = NailgunEditor()
+    ne.add_deployed_before_flag()
+    print("deployed_before flag successfully added")