From 51a44e6657c3963b3e80b61b08c94a476987c7f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Ca=C3=B1adillas?= <41782403+dcanadillas@users.noreply.github.com> Date: Fri, 21 Oct 2022 14:13:01 +0200 Subject: [PATCH] Adding Consul Enterprise Admin Partitions (#11482) * Adding Consul Enterprise Admin Partitions Signed-off-by: dcanadillas --- discovery/consul/consul.go | 7 +++++++ docs/configuration/configuration.md | 3 +++ 2 files changed, 10 insertions(+) diff --git a/discovery/consul/consul.go b/discovery/consul/consul.go index 8d0a1fea48..c59bd1f5d8 100644 --- a/discovery/consul/consul.go +++ b/discovery/consul/consul.go @@ -60,6 +60,8 @@ const ( datacenterLabel = model.MetaLabelPrefix + "consul_dc" // namespaceLabel is the name of the label containing the namespace (Consul Enterprise only). namespaceLabel = model.MetaLabelPrefix + "consul_namespace" + // partitionLabel is the name of the label containing the Admin Partition (Consul Enterprise only). + partitionLabel = model.MetaLabelPrefix + "consul_partition" // taggedAddressesLabel is the prefix for the labels mapping to a target's tagged addresses. taggedAddressesLabel = model.MetaLabelPrefix + "consul_tagged_address_" // serviceIDLabel is the name of the label containing the service ID. @@ -112,6 +114,7 @@ type SDConfig struct { Token config.Secret `yaml:"token,omitempty"` Datacenter string `yaml:"datacenter,omitempty"` Namespace string `yaml:"namespace,omitempty"` + Partition string `yaml:"partition,omitempty"` TagSeparator string `yaml:"tag_separator,omitempty"` Scheme string `yaml:"scheme,omitempty"` Username string `yaml:"username,omitempty"` @@ -183,6 +186,7 @@ type Discovery struct { client *consul.Client clientDatacenter string clientNamespace string + clientPartition string tagSeparator string watchedServices []string // Set of services which will be discovered. watchedTags []string // Tags used to filter instances of a service. @@ -210,6 +214,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { Scheme: conf.Scheme, Datacenter: conf.Datacenter, Namespace: conf.Namespace, + Partition: conf.Partition, Token: string(conf.Token), HttpClient: wrapper, } @@ -227,6 +232,7 @@ func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { refreshInterval: time.Duration(conf.RefreshInterval), clientDatacenter: conf.Datacenter, clientNamespace: conf.Namespace, + clientPartition: conf.Partition, finalizer: wrapper.CloseIdleConnections, logger: logger, } @@ -547,6 +553,7 @@ func (srv *consulService) watch(ctx context.Context, ch chan<- []*targetgroup.Gr addressLabel: model.LabelValue(serviceNode.Node.Address), nodeLabel: model.LabelValue(serviceNode.Node.Node), namespaceLabel: model.LabelValue(serviceNode.Service.Namespace), + partitionLabel: model.LabelValue(serviceNode.Service.Partition), tagsLabel: model.LabelValue(tags), serviceAddressLabel: model.LabelValue(serviceNode.Service.Address), servicePortLabel: model.LabelValue(strconv.Itoa(serviceNode.Service.Port)), diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md index 0b75ace8f7..dd6fb33f21 100644 --- a/docs/configuration/configuration.md +++ b/docs/configuration/configuration.md @@ -518,6 +518,7 @@ The following meta labels are available on targets during [relabeling](#relabel_ * `__meta_consul_address`: the address of the target * `__meta_consul_dc`: the datacenter name for the target * `__meta_consul_health`: the health status of the service +* `__meta_consul_partition`: the admin partition name where the service is registered * `__meta_consul_metadata_`: each node metadata key value of the target * `__meta_consul_node`: the node name defined for the target * `__meta_consul_service_address`: the service address of the target @@ -536,6 +537,8 @@ The following meta labels are available on targets during [relabeling](#relabel_ [ datacenter: ] # Namespaces are only supported in Consul Enterprise. [ namespace: ] +# Admin Partitions are only supported in Consul Enterprise. +[ partition: ] [ scheme: | default = "http" ] # The username and password fields are deprecated in favor of the basic_auth configuration. [ username: ]