diff --git a/netbox_awx_plugin/models.py b/netbox_awx_plugin/models.py index 664da34e58f8e9f4e9a0747cf6e97683aaeb7936..9473c6009cd723e642e8d20b97a88a403031018d 100644 --- a/netbox_awx_plugin/models.py +++ b/netbox_awx_plugin/models.py @@ -57,14 +57,30 @@ class AWXInventory(NetBoxModel): else: return None + def get_max_page_size(self, endpoint): + url = urljoin( + self.awx.url, + f"/api/v2/inventories/{self.inventory_id}/{endpoint}/", + ) + r = requests.options( + url=url, + headers=self.awx.get_headers(), + verify=False, + ) + r.raise_for_status() + data = r.json() + return data.get("max_page_size") + + def get_all_hosts(self): """ Retrieves all hosts from the AWX inventory. """ hosts = {} page = 1 + max_page_size = self.get_max_page_size('hosts') while True: - params = {"page": page} + params = {"page": page, "page_size": max_page_size} r = requests.get( url=urljoin( self.awx.url, @@ -141,8 +157,9 @@ class AWXInventory(NetBoxModel): """ groups = {} page = 1 + max_page_size = self.get_max_page_size('groups') while True: - params = {"page": page} + params = {"page": page, "page_size": max_page_size} r = requests.get( url=urljoin( self.awx.url, diff --git a/netbox_awx_plugin/tests/test_models.py b/netbox_awx_plugin/tests/test_models.py index 5625b06905425e189c612ca50e94bd3c51ba90c7..c1df3755e1441f4728f131fe420ffea637fd59bc 100644 --- a/netbox_awx_plugin/tests/test_models.py +++ b/netbox_awx_plugin/tests/test_models.py @@ -202,7 +202,11 @@ class AWXInventoryModelTestCase(TestCase): mock_put.return_value = mock_put_response data = {"name": "updated-group"} - self.inventory.update_group("test-group", data) + + group = self.inventory.get_group("test-group") + group_id = group['id'] + + self.inventory.update_group(group_id, data) # Check that get_group was called correctly expected_get_url = urljoin(self.awx_instance.url, f"/api/v2/inventories/{self.inventory.inventory_id}/groups/")