@@ -1489,21 +1489,57 @@ func createPresetDatabaseObjectImportRule(ctx context.Context, rules services.Da
14891489// createPresetHealthCheckConfig creates a default preset health check config 
14901490// resource that enables health checks on all resources. 
14911491func  createPresetHealthCheckConfig (ctx  context.Context , svc  services.HealthCheckConfig ) error  {
1492+ 	// To support developing health checks for multiple resources over time, 
1493+ 	// while avoiding migration of the backend database, 
1494+ 	// and enabling ease of health check adoption: 
1495+ 	// 	- Create a health check preset for each resource (db, kube, etc) 
1496+ 
14921497	page , _ , err  :=  svc .ListHealthCheckConfigs (ctx , 0 , "" )
14931498	if  err  !=  nil  {
14941499		return  trace .Wrap (err , "failed listing available health check configs" )
14951500	}
1496- 	if  len (page ) >  0  {
1501+ 	if  len (page ) ==  0  {
1502+ 		// No health check configs exist. 
1503+ 		// Create all preset configs. 
1504+ 		presetDB  :=  services .NewPresetHealthCheckConfigDB ()
1505+ 		_ , err  =  svc .CreateHealthCheckConfig (ctx , presetDB )
1506+ 		if  err  !=  nil  &&  ! trace .IsAlreadyExists (err ) {
1507+ 			return  trace .Wrap (err ,
1508+ 				"failed creating preset health_check_config %s" ,
1509+ 				presetDB .GetMetadata ().GetName (),
1510+ 			)
1511+ 		}
1512+ 		presetKube  :=  services .NewPresetHealthCheckConfigKube ()
1513+ 		_ , err  =  svc .CreateHealthCheckConfig (ctx , presetKube )
1514+ 		if  err  !=  nil  &&  ! trace .IsAlreadyExists (err ) {
1515+ 			return  trace .Wrap (err ,
1516+ 				"failed creating preset health_check_config %s" ,
1517+ 				presetKube .GetMetadata ().GetName (),
1518+ 			)
1519+ 		}
14971520		return  nil 
1521+ 	} else  {
1522+ 		// Health check configs exist. 
1523+ 		// Create per-resource presets. 
1524+ 		// Skip creating a DB preset; historically, it's the first, and already exists. 
1525+ 
1526+ 		// Look for an existing kube preset. 
1527+ 		for  _ , cfg  :=  range  page  {
1528+ 			if  cfg .GetMetadata ().GetName () ==  teleport .PresetDefaultHealthCheckConfigKubeName  {
1529+ 				return  nil 
1530+ 			}
1531+ 		}
1532+ 		// Create a kube preset. 
1533+ 		presetKube  :=  services .NewPresetHealthCheckConfigKube ()
1534+ 		_ , err  =  svc .CreateHealthCheckConfig (ctx , presetKube )
1535+ 		if  err  !=  nil  &&  ! trace .IsAlreadyExists (err ) {
1536+ 			return  trace .Wrap (err ,
1537+ 				"failed creating preset health_check_config %s" ,
1538+ 				presetKube .GetMetadata ().GetName (),
1539+ 			)
1540+ 		}
14981541	}
1499- 	preset  :=  services .NewPresetHealthCheckConfig ()
1500- 	_ , err  =  svc .CreateHealthCheckConfig (ctx , preset )
1501- 	if  err  !=  nil  &&  ! trace .IsAlreadyExists (err ) {
1502- 		return  trace .Wrap (err ,
1503- 			"failed creating preset health_check_config %s" ,
1504- 			preset .GetMetadata ().GetName (),
1505- 		)
1506- 	}
1542+ 
15071543	return  nil 
15081544}
15091545
0 commit comments