summaryrefslogtreecommitdiff
path: root/src/caas/services/ansibleservice.py
diff options
context:
space:
mode:
authorckonstanski <kostcarl@isu.edu>2026-07-30 18:17:14 -0600
committerckonstanski <kostcarl@isu.edu>2026-07-30 18:17:14 -0600
commit640ff61422bc0ee3966941b93d9889ddbbd38d77 (patch)
treeabf1c08f5d38ee53ec8b29dc4f425722517505e6 /src/caas/services/ansibleservice.py
parent22dae02a86c1fce71091bfa5289cf99abba1b217 (diff)
more filesHEADmaster
Diffstat (limited to 'src/caas/services/ansibleservice.py')
-rw-r--r--src/caas/services/ansibleservice.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/caas/services/ansibleservice.py b/src/caas/services/ansibleservice.py
new file mode 100644
index 0000000..148bcf4
--- /dev/null
+++ b/src/caas/services/ansibleservice.py
@@ -0,0 +1,52 @@
+from django.conf import settings
+import json
+import zmq
+import logging
+
+
+logger = logging.getLogger("caas")
+
+
+"""
+Superclass for classes that manage ansible playbooks, for example
+icinga and wr-installer.
+"""
+class AnsibleService():
+ def __init__(self, ansible_queue, target, git, branch, playbook, zmq, maint_window_p = False):
+ self.ansible_queue = ansible_queue
+ self.target = target
+ self.git = git
+ self.branch = branch
+ self.playbook = playbook
+ self.zmq = zmq
+ self.maint_window_p = maint_window_p
+
+ def run_playbook(self, inventory, inventory_content, hostvars, hostvars_content, extra_args = {}):
+ payload = [{"git": self.git,
+ "playbook": self.playbook,
+ "maintWindowP": self.maint_window_p,
+ "inventory": inventory,
+ "inventoryContent": inventory_content,
+ "hostvars": hostvars,
+ "hostvarsContent": hostvars_content}]
+ payload[0].update(extra_args)
+ payload_json = json.dumps(payload)
+ context = zmq.Context()
+ retries = 10
+ while True:
+ socket = context.socket(zmq.REQ)
+ if settings.ZEROMQ_IPV6:
+ socket.setsockopt(zmq.IPV6, 1)
+ # logger.debug("sending playbook: %s" % payload_json)
+ socket.connect(self.zmq)
+ socket.send_string(payload_json)
+ logger.debug("sent playbook")
+ if (socket.poll(5000) & zmq.POLLIN) != 0:
+ return socket.recv()
+ retries -= 1
+ socket.setsockopt(zmq.LINGER, 0)
+ socket.close()
+ if retries == 0:
+ errmsg = "Failed to send zmq message to ansible-queue: %s" % payload_json
+ logger.error(errmsg)
+ raise Exception(errmsg)