Skip to content

Commit 5423942

Browse files
authored
Merge pull request #5 from opengovern/feat-make-task
Feat make task
2 parents aa7b643 + 13ef0e0 commit 5423942

File tree

3 files changed

+169
-138
lines changed

3 files changed

+169
-138
lines changed

discovery/task/run-task.go

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"github.com/opengovern/og-describer-kubernetes/discovery/envs"
78
"github.com/opengovern/og-describer-kubernetes/discovery/pkg/orchestrator"
89
authApi "github.com/opengovern/og-util/pkg/api"
910
"github.com/opengovern/og-util/pkg/describe"
@@ -54,6 +55,24 @@ func NewTaskRunner(ctx context.Context, jq *jq.JobQueue, coreServiceEndpoint str
5455
}
5556

5657
type TaskResult struct {
58+
AllIntegrations []string `json:"all_integrations"`
59+
AllIntegrationsCount int `json:"all_integrations_count"`
60+
ProgressedIntegrations map[string]*IntegrationResult `json:"proposed_integrations"`
61+
ProgressedIntegrationsCount int `json:"proposed_integrations_count"`
62+
}
63+
64+
type IntegrationResult struct {
65+
IntegrationID string `json:"integration_id"`
66+
AllResourceTypes []string `json:"all_resource_types"`
67+
AllResourceTypesCount int `json:"all_resource_types_count"`
68+
ResourceTypeResults []ResourceTypeResult `json:"resource_type_results"`
69+
FinishedResourceTypesCount int `json:"finished_resource_types_count"`
70+
}
71+
72+
type ResourceTypeResult struct {
73+
ResourceType string `json:"resource_type"`
74+
Error string `json:"error"`
75+
ResourceCount int `json:"resource_count"`
5776
}
5877

5978
type ResourceType struct {
@@ -86,8 +105,15 @@ func (tr *TaskRunner) RunTask(ctx context.Context) error {
86105
}
87106
}
88107

108+
taskResult.AllIntegrations = make([]string, len(integrations))
109+
for _, i := range integrations {
110+
taskResult.AllIntegrations = append(taskResult.AllIntegrations, i.IntegrationID)
111+
}
112+
taskResult.AllIntegrationsCount = len(integrations)
113+
taskResult.ProgressedIntegrations = make(map[string]*IntegrationResult)
114+
89115
for _, i := range integrations {
90-
err = tr.describeIntegrationResourceTypes(ctx, i)
116+
err = tr.describeIntegrationResourceTypes(ctx, i, taskResult)
91117
if err != nil {
92118
tr.logger.Error("Error describing integrations", zap.Error(err))
93119
return err
@@ -104,7 +130,12 @@ func (tr *TaskRunner) RunTask(ctx context.Context) error {
104130
return nil
105131
}
106132

107-
func (tr *TaskRunner) describeIntegrationResourceTypes(ctx context.Context, i Integration) error {
133+
func (tr *TaskRunner) describeIntegrationResourceTypes(ctx context.Context, i Integration, taskResult *TaskResult) error {
134+
taskResult.ProgressedIntegrations[i.IntegrationID] = &IntegrationResult{
135+
IntegrationID: i.IntegrationID,
136+
}
137+
taskResult.ProgressedIntegrationsCount++
138+
108139
var resourceTypes []ResourceType
109140
var err error
110141

@@ -124,6 +155,13 @@ func (tr *TaskRunner) describeIntegrationResourceTypes(ctx context.Context, i In
124155
}
125156
}
126157

158+
taskResult.ProgressedIntegrations[i.IntegrationID].AllResourceTypes = make([]string, len(resourceTypes))
159+
for _, rt := range resourceTypes {
160+
taskResult.ProgressedIntegrations[i.IntegrationID].AllResourceTypes = append(taskResult.ProgressedIntegrations[i.IntegrationID].AllResourceTypes, rt.Name)
161+
}
162+
taskResult.ProgressedIntegrations[i.IntegrationID].AllResourceTypesCount = len(resourceTypes)
163+
taskResult.ProgressedIntegrations[i.IntegrationID].ResourceTypeResults = make([]ResourceTypeResult, len(resourceTypes))
164+
127165
for _, rt := range resourceTypes {
128166
params := make(map[string]string)
129167
for key, value := range tr.request.TaskDefinition.Params {
@@ -144,10 +182,36 @@ func (tr *TaskRunner) describeIntegrationResourceTypes(ctx context.Context, i In
144182
IntegrationLabels: i.Labels,
145183
IntegrationAnnotations: i.Annotations,
146184
}
147-
_, err = orchestrator.Describe(ctx, tr.logger, job, params, config, tr.request.EsDeliverEndpoint,
185+
resources, err := orchestrator.Describe(ctx, tr.logger, job, params, config, tr.request.EsDeliverEndpoint,
148186
tr.request.IngestionPipelineEndpoint, tr.describeToken, tr.request.UseOpenSearch)
187+
errMsg := ""
149188
if err != nil {
150189
tr.logger.Error("Error describing job", zap.Error(err))
190+
errMsg = err.Error()
191+
}
192+
taskResult.ProgressedIntegrations[i.IntegrationID].ResourceTypeResults = append(
193+
taskResult.ProgressedIntegrations[i.IntegrationID].ResourceTypeResults,
194+
ResourceTypeResult{
195+
ResourceType: rt.Name,
196+
Error: errMsg,
197+
ResourceCount: len(resources),
198+
})
199+
200+
taskResult.ProgressedIntegrations[i.IntegrationID].FinishedResourceTypesCount = len(taskResult.ProgressedIntegrations[i.IntegrationID].ResourceTypeResults)
201+
jsonBytes, err := json.Marshal(taskResult)
202+
if err != nil {
203+
err = fmt.Errorf("failed Marshaling task result: %s", err.Error())
204+
return err
205+
}
206+
tr.response.Result = jsonBytes
207+
responseJson, marshalErr := json.Marshal(tr.response)
208+
if marshalErr != nil {
209+
tr.logger.Error("failed to create final job result json", zap.Error(marshalErr))
210+
return marshalErr
211+
}
212+
msgId := fmt.Sprintf("task-run-result-%d", tr.request.TaskDefinition.RunID)
213+
if _, err = tr.jq.Produce(ctx, envs.ResultTopicName, responseJson, msgId); err != nil { // Use original ctx
214+
tr.logger.Error("failed to publish initial InProgress job status", zap.String("response", string(responseJson)), zap.Error(err))
151215
return err
152216
}
153217
}

discovery/worker/worker.go

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ package worker
22

33
import (
44
"context"
5-
"encoding/base64"
65
"encoding/json"
76
"errors" // Added import
87
"fmt"
9-
"github.com/golang-jwt/jwt/v5"
108
"github.com/nats-io/nats.go"
119
"github.com/nats-io/nats.go/jetstream"
1210
"github.com/opengovern/og-describer-kubernetes/discovery/envs"
@@ -17,7 +15,6 @@ import (
1715
"github.com/opengovern/opensecurity/services/tasks/db/models"
1816
"github.com/opengovern/opensecurity/services/tasks/scheduler"
1917
"go.uber.org/zap"
20-
"os"
2118
"strconv"
2219
"time"
2320
)
@@ -231,11 +228,6 @@ func (w *Worker) ProcessMessage(ctx context.Context, msg jetstream.Msg) (err err
231228
}
232229
}()
233230

234-
//token, err := getJWTAuthToken()
235-
//if err != nil {
236-
// return fmt.Errorf("failed to get JWT token: %w", err)
237-
//}
238-
239231
msgLogger.Info("Starting task execution")
240232
taskRunner, err := task.NewTaskRunner(ctxWithCancel, w.jq, envs.InventoryServiceEndpoint, "", w.esClient, msgLogger, request, response)
241233
if err != nil {
@@ -251,28 +243,3 @@ func (w *Worker) ProcessMessage(ctx context.Context, msg jetstream.Msg) (err err
251243

252244
return err
253245
}
254-
255-
func getJWTAuthToken() (string, error) {
256-
privateKey, ok := os.LookupEnv("JWT_PRIVATE_KEY")
257-
if !ok {
258-
return "", fmt.Errorf("JWT_PRIVATE_KEY not set")
259-
}
260-
261-
privateKeyBytes, err := base64.StdEncoding.DecodeString(privateKey)
262-
if err != nil {
263-
return "", fmt.Errorf("JWT_PRIVATE_KEY not base64 encoded")
264-
}
265-
266-
pk, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyBytes)
267-
if err != nil {
268-
return "", fmt.Errorf("JWT_PRIVATE_KEY not valid")
269-
}
270-
271-
token, err := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{
272-
"email": "[email protected]",
273-
}).SignedString(pk)
274-
if err != nil {
275-
return "", fmt.Errorf("JWT token generation failed %v", err)
276-
}
277-
return token, nil
278-
}

global/maps/table_index_map.gen.go

Lines changed: 102 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -5,112 +5,112 @@ import (
55
)
66

77
var ResourceTypesToTables = map[string]string{
8-
"Kubernetes/Node": "kubernetes_node",
9-
"Kubernetes/PersistentVolume": "kubernetes_persistent_volume",
10-
"Kubernetes/PersistentVolumeClaim": "kubernetes_persistent_volume_claim",
11-
"Kubernetes/Pod": "kubernetes_pod",
12-
"Kubernetes/Secret": "kubernetes_secret",
13-
"Kubernetes/Service": "kubernetes_service",
14-
"Kubernetes/ConfigMap": "kubernetes_config_map",
15-
"Kubernetes/ServiceAccount": "kubernetes_service_account",
16-
"Kubernetes/StatefulSet": "kubernetes_stateful_set",
17-
"Kubernetes/Deployment": "kubernetes_deployment",
18-
"Kubernetes/ReplicaSet": "kubernetes_replicaset",
19-
"Kubernetes/DaemonSet": "kubernetes_daemonset",
20-
"Kubernetes/Endpoint": "kubernetes_endpoints",
21-
"Kubernetes/EndpointSlice": "kubernetes_endpoint_slice",
22-
"Kubernetes/Event": "kubernetes_event",
23-
"Kubernetes/Job": "kubernetes_job",
24-
"Kubernetes/CronJob": "kubernetes_cronjob",
25-
"Kubernetes/Ingress": "kubernetes_ingress",
26-
"Kubernetes/NetworkPolicy": "kubernetes_network_policy",
27-
"Kubernetes/Role": "kubernetes_role",
28-
"Kubernetes/RoleBinding": "kubernetes_role_binding",
29-
"Kubernetes/Cluster": "kubernetes_cluster",
30-
"Kubernetes/ClusterRole": "kubernetes_cluster_role",
31-
"Kubernetes/ClusterRoleBinding": "kubernetes_cluster_role_binding",
32-
"Kubernetes/PodDisruptionBudget": "kubernetes_pod_disruption_budget",
33-
"Kubernetes/PodTemplate": "kubernetes_pod_template",
34-
"Kubernetes/HorizontalPodAutoscaler": "kubernetes_horizontal_pod_autoscaler",
35-
"Kubernetes/CustomResourceDefinition": "kubernetes_custom_resource_definition",
36-
"Kubernetes/CustomResource": "kubernetes_custom_resource",
37-
"Kubernetes/StorageClass": "kubernetes_storage_class",
38-
"Kubernetes/LimitRange": "kubernetes_limit_range",
39-
"Kubernetes/Namespace": "kubernetes_namespace",
40-
"Kubernetes/ReplicationController": "kubernetes_replication_controller",
41-
"Kubernetes/RessourceQuota": "kubernetes_resource_quota",
8+
"Kubernetes/Node": "k8_node",
9+
"Kubernetes/PersistentVolume": "k8_persistent_volume",
10+
"Kubernetes/PersistentVolumeClaim": "k8_persistent_volume_claim",
11+
"Kubernetes/Pod": "k8_pod",
12+
"Kubernetes/Secret": "k8_secret",
13+
"Kubernetes/Service": "k8_service",
14+
"Kubernetes/ConfigMap": "k8_config_map",
15+
"Kubernetes/ServiceAccount": "k8_service_account",
16+
"Kubernetes/StatefulSet": "k8_stateful_set",
17+
"Kubernetes/Deployment": "k8_deployment",
18+
"Kubernetes/ReplicaSet": "k8_replicaset",
19+
"Kubernetes/DaemonSet": "k8_daemonset",
20+
"Kubernetes/Endpoint": "k8_endpoints",
21+
"Kubernetes/EndpointSlice": "k8_endpoint_slice",
22+
"Kubernetes/Event": "k8_event",
23+
"Kubernetes/Job": "k8_job",
24+
"Kubernetes/CronJob": "k8_cronjob",
25+
"Kubernetes/Ingress": "k8_ingress",
26+
"Kubernetes/NetworkPolicy": "k8_network_policy",
27+
"Kubernetes/Role": "k8_role",
28+
"Kubernetes/RoleBinding": "k8_role_binding",
29+
"Kubernetes/Cluster": "k8_cluster",
30+
"Kubernetes/ClusterRole": "k8_cluster_role",
31+
"Kubernetes/ClusterRoleBinding": "k8_cluster_role_binding",
32+
"Kubernetes/PodDisruptionBudget": "k8_pod_disruption_budget",
33+
"Kubernetes/PodTemplate": "k8_pod_template",
34+
"Kubernetes/HorizontalPodAutoscaler": "k8_horizontal_pod_autoscaler",
35+
"Kubernetes/CustomResourceDefinition": "k8_custom_resource_definition",
36+
"Kubernetes/CustomResource": "k8_custom_resource",
37+
"Kubernetes/StorageClass": "k8_storage_class",
38+
"Kubernetes/LimitRange": "k8_limit_range",
39+
"Kubernetes/Namespace": "k8_namespace",
40+
"Kubernetes/ReplicationController": "k8_replication_controller",
41+
"Kubernetes/RessourceQuota": "k8_resource_quota",
4242
}
4343

4444
var ResourceTypeToDescription = map[string]interface{}{
45-
"Kubernetes/Node": opengovernance.KubernetesNode{},
46-
"Kubernetes/PersistentVolume": opengovernance.KubernetesPersistentVolume{},
47-
"Kubernetes/PersistentVolumeClaim": opengovernance.KubernetesPersistentVolumeClaim{},
48-
"Kubernetes/Pod": opengovernance.KubernetesPod{},
49-
"Kubernetes/Secret": opengovernance.KubernetesSecret{},
50-
"Kubernetes/Service": opengovernance.KubernetesService{},
51-
"Kubernetes/ConfigMap": opengovernance.KubernetesConfigMap{},
52-
"Kubernetes/ServiceAccount": opengovernance.KubernetesServiceAccount{},
53-
"Kubernetes/StatefulSet": opengovernance.KubernetesStatefulSet{},
54-
"Kubernetes/Deployment": opengovernance.KubernetesDeployment{},
55-
"Kubernetes/ReplicaSet": opengovernance.KubernetesReplicaSet{},
56-
"Kubernetes/DaemonSet": opengovernance.KubernetesDaemonSet{},
57-
"Kubernetes/Endpoint": opengovernance.KubernetesEndpoint{},
58-
"Kubernetes/EndpointSlice": opengovernance.KubernetesEndpointSlice{},
59-
"Kubernetes/Event": opengovernance.KubernetesEvent{},
60-
"Kubernetes/Job": opengovernance.KubernetesJob{},
61-
"Kubernetes/CronJob": opengovernance.KubernetesCronJob{},
62-
"Kubernetes/Ingress": opengovernance.KubernetesIngress{},
63-
"Kubernetes/NetworkPolicy": opengovernance.KubernetesNetworkPolicy{},
64-
"Kubernetes/Role": opengovernance.KubernetesRole{},
65-
"Kubernetes/RoleBinding": opengovernance.KubernetesRoleBinding{},
66-
"Kubernetes/Cluster": opengovernance.KubernetesCluster{},
67-
"Kubernetes/ClusterRole": opengovernance.KubernetesClusterRole{},
68-
"Kubernetes/ClusterRoleBinding": opengovernance.KubernetesClusterRoleBinding{},
69-
"Kubernetes/PodDisruptionBudget": opengovernance.KubernetesPodDisruptionBudget{},
70-
"Kubernetes/PodTemplate": opengovernance.KubernetesPodTemplate{},
71-
"Kubernetes/HorizontalPodAutoscaler": opengovernance.KubernetesHorizontalPodAutoscaler{},
72-
"Kubernetes/CustomResourceDefinition": opengovernance.KubernetesCustomResourceDefinition{},
73-
"Kubernetes/CustomResource": opengovernance.KubernetesCustomResource{},
74-
"Kubernetes/StorageClass": opengovernance.KubernetesStorageClass{},
75-
"Kubernetes/LimitRange": opengovernance.KubernetesLimitRange{},
76-
"Kubernetes/Namespace": opengovernance.KubernetesNamespace{},
77-
"Kubernetes/ReplicationController": opengovernance.KubernetesReplicationController{},
78-
"Kubernetes/RessourceQuota": opengovernance.KubernetesResourceQuota{},
45+
"Kubernetes/Node": opengovernance.KubernetesNode{},
46+
"Kubernetes/PersistentVolume": opengovernance.KubernetesPersistentVolume{},
47+
"Kubernetes/PersistentVolumeClaim": opengovernance.KubernetesPersistentVolumeClaim{},
48+
"Kubernetes/Pod": opengovernance.KubernetesPod{},
49+
"Kubernetes/Secret": opengovernance.KubernetesSecret{},
50+
"Kubernetes/Service": opengovernance.KubernetesService{},
51+
"Kubernetes/ConfigMap": opengovernance.KubernetesConfigMap{},
52+
"Kubernetes/ServiceAccount": opengovernance.KubernetesServiceAccount{},
53+
"Kubernetes/StatefulSet": opengovernance.KubernetesStatefulSet{},
54+
"Kubernetes/Deployment": opengovernance.KubernetesDeployment{},
55+
"Kubernetes/ReplicaSet": opengovernance.KubernetesReplicaSet{},
56+
"Kubernetes/DaemonSet": opengovernance.KubernetesDaemonSet{},
57+
"Kubernetes/Endpoint": opengovernance.KubernetesEndpoint{},
58+
"Kubernetes/EndpointSlice": opengovernance.KubernetesEndpointSlice{},
59+
"Kubernetes/Event": opengovernance.KubernetesEvent{},
60+
"Kubernetes/Job": opengovernance.KubernetesJob{},
61+
"Kubernetes/CronJob": opengovernance.KubernetesCronJob{},
62+
"Kubernetes/Ingress": opengovernance.KubernetesIngress{},
63+
"Kubernetes/NetworkPolicy": opengovernance.KubernetesNetworkPolicy{},
64+
"Kubernetes/Role": opengovernance.KubernetesRole{},
65+
"Kubernetes/RoleBinding": opengovernance.KubernetesRoleBinding{},
66+
"Kubernetes/Cluster": opengovernance.KubernetesCluster{},
67+
"Kubernetes/ClusterRole": opengovernance.KubernetesClusterRole{},
68+
"Kubernetes/ClusterRoleBinding": opengovernance.KubernetesClusterRoleBinding{},
69+
"Kubernetes/PodDisruptionBudget": opengovernance.KubernetesPodDisruptionBudget{},
70+
"Kubernetes/PodTemplate": opengovernance.KubernetesPodTemplate{},
71+
"Kubernetes/HorizontalPodAutoscaler": opengovernance.KubernetesHorizontalPodAutoscaler{},
72+
"Kubernetes/CustomResourceDefinition": opengovernance.KubernetesCustomResourceDefinition{},
73+
"Kubernetes/CustomResource": opengovernance.KubernetesCustomResource{},
74+
"Kubernetes/StorageClass": opengovernance.KubernetesStorageClass{},
75+
"Kubernetes/LimitRange": opengovernance.KubernetesLimitRange{},
76+
"Kubernetes/Namespace": opengovernance.KubernetesNamespace{},
77+
"Kubernetes/ReplicationController": opengovernance.KubernetesReplicationController{},
78+
"Kubernetes/RessourceQuota": opengovernance.KubernetesResourceQuota{},
7979
}
8080

8181
var TablesToResourceTypes = map[string]string{
82-
"kubernetes_node": "Kubernetes/Node",
83-
"kubernetes_persistent_volume": "Kubernetes/PersistentVolume",
84-
"kubernetes_persistent_volume_claim": "Kubernetes/PersistentVolumeClaim",
85-
"kubernetes_pod": "Kubernetes/Pod",
86-
"kubernetes_secret": "Kubernetes/Secret",
87-
"kubernetes_service": "Kubernetes/Service",
88-
"kubernetes_config_map": "Kubernetes/ConfigMap",
89-
"kubernetes_service_account": "Kubernetes/ServiceAccount",
90-
"kubernetes_stateful_set": "Kubernetes/StatefulSet",
91-
"kubernetes_deployment": "Kubernetes/Deployment",
92-
"kubernetes_replicaset": "Kubernetes/ReplicaSet",
93-
"kubernetes_daemonset": "Kubernetes/DaemonSet",
94-
"kubernetes_endpoints": "Kubernetes/Endpoint",
95-
"kubernetes_endpoint_slice": "Kubernetes/EndpointSlice",
96-
"kubernetes_event": "Kubernetes/Event",
97-
"kubernetes_job": "Kubernetes/Job",
98-
"kubernetes_cronjob": "Kubernetes/CronJob",
99-
"kubernetes_ingress": "Kubernetes/Ingress",
100-
"kubernetes_network_policy": "Kubernetes/NetworkPolicy",
101-
"kubernetes_role": "Kubernetes/Role",
102-
"kubernetes_role_binding": "Kubernetes/RoleBinding",
103-
"kubernetes_cluster": "Kubernetes/Cluster",
104-
"kubernetes_cluster_role": "Kubernetes/ClusterRole",
105-
"kubernetes_cluster_role_binding": "Kubernetes/ClusterRoleBinding",
106-
"kubernetes_pod_disruption_budget": "Kubernetes/PodDisruptionBudget",
107-
"kubernetes_pod_template": "Kubernetes/PodTemplate",
108-
"kubernetes_horizontal_pod_autoscaler": "Kubernetes/HorizontalPodAutoscaler",
109-
"kubernetes_custom_resource_definition": "Kubernetes/CustomResourceDefinition",
110-
"kubernetes_custom_resource": "Kubernetes/CustomResource",
111-
"kubernetes_storage_class": "Kubernetes/StorageClass",
112-
"kubernetes_limit_range": "Kubernetes/LimitRange",
113-
"kubernetes_namespace": "Kubernetes/Namespace",
114-
"kubernetes_replication_controller": "Kubernetes/ReplicationController",
115-
"kubernetes_resource_quota": "Kubernetes/RessourceQuota",
82+
"k8_node": "Kubernetes/Node",
83+
"k8_persistent_volume": "Kubernetes/PersistentVolume",
84+
"k8_persistent_volume_claim": "Kubernetes/PersistentVolumeClaim",
85+
"k8_pod": "Kubernetes/Pod",
86+
"k8_secret": "Kubernetes/Secret",
87+
"k8_service": "Kubernetes/Service",
88+
"k8_config_map": "Kubernetes/ConfigMap",
89+
"k8_service_account": "Kubernetes/ServiceAccount",
90+
"k8_stateful_set": "Kubernetes/StatefulSet",
91+
"k8_deployment": "Kubernetes/Deployment",
92+
"k8_replicaset": "Kubernetes/ReplicaSet",
93+
"k8_daemonset": "Kubernetes/DaemonSet",
94+
"k8_endpoints": "Kubernetes/Endpoint",
95+
"k8_endpoint_slice": "Kubernetes/EndpointSlice",
96+
"k8_event": "Kubernetes/Event",
97+
"k8_job": "Kubernetes/Job",
98+
"k8_cronjob": "Kubernetes/CronJob",
99+
"k8_ingress": "Kubernetes/Ingress",
100+
"k8_network_policy": "Kubernetes/NetworkPolicy",
101+
"k8_role": "Kubernetes/Role",
102+
"k8_role_binding": "Kubernetes/RoleBinding",
103+
"k8_cluster": "Kubernetes/Cluster",
104+
"k8_cluster_role": "Kubernetes/ClusterRole",
105+
"k8_cluster_role_binding": "Kubernetes/ClusterRoleBinding",
106+
"k8_pod_disruption_budget": "Kubernetes/PodDisruptionBudget",
107+
"k8_pod_template": "Kubernetes/PodTemplate",
108+
"k8_horizontal_pod_autoscaler": "Kubernetes/HorizontalPodAutoscaler",
109+
"k8_custom_resource_definition": "Kubernetes/CustomResourceDefinition",
110+
"k8_custom_resource": "Kubernetes/CustomResource",
111+
"k8_storage_class": "Kubernetes/StorageClass",
112+
"k8_limit_range": "Kubernetes/LimitRange",
113+
"k8_namespace": "Kubernetes/Namespace",
114+
"k8_replication_controller": "Kubernetes/ReplicationController",
115+
"k8_resource_quota": "Kubernetes/RessourceQuota",
116116
}

0 commit comments

Comments
 (0)