From 7ae6b34e71e13cc7645c65b5677d17da7d8d2648 Mon Sep 17 00:00:00 2001 From: Benjamin Schanzel Date: Thu, 17 Mar 2022 08:51:20 +0100 Subject: [PATCH] Pass requestor data to Nodes Propagate the NodeRequest.requestor to a new property Node.requestor which usually holds the zuul_system_id, or "NodePool:min_ready". This is set initially when first creating a node, and is updated when a ready node is assigned to a request. This is to always know for which requestor is a node got allocated. Change-Id: Ifd54a94bae39f31a70bdedce384a64c2a04495c1 --- nodepool/driver/__init__.py | 2 ++ nodepool/tests/unit/test_launcher.py | 4 ++++ nodepool/zk.py | 6 +++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/nodepool/driver/__init__.py b/nodepool/driver/__init__.py index 473a0df67..88e8b3bfe 100644 --- a/nodepool/driver/__init__.py +++ b/nodepool/driver/__init__.py @@ -466,6 +466,7 @@ class NodeRequestHandler(NodeRequestHandlerNotifications, got_a_node = True node.allocated_to = self.request.id node.tenant_name = self.request.tenant_name + node.requestor = self.request.requestor self.zk.storeNode(node) self.nodeset.append(node) self._satisfied_types.add(ntype, node.id) @@ -514,6 +515,7 @@ class NodeRequestHandler(NodeRequestHandlerNotifications, node.launcher = self.launcher_id node.allocated_to = self.request.id node.tenant_name = self.request.tenant_name + node.requestor = self.request.requestor # This sets static data defined in the config file in the # ZooKeeper Node object. diff --git a/nodepool/tests/unit/test_launcher.py b/nodepool/tests/unit/test_launcher.py index 8226a0ed0..997db7901 100644 --- a/nodepool/tests/unit/test_launcher.py +++ b/nodepool/tests/unit/test_launcher.py @@ -49,6 +49,8 @@ class TestLauncher(tests.DBTestCase): req = zk.NodeRequest() req.state = zk.REQUESTED req.node_types.append('fake-label') + req.tenant_name = 'tenant-1' + req.requestor = 'unit-test' self.zk.storeNodeRequest(req) req = self.waitForNodeRequest(req) @@ -67,6 +69,8 @@ class TestLauncher(tests.DBTestCase): self.assertEqual(node.connection_type, 'ssh') self.assertEqual(node.connection_port, 22) self.assertEqual(node.python_path, '/usr/bin/python3') + self.assertEqual(node.tenant_name, 'tenant-1') + self.assertEqual(node.requestor, 'unit-test') p = "{path}/{id}".format( path=self.zk._imageUploadPath(image.image_name, image.build_id, diff --git a/nodepool/zk.py b/nodepool/zk.py index 58b67453d..1307941d0 100644 --- a/nodepool/zk.py +++ b/nodepool/zk.py @@ -599,6 +599,7 @@ class Node(BaseModel): self.python_path = None self.tenant_name = None self.driver_data = None + self.requestor = None def __repr__(self): d = self.toDict() @@ -641,7 +642,8 @@ class Node(BaseModel): self.attributes == other.attributes and self.python_path == other.python_path and self.tenant_name == other.tenant_name and - self.driver_data == other.driver_data) + self.driver_data == other.driver_data and + self.requestor == other.requestor) else: return False @@ -695,6 +697,7 @@ class Node(BaseModel): d['python_path'] = self.python_path d['tenant_name'] = self.tenant_name d['driver_data'] = self.driver_data + d['requestor'] = self.requestor return d @staticmethod @@ -763,6 +766,7 @@ class Node(BaseModel): self.shell_type = d.get('shell_type') self.tenant_name = d.get('tenant_name') self.driver_data = d.get('driver_data') + self.requestor = d.get('requestor') class ZooKeeper(object):