5 from ceph
.deployment
.service_spec
import ServiceSpec
, NFSServiceSpec
, RGWSpec
, \
6 ServiceSpecValidationError
, IscsiServiceSpec
, PlacementSpec
8 from orchestrator
import DaemonDescription
, OrchestratorError
11 def test_spec_octopus():
12 # https://tracker.ceph.com/issues/44934
13 # Those are real user data from early octopus.
14 # Please do not modify those JSON values.
20 "service_type": "alertmanager"
26 "service_type": "crash"
32 "service_type": "grafana"
50 "service_type": "node-exporter"
56 "service_type": "prometheus"
62 "hostname": "ceph-001",
68 "service_type": "rgw",
69 "service_id": "default-rgw-realm.eu-central-1.1",
70 "rgw_realm": "default-rgw-realm",
71 "rgw_zone": "eu-central-1",
78 "hostname": "ceph-001",
79 "container_id": "d94d7969094d",
80 "container_image_id": "0881eb8f169f5556a292b4e2c01d683172b12830a62a9225a98a8e206bb734f0",
81 "container_image_name": "docker.io/prom/alertmanager:latest",
82 "daemon_id": "ceph-001",
83 "daemon_type": "alertmanager",
86 "status_desc": "running",
87 "last_refresh": "2020-04-03T15:31:48.725856",
88 "created": "2020-04-02T19:23:08.829543",
89 "started": "2020-04-03T07:29:16.932838"
92 "hostname": "ceph-001",
93 "container_id": "c4b036202241",
94 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
95 "container_image_name": "docker.io/ceph/ceph:v15",
96 "daemon_id": "ceph-001",
97 "daemon_type": "crash",
100 "status_desc": "running",
101 "last_refresh": "2020-04-03T15:31:48.725903",
102 "created": "2020-04-02T19:23:11.390694",
103 "started": "2020-04-03T07:29:16.910897"
106 "hostname": "ceph-001",
107 "container_id": "5b7b94b48f31",
108 "container_image_id": "87a51ecf0b1c9a7b187b21c1b071425dafea0d765a96d5bc371c791169b3d7f4",
109 "container_image_name": "docker.io/ceph/ceph-grafana:latest",
110 "daemon_id": "ceph-001",
111 "daemon_type": "grafana",
114 "status_desc": "running",
115 "last_refresh": "2020-04-03T15:31:48.725950",
116 "created": "2020-04-02T19:23:52.025088",
117 "started": "2020-04-03T07:29:16.847972"
120 "hostname": "ceph-001",
121 "container_id": "9ca007280456",
122 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
123 "container_image_name": "docker.io/ceph/ceph:v15",
124 "daemon_id": "ceph-001.gkjwqp",
125 "daemon_type": "mgr",
128 "status_desc": "running",
129 "last_refresh": "2020-04-03T15:31:48.725807",
130 "created": "2020-04-02T19:22:18.648584",
131 "started": "2020-04-03T07:29:16.856153"
134 "hostname": "ceph-001",
135 "container_id": "3d1ba9a2b697",
136 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
137 "container_image_name": "docker.io/ceph/ceph:v15",
138 "daemon_id": "ceph-001",
139 "daemon_type": "mon",
142 "status_desc": "running",
143 "last_refresh": "2020-04-03T15:31:48.725715",
144 "created": "2020-04-02T19:22:13.863300",
145 "started": "2020-04-03T07:29:17.206024"
148 "hostname": "ceph-001",
149 "container_id": "36d026c68ba1",
150 "container_image_id": "e5a616e4b9cf68dfcad7782b78e118be4310022e874d52da85c55923fb615f87",
151 "container_image_name": "docker.io/prom/node-exporter:latest",
152 "daemon_id": "ceph-001",
153 "daemon_type": "node-exporter",
156 "status_desc": "running",
157 "last_refresh": "2020-04-03T15:31:48.725996",
158 "created": "2020-04-02T19:23:53.880197",
159 "started": "2020-04-03T07:29:16.880044"
162 "hostname": "ceph-001",
163 "container_id": "faf76193cbfe",
164 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
165 "container_image_name": "docker.io/ceph/ceph:v15",
167 "daemon_type": "osd",
170 "status_desc": "running",
171 "last_refresh": "2020-04-03T15:31:48.726088",
172 "created": "2020-04-02T20:35:02.991435",
173 "started": "2020-04-03T07:29:19.373956"
176 "hostname": "ceph-001",
177 "container_id": "f82505bae0f1",
178 "container_image_id": "204a01f9b0b6710dd0c0af7f37ce7139c47ff0f0105d778d7104c69282dfbbf1",
179 "container_image_name": "docker.io/ceph/ceph:v15",
181 "daemon_type": "osd",
184 "status_desc": "running",
185 "last_refresh": "2020-04-03T15:31:48.726134",
186 "created": "2020-04-02T20:35:17.142272",
187 "started": "2020-04-03T07:29:19.374002"
190 "hostname": "ceph-001",
191 "container_id": "2708d84cd484",
192 "container_image_id": "358a0d2395fe711bb8258e8fb4b2d7865c0a9a6463969bcd1452ee8869ea6653",
193 "container_image_name": "docker.io/prom/prometheus:latest",
194 "daemon_id": "ceph-001",
195 "daemon_type": "prometheus",
198 "status_desc": "running",
199 "last_refresh": "2020-04-03T15:31:48.726042",
200 "created": "2020-04-02T19:24:10.281163",
201 "started": "2020-04-03T07:29:16.926292"
204 "hostname": "ceph-001",
205 "daemon_id": "default-rgw-realm.eu-central-1.1.ceph-001.ytywjo",
206 "daemon_type": "rgw",
208 "status_desc": "starting"
211 specs_json
= json
.loads(specs_text
)
212 dds_json
= json
.loads(dds_text
)
213 specs
= [ServiceSpec
.from_json(j
) for j
in specs_json
]
214 dds
= [DaemonDescription
.from_json(j
) for j
in dds_json
]
216 # just some verification that we can sill read old octopus specs
217 def remove_service_name(j
):
218 if 'service_name' in j
:
220 del j_c
['service_name']
223 assert specs_json
== [remove_service_name(s
.to_json()) for s
in specs
]
224 assert dds_json
== [d
.to_json() for d
in dds
]
227 @pytest.mark
.parametrize("spec,dd,valid",
229 # https://tracker.ceph.com/issues/44934
232 rgw_realm
="default-rgw-realm",
233 rgw_zone
="eu-central-1",
238 daemon_id
="default-rgw-realm.eu-central-1.1.ceph-001.ytywjo",
246 rgw_realm
="default-rgw-realm",
247 rgw_zone
="eu-central-1",
251 daemon_id
="default-rgw-realm.eu-central-1.ceph-001.ytywjo",
259 rgw_realm
="default-rgw-realm",
260 rgw_zone
="eu-central-1",
265 daemon_id
="default-rgw-realm.eu-central-1.1.host.domain.tld.ytywjo",
266 hostname
="host.domain.tld",
278 daemon_id
="realm.zone.a",
279 hostname
="smithi028",
287 rgw_realm
="default-rgw-realm",
288 rgw_zone
="eu-central-1",
293 daemon_id
="default-rgw-realm.eu-central-1.1.hostname.ytywjo",
299 # zone contains hostname
300 # https://tracker.ceph.com/issues/45294
302 rgw_realm
="default.rgw.realm",
308 daemon_id
="default.rgw.realm.ceph.001.1.ceph.001.ytywjo",
314 # https://tracker.ceph.com/issues/45293
322 daemon_id
="a.host1.abc123",
328 # '.' char in service_id
335 daemon_id
="a.b.c.host1.abc123",
341 # https://tracker.ceph.com/issues/45617
343 # daemon_id does not contain hostname
356 # daemon_id only contains hostname
369 # https://tracker.ceph.com/issues/45399
371 # daemon_id only contains hostname
378 daemon_id
="a.host1.abc123",
379 hostname
="host1.site",
390 hostname
="host1.site",
395 # https://tracker.ceph.com/issues/45293
408 # service_id contains a '.' char
414 daemon_id
="a.b.c.host1",
420 # trailing chars after hostname
426 daemon_id
="a.b.c.host1.abc123",
432 # chars after hostname without '.'
438 daemon_id
="a.host1abc123",
444 # chars before hostname without '.'
450 daemon_id
="ahost1.abc123",
456 # https://tracker.ceph.com/issues/45293
459 service_type
='iscsi',
464 daemon_id
="a.host1.abc123",
470 # '.' char in service_id
472 service_type
='iscsi',
477 daemon_id
="a.b.c.host1.abc123",
483 def test_daemon_description_service_name(spec
: ServiceSpec
,
484 dd
: DaemonDescription
,
487 assert spec
.service_name() == dd
.service_name()
489 with pytest
.raises(OrchestratorError
):