]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/cephadm/tests/test_spec.py
2fa190a814fb98403371370c185326498fbec263
5 from ceph
.deployment
.service_spec
import ServiceSpec
, NFSServiceSpec
, RGWSpec
, \
6 IscsiServiceSpec
, AlertManagerSpec
8 from orchestrator
import DaemonDescription
, OrchestratorError
11 @pytest.mark
.parametrize(
18 "service_type": "alertmanager"
24 "service_type": "crash"
30 "service_type": "grafana"
48 "service_type": "node-exporter"
54 "service_type": "prometheus"
60 "hostname": "ceph-001",
66 "service_type": "rgw",
67 "service_id": "default-rgw-realm.eu-central-1.1",
68 "rgw_realm": "default-rgw-realm",
69 "rgw_zone": "eu-central-1",
73 "service_type": "osd",
74 "service_id": "osd_spec_default",
79 "model": "MC-55-44-XZ"
82 "model": "SSD-123-foo"
85 "model": "NVME-QQQQ-987"
91 def test_spec_octopus(spec_json
):
92 # https://tracker.ceph.com/issues/44934
93 # Those are real user data from early octopus.
94 # Please do not modify those JSON values.
96 spec
= ServiceSpec
.from_json(spec_json
)
97 # just some verification that we can sill read old octopus specs
98 def convert_to_old_style_json(j
):
100 j_c
.pop('service_name', None)
102 spec
= j_c
.pop('spec')
104 j_c
.pop('objectstore', None)
105 j_c
.pop('filter_logic', None)
107 assert spec_json
== convert_to_old_style_json(spec
.to_json())
110 @pytest.mark
.parametrize(
114 "hostname": "ceph-001",
115 "container_id": "d94d7969094d",
116 "container_image_id": "0881eb8f169f5556a292b4e2c01d683172b12830a62a9225a98a8e206bb734f0",
117 "container_image_name": "docker.io/prom/alertmanager:latest",
118 "daemon_id": "ceph-001",
119 "daemon_type": "alertmanager",
122 "status_desc": "running",
123 "last_refresh": "2020-04-03T15:31:48.725856",
124 "created": "2020-04-02T19:23:08.829543",
125 "started": "2020-04-03T07:29:16.932838",
129 "hostname": "ceph-001",
130 "container_id": "c4b036202241",
131 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
132 "container_image_name": "docker.io/ceph/ceph:v15",
133 "daemon_id": "ceph-001",
134 "daemon_type": "crash",
137 "status_desc": "running",
138 "last_refresh": "2020-04-03T15:31:48.725903",
139 "created": "2020-04-02T19:23:11.390694",
140 "started": "2020-04-03T07:29:16.910897",
144 "hostname": "ceph-001",
145 "container_id": "5b7b94b48f31",
146 "container_image_id": "87a51ecf0b1c9a7b187b21c1b071425dafea0d765a96d5bc371c791169b3d7f4",
147 "container_image_name": "docker.io/ceph/ceph-grafana:latest",
148 "daemon_id": "ceph-001",
149 "daemon_type": "grafana",
152 "status_desc": "running",
153 "last_refresh": "2020-04-03T15:31:48.725950",
154 "created": "2020-04-02T19:23:52.025088",
155 "started": "2020-04-03T07:29:16.847972",
159 "hostname": "ceph-001",
160 "container_id": "9ca007280456",
161 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
162 "container_image_name": "docker.io/ceph/ceph:v15",
163 "daemon_id": "ceph-001.gkjwqp",
164 "daemon_type": "mgr",
167 "status_desc": "running",
168 "last_refresh": "2020-04-03T15:31:48.725807",
169 "created": "2020-04-02T19:22:18.648584",
170 "started": "2020-04-03T07:29:16.856153",
174 "hostname": "ceph-001",
175 "container_id": "3d1ba9a2b697",
176 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
177 "container_image_name": "docker.io/ceph/ceph:v15",
178 "daemon_id": "ceph-001",
179 "daemon_type": "mon",
182 "status_desc": "running",
183 "last_refresh": "2020-04-03T15:31:48.725715",
184 "created": "2020-04-02T19:22:13.863300",
185 "started": "2020-04-03T07:29:17.206024",
189 "hostname": "ceph-001",
190 "container_id": "36d026c68ba1",
191 "container_image_id": "e5a616e4b9cf68dfcad7782b78e118be4310022e874d52da85c55923fb615f87",
192 "container_image_name": "docker.io/prom/node-exporter:latest",
193 "daemon_id": "ceph-001",
194 "daemon_type": "node-exporter",
197 "status_desc": "running",
198 "last_refresh": "2020-04-03T15:31:48.725996",
199 "created": "2020-04-02T19:23:53.880197",
200 "started": "2020-04-03T07:29:16.880044",
204 "hostname": "ceph-001",
205 "container_id": "faf76193cbfe",
206 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
207 "container_image_name": "docker.io/ceph/ceph:v15",
209 "daemon_type": "osd",
212 "status_desc": "running",
213 "last_refresh": "2020-04-03T15:31:48.726088",
214 "created": "2020-04-02T20:35:02.991435",
215 "started": "2020-04-03T07:29:19.373956",
219 "hostname": "ceph-001",
220 "container_id": "f82505bae0f1",
221 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
222 "container_image_name": "docker.io/ceph/ceph:v15",
224 "daemon_type": "osd",
227 "status_desc": "running",
228 "last_refresh": "2020-04-03T15:31:48.726134",
229 "created": "2020-04-02T20:35:17.142272",
230 "started": "2020-04-03T07:29:19.374002",
234 "hostname": "ceph-001",
235 "container_id": "2708d84cd484",
236 "container_image_id": "358a0d2395fe711bb8258e8fb4b2d7865c0a9a6463969bcd1452ee8869ea6653",
237 "container_image_name": "docker.io/prom/prometheus:latest",
238 "daemon_id": "ceph-001",
239 "daemon_type": "prometheus",
242 "status_desc": "running",
243 "last_refresh": "2020-04-03T15:31:48.726042",
244 "created": "2020-04-02T19:24:10.281163",
245 "started": "2020-04-03T07:29:16.926292",
249 "hostname": "ceph-001",
250 "daemon_id": "default-rgw-realm.eu-central-1.1.ceph-001.ytywjo",
251 "daemon_type": "rgw",
253 "status_desc": "starting",
258 def test_dd_octopus(dd_json
):
259 # https://tracker.ceph.com/issues/44934
260 # Those are real user data from early octopus.
261 # Please do not modify those JSON values.
262 assert dd_json
== DaemonDescription
.from_json(dd_json
).to_json()
265 @pytest.mark
.parametrize("spec,dd,valid",
267 # https://tracker.ceph.com/issues/44934
270 rgw_realm
="default-rgw-realm",
271 rgw_zone
="eu-central-1",
276 daemon_id
="default-rgw-realm.eu-central-1.1.ceph-001.ytywjo",
284 rgw_realm
="default-rgw-realm",
285 rgw_zone
="eu-central-1",
289 daemon_id
="default-rgw-realm.eu-central-1.ceph-001.ytywjo",
297 rgw_realm
="default-rgw-realm",
298 rgw_zone
="eu-central-1",
303 daemon_id
="default-rgw-realm.eu-central-1.1.host.domain.tld.ytywjo",
304 hostname
="host.domain.tld",
316 daemon_id
="realm.zone.a",
317 hostname
="smithi028",
325 rgw_realm
="default-rgw-realm",
326 rgw_zone
="eu-central-1",
331 daemon_id
="default-rgw-realm.eu-central-1.1.hostname.ytywjo",
337 # zone contains hostname
338 # https://tracker.ceph.com/issues/45294
340 rgw_realm
="default.rgw.realm",
346 daemon_id
="default.rgw.realm.ceph.001.1.ceph.001.ytywjo",
352 # https://tracker.ceph.com/issues/45293
360 daemon_id
="a.host1.abc123",
366 # '.' char in service_id
373 daemon_id
="a.b.c.host1.abc123",
379 # https://tracker.ceph.com/issues/45617
381 # daemon_id does not contain hostname
394 # daemon_id only contains hostname
407 # https://tracker.ceph.com/issues/45399
409 # daemon_id only contains hostname
416 daemon_id
="a.host1.abc123",
417 hostname
="host1.site",
428 hostname
="host1.site",
433 # https://tracker.ceph.com/issues/45293
446 # service_id contains a '.' char
452 daemon_id
="a.b.c.host1",
458 # trailing chars after hostname
464 daemon_id
="a.b.c.host1.abc123",
470 # chars after hostname without '.'
476 daemon_id
="a.host1abc123",
482 # chars before hostname without '.'
488 daemon_id
="ahost1.abc123",
494 # https://tracker.ceph.com/issues/45293
497 service_type
='iscsi',
502 daemon_id
="a.host1.abc123",
508 # '.' char in service_id
510 service_type
='iscsi',
515 daemon_id
="a.b.c.host1.abc123",
521 def test_daemon_description_service_name(spec
: ServiceSpec
,
522 dd
: DaemonDescription
,
525 assert spec
.service_name() == dd
.service_name()
527 with pytest
.raises(OrchestratorError
):
531 def test_alertmanager_spec_1():
532 spec
= AlertManagerSpec()
533 assert spec
.service_type
== 'alertmanager'
534 assert isinstance(spec
.user_data
, dict)
535 assert len(spec
.user_data
.keys()) == 0
538 def test_alertmanager_spec_2():
539 spec
= AlertManagerSpec(user_data
={'default_webhook_urls': ['foo']})
540 assert isinstance(spec
.user_data
, dict)
541 assert 'default_webhook_urls' in spec
.user_data
.keys()