77 HostPlacementSpec ,
88 RGWSpec ,
99 IngressSpec ,
10- IscsiServiceSpec
10+ IscsiServiceSpec ,
11+ GrafanaSpec
1112)
1213from ceph .utils import datetime_to_str , datetime_now
1314from cephadm import CephadmOrchestrator
1819from orchestrator import DaemonDescription
1920from tests import mock
2021
22+ COMBINED_CERT_KEY = """
23+ -----BEGIN CERTIFICATE-----
24+ MIIDZTCCAk2gAwIBAgIUcf+7lpo2INwTIulhXOb78i4PL7gwDQYJKoZIhvcNAQEL
25+ BQAwQjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE
26+ CgwTRGVmYXVsdCBDb21wYW55IEx0ZDAeFw0yNTAxMjgxNDE0MzlaFw0yNTA1MDgx
27+ NDE0MzlaMEIxCzAJBgNVBAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAa
28+ BgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IB
29+ DwAwggEKAoIBAQC5xpfgFsX7I19HGW2YE6vz0TNni2dM1ItQoP0WaX55bNEwLsj9
30+ hHTZ7vgTH6ZkaNp0U73Mq+0tM8UPRrNFBKhy5cE/D+l7aV5KUr4mgPK6Tgrgk0iS
31+ 83nymladgSKRjN75HH8SMg2lLVoivfrAAMh58JA2zFUFZaZQnD1eL/+waht9qpCd
32+ ilsY3MVKuElZ3ndxSaTuISLhPS8GO7jkCbCThfkrnk5IeCd5trN8ho55Ev5U5Axg
33+ bUgHlJxzUr9wLTzKW0x9D5qbLTvaC9VsUN+SdQW01pTs4MLPuKsnjLGaG91sEbZl
34+ n4Ub7bXvNey9z0heGE/NJX+Q5EkkhFV5TLvZAgMBAAGjUzBRMB0GA1UdDgQWBBSz
35+ OgD/EZsfAuDpt4wv1qVMcNlbajAfBgNVHSMEGDAWgBSzOgD/EZsfAuDpt4wv1qVM
36+ cNlbajAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBJ/PMFQFn2
37+ 6PeHEneLnxQqggg2FulM6tYc+XHuRCUW9koNBHVn5/CTw6MZ6oxRwVtY4w9GHZSk
38+ TvL6xAwk5exIwYJFdLe5XMNXtIy6Hz9BVVLRkL9u/yDXh0Bsi5vVwF14rL7956K4
39+ XQQXdUCuT5GF3u+2g+nnbYz1N00XG8YMiT0a8ZKrVUFi3l12muULzrw5YsBWenGC
40+ DdVBRQEsl2ZJYN+/01TO9fScbv9ANQFUJpvtVCQjTWj4WOIhnhm8dHXD3ppMdccT
41+ y7jEpinQvVQxfGIshLMi4rtK5sMpS4Qx5gzyU4ccHSDgdSrIC7zjNY9YdS0X7+je
42+ QTkccglYXmZ6
43+ -----END CERTIFICATE-----
44+ -----BEGIN PRIVATE KEY-----
45+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5xpfgFsX7I19H
46+ GW2YE6vz0TNni2dM1ItQoP0WaX55bNEwLsj9hHTZ7vgTH6ZkaNp0U73Mq+0tM8UP
47+ RrNFBKhy5cE/D+l7aV5KUr4mgPK6Tgrgk0iS83nymladgSKRjN75HH8SMg2lLVoi
48+ vfrAAMh58JA2zFUFZaZQnD1eL/+waht9qpCdilsY3MVKuElZ3ndxSaTuISLhPS8G
49+ O7jkCbCThfkrnk5IeCd5trN8ho55Ev5U5AxgbUgHlJxzUr9wLTzKW0x9D5qbLTva
50+ C9VsUN+SdQW01pTs4MLPuKsnjLGaG91sEbZln4Ub7bXvNey9z0heGE/NJX+Q5Ekk
51+ hFV5TLvZAgMBAAECggEACCGMWi871/X3YJn9mdiISSjsLcS7OEwTgOt/fyd7vhCD
52+ 7IoY0j6lwqXazzN3ksgRONAzNOTPyyH5XZyD207DmT4XHVbFGFmQbILsmtDSTuTq
53+ IK1WLSBhjHJW4irHerKGcrNdmHC101MYH0lxHATRU8PW/Ay7c1cqVoCZRnHvFgLQ
54+ YZHxhskDnMTaXX0lw+CCq7ajUg2Su2u7tC7LiG/n4cjBNTblB7vmyAiFo1xoYqam
55+ GuwtkLGZW1RxvCi13HGIKAU9VnwKOyzhJp9ZBcx1Xshiaqazwhpf8PhP8mT2kLFg
56+ ti5NVxadbD78VGMC5bfH6lZdm4/MLlaqMejb6QXCRQKBgQDcd72c4FJpXpXWMR6g
57+ ROw60tn6qjSpH0YJ96bf19UGgNcYVUCiZrgG7ENx6SabjUJwqxi3qCxneD+J7caL
58+ Befd2Can4vf6U3o3DV/a86Dz6Qd4n7n6MU39aOg2jsCriknfOUkWfnGgvMaPzduU
59+ O1rFF0xpezIQkU3HjaN4aLGSswKBgQDXt3/EsRIk8xYQvcUTaWAQdaxtRewS9Tc2
60+ m6MdU6der8C6fTydggUBdkURawFehdpNmKiymBJJFniCs/EuGmKKHjupW04Kmwin
61+ isaA+tSwLQ01tL1G7xhydb85sbfBXzel4fztmk2OB+IpB4rvTFlP8t2z/bQQumjN
62+ WPLUwz7NQwKBgFZ4AD5PHQOGvW3Mxh5F6gEIQcY2i4Dpaybtot2YYUyzq6k3hqor
63+ b3IHqEw9DY9kz/IwqPkfVIsgdos6XuyX3GD+Lesa8feUVhLRhA70DuSbOPruapre
64+ S6BgTPNY+ehNzLtoVGomHZrVb2tnaf+xZ+B1Str0Hqaw1ri1rK/FICBRAoGBALbn
65+ T95mhQvvUPZA8ajT4DAUlm7QqqooYPhcXqGvHGqcer2lEpA6fiQPM+Dg6fhLZh4F
66+ IoTLjDWMaAHqsMR2erbBi7S9Rh6X9W6ZrFYQV+ZJTLoM1bAfaosia1Fv7m53Xae5
67+ Rcvw2XFkHc7MJnFgOxoewvyqUNMeO15h3QOpyMYhAoGABm6bQcIdmv3e+GVoraXA
68+ lsmM4/lRi/HmRHGtQ7kjKvT09YBQ3/qm04QwvwQtik7ws7t8VODQSgZC6re0TU7Y
69+ RPw+RGrt0nnmMUP2jJ6SKPCXmw55tW7FcvBJeAM4komEUoLrnKfwkaRy8SKSt8a0
70+ HlBxebJND7cfu20WpwErmhU=
71+ -----END PRIVATE KEY-----
72+ """
73+
2174
2275@mock .patch ("cephadm.serve.CephadmServe._run_cephadm" , _run_cephadm ('[]' ))
2376def test_migrate_scheduler (cephadm_module : CephadmOrchestrator ):
@@ -349,8 +402,53 @@ def test_migrate_rgw_spec(cephadm_module: CephadmOrchestrator, rgw_spec_store_en
349402 assert 'rgw.foo' not in cephadm_module .spec_store .all_specs
350403
351404
405+ @mock .patch ('cephadm.migrations.get_cert_issuer_info' )
406+ def test_migrate_grafana_cephadm_signed (mock_get_cert_issuer_info , cephadm_module : CephadmOrchestrator ):
407+ mock_get_cert_issuer_info .return_value = ('Ceph' , 'MockCephCN' )
408+
409+ cephadm_module .set_store ('host1/grafana_crt' , 'grafana_cert1' )
410+ cephadm_module .set_store ('host1/grafana_key' , 'grafana_key1' )
411+ cephadm_module .set_store ('host2/grafana_crt' , 'grafana_cert2' )
412+ cephadm_module .set_store ('host2/grafana_key' , 'grafana_key2' )
413+ cephadm_module .cache .daemons = {'host1' : {'grafana.host1' : DaemonDescription ('grafana' , 'host1' , 'host1' )},
414+ 'host2' : {'grafana.host2' : DaemonDescription ('grafana' , 'host2' , 'host2' )}}
415+
416+ cephadm_module .migration .migrate_6_7 ()
417+
418+ assert cephadm_module .cert_mgr .get_cert ('cephadm-signed_grafana_cert' , host = 'host1' )
419+ assert cephadm_module .cert_mgr .get_cert ('cephadm-signed_grafana_cert' , host = 'host2' )
420+ assert cephadm_module .cert_mgr .get_key ('cephadm-signed_grafana_key' , host = 'host1' )
421+ assert cephadm_module .cert_mgr .get_key ('cephadm-signed_grafana_key' , host = 'host2' )
422+
423+
424+ @mock .patch ('cephadm.migrations.get_cert_issuer_info' )
425+ def test_migrate_grafana_custom_certs (mock_get_cert_issuer_info , cephadm_module : CephadmOrchestrator ):
426+ from datetime import datetime , timezone
427+
428+ grafana_spec = GrafanaSpec (service_id = 'grafana' , ssl = True )
429+ cephadm_module .spec_store ._specs = {
430+ 'grafana' : grafana_spec ,
431+ }
432+ cephadm_module .spec_store .spec_created ['grafana' ] = datetime .now (timezone .utc )
433+
434+ cephadm_module .set_store ('host1/grafana_crt' , 'grafana_cert1' )
435+ cephadm_module .set_store ('host1/grafana_key' , 'grafana_key1' )
436+ cephadm_module .set_store ('host2/grafana_crt' , 'grafana_cert2' )
437+ cephadm_module .set_store ('host2/grafana_key' , 'grafana_key2' )
438+ cephadm_module .cache .daemons = {'host1' : {'grafana.host1' : DaemonDescription ('grafana' , 'host1' , 'host1' )},
439+ 'host2' : {'grafana.host2' : DaemonDescription ('grafana' , 'host2' , 'host2' )}}
440+
441+ mock_get_cert_issuer_info .return_value = ('CustomOrg' , 'MockCustomOrg' ) # Force grafana certs to be custom
442+ cephadm_module .migration .migrate_6_7 ()
443+
444+ assert cephadm_module .cert_mgr .get_cert ('grafana_ssl_cert' , host = 'host1' )
445+ assert cephadm_module .cert_mgr .get_cert ('grafana_ssl_cert' , host = 'host2' )
446+ assert cephadm_module .cert_mgr .get_key ('grafana_ssl_key' , host = 'host1' )
447+ assert cephadm_module .cert_mgr .get_key ('grafana_ssl_key' , host = 'host2' )
448+
449+
352450def test_migrate_cert_store (cephadm_module : CephadmOrchestrator ):
353- rgw_spec = RGWSpec (service_id = 'foo' , rgw_frontend_ssl_certificate = 'rgw_cert' , ssl = True )
451+ rgw_spec = RGWSpec (service_id = 'foo' , rgw_frontend_ssl_certificate = COMBINED_CERT_KEY , ssl = True )
354452 iscsi_spec = IscsiServiceSpec (service_id = 'foo' , pool = 'foo' , ssl_cert = 'iscsi_cert' , ssl_key = 'iscsi_key' )
355453 ingress_spec = IngressSpec (service_id = 'rgw.foo' , ssl_cert = 'ingress_cert' , ssl_key = 'ingress_key' , ssl = True )
356454 cephadm_module .spec_store ._specs = {
@@ -364,22 +462,10 @@ def test_migrate_cert_store(cephadm_module: CephadmOrchestrator):
364462 cephadm_module .set_store ('service_discovery/root/cert' , 'service_discovery_cert' )
365463 cephadm_module .set_store ('service_discovery/root/key' , 'service_discovery_key' )
366464
367- cephadm_module .set_store ('host1/grafana_crt' , 'grafana_cert1' )
368- cephadm_module .set_store ('host1/grafana_key' , 'grafana_key1' )
369- cephadm_module .set_store ('host2/grafana_crt' , 'grafana_cert2' )
370- cephadm_module .set_store ('host2/grafana_key' , 'grafana_key2' )
371- cephadm_module .cache .daemons = {'host1' : {'grafana.host1' : DaemonDescription ('grafana' , 'host1' , 'host1' )},
372- 'host2' : {'grafana.host2' : DaemonDescription ('grafana' , 'host2' , 'host2' )}}
373-
374465 cephadm_module .migration .migrate_6_7 ()
375466
376- assert cephadm_module .cert_mgr .get_cert ('rgw_frontend_ssl_cert ' , service_name = 'rgw.foo' )
467+ assert cephadm_module .cert_mgr .get_cert ('rgw_ssl_cert ' , service_name = 'rgw.foo' )
377468 assert cephadm_module .cert_mgr .get_cert ('iscsi_ssl_cert' , service_name = 'iscsi.foo' )
378469 assert cephadm_module .cert_mgr .get_key ('iscsi_ssl_key' , service_name = 'iscsi.foo' )
379470 assert cephadm_module .cert_mgr .get_cert ('ingress_ssl_cert' , service_name = 'ingress.rgw.foo' )
380471 assert cephadm_module .cert_mgr .get_key ('ingress_ssl_key' , service_name = 'ingress.rgw.foo' )
381-
382- assert cephadm_module .cert_mgr .get_cert ('grafana_cert' , host = 'host1' )
383- assert cephadm_module .cert_mgr .get_cert ('grafana_cert' , host = 'host2' )
384- assert cephadm_module .cert_mgr .get_key ('grafana_key' , host = 'host1' )
385- assert cephadm_module .cert_mgr .get_key ('grafana_key' , host = 'host2' )
0 commit comments