def _get_services(self, mgr): # services: osd_service = OSDService(mgr) nfs_service = NFSService(mgr) mon_service = MonService(mgr) mgr_service = MgrService(mgr) mds_service = MdsService(mgr) rgw_service = RgwService(mgr) rbd_mirror_service = RbdMirrorService(mgr) grafana_service = GrafanaService(mgr) alertmanager_service = AlertmanagerService(mgr) prometheus_service = PrometheusService(mgr) node_exporter_service = NodeExporterService(mgr) crash_service = CrashService(mgr) iscsi_service = IscsiService(mgr) cephadm_exporter_service = CephadmExporter(mgr) cephadm_services = { 'mon': mon_service, 'mgr': mgr_service, 'osd': osd_service, 'mds': mds_service, 'rgw': rgw_service, 'rbd-mirror': rbd_mirror_service, 'nfs': nfs_service, 'grafana': grafana_service, 'alertmanager': alertmanager_service, 'prometheus': prometheus_service, 'node-exporter': node_exporter_service, 'crash': crash_service, 'iscsi': iscsi_service, 'cephadm-exporter': cephadm_exporter_service, } return cephadm_services
class TestISCSIService: mgr = FakeMgr() iscsi_service = IscsiService(mgr) iscsi_spec = IscsiServiceSpec(service_type='iscsi', service_id="a") iscsi_spec.daemon_type = "iscsi" iscsi_spec.daemon_id = "a" iscsi_spec.spec = MagicMock() iscsi_spec.spec.daemon_type = "iscsi" iscsi_spec.spec.ssl_cert = '' iscsi_spec.api_user = "******" iscsi_spec.api_password = "******" iscsi_spec.api_port = 5000 iscsi_spec.api_secure = False iscsi_spec.ssl_cert = "cert" iscsi_spec.ssl_key = "key" mgr.spec_store = MagicMock() mgr.spec_store.all_specs.get.return_value = iscsi_spec def test_iscsi_client_caps(self): iscsi_daemon_spec = CephadmDaemonDeploySpec( host='host', daemon_id='a', service_name=self.iscsi_spec.service_name()) self.iscsi_service.prepare_create(iscsi_daemon_spec) expected_caps = ['mon', 'profile rbd, allow command "osd blocklist", allow command "config-key get" with "key" prefix "iscsi/"', 'mgr', 'allow command "service status"', 'osd', 'allow rwx'] expected_call = call({'prefix': 'auth get-or-create', 'entity': 'client.iscsi.a', 'caps': expected_caps}) expected_call2 = call({'prefix': 'auth caps', 'entity': 'client.iscsi.a', 'caps': expected_caps}) assert expected_call in self.mgr.mon_command.mock_calls assert expected_call2 in self.mgr.mon_command.mock_calls @patch('cephadm.utils.resolve_ip') def test_iscsi_dashboard_config(self, mock_resolve_ip): self.mgr.check_mon_command = MagicMock() self.mgr.check_mon_command.return_value = ('', '{"gateways": {}}', '') # Case 1: use IPV4 address id1 = DaemonDescription(daemon_type='iscsi', hostname="testhost1", daemon_id="a", ip='192.168.1.1') daemon_list = [id1] mock_resolve_ip.return_value = '192.168.1.1' self.iscsi_service.config_dashboard(daemon_list) dashboard_expected_call = call({'prefix': 'dashboard iscsi-gateway-add', 'name': 'testhost1'}, 'http://*****:*****@192.168.1.1:5000') assert dashboard_expected_call in self.mgr.check_mon_command.mock_calls # Case 2: use IPV6 address self.mgr.check_mon_command.reset_mock() id1 = DaemonDescription(daemon_type='iscsi', hostname="testhost1", daemon_id="a", ip='FEDC:BA98:7654:3210:FEDC:BA98:7654:3210') mock_resolve_ip.return_value = 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' self.iscsi_service.config_dashboard(daemon_list) dashboard_expected_call = call({'prefix': 'dashboard iscsi-gateway-add', 'name': 'testhost1'}, 'http://*****:*****@[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:5000') assert dashboard_expected_call in self.mgr.check_mon_command.mock_calls # Case 3: IPV6 Address . Secure protocol self.mgr.check_mon_command.reset_mock() self.iscsi_spec.api_secure = True self.iscsi_service.config_dashboard(daemon_list) dashboard_expected_call = call({'prefix': 'dashboard iscsi-gateway-add', 'name': 'testhost1'}, 'https://*****:*****@[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:5000') assert dashboard_expected_call in self.mgr.check_mon_command.mock_calls