@@ -455,6 +455,50 @@ func (me ResourceDescriptor) NewSettings() settings.Settings {
455455 return res
456456}
457457
458+ func (me ResourceDescriptor ) HasWeakIDDependencyTo (resType ResourceType ) bool {
459+ for _ , dependency := range me .Dependencies {
460+ if iddependency , ok := dependency .(* iddep ); ok {
461+ if iddependency .resourceType != resType {
462+ continue
463+ }
464+ if ! iddependency .onlyNonPostProcessed {
465+ continue
466+ }
467+ return true
468+ }
469+ }
470+ return false
471+ }
472+
473+ func IsSettings20Schema (schemaID string ) bool {
474+ return strings .HasPrefix (schemaID , "builtin:" ) || strings .HasPrefix (schemaID , "app:" )
475+ }
476+
477+ func ContainsInsertAfterAttribute (protoType settings.Settings , schemaID string ) bool {
478+ return IsSettings20Schema (schemaID ) && settings .HasInsertAfter (protoType )
479+ }
480+
481+ // AddInsertAfterWeakIDDependencies completes the configured
482+ // Resource Descriptors for every resource that is orderable
483+ // using the mechanism Settings 2.0.
484+ // The `insert_after` attribute allows for ordering settings.
485+ // The export functionality needs to know that these kinds of
486+ // settings are allowed to contain IDs to the same resource type
487+ // in order to replace hardcoded IDs in there.
488+ // `Dependencies.WeakID` takes care of that.
489+ func AddInsertAfterWeakIDDependencies () {
490+ for resType , descriptor := range AllResources {
491+ schemaID := descriptor .Service (& rest.Credentials {}).SchemaID ()
492+ if ! ContainsInsertAfterAttribute (descriptor .protoType , schemaID ) {
493+ continue
494+ }
495+ if descriptor .HasWeakIDDependencyTo (resType ) {
496+ continue
497+ }
498+ descriptor .Dependencies = append (descriptor .Dependencies , Dependencies .WeakID (resType ))
499+ }
500+ }
501+
458502var AllResources = map [ResourceType ]ResourceDescriptor {
459503 ResourceTypes .Alerting : NewResourceDescriptor (
460504 alerting .Service ,
@@ -1190,6 +1234,7 @@ var AllResources = map[ResourceType]ResourceDescriptor{
11901234 ),
11911235 ResourceTypes .LogStorage : NewResourceDescriptor (
11921236 logstoragesettings .Service ,
1237+ Dependencies .ID (ResourceTypes .LogStorage ),
11931238 Coalesce (Dependencies .Host ),
11941239 Coalesce (Dependencies .K8sCluster ),
11951240 Coalesce (Dependencies .HostGroup ),
@@ -1431,8 +1476,11 @@ var AllResources = map[ResourceType]ResourceDescriptor{
14311476 networkoutagehandling .Service ,
14321477 Dependencies .ID (ResourceTypes .NetworkMonitor ),
14331478 ),
1434- ResourceTypes .HubPermissions : NewResourceDescriptor (hubpermissions .Service ),
1435- ResourceTypes .K8sAutomationConnections : NewResourceDescriptor (k8sautomationconnections .Service ),
1479+ ResourceTypes .HubPermissions : NewResourceDescriptor (hubpermissions .Service ),
1480+ ResourceTypes .K8sAutomationConnections : NewResourceDescriptor (
1481+ k8sautomationconnections .Service ,
1482+ Dependencies .WeakID (ResourceTypes .K8sAutomationConnections ),
1483+ ),
14361484 ResourceTypes .WebAppCustomInjectionRules : NewResourceDescriptor (custominjectionrules .Service ),
14371485 ResourceTypes .DiscoveryDefaultRules : NewResourceDescriptor (defaultrules .Service ),
14381486 ResourceTypes .DiscoveryFeatureFlags : NewResourceDescriptor (featureflags .Service ),
0 commit comments