From: Sebastian Wagner Date: Fri, 11 Sep 2020 10:49:39 +0000 (+0200) Subject: mgr/cephadm: move _refresh_hosts_and_daemons to serve.py X-Git-Tag: v15.2.8~14^2~32 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=28b3ae4bee0bf59f47e169167d0b32f53128b6dc;p=ceph.git mgr/cephadm: move _refresh_hosts_and_daemons to serve.py Signed-off-by: Sebastian Wagner (cherry picked from commit d73dc54e4ee9150e750afe779546d0242ad176c2) --- diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index b54cbde671ad..3995d559388d 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -1384,75 +1384,6 @@ To check that the host is reachable: self.log.debug(f'Refreshed OSDSpec previews for host <{host}>') return True - def _refresh_hosts_and_daemons(self) -> None: - bad_hosts = [] - failures = [] - - @forall_hosts - def refresh(host): - if self.cache.host_needs_check(host): - r = self._check_host(host) - if r is not None: - bad_hosts.append(r) - if self.cache.host_needs_daemon_refresh(host): - self.log.debug('refreshing %s daemons' % host) - r = self._refresh_host_daemons(host) - if r: - failures.append(r) - - if self.cache.host_needs_registry_login(host) and self.registry_url: - self.log.debug(f"Logging `{host}` into custom registry") - r = self._registry_login(host, self.registry_url, - self.registry_username, self.registry_password) - if r: - bad_hosts.append(r) - - if self.cache.host_needs_device_refresh(host): - self.log.debug('refreshing %s devices' % host) - r = self._refresh_host_devices(host) - if r: - failures.append(r) - - if self.cache.host_needs_osdspec_preview_refresh(host): - self.log.debug(f"refreshing OSDSpec previews for {host}") - r = self._refresh_host_osdspec_previews(host) - if r: - failures.append(r) - - if self.cache.host_needs_new_etc_ceph_ceph_conf(host): - self.log.debug(f"deploying new /etc/ceph/ceph.conf on `{host}`") - r = self._deploy_etc_ceph_ceph_conf(host) - if r: - bad_hosts.append(r) - - refresh(self.cache.get_hosts()) - - health_changed = False - if 'CEPHADM_HOST_CHECK_FAILED' in self.health_checks: - del self.health_checks['CEPHADM_HOST_CHECK_FAILED'] - health_changed = True - if bad_hosts: - self.health_checks['CEPHADM_HOST_CHECK_FAILED'] = { - 'severity': 'warning', - 'summary': '%d hosts fail cephadm check' % len(bad_hosts), - 'count': len(bad_hosts), - 'detail': bad_hosts, - } - health_changed = True - if failures: - self.health_checks['CEPHADM_REFRESH_FAILED'] = { - 'severity': 'warning', - 'summary': 'failed to probe daemons or devices', - 'count': len(failures), - 'detail': failures, - } - health_changed = True - elif 'CEPHADM_REFRESH_FAILED' in self.health_checks: - del self.health_checks['CEPHADM_REFRESH_FAILED'] - health_changed = True - if health_changed: - self.set_health_checks(self.health_checks) - def _refresh_host_daemons(self, host) -> Optional[str]: try: out, err, code = self._run_cephadm( diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py index 66f2ddbc950c..091c71d27142 100644 --- a/src/pybind/mgr/cephadm/serve.py +++ b/src/pybind/mgr/cephadm/serve.py @@ -1,6 +1,7 @@ import logging from typing import TYPE_CHECKING +from cephadm.utils import forall_hosts from orchestrator import OrchestratorError if TYPE_CHECKING: @@ -38,7 +39,7 @@ class CephadmServe: # refresh daemons self.log.debug('refreshing hosts and daemons') - self.mgr._refresh_hosts_and_daemons() + self._refresh_hosts_and_daemons() self.mgr._check_for_strays() @@ -71,3 +72,72 @@ class CephadmServe: self.log.debug('Sleeping for %d seconds', sleep_interval) ret = self.mgr.event.wait(sleep_interval) self.mgr.event.clear() + + def _refresh_hosts_and_daemons(self) -> None: + bad_hosts = [] + failures = [] + + @forall_hosts + def refresh(host): + if self.mgr.cache.host_needs_check(host): + r = self.mgr._check_host(host) + if r is not None: + bad_hosts.append(r) + if self.mgr.cache.host_needs_daemon_refresh(host): + self.log.debug('refreshing %s daemons' % host) + r = self.mgr._refresh_host_daemons(host) + if r: + failures.append(r) + + if self.mgr.cache.host_needs_registry_login(host) and self.mgr.registry_url: + self.log.debug(f"Logging `{host}` into custom registry") + r = self.mgr._registry_login(host, self.mgr.registry_url, + self.mgr.registry_username, self.mgr.registry_password) + if r: + bad_hosts.append(r) + + if self.mgr.cache.host_needs_device_refresh(host): + self.log.debug('refreshing %s devices' % host) + r = self.mgr._refresh_host_devices(host) + if r: + failures.append(r) + + if self.mgr.cache.host_needs_osdspec_preview_refresh(host): + self.log.debug(f"refreshing OSDSpec previews for {host}") + r = self.mgr._refresh_host_osdspec_previews(host) + if r: + failures.append(r) + + if self.mgr.cache.host_needs_new_etc_ceph_ceph_conf(host): + self.log.debug(f"deploying new /etc/ceph/ceph.conf on `{host}`") + r = self.mgr._deploy_etc_ceph_ceph_conf(host) + if r: + bad_hosts.append(r) + + refresh(self.mgr.cache.get_hosts()) + + health_changed = False + if 'CEPHADM_HOST_CHECK_FAILED' in self.mgr.health_checks: + del self.mgr.health_checks['CEPHADM_HOST_CHECK_FAILED'] + health_changed = True + if bad_hosts: + self.mgr.health_checks['CEPHADM_HOST_CHECK_FAILED'] = { + 'severity': 'warning', + 'summary': '%d hosts fail cephadm check' % len(bad_hosts), + 'count': len(bad_hosts), + 'detail': bad_hosts, + } + health_changed = True + if failures: + self.mgr.health_checks['CEPHADM_REFRESH_FAILED'] = { + 'severity': 'warning', + 'summary': 'failed to probe daemons or devices', + 'count': len(failures), + 'detail': failures, + } + health_changed = True + elif 'CEPHADM_REFRESH_FAILED' in self.mgr.health_checks: + del self.mgr.health_checks['CEPHADM_REFRESH_FAILED'] + health_changed = True + if health_changed: + self.mgr.set_health_checks(self.mgr.health_checks) diff --git a/src/pybind/mgr/cephadm/tests/fixtures.py b/src/pybind/mgr/cephadm/tests/fixtures.py index 460e4a24b75b..c263c81bfc78 100644 --- a/src/pybind/mgr/cephadm/tests/fixtures.py +++ b/src/pybind/mgr/cephadm/tests/fixtures.py @@ -5,6 +5,7 @@ from contextlib import contextmanager from ceph.deployment.service_spec import PlacementSpec, ServiceSpec from cephadm.module import CEPH_DATEFMT +from cephadm.serve import CephadmServe try: from typing import Any, Iterator, List @@ -118,7 +119,7 @@ def with_host(m: CephadmOrchestrator, name, refresh_hosts=True): # type: (CephadmOrchestrator, str) -> None wait(m, m.add_host(HostSpec(hostname=name))) if refresh_hosts: - m._refresh_hosts_and_daemons() + CephadmServe(m)._refresh_hosts_and_daemons() yield wait(m, m.remove_host(name)) diff --git a/src/pybind/mgr/cephadm/tests/test_cephadm.py b/src/pybind/mgr/cephadm/tests/test_cephadm.py index 82712dd2f1bd..a64254714ec3 100644 --- a/src/pybind/mgr/cephadm/tests/test_cephadm.py +++ b/src/pybind/mgr/cephadm/tests/test_cephadm.py @@ -6,6 +6,7 @@ from unittest.mock import ANY import pytest from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection +from cephadm.serve import CephadmServe from cephadm.services.osd import OSD, OSDQueue try: @@ -832,14 +833,14 @@ class TestCephadm(object): cephadm_module.config_notify() assert cephadm_module.manage_etc_ceph_ceph_conf == True - cephadm_module._refresh_hosts_and_daemons() + CephadmServe(cephadm_module)._refresh_hosts_and_daemons() _check.assert_called_with(ANY, ['dd', 'of=/etc/ceph/ceph.conf'], stdin=b'') assert not cephadm_module.cache.host_needs_new_etc_ceph_ceph_conf('test') # set extra config and expect that we deploy another ceph.conf cephadm_module._set_extra_ceph_conf('[mon]\nk=v') - cephadm_module._refresh_hosts_and_daemons() + CephadmServe(cephadm_module)._refresh_hosts_and_daemons() _check.assert_called_with( ANY, ['dd', 'of=/etc/ceph/ceph.conf'], stdin=b'\n\n[mon]\nk=v\n') diff --git a/src/pybind/mgr/cephadm/tests/test_migration.py b/src/pybind/mgr/cephadm/tests/test_migration.py index ac2011f1b3a6..4b86c2246732 100644 --- a/src/pybind/mgr/cephadm/tests/test_migration.py +++ b/src/pybind/mgr/cephadm/tests/test_migration.py @@ -9,6 +9,7 @@ from cephadm.inventory import SPEC_STORE_PREFIX from cephadm.utils import DATEFMT from cephadm.tests.fixtures import _run_cephadm, cephadm_module, wait, with_host from orchestrator import OrchestratorError +from cephadm.serve import CephadmServe from tests import mock @@ -32,7 +33,7 @@ def test_migrate_scheduler(cephadm_module: CephadmOrchestrator): # assert we need all daemons. assert cephadm_module.migration_current == 0 - cephadm_module._refresh_hosts_and_daemons() + CephadmServe(cephadm_module)._refresh_hosts_and_daemons() cephadm_module.migration.migrate() cephadm_module._apply_all_services() diff --git a/src/pybind/mgr/cephadm/tests/test_upgrade.py b/src/pybind/mgr/cephadm/tests/test_upgrade.py index 095b55408a7b..8316670856f3 100644 --- a/src/pybind/mgr/cephadm/tests/test_upgrade.py +++ b/src/pybind/mgr/cephadm/tests/test_upgrade.py @@ -6,6 +6,7 @@ import pytest from ceph.deployment.service_spec import ServiceSpec from cephadm import CephadmOrchestrator from cephadm.upgrade import CephadmUpgrade +from cephadm.serve import CephadmServe from .fixtures import _run_cephadm, wait, cephadm_module, with_host, with_service @@ -73,7 +74,7 @@ def test_upgrade_run(use_repo_digest, cephadm_module: CephadmOrchestrator): ) ]) )): - cephadm_module._refresh_hosts_and_daemons() + CephadmServe(cephadm_module)._refresh_hosts_and_daemons() cephadm_module.upgrade._do_upgrade()