|
36 | 36 | from ceph.deployment.service_spec import \ |
37 | 37 | ServiceSpec, PlacementSpec, \ |
38 | 38 | HostPlacementSpec, IngressSpec, \ |
39 | | - TunedProfileSpec, IscsiServiceSpec, \ |
| 39 | + TunedProfileSpec, \ |
40 | 40 | MgmtGatewaySpec |
41 | 41 | from ceph.utils import str_to_datetime, datetime_to_str, datetime_now |
42 | 42 | from cephadm.serve import CephadmServe |
@@ -2931,124 +2931,9 @@ def _calc_daemon_deps(self, |
2931 | 2931 | spec: Optional[ServiceSpec], |
2932 | 2932 | daemon_type: str, |
2933 | 2933 | daemon_id: str) -> List[str]: |
2934 | | - |
2935 | | - def get_daemon_names(daemons: List[str]) -> List[str]: |
2936 | | - daemon_names = [] |
2937 | | - for daemon_type in daemons: |
2938 | | - for dd in self.cache.get_daemons_by_type(daemon_type): |
2939 | | - daemon_names.append(dd.name()) |
2940 | | - return daemon_names |
2941 | | - |
2942 | | - prom_cred_hash = None |
2943 | | - alertmgr_cred_hash = None |
2944 | | - security_enabled, mgmt_gw_enabled, _ = self._get_security_config() |
2945 | | - if security_enabled: |
2946 | | - alertmanager_user, alertmanager_password = self._get_alertmanager_credentials() |
2947 | | - prometheus_user, prometheus_password = self._get_prometheus_credentials() |
2948 | | - if prometheus_user and prometheus_password: |
2949 | | - prom_cred_hash = f'{utils.md5_hash(prometheus_user + prometheus_password)}' |
2950 | | - if alertmanager_user and alertmanager_password: |
2951 | | - alertmgr_cred_hash = f'{utils.md5_hash(alertmanager_user + alertmanager_password)}' |
2952 | | - |
2953 | | - deps = [] |
2954 | | - if daemon_type == 'haproxy': |
2955 | | - # because cephadm creates new daemon instances whenever |
2956 | | - # port or ip changes, identifying daemons by name is |
2957 | | - # sufficient to detect changes. |
2958 | | - if not spec: |
2959 | | - return [] |
2960 | | - ingress_spec = cast(IngressSpec, spec) |
2961 | | - assert ingress_spec.backend_service |
2962 | | - daemons = self.cache.get_daemons_by_service(ingress_spec.backend_service) |
2963 | | - deps = [d.name() for d in daemons] |
2964 | | - elif daemon_type == 'keepalived': |
2965 | | - # because cephadm creates new daemon instances whenever |
2966 | | - # port or ip changes, identifying daemons by name is |
2967 | | - # sufficient to detect changes. |
2968 | | - if not spec: |
2969 | | - return [] |
2970 | | - daemons = self.cache.get_daemons_by_service(spec.service_name()) |
2971 | | - deps = [d.name() for d in daemons if d.daemon_type == 'haproxy'] |
2972 | | - elif daemon_type == 'agent': |
2973 | | - root_cert = '' |
2974 | | - server_port = '' |
2975 | | - try: |
2976 | | - server_port = str(self.http_server.agent.server_port) |
2977 | | - root_cert = self.cert_mgr.get_root_ca() |
2978 | | - except Exception: |
2979 | | - pass |
2980 | | - deps = sorted([self.get_mgr_ip(), server_port, root_cert, |
2981 | | - str(self.device_enhanced_scan)]) |
2982 | | - elif daemon_type == 'node-proxy': |
2983 | | - root_cert = '' |
2984 | | - server_port = '' |
2985 | | - try: |
2986 | | - server_port = str(self.http_server.agent.server_port) |
2987 | | - root_cert = self.cert_mgr.get_root_ca() |
2988 | | - except Exception: |
2989 | | - pass |
2990 | | - deps = sorted([self.get_mgr_ip(), server_port, root_cert]) |
2991 | | - elif daemon_type == 'iscsi': |
2992 | | - if spec: |
2993 | | - iscsi_spec = cast(IscsiServiceSpec, spec) |
2994 | | - deps = [self.iscsi_service.get_trusted_ips(iscsi_spec)] |
2995 | | - else: |
2996 | | - deps = [self.get_mgr_ip()] |
2997 | | - elif daemon_type == 'prometheus': |
2998 | | - if not mgmt_gw_enabled: |
2999 | | - # for prometheus we add the active mgr as an explicit dependency, |
3000 | | - # this way we force a redeploy after a mgr failover |
3001 | | - deps.append(self.get_active_mgr().name()) |
3002 | | - deps.append(str(self.get_module_option_ex('prometheus', 'server_port', 9283))) |
3003 | | - deps.append(str(self.service_discovery_port)) |
3004 | | - # prometheus yaml configuration file (generated by prometheus.yml.j2) contains |
3005 | | - # a scrape_configs section for each service type. This should be included only |
3006 | | - # when at least one daemon of the corresponding service is running. Therefore, |
3007 | | - # an explicit dependency is added for each service-type to force a reconfig |
3008 | | - # whenever the number of daemons for those service-type changes from 0 to greater |
3009 | | - # than zero and vice versa. |
3010 | | - deps += [s for s in ['node-exporter', 'alertmanager'] |
3011 | | - if self.cache.get_daemons_by_service(s)] |
3012 | | - if len(self.cache.get_daemons_by_type('ingress')) > 0: |
3013 | | - deps.append('ingress') |
3014 | | - # add dependency on ceph-exporter daemons |
3015 | | - deps += [d.name() for d in self.cache.get_daemons_by_service('ceph-exporter')] |
3016 | | - deps += [d.name() for d in self.cache.get_daemons_by_service('mgmt-gateway')] |
3017 | | - deps += [d.name() for d in self.cache.get_daemons_by_service('oauth2-proxy')] |
3018 | | - if prom_cred_hash is not None: |
3019 | | - deps.append(prom_cred_hash) |
3020 | | - if alertmgr_cred_hash is not None: |
3021 | | - deps.append(alertmgr_cred_hash) |
3022 | | - elif daemon_type == 'grafana': |
3023 | | - deps += get_daemon_names(['prometheus', 'loki', 'mgmt-gateway', 'oauth2-proxy']) |
3024 | | - if prom_cred_hash is not None: |
3025 | | - deps.append(prom_cred_hash) |
3026 | | - elif daemon_type == 'alertmanager': |
3027 | | - deps += get_daemon_names(['alertmanager', 'snmp-gateway', 'mgmt-gateway', 'oauth2-proxy']) |
3028 | | - if not mgmt_gw_enabled: |
3029 | | - deps += get_daemon_names(['mgr']) |
3030 | | - if alertmgr_cred_hash is not None: |
3031 | | - deps.append(alertmgr_cred_hash) |
3032 | | - elif daemon_type == 'promtail': |
3033 | | - deps += get_daemon_names(['loki']) |
3034 | | - elif daemon_type in ['ceph-exporter', 'node-exporter']: |
3035 | | - deps += get_daemon_names(['mgmt-gateway']) |
3036 | | - elif daemon_type == JaegerAgentService.TYPE: |
3037 | | - for dd in self.cache.get_daemons_by_type(JaegerCollectorService.TYPE): |
3038 | | - assert dd.hostname is not None |
3039 | | - port = dd.ports[0] if dd.ports else JaegerCollectorService.DEFAULT_SERVICE_PORT |
3040 | | - deps.append(build_url(host=dd.hostname, port=port).lstrip('/')) |
3041 | | - deps = sorted(deps) |
3042 | | - elif daemon_type == 'mgmt-gateway': |
3043 | | - deps = MgmtGatewayService.get_dependencies(self) |
3044 | | - else: |
3045 | | - # this daemon type doesn't need deps mgmt |
3046 | | - pass |
3047 | | - |
3048 | | - if daemon_type in ['prometheus', 'node-exporter', 'alertmanager', 'grafana', |
3049 | | - 'ceph-exporter']: |
3050 | | - deps.append(f'secure_monitoring_stack:{self.secure_monitoring_stack}') |
3051 | | - |
| 2934 | + svc_type = daemon_type_to_service(daemon_type) |
| 2935 | + svc_cls = self.cephadm_services.get(svc_type, None) |
| 2936 | + deps = svc_cls.get_dependencies(self, spec, daemon_type) if svc_cls else [] |
3052 | 2937 | return sorted(deps) |
3053 | 2938 |
|
3054 | 2939 | @forall_hosts |
|
0 commit comments