From: Noah Watkins Date: Fri, 8 Feb 2019 23:25:55 +0000 (-0800) Subject: pybind/orch: add refresh option to inventory query X-Git-Tag: v14.1.0~140^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=96c8a48010b7eecb9b8b5ef7728cfebeb333eb3c;p=ceph.git pybind/orch: add refresh option to inventory query allow a user of the orchestrator interface to express that the inventory query should not read from any cached inventory state. Signed-off-by: Noah Watkins --- diff --git a/qa/tasks/mgr/test_orchestrator_cli.py b/qa/tasks/mgr/test_orchestrator_cli.py index 3caa956e3b0f..aed68f21acc0 100644 --- a/qa/tasks/mgr/test_orchestrator_cli.py +++ b/qa/tasks/mgr/test_orchestrator_cli.py @@ -39,6 +39,10 @@ class TestOrchestratorCli(MgrTestCase): ret = self._orch_cmd("device", "ls") self.assertIn("localhost:", ret) + def test_device_ls_refresh(self): + ret = self._orch_cmd("device", "ls", "--refresh") + self.assertIn("localhost:", ret) + def test_device_ls_hoshs(self): ret = self._orch_cmd("device", "ls", "localhost", "host1") self.assertIn("localhost:", ret) diff --git a/src/pybind/mgr/ansible/module.py b/src/pybind/mgr/ansible/module.py index 0183d8389e12..b94f0057325b 100644 --- a/src/pybind/mgr/ansible/module.py +++ b/src/pybind/mgr/ansible/module.py @@ -267,10 +267,11 @@ class Module(MgrModule, orchestrator.Orchestrator): self.log.info('Stopping Ansible orchestrator module') self.run = False - def get_inventory(self, node_filter=None): + def get_inventory(self, node_filter=None, refresh=False): """ :param : node_filter instance + :param : refresh any cached state :Return : A AnsibleReadOperation instance (Completion Object) """ diff --git a/src/pybind/mgr/deepsea/module.py b/src/pybind/mgr/deepsea/module.py index 344770be6e89..e31a18c4bbbf 100644 --- a/src/pybind/mgr/deepsea/module.py +++ b/src/pybind/mgr/deepsea/module.py @@ -120,7 +120,7 @@ class DeepSeaOrchestrator(MgrModule, orchestrator.Orchestrator): return True, "" - def get_inventory(self, node_filter=None): + def get_inventory(self, node_filter=None, refresh=False): """ Note that this will raise an exception (e.g. if the salt-api is down, or the username/password is incorret). Same for other methods. diff --git a/src/pybind/mgr/orchestrator.py b/src/pybind/mgr/orchestrator.py index 0ace09d714e3..c6b300c2ccc1 100644 --- a/src/pybind/mgr/orchestrator.py +++ b/src/pybind/mgr/orchestrator.py @@ -216,8 +216,8 @@ class Orchestrator(object): """ return self.get_inventory() - def get_inventory(self, node_filter=None): - # type: (InventoryFilter) -> ReadCompletion[List[InventoryNode]] + def get_inventory(self, node_filter=None, refresh=False): + # type: (InventoryFilter, bool) -> ReadCompletion[List[InventoryNode]] """ Returns something that was created by `ceph-volume inventory`. diff --git a/src/pybind/mgr/orchestrator_cli/module.py b/src/pybind/mgr/orchestrator_cli/module.py index 211b6c957ac3..f6043cd9b641 100644 --- a/src/pybind/mgr/orchestrator_cli/module.py +++ b/src/pybind/mgr/orchestrator_cli/module.py @@ -44,11 +44,12 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule): @CLIReadCommand('orchestrator device ls', "name=host,type=CephString,n=N,req=false " - "name=format,type=CephChoices,strings=json|plain,req=false", + "name=format,type=CephChoices,strings=json|plain,req=false " + "name=refresh,type=CephBool,req=false", 'List devices on a node') @handle_exceptions - def _list_devices(self, host=None, format='plain'): - # type: (List[str], str) -> HandleCommandResult + def _list_devices(self, host=None, format='plain', refresh=False): + # type: (List[str], str, bool) -> HandleCommandResult """ Provide information about storage devices present in cluster hosts @@ -58,7 +59,7 @@ class OrchestratorCli(orchestrator.OrchestratorClientMixin, MgrModule): """ nf = orchestrator.InventoryFilter(nodes=host) if host else None - completion = self.get_inventory(node_filter=nf) + completion = self.get_inventory(node_filter=nf, refresh=refresh) self._orchestrator_wait([completion]) diff --git a/src/pybind/mgr/rook/module.py b/src/pybind/mgr/rook/module.py index 2199b43a819d..f9ae9d07a6a1 100644 --- a/src/pybind/mgr/rook/module.py +++ b/src/pybind/mgr/rook/module.py @@ -294,7 +294,7 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator): # things look a bit out of sync? @deferred_read - def get_inventory(self, node_filter=None): + def get_inventory(self, node_filter=None, refresh=False): node_list = None if node_filter and node_filter.nodes: # Explicit node list diff --git a/src/pybind/mgr/test_orchestrator/module.py b/src/pybind/mgr/test_orchestrator/module.py index de0a819eab95..116ef220083e 100644 --- a/src/pybind/mgr/test_orchestrator/module.py +++ b/src/pybind/mgr/test_orchestrator/module.py @@ -203,7 +203,7 @@ class TestOrchestrator(MgrModule, orchestrator.Orchestrator): self._shutdown.wait(5) @deferred_read - def get_inventory(self, node_filter=None): + def get_inventory(self, node_filter=None, refresh=False): """ There is no guarantee which devices are returned by get_inventory. """