@@ -567,6 +567,8 @@ def _get_config(self, url: str) -> str:
567567 receivers:
568568 - name: 'default'
569569 webhook_configs:
570+ - name: 'custom-receiver'
571+ webhook_configs:
570572 - name: 'ceph-dashboard'
571573 webhook_configs:
572574 - url: '{ url } /api/prometheus_receiver'
@@ -714,6 +716,8 @@ def test_alertmanager_config_when_mgmt_gw_enabled(self, _get_fqdn, _run_cephadm,
714716 receivers:
715717 - name: 'default'
716718 webhook_configs:
719+ - name: 'custom-receiver'
720+ webhook_configs:
717721 - name: 'ceph-dashboard'
718722 webhook_configs:
719723 - url: 'https://host_fqdn:29443/internal/dashboard/api/prometheus_receiver'
@@ -813,6 +817,8 @@ def test_alertmanager_config_security_enabled(self, _get_fqdn, _run_cephadm, cep
813817 receivers:
814818 - name: 'default'
815819 webhook_configs:
820+ - name: 'custom-receiver'
821+ webhook_configs:
816822 - name: 'ceph-dashboard'
817823 webhook_configs:
818824 - url: 'http://{ fqdn } :8080/api/prometheus_receiver'
@@ -867,6 +873,119 @@ def test_alertmanager_config_security_enabled(self, _get_fqdn, _run_cephadm, cep
867873 use_current_daemon_image = False ,
868874 )
869875
876+ @pytest .mark .parametrize (
877+ "user_data" ,
878+ [
879+ ({'webhook_urls' : ['http://foo.com:9999' , 'http://bar.com:1111' ]}),
880+ ({'default_webhook_urls' : ['http://bar.com:9999' , 'http://foo.com:1111' ]}),
881+ ({'default_webhook_urls' : ['http://bar.com:9999' , 'http://foo.com:1111' ],
882+ 'webhook_urls' : ['http://foo.com:9999' , 'http://bar.com:1111' ]}),
883+ ],
884+ )
885+ @patch ("cephadm.serve.CephadmServe._run_cephadm" )
886+ @patch ("socket.getfqdn" )
887+ @patch ("cephadm.module.CephadmOrchestrator.get_mgr_ip" , lambda _ : '::1' )
888+ @patch ("cephadm.services.monitoring.password_hash" , lambda password : 'alertmanager_password_hash' )
889+ @patch ('cephadm.cert_mgr.CertMgr.get_root_ca' , lambda instance : 'cephadm_root_cert' )
890+ @patch ('cephadm.cert_mgr.CertMgr.generate_cert' , lambda instance , fqdn , ip : ('mycert' , 'mykey' ))
891+ def test_alertmanager_config_custom_webhook_urls (
892+ self ,
893+ _get_fqdn ,
894+ _run_cephadm ,
895+ cephadm_module : CephadmOrchestrator ,
896+ user_data : Dict [str , List [str ]]
897+ ):
898+ _run_cephadm .side_effect = async_side_effect (('{}' , '' , 0 ))
899+ cephadm_module .set_store (AlertmanagerService .USER_CFG_KEY , 'alertmanager_user' )
900+ cephadm_module .set_store (AlertmanagerService .PASS_CFG_KEY , 'alertmanager_plain_password' )
901+ fqdn = 'host1.test'
902+ _get_fqdn .return_value = fqdn
903+
904+ print (user_data )
905+
906+ urls = []
907+ if 'default_webhook_urls' in user_data :
908+ urls += user_data ['default_webhook_urls' ]
909+ if 'webhook_urls' in user_data :
910+ urls += user_data ['webhook_urls' ]
911+ tab_over = ' ' * 18 # since we'll be inserting this into an indented string
912+ webhook_configs_str = '\n ' .join (f'{ tab_over } - url: \' { u } \' ' for u in urls )
913+
914+ with with_host (cephadm_module , 'test' ):
915+ with with_service (cephadm_module , AlertManagerSpec (user_data = user_data )):
916+
917+ y = dedent (f"""
918+ # This file is generated by cephadm.
919+ # See https://prometheus.io/docs/alerting/configuration/ for documentation.
920+
921+ global:
922+ resolve_timeout: 5m
923+ http_config:
924+ tls_config:
925+ insecure_skip_verify: true
926+
927+ route:
928+ receiver: 'default'
929+ routes:
930+ - group_by: ['alertname']
931+ group_wait: 10s
932+ group_interval: 10s
933+ repeat_interval: 1h
934+ receiver: 'ceph-dashboard'
935+ continue: true
936+ - group_by: ['alertname']
937+ group_wait: 10s
938+ group_interval: 10s
939+ repeat_interval: 1h
940+ receiver: 'custom-receiver'
941+
942+ receivers:
943+ - name: 'default'
944+ webhook_configs:
945+ - name: 'custom-receiver'
946+ webhook_configs:
947+ { webhook_configs_str }
948+ - name: 'ceph-dashboard'
949+ webhook_configs:
950+ - url: 'http://{ fqdn } :8080/api/prometheus_receiver'
951+ """ ).lstrip ()
952+
953+ _run_cephadm .assert_called_with (
954+ 'test' ,
955+ "alertmanager.test" ,
956+ ['_orch' , 'deploy' ],
957+ [],
958+ stdin = json .dumps ({
959+ "fsid" : "fsid" ,
960+ "name" : 'alertmanager.test' ,
961+ "image" : '' ,
962+ "deploy_arguments" : [],
963+ "params" : {
964+ 'tcp_ports' : [9093 , 9094 ],
965+ },
966+ "meta" : {
967+ 'service_name' : 'alertmanager' ,
968+ 'ports' : [9093 , 9094 ],
969+ 'ip' : None ,
970+ 'deployed_by' : [],
971+ 'rank' : None ,
972+ 'rank_generation' : None ,
973+ 'extra_container_args' : None ,
974+ 'extra_entrypoint_args' : None ,
975+ },
976+ "config_blobs" : {
977+ "files" : {
978+ "alertmanager.yml" : y ,
979+ },
980+ 'peers' : [],
981+ "use_url_prefix" : False ,
982+ "ip_to_bind_to" : "" ,
983+ }
984+ }),
985+ use_current_daemon_image = False ,
986+ error_ok = True ,
987+ )
988+
870989 @patch ("cephadm.serve.CephadmServe._run_cephadm" )
871990 @patch ("socket.getfqdn" )
872991 @patch ("cephadm.module.CephadmOrchestrator.get_mgr_ip" , lambda _ : '::1' )
0 commit comments