internal/manifests/dcgmexporter/service.go (48 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package dcgmexporter import ( "fmt" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "github.com/aws/amazon-cloudwatch-agent-operator/internal/manifests" "github.com/aws/amazon-cloudwatch-agent-operator/internal/manifests/manifestutils" "github.com/aws/amazon-cloudwatch-agent-operator/internal/naming" ) func Service(params manifests.Params) (*corev1.Service, error) { name := naming.Service(params.DcgmExp.Name) if len(name) == 0 { name = ComponentDcgmExporter } labels := manifestutils.Labels(params.DcgmExp.ObjectMeta, name, params.DcgmExp.Spec.Image, ComponentDcgmExporter, []string{}) //this label is used by scraper config in the agent. labels["k8s-app"] = "dcgm-exporter-service" annotations := Annotations(params.DcgmExp) annotations["prometheus.io/scrape"] = "true" var ports []corev1.ServicePort dcgmPort := corev1.ServicePort{ Name: "metrics", Port: 9400, TargetPort: intstr.IntOrString{Type: intstr.Int, IntVal: 9400}, Protocol: corev1.ProtocolTCP, } if len(params.DcgmExp.Spec.Ports) > 0 { // update default service values with what's from CR dcgmPort.Name = params.DcgmExp.Spec.Ports[0].Name dcgmPort.Port = params.DcgmExp.Spec.Ports[0].Port dcgmPort.TargetPort.IntVal = params.DcgmExp.Spec.Ports[0].Port } ports = append(ports, dcgmPort) trafficPolicy := corev1.ServiceInternalTrafficPolicyLocal return &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-service", name), Namespace: params.DcgmExp.Namespace, Labels: labels, Annotations: annotations, }, Spec: corev1.ServiceSpec{ Type: corev1.ServiceTypeClusterIP, InternalTrafficPolicy: &trafficPolicy, Selector: manifestutils.SelectorLabels(params.DcgmExp.ObjectMeta, ComponentDcgmExporter), Ports: ports, }, }, nil }