diff --git a/config/config.go b/config/config.go index 8e3a0d6..c575761 100644 --- a/config/config.go +++ b/config/config.go @@ -20,6 +20,7 @@ type Specification struct { //STEADYBIT_EXTENSION_PROJECT_ID ProjectID string `json:"projectId" required:"false" split_words:"true"` DiscoveryAttributesExcludesVM []string `json:"discoveryAttributesExcludesVM" required:"false" split_words:"true"` + EnrichVMDataForTargetTypes []string `json:"EnrichScaleSetVMDataForTargetTypes" split_words:"true" default:"com.steadybit.extension_jvm.application,com.steadybit.extension_container.container,com.steadybit.extension_kubernetes.kubernetes-deployment,com.steadybit.extension_kubernetes.kubernetes-pod,com.steadybit.extension_kubernetes.kubernetes-daemonset,com.steadybit.extension_kubernetes.kubernetes-statefulset"` } var ( diff --git a/extvm/vm_discovery.go b/extvm/vm_discovery.go index 97f50e9..dc92ed8 100644 --- a/extvm/vm_discovery.go +++ b/extvm/vm_discovery.go @@ -329,11 +329,15 @@ func getStringValue(val *string) string { } func (d *vmDiscovery) DescribeEnrichmentRules() []discovery_kit_api.TargetEnrichmentRule { - return []discovery_kit_api.TargetEnrichmentRule{ + rules := []discovery_kit_api.TargetEnrichmentRule{ getToHostEnrichmentRule(), getToContainerEnrichmentRule(), getToKubernetesNodeEnrichmentRule(), } + for _, targetType := range config.Config.EnrichVMDataForTargetTypes { + rules = append(rules, getVMToXEnrichmentRule(targetType)) + } + return rules } func getToHostEnrichmentRule() discovery_kit_api.TargetEnrichmentRule { @@ -417,6 +421,37 @@ func getToKubernetesNodeEnrichmentRule() discovery_kit_api.TargetEnrichmentRule } } + +func getVMToXEnrichmentRule(destTargetType string) discovery_kit_api.TargetEnrichmentRule { + id := fmt.Sprintf("com.steadybit.extension_gcp.vm.instance-to-%s", destTargetType) + return discovery_kit_api.TargetEnrichmentRule{ + Id: id, + Version: extbuild.GetSemverVersionStringOrUnknown(), + Src: discovery_kit_api.SourceOrDestination{ + Type: TargetIDVM, + Selector: map[string]string{ + "gcp-vm.hostname": "${dest.host.hostname}", + }, + }, + Dest: discovery_kit_api.SourceOrDestination{ + Type: destTargetType, + Selector: map[string]string{ + "host.hostname": "${src.gcp-vm.hostname}", + }, + }, + Attributes: []discovery_kit_api.Attribute{ + { + Matcher: discovery_kit_api.Equals, + Name: "gcp.zone", + }, + { + Matcher: discovery_kit_api.Equals, + Name: "gcp.project.id", + }, + }, + } +} + func getToContainerEnrichmentRule() discovery_kit_api.TargetEnrichmentRule { return discovery_kit_api.TargetEnrichmentRule{ Id: "com.steadybit.extension_gcp.gcp-vm-to-container",