Skip to content

Commit 29f0b8d

Browse files
committed
mgr/cephadm: making mgmt-gateway an oauth2-proxy dependency
This change enables better automation, especially for complex setups like high-availability configurations. Previously, users had to manually deploy the mgmt-gateway before the oauth-proxy; if this sequence wasn't followed, cephadm would raise an error. https://tracker.ceph.com/issues/70603 Signed-off-by: Redouane Kachach <[email protected]>
1 parent b047ff8 commit 29f0b8d

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

src/pybind/mgr/cephadm/module.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3649,11 +3649,6 @@ def _apply_service_spec(self, spec: ServiceSpec) -> str:
36493649
host_count = len(self.inventory.keys())
36503650
max_count = self.max_count_per_host
36513651

3652-
if spec.service_type == 'oauth2-proxy':
3653-
mgmt_gw_daemons = self.cache.get_daemons_by_service('mgmt-gateway')
3654-
if not mgmt_gw_daemons:
3655-
raise OrchestratorError("The 'oauth2-proxy' service depends on the 'mgmt-gateway' service, but it is not configured.")
3656-
36573652
if spec.service_type == 'nvmeof':
36583653
nvmeof_spec = cast(NvmeofServiceSpec, spec)
36593654
assert nvmeof_spec.pool is not None, "Pool cannot be None for nvmeof services"

src/pybind/mgr/cephadm/services/oauth2_proxy.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import logging
2-
from typing import List, Any, Tuple, Dict, cast, Optional
2+
from typing import List, Any, Tuple, Dict, cast, Optional, TYPE_CHECKING
33
from copy import copy
44

55
from orchestrator import DaemonDescription
6-
from ceph.deployment.service_spec import OAuth2ProxySpec, MgmtGatewaySpec
6+
from ceph.deployment.service_spec import OAuth2ProxySpec, MgmtGatewaySpec, ServiceSpec
77
from cephadm.services.cephadmservice import CephadmService, CephadmDaemonDeploySpec
88
from .service_registry import register_cephadm_service
99

10+
if TYPE_CHECKING:
11+
from ..module import CephadmOrchestrator
12+
1013
logger = logging.getLogger(__name__)
1114

1215

@@ -20,11 +23,24 @@ def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonD
2023
daemon_spec.final_config, daemon_spec.deps = self.generate_config(daemon_spec)
2124
return daemon_spec
2225

26+
@classmethod
27+
def get_dependencies(cls, mgr: "CephadmOrchestrator",
28+
spec: Optional[ServiceSpec] = None,
29+
daemon_type: Optional[str] = None) -> List[str]:
30+
# adding dependency as redirect_url calculation depends on the mgmt-gateway
31+
deps = [
32+
f'{d.name()}:{d.ports[0]}' if d.ports else d.name()
33+
for service in ['mgmt-gateway']
34+
for d in mgr.cache.get_daemons_by_service(service)
35+
]
36+
return deps
37+
2338
def get_service_ips_and_hosts(self, service_name: str) -> List[str]:
2439
entries = set()
25-
mgmt_gw_spec = cast(MgmtGatewaySpec, self.mgr.spec_store['mgmt-gateway'].spec)
26-
if mgmt_gw_spec.virtual_ip is not None:
27-
entries.add(mgmt_gw_spec.virtual_ip)
40+
if 'mgmt-gateway' in self.mgr.spec_store:
41+
mgmt_gw_spec = cast(MgmtGatewaySpec, self.mgr.spec_store['mgmt-gateway'].spec)
42+
if mgmt_gw_spec.virtual_ip is not None:
43+
entries.add(mgmt_gw_spec.virtual_ip)
2844
for dd in self.mgr.cache.get_daemons_by_service(service_name):
2945
assert dd.hostname is not None
3046
addr = dd.ip if dd.ip else self.mgr.inventory.get_addr(dd.hostname)
@@ -86,7 +102,7 @@ def generate_config(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[Dict[st
86102
}
87103
}
88104

89-
return daemon_config, []
105+
return daemon_config, sorted(OAuth2ProxyService.get_dependencies(self.mgr))
90106

91107
def post_remove(self, daemon: DaemonDescription, is_failed_deploy: bool) -> None:
92108
"""

0 commit comments

Comments
 (0)