]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/cephadm/tests/test_spec.py
1 # Disable autopep8 for this file:
9 from ceph
.deployment
.service_spec
import ServiceSpec
, NFSServiceSpec
, RGWSpec
, \
10 IscsiServiceSpec
, HostPlacementSpec
, CustomContainerSpec
11 from orchestrator
import DaemonDescription
, OrchestratorError
14 @pytest.mark
.parametrize(
21 "service_type": "alertmanager"
27 "service_type": "crash"
33 "service_type": "grafana",
52 "service_type": "node-exporter"
58 "service_type": "prometheus"
64 "hostname": "ceph-001",
70 "service_type": "rgw",
71 "service_id": "default-rgw-realm.eu-central-1.1",
72 "rgw_realm": "default-rgw-realm",
73 "rgw_zone": "eu-central-1"
76 "service_type": "osd",
77 "service_id": "osd_spec_default",
82 "model": "MC-55-44-XZ"
85 "model": "SSD-123-foo"
88 "model": "NVME-QQQQ-987"
94 def test_spec_octopus(spec_json
):
95 # https://tracker.ceph.com/issues/44934
96 # Those are real user data from early octopus.
97 # Please do not modify those JSON values.
99 spec
= ServiceSpec
.from_json(spec_json
)
101 # just some verification that we can sill read old octopus specs
102 def convert_to_old_style_json(j
):
104 j_c
.pop('service_name', None)
106 spec
= j_c
.pop('spec')
108 if 'placement' in j_c
:
109 if 'hosts' in j_c
['placement']:
110 j_c
['placement']['hosts'] = [
112 'hostname': HostPlacementSpec
.parse(h
).hostname
,
113 'network': HostPlacementSpec
.parse(h
).network
,
114 'name': HostPlacementSpec
.parse(h
).name
116 for h
in j_c
['placement']['hosts']
118 j_c
.pop('objectstore', None)
119 j_c
.pop('filter_logic', None)
120 j_c
.pop('anonymous_access', None)
123 assert spec_json
== convert_to_old_style_json(spec
.to_json())
126 @pytest.mark
.parametrize(
130 "hostname": "ceph-001",
131 "container_id": "d94d7969094d",
132 "container_image_id": "0881eb8f169f5556a292b4e2c01d683172b12830a62a9225a98a8e206bb734f0",
133 "container_image_name": "docker.io/prom/alertmanager:latest",
134 "daemon_id": "ceph-001",
135 "daemon_type": "alertmanager",
138 "status_desc": "running",
139 "last_refresh": "2020-04-03T15:31:48.725856",
140 "created": "2020-04-02T19:23:08.829543",
141 "started": "2020-04-03T07:29:16.932838",
145 "hostname": "ceph-001",
146 "container_id": "c4b036202241",
147 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
148 "container_image_name": "docker.io/ceph/ceph:v15",
149 "daemon_id": "ceph-001",
150 "daemon_type": "crash",
153 "status_desc": "running",
154 "last_refresh": "2020-04-03T15:31:48.725903",
155 "created": "2020-04-02T19:23:11.390694",
156 "started": "2020-04-03T07:29:16.910897",
160 "hostname": "ceph-001",
161 "container_id": "5b7b94b48f31",
162 "container_image_id": "87a51ecf0b1c9a7b187b21c1b071425dafea0d765a96d5bc371c791169b3d7f4",
163 "container_image_name": "docker.io/ceph/ceph-grafana:latest",
164 "daemon_id": "ceph-001",
165 "daemon_type": "grafana",
168 "status_desc": "running",
169 "last_refresh": "2020-04-03T15:31:48.725950",
170 "created": "2020-04-02T19:23:52.025088",
171 "started": "2020-04-03T07:29:16.847972",
175 "hostname": "ceph-001",
176 "container_id": "9ca007280456",
177 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
178 "container_image_name": "docker.io/ceph/ceph:v15",
179 "daemon_id": "ceph-001.gkjwqp",
180 "daemon_type": "mgr",
183 "status_desc": "running",
184 "last_refresh": "2020-04-03T15:31:48.725807",
185 "created": "2020-04-02T19:22:18.648584",
186 "started": "2020-04-03T07:29:16.856153",
190 "hostname": "ceph-001",
191 "container_id": "3d1ba9a2b697",
192 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
193 "container_image_name": "docker.io/ceph/ceph:v15",
194 "daemon_id": "ceph-001",
195 "daemon_type": "mon",
198 "status_desc": "running",
199 "last_refresh": "2020-04-03T15:31:48.725715",
200 "created": "2020-04-02T19:22:13.863300",
201 "started": "2020-04-03T07:29:17.206024",
205 "hostname": "ceph-001",
206 "container_id": "36d026c68ba1",
207 "container_image_id": "e5a616e4b9cf68dfcad7782b78e118be4310022e874d52da85c55923fb615f87",
208 "container_image_name": "docker.io/prom/node-exporter:latest",
209 "daemon_id": "ceph-001",
210 "daemon_type": "node-exporter",
213 "status_desc": "running",
214 "last_refresh": "2020-04-03T15:31:48.725996",
215 "created": "2020-04-02T19:23:53.880197",
216 "started": "2020-04-03T07:29:16.880044",
220 "hostname": "ceph-001",
221 "container_id": "faf76193cbfe",
222 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
223 "container_image_name": "docker.io/ceph/ceph:v15",
225 "daemon_type": "osd",
228 "status_desc": "running",
229 "last_refresh": "2020-04-03T15:31:48.726088",
230 "created": "2020-04-02T20:35:02.991435",
231 "started": "2020-04-03T07:29:19.373956",
235 "hostname": "ceph-001",
236 "container_id": "f82505bae0f1",
237 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
238 "container_image_name": "docker.io/ceph/ceph:v15",
240 "daemon_type": "osd",
243 "status_desc": "running",
244 "last_refresh": "2020-04-03T15:31:48.726134",
245 "created": "2020-04-02T20:35:17.142272",
246 "started": "2020-04-03T07:29:19.374002",
250 "hostname": "ceph-001",
251 "container_id": "2708d84cd484",
252 "container_image_id": "358a0d2395fe711bb8258e8fb4b2d7865c0a9a6463969bcd1452ee8869ea6653",
253 "container_image_name": "docker.io/prom/prometheus:latest",
254 "daemon_id": "ceph-001",
255 "daemon_type": "prometheus",
258 "status_desc": "running",
259 "last_refresh": "2020-04-03T15:31:48.726042",
260 "created": "2020-04-02T19:24:10.281163",
261 "started": "2020-04-03T07:29:16.926292",
265 "hostname": "ceph-001",
266 "daemon_id": "default-rgw-realm.eu-central-1.1.ceph-001.ytywjo",
267 "daemon_type": "rgw",
269 "status_desc": "starting",
274 def test_dd_octopus(dd_json
):
275 # https://tracker.ceph.com/issues/44934
276 # Those are real user data from early octopus.
277 # Please do not modify those JSON values.
279 # Convert datetime properties to old style.
280 # 2020-04-03T07:29:16.926292Z -> 2020-04-03T07:29:16.926292
281 def convert_to_old_style_json(j
):
282 for k
in ['last_refresh', 'created', 'started', 'last_deployed',
285 j
[k
] = j
[k
].rstrip('Z')
289 assert dd_json
== convert_to_old_style_json(
290 DaemonDescription
.from_json(dd_json
).to_json())
293 @pytest.mark
.parametrize("spec,dd,valid",
295 # https://tracker.ceph.com/issues/44934
299 rgw_realm
="default-rgw-realm",
300 rgw_zone
="eu-central-1",
304 daemon_id
="foo.ceph-001.ytywjo",
312 service_id
="foo.bar",
313 rgw_zone
="eu-central-1",
317 daemon_id
="foo.bar.ceph-001.ytywjo",
329 daemon_id
="bar.host.domain.tld.ytywjo",
330 hostname
="host.domain.tld",
337 service_id
="realm.zone",
341 daemon_id
="realm.zone.a",
342 hostname
="smithi028",
354 daemon_id
="foo.hostname.ytywjo",
363 service_id
="default-rgw-realm.eu-central-1.1",
367 daemon_id
="default-rgw-realm.eu-central-1.1.hostname.ytywjo",
373 # service_id contains hostname
374 # (sort of) https://tracker.ceph.com/issues/45294
376 service_id
="default.rgw.realm.ceph.001",
380 daemon_id
="default.rgw.realm.ceph.001.ceph.001.ytywjo",
386 # https://tracker.ceph.com/issues/45293
394 daemon_id
="a.host1.abc123",
400 # '.' char in service_id
407 daemon_id
="a.b.c.host1.abc123",
413 # https://tracker.ceph.com/issues/45617
415 # daemon_id does not contain hostname
428 # daemon_id only contains hostname
441 # https://tracker.ceph.com/issues/45399
443 # daemon_id only contains hostname
450 daemon_id
="a.host1.abc123",
451 hostname
="host1.site",
462 hostname
="host1.site",
467 # https://tracker.ceph.com/issues/45293
480 # service_id contains a '.' char
486 daemon_id
="a.b.c.host1",
492 # trailing chars after hostname
498 daemon_id
="a.b.c.host1.abc123",
504 # chars after hostname without '.'
510 daemon_id
="a.host1abc123",
516 # chars before hostname without '.'
522 daemon_id
="ahost1.abc123",
528 # https://tracker.ceph.com/issues/45293
531 service_type
='iscsi',
536 daemon_id
="a.host1.abc123",
542 # '.' char in service_id
544 service_type
='iscsi',
549 daemon_id
="a.b.c.host1.abc123",
555 # fixed daemon id for teuthology.
557 service_type
='iscsi',
570 service_type
='container',
571 service_id
='hello-world',
572 image
='docker.io/library/hello-world:latest',
575 daemon_type
='container',
576 daemon_id
='hello-world.mgr0',
583 def test_daemon_description_service_name(spec
: ServiceSpec
,
584 dd
: DaemonDescription
,
587 assert spec
.service_name() == dd
.service_name()
589 with pytest
.raises(OrchestratorError
):