This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-rover.git


The following commit(s) were added to refs/heads/main by this push:
     new 1201363  Update `LabelValue` obtain pod information function to add 
default value parameter (#98)
1201363 is described below

commit 1201363f4526660bb2d3cf5ad3b11a2b9aee3a48
Author: mrproliu <[email protected]>
AuthorDate: Wed Aug 23 16:01:06 2023 +0800

    Update `LabelValue` obtain pod information function to add default value 
parameter (#98)
---
 CHANGES.md                                         |  1 +
 configs/rover_configs.yaml                         |  4 +-
 .../configuration/process_discovery/kubernetes.md  | 76 +++++++++++-----------
 pkg/process/finders/kubernetes/template.go         |  8 +--
 .../profiling/task/network/base/rover_configs.yaml |  4 +-
 .../cases/profiling/task/network/envoy/rover.yaml  |  4 +-
 6 files changed, 47 insertions(+), 50 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index e66497d..dfb6eca 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -6,6 +6,7 @@ Release Notes.
 ------------------
 #### Features
 * Enhance compatibility when profiling with SSL.
+* Update `LabelValue` obtain pod information function to add default value 
parameter.
 
 #### Bug Fixes
 
diff --git a/configs/rover_configs.yaml b/configs/rover_configs.yaml
index f9af6c9..90132d5 100644
--- a/configs/rover_configs.yaml
+++ b/configs/rover_configs.yaml
@@ -83,7 +83,7 @@ process_discovery:
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_HAS_ENVOY:.Pod.HasContainer
 "istio-proxy"}
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_CONTAINER_IS_ENVOY:eq 
.Container.Name "istio-proxy"}
         layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_LAYER:MESH_DP}
-        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" }}}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" ""}}}
         instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_INSTANCE_NAME:{{.Pod.Name}}}
         process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_PROCESS_NAME:{{.Process.ExeName}}}
         labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_LABELS:mesh-envoy}
@@ -92,7 +92,7 @@ process_discovery:
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_HAS_ENVOY:.Pod.HasContainer
 "istio-proxy"}
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_CONTAINER_NOT_ENVOY:ne
 .Container.Name "istio-proxy"}
         layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_LAYER:MESH}
-        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" }}}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" ""}}}
         instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_INSTANCE_NAME:{{.Pod.Name}}}
         process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_PROCESS_NAME:{{.Process.ExeName}}}
         labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_LABELS:mesh-application}
diff --git a/docs/en/setup/configuration/process_discovery/kubernetes.md 
b/docs/en/setup/configuration/process_discovery/kubernetes.md
index 87fd93a..2640427 100644
--- a/docs/en/setup/configuration/process_discovery/kubernetes.md
+++ b/docs/en/setup/configuration/process_discovery/kubernetes.md
@@ -6,18 +6,18 @@ After finding the process, it would collect the metadata of 
the process when the
 
 ## Configuration
 
-| Name | Default | Environment Key | Description |
-|------|---------|-----------------|-------------|
-| process_discovery.kubernetes.active | false | 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ACTIVE | Is active the kubernetes process 
discovery. |
-| process_discovery.kubernetes.node_name |  | 
ROVER_PROCESS_DISCOVERY_KUBERNETES_NODE_NAME | Current deployed node name, it 
could be inject by `spec.nodeName`. |
-| process_discovery.kubernetes.namespaces | | 
ROVER_PROCESS_DISCOVERY_KUBERNETES_NAMESPACES | Including pod by namespaces, if 
empty means including all namespaces. Multiple namespaces split by ",". |
-| process_discovery.kubernetes.analyzers | | | Declare how to build the 
process. The istio and k8s resources are active by default. |
-| process_discovery.kubernetes.analyzers.active | | | Set is active analyzer. |
-| process_discovery.kubernetes.analyzers.filters | | | Define which process is 
match to current process builder. |
-| process_discovery.kubernetes.analyzers.service_name | | | The Service Name 
of the process entity. |
-| process_discovery.kubernetes.analyzers.instance_name | | | The Service 
Instance Name of the process entity, by default, the instance name is the host 
IP v4 address from "en0" net interface. |
-| process_discovery.kubernetes.analyzers.process_name | | | The Process Name 
of the process entity, by default, the process name is the executable name of 
the process. |
-| process_discovery.kubernetes.analyzers.labels | | | The Process Labels, used 
to aggregate similar process from service entity. Multiple labels split by ",". 
|
+| Name                                                 | Default | Environment 
Key                               | Description                                 
                                                                                
       |
+|------------------------------------------------------|---------|-----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|
+| process_discovery.kubernetes.active                  | false   | 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ACTIVE     | Is active the kubernetes 
process discovery.                                                              
                          |
+| process_discovery.kubernetes.node_name               |         | 
ROVER_PROCESS_DISCOVERY_KUBERNETES_NODE_NAME  | Current deployed node name, it 
could be inject by `spec.nodeName`.                                             
                    |
+| process_discovery.kubernetes.namespaces              |         | 
ROVER_PROCESS_DISCOVERY_KUBERNETES_NAMESPACES | Including pod by namespaces, if 
empty means including all namespaces. Multiple namespaces split by ",".         
                   |
+| process_discovery.kubernetes.analyzers               |         |             
                                  | Declare how to build the process. The istio 
and k8s resources are active by default.                                        
       |
+| process_discovery.kubernetes.analyzers.active        |         |             
                                  | Set is active analyzer.                     
                                                                                
       |
+| process_discovery.kubernetes.analyzers.filters       |         |             
                                  | Define which process is match to current 
process builder.                                                                
          |
+| process_discovery.kubernetes.analyzers.service_name  |         |             
                                  | The Service Name of the process entity.     
                                                                                
       |
+| process_discovery.kubernetes.analyzers.instance_name |         |             
                                  | The Service Instance Name of the process 
entity, by default, the instance name is the host IP v4 address from "en0" net 
interface. |
+| process_discovery.kubernetes.analyzers.process_name  |         |             
                                  | The Process Name of the process entity, by 
default, the process name is the executable name of the process.                
        |
+| process_discovery.kubernetes.analyzers.labels        |         |             
                                  | The Process Labels, used to aggregate 
similar process from service entity. Multiple labels split by ",".              
             |
 
 ## Process Analyze
 
@@ -39,24 +39,24 @@ Is the same with the [process context in 
scanner](./scanner.md#process), but doe
 
 Provide current pod information and judgments.
 
-| Name | Argument |  Example  | Description |
-|------|--------- |-----------|-------------|
-| Name | None | `eq .Pod.Name "test-pod-name"` | The name of the current pod. 
The example shows the pod name is equal to `test-pod-name`. |
-| Namespace | None | `eq .Pod.Namespace "test-namesapce"` | The name of the 
current pod namespace. The example shows the pod namespace name is equal to 
`test-namespace`. |
-| Node | None | `eq .Pod.Node "test-node"` | The name of the node deployed. 
The example shows the pod node name is equal to `test-node`. |
-| LabelValue | KeyNames | `eq .Pod.LavelValue "a,b" "v"` | The label value of 
the label keys, If provide multiple keys, if any key has value, then don't need 
to get other values. The example shows the pod has anyone `a` or `b` label key, 
and the value matches to `v`. |
-| ServiceName | None | `eq .Pod.ServiceName "test-service"` | The service name 
of the pod. The example shows current pods matched service name is 
`test-service`. |
-| HasContainer | Container name | `.Pod.HasContainer "istio-proxy"` | The pod 
has the appointed container name. |
-| LabelSelector | selector | `.Pod.LabelSelector` | The pod is matches the 
label selector. For more details, please read the [official 
documentation](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors).
 |
-| HasServiceName | None | `.Pod.HasServiceName` | The pod has the matched 
service. |
+| Name           | Argument       | Example                              | 
Description                                                                     
                                                                                
                                                 |
+|----------------|----------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Name           | None           | `eq .Pod.Name "test-pod-name"`       | The 
name of the current pod. The example shows the pod name is equal to 
`test-pod-name`.                                                                
                                                         |
+| Namespace      | None           | `eq .Pod.Namespace "test-namesapce"` | The 
name of the current pod namespace. The example shows the pod namespace name is 
equal to `test-namespace`.                                                      
                                              |
+| Node           | None           | `eq .Pod.Node "test-node"`           | The 
name of the node deployed. The example shows the pod node name is equal to 
`test-node`.                                                                    
                                                  |
+| LabelValue     | KeyNames       | `eq .Pod.LavelValue "a,b" "v"`       | The 
label value of the label keys, If provide multiple keys, if any key has value, 
then don't need to get other values. The example shows the pod has anyone `a` 
or `b` label key, and the value matches to `v`. |
+| ServiceName    | None           | `eq .Pod.ServiceName "test-service"` | The 
service name of the pod. The example shows current pods matched service name is 
`test-service`.                                                                 
                                             |
+| HasContainer   | Container name | `.Pod.HasContainer "istio-proxy"`    | The 
pod has the appointed container name.                                           
                                                                                
                                             |
+| LabelSelector  | selector       | `.Pod.LabelSelector`                 | The 
pod is matches the label selector. For more details, please read the [official 
documentation](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors).
                    |
+| HasServiceName | None           | `.Pod.HasServiceName`                | The 
pod has the matched service.                                                    
                                                                                
                                             |
 
 #### Container Context
 
 Provide current container(under the pod) information.
 
-| Name | Argument | Example | Description |
-|------|--------- |-----------|-------------|
-| Name | None | `eq .Container.Name "istio-proxy"`| The name of the current 
container under the pod. The examples show the container name is equal to 
`istio-proxy`. |
+| Name  | Argument | Example                             | Description         
                                                                                
             |
+|-------|----------|-------------------------------------|------------------------------------------------------------------------------------------------------------------|
+| Name  | None     | `eq .Container.Name "istio-proxy"`  | The name of the 
current container under the pod. The examples show the container name is equal 
to `istio-proxy`. |
 
 ### Entity
 The entity including `layer`, `serviceName`, `instanceName`, `processName` and 
`labels` properties.
@@ -75,21 +75,21 @@ Same with the [process context in the 
scanner](./scanner.md#process).
 
 The information on the current pod.
 
-| Name | Argument |  Example  | Description |
-|------|--------- |-----------|-------------|
-| Name | None | `{{.Pod.Name}}` | The name of current pod. |
-| Namespace | None | `{{.Pod.Namespace}}` | The name of current pod namespace. 
|
-| Node | None | `{{.Pod.Node}}` | The name of the node deployed. |
-| LabelValue | KeyNames | `{{.Pod.LavelValue "a,b"}}` | The label value of the 
label keys, If provide multiple keys, if any key has value, then don't need to 
get other values. |
-| ServiceName | None | `{{.Pod.ServiceName}}` | The service name of the pod. 
If the pod hasn't matched service, then return an empty string. |
-| FindContainer | ContainerName | `{{.Pod.FindContainer "test"}}` | Find the 
Container context by container name. |
+| Name          | Argument          | Example                           | 
Description                                                                     
                                                                                
                     |
+|---------------|-------------------|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Name          | None              | `{{.Pod.Name}}`                   | The 
name of current pod.                                                            
                                                                                
                 |
+| Namespace     | None              | `{{.Pod.Namespace}}`              | The 
name of current pod namespace.                                                  
                                                                                
                 |
+| Node          | None              | `{{.Pod.Node}}`                   | The 
name of the node deployed.                                                      
                                                                                
                 |
+| LabelValue    | KeyNames, Default | `{{.Pod.LabelValue "a,b" "v"}}`   | The 
label value of the label keys, If provide multiple keys, if any key has value, 
then don't need to get other values. If all keys don't have value, then return 
the default value. |
+| ServiceName   | None              | `{{.Pod.ServiceName}}`            | The 
service name of the pod. If the pod hasn't matched service, then return an 
empty string.                                                                   
                      |
+| FindContainer | ContainerName     | `{{.Pod.FindContainer "test"}}`   | Find 
the Container context by container name.                                        
                                                                                
                |
 
 #### Container
 
 The information of the current container under the pod.
 
-| Name | Argument | Example | Description |
-|------|--------- |-----------|-------------|
-| Name | None | `{{.Container.Name}}`| The name of the current container under 
the pod. |
-| ID | None | `{{.Container.ID}}`| The id of the current container under the 
pod. |
-| EnvValue | KeyNames | `{{.Container.EnvValue "a,b"}}`| The environment value 
of the first non-value key in the provided candidates(Iterate from left to 
right).  |
\ No newline at end of file
+| Name     | Argument | Example                                                
                 | Description                                                  
                                            |
+|----------|----------|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
+| Name     | None     | `{{.Container.Name}}`  The name of the current 
container under the pod. |                                                      
                                                    |
+| ID       | None     | `{{.Container.ID}}`                                    
                 | The id of the current container under the pod.               
                                            |
+| EnvValue | KeyNames | `{{.Container.EnvValue "a,b"}}`                        
                 | The environment value of the first non-value key in the 
provided candidates(Iterate from left to right). |
\ No newline at end of file
diff --git a/pkg/process/finders/kubernetes/template.go 
b/pkg/process/finders/kubernetes/template.go
index f77c409..d54e3c5 100644
--- a/pkg/process/finders/kubernetes/template.go
+++ b/pkg/process/finders/kubernetes/template.go
@@ -107,7 +107,7 @@ func (p *TemplatePod) FindContainer(name string) 
(*TemplateContainer, error) {
        return &TemplateContainer{pc: container}, nil
 }
 
-func (p *TemplatePod) LabelValue(names string) (string, error) {
+func (p *TemplatePod) LabelValue(names, def string) (string, error) {
        namesArray := strings.Split(names, ",")
        for _, name := range namesArray {
                val := p.pc.Pod.Labels[name]
@@ -115,11 +115,7 @@ func (p *TemplatePod) LabelValue(names string) (string, 
error) {
                        return val, nil
                }
        }
-       actualNames := make([]string, 0)
-       for k := range p.pc.Pod.Labels {
-               actualNames = append(actualNames, k)
-       }
-       return "", fmt.Errorf("could not found matches label, want names: %v, 
actual names: %v", namesArray, actualNames)
+       return def, nil
 }
 
 func (p *TemplatePod) ServiceName() string {
diff --git a/test/e2e/cases/profiling/task/network/base/rover_configs.yaml 
b/test/e2e/cases/profiling/task/network/base/rover_configs.yaml
index 4bbf8cb..1f0def5 100644
--- a/test/e2e/cases/profiling/task/network/base/rover_configs.yaml
+++ b/test/e2e/cases/profiling/task/network/base/rover_configs.yaml
@@ -97,7 +97,7 @@ process_discovery:
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_HAS_ENVOY:.Pod.HasContainer
 "istio-proxy"}
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_CONTAINER_IS_ENVOY:eq 
.Container.Name "istio-proxy"}
         layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_LAYER:MESH_DP}
-        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" }}}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" ""}}}
         instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_INSTANCE_NAME:{{.Pod.Name}}}
         process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_PROCESS_NAME:{{.Process.ExeName}}}
         labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_LABELS:mesh-envoy}
@@ -106,7 +106,7 @@ process_discovery:
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_HAS_ENVOY:.Pod.HasContainer
 "istio-proxy"}
           - 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_CONTAINER_NOT_ENVOY:ne
 .Container.Name "istio-proxy"}
         layer: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_LAYER:MESH}
-        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" }}}
+        service_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_SERVICE_NAME:{{.Pod.Namespace}}::{{.Pod.LabelValue
 "service.istio.io/canonical-name,app.kubernetes.io/name,app" ""}}}
         instance_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_INSTANCE_NAME:{{.Pod.Name}}}
         process_name: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_PROCESS_NAME:{{.Process.ExeName}}}
         labels: 
${ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_LABELS:mesh-application}
diff --git a/test/e2e/cases/profiling/task/network/envoy/rover.yaml 
b/test/e2e/cases/profiling/task/network/envoy/rover.yaml
index 90fa0de..de72937 100644
--- a/test/e2e/cases/profiling/task/network/envoy/rover.yaml
+++ b/test/e2e/cases/profiling/task/network/envoy/rover.yaml
@@ -90,9 +90,9 @@ spec:
             - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_PROCESS_NAME
               value: "{{.Process.ExeNameInCommandLine}}"
             - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_ENVOY_INSTANCE_NAME
-              value: "{{.Pod.LabelValue 
\"service.istio.io/canonical-name,app.kubernetes.io/name,app\" }}"
+              value: "{{.Pod.LabelValue 
\"service.istio.io/canonical-name,app.kubernetes.io/name,app\" \"\"}}"
             - name: 
ROVER_PROCESS_DISCOVERY_KUBERNETES_ANALYZER_ISTIO_APPLICATION_INSTANCE_NAME
-              value: "{{.Pod.LabelValue 
\"service.istio.io/canonical-name,app.kubernetes.io/name,app\" }}"
+              value: "{{.Pod.LabelValue 
\"service.istio.io/canonical-name,app.kubernetes.io/name,app\" \"\"}}"
       hostPID: true
       hostNetwork: true
       dnsPolicy: ClusterFirstWithHostNet

Reply via email to