Skip to content

Commit cae050d

Browse files
1 parent d6793cb commit cae050d

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

dynatrace/export.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ func runExport(cfgGetter config.Getter) (err error) {
7575
}()
7676
os.Remove("terraform-provider-dynatrace.export.log")
7777
os.Remove("terraform-provider-dynatrace.warnings.log")
78+
79+
// This ensures that every Settings 2.0 resource
80+
// that offers ordering using the `insert_after`
81+
// attribute won't produce hardcoded IDs
82+
// when exported.
83+
export.AddInsertAfterWeakIDDependencies()
84+
7885
var environment *export.Environment
7986
if environment, err = export.Initialize(cfgGetter); err != nil {
8087
return err

dynatrace/export/resource_descriptor.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
458502
var 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

Comments
 (0)