Muehlenhoff has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/373865 )

Change subject: Add support for querying reverse dependencies
......................................................................

Add support for querying reverse dependencies

Executes debdeploy-revdeps on the clients.
Change-Id: I2865a2c447c5b44563d1ee7cff65bc10275f4c51
---
M server/debdeploy
1 file changed, 39 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/debs/debdeploy 
refs/changes/65/373865/1

diff --git a/server/debdeploy b/server/debdeploy
index 63c77ae..c3977f2 100755
--- a/server/debdeploy
+++ b/server/debdeploy
@@ -168,7 +168,8 @@
         msg = str(output)
         if msg.startswith("OK "):
             if str(msg[3:]) == '"No service needs a restart"':
-                no_restarts_needed = nodeset
+                print "No restarts were needed for", len(no_restarts_needed), 
"host(s):"
+                print nodeset
             else:
                 restarts = json.loads(msg[3:])
                 if restarts:
@@ -187,17 +188,44 @@
             print "  ", program
             print "      " + str(restarts_per_lib[lib][program]) + " (" + 
str(len(restarts_per_lib[lib][program])) + " hosts)"
 
-    if no_restarts_needed:
-        print
-        print "No restarts were needed for", len(no_restarts_needed), 
"host(s)."
+    show_unreachable_hosts(worker)
+
+
+def detect_rev_deps(pkgnames, servergroup):
+    '''
+    Query for necessary restarts after a library or interpreter upgrade
+
+    pkgnames    : A list of package names for which reverse depencies are 
displayed,
+                  e.g. libssl1.1 (list of strings)
+    servergroup : The name of the server group for which process restarts 
should be queried (string)
+    '''
+
+    cmd = '/usr/bin/debdeploy-revdeps --json ' + ' '.join(pkgnames)
+
+    worker = run_cumin(cmd)
+
+    for nodeset, output in worker.get_results():
+        msg = str(output)
+        if msg.startswith("OK "):
+            deps = json.loads(msg[3:])
+            if deps:
+                print nodeset
+                for service in deps:
+                    print "  ", service
+            else:
+                print nodeset
+                print "   No reverse dependencies instaled"
 
     show_unreachable_hosts(worker)
+
 
 def main():
     p = argparse.ArgumentParser(usage="""debdeploy-master [options] command 
<cmd-option> \n
     The following commands are supported: \n\n
     deploy                      Install a software update, requires --update 
and --servers \n
     query_restart               Query for necessary restarts after a library 
or interpreter \n
+                                upgrade \n
+    query_deps                  Query for necessary restarts after a library 
or interpreter \n
                                 upgrade \n
     rollback                    Rollback a software deployment""")
 
@@ -209,13 +237,14 @@
     p.add_argument("--verbose", action="store_true", dest="verbose",
                    help="Enable verbose output, e.g. show full apt output in 
status-deploy and \
                    status-rollback")
+    p.add_argument('--packages', action='store', nargs='+', help="Packages to 
query reverse dependencies")
 
     p.add_argument("command")
     p.add_argument("command_option", nargs="?", default="unset")
 
     opt = p.parse_args()
 
-    if opt.command in ("deploy", "rollback", "restart", "query_restart"):
+    if opt.command in ("deploy", "rollback", "restart", "query_restart", 
"query_deps"):
         if not opt.serverlist:
             p.error("You need to provide a server list (-s)")
 
@@ -223,9 +252,9 @@
         if not opt.updatefile:
             p.error("You need to provide an update file (-u)")
 
-    if opt.command in ("restart"):
-        if not opt.program:
-            p.error("You need to provide a program to restart (-p)")
+    if opt.command in ("query_deps"):
+        if not opt.packages:
+            p.error("You need to provide packages for dependency detection")
 
     if opt.command == "deploy":
         update = DebDeployUpdateSpec(opt.updatefile, conf.supported_distros)
@@ -236,11 +265,8 @@
         update = DebDeployUpdateSpec(opt.updatefile, conf.supported_distros)
         detect_restarts(update.libraries, opt.serverlist)
 
-    elif opt.command == "status-rollback":
-        display_status(rollback_mode=True)
-
-    elif opt.command == "rollback":
-        rollback(opt.serverlist, opt.updatefile)
+    elif opt.command == "query_deps":
+        detect_rev_deps(opt.packages, opt.serverlist)
 
 
 if __name__ == '__main__':

-- 
To view, visit https://gerrit.wikimedia.org/r/373865
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2865a2c447c5b44563d1ee7cff65bc10275f4c51
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/debdeploy
Gerrit-Branch: master
Gerrit-Owner: Muehlenhoff <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to