Skip to content

Commit 325ef4b

Browse files
committed
feat: add new tables
1 parent 7a9ef10 commit 325ef4b

33 files changed

+9358
-800
lines changed

cloudql/kubernetes/plugin.go

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,39 @@ func Plugin(ctx context.Context) *plugin.Plugin {
1919
},
2020
DefaultTransform: transform.FromCamel(),
2121
TableMap: map[string]*plugin.Table{
22-
"kubernetes_node": tableKubernetesNode(ctx),
23-
"kubernetes_persistent_volume_claim": tableKubernetesPersistentVolumeClaim(ctx),
24-
"kubernetes_persistent_volume": tableKubernetesPersistentVolume(ctx),
25-
"kubernetes_pod": tableKubernetesPod(ctx),
26-
"kubernetes_service": tableKubernetesService(ctx),
27-
"kubernetes_secret": tableKubernetesSecret(ctx),
28-
"kubernetes_deployment": tableKubernetesDeployment(ctx),
29-
"kubernetes_stateful_set": tableKubernetesStatefulSet(ctx),
30-
"kubernetes_config_map": tableKubernetesConfigMap(ctx),
31-
"kubernetes_service_account": tableKubernetesServiceAccount(ctx),
22+
"kubernetes_cluster_role": tableKubernetesClusterRole(ctx),
23+
"kubernetes_cluster_role_binding": tableKubernetesClusterRoleBinding(ctx),
24+
"kubernetes_config_map": tableKubernetesConfigMap(ctx),
25+
"kubernetes_cron_job": tableKubernetesCronJob(ctx),
26+
"kubernetes_custom_resource": tableKubernetesCustomResource(ctx),
27+
"kubernetes_custom_resource_definition": tableKubernetesCustomResourceDefinition(ctx),
28+
"kubernetes_daemonset": tableKubernetesDaemonset(ctx),
29+
"kubernetes_deployment": tableKubernetesDeployment(ctx),
30+
"kubernetes_endpoint_slice": tableKubernetesEndpointSlice(ctx),
31+
"kubernetes_endpoints": tableKubernetesEndpoints(ctx),
32+
"kubernetes_event": tableKubernetesEvent(ctx),
33+
"kubernetes_horizontal_pod_autoscaler": tableKubernetesHorizontalPodAutoscaler(ctx),
34+
"kubernetes_ingress": tableKubernetesIngress(ctx),
35+
"kubernetes_job": tableKubernetesJob(ctx),
36+
"kubernetes_limit_range": tableKubernetesLimitRange(ctx),
37+
"kubernetes_namespace": tableKubernetesNamespace(ctx),
38+
"kubernetes_network_policy": tableKubernetesNetworkPolicy(ctx),
39+
"kubernetes_node": tableKubernetesNode(ctx),
40+
"kubernetes_persistent_volume_claim": tableKubernetesPersistentVolumeClaim(ctx),
41+
"kubernetes_persistent_volume": tableKubernetesPersistentVolume(ctx),
42+
"kubernetes_pod": tableKubernetesPod(ctx),
43+
"kubernetes_pod_disruption_budget": tableKubernetesPDB(ctx),
44+
"kubernetes_pod_template": tableKubernetesPodTemplate(ctx),
45+
"kubernetes_replica_set": tableKubernetesReplicaSet(ctx),
46+
"kubernetes_replication_controller": tableKubernetesReplicaController(ctx),
47+
"kubernetes_resource_quota": tableKubernetesResourceQuota(ctx),
48+
"kubernetes_role": tableKubernetesRole(ctx),
49+
"kubernetes_role_binding": tableKubernetesRoleBinding(ctx),
50+
"kubernetes_secret": tableKubernetesSecret(ctx),
51+
"kubernetes_service": tableKubernetesService(ctx),
52+
"kubernetes_service_account": tableKubernetesServiceAccount(ctx),
53+
"kubernetes_stateful_set": tableKubernetesStatefulSet(ctx),
54+
"kubernetes_storage_class": tableKubernetesStorageClass(ctx),
3255
},
3356
}
3457
for key, table := range p.TableMap {
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package kubernetes
2+
3+
import (
4+
"context"
5+
opengovernance "github.com/opengovern/og-describer-kubernetes/discovery/pkg/es"
6+
7+
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
8+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin"
9+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform"
10+
)
11+
12+
func tableKubernetesClusterRole(ctx context.Context) *plugin.Table {
13+
return &plugin.Table{
14+
Name: "kubernetes_cluster_role",
15+
Description: "ClusterRole contains rules that represent a set of permissions.",
16+
Get: &plugin.GetConfig{
17+
Hydrate: opengovernance.GetKubernetesClusterRole,
18+
},
19+
List: &plugin.ListConfig{
20+
Hydrate: opengovernance.ListKubernetesClusterRole,
21+
},
22+
// ClusterRole, is a non-namespaced resource.
23+
Columns: commonColumns([]*plugin.Column{
24+
{
25+
Name: "rules",
26+
Type: proto.ColumnType_JSON,
27+
Description: "List of the PolicyRules for this Role.",
28+
Transform: transform.FromField("Description.ClusterRole.Rules"),
29+
},
30+
{
31+
Name: "aggregation_rule",
32+
Type: proto.ColumnType_JSON,
33+
Description: "An optional field that describes how to build the Rules for this ClusterRole",
34+
Transform: transform.FromField("Description.ClusterRole.AggregationRule"),
35+
},
36+
37+
//// Steampipe Standard Columns
38+
{
39+
Name: "title",
40+
Type: proto.ColumnType_STRING,
41+
Description: ColumnDescriptionTitle,
42+
Transform: transform.FromField("Description.ClusterRole.Name"),
43+
},
44+
{
45+
Name: "tags",
46+
Type: proto.ColumnType_JSON,
47+
Description: ColumnDescriptionTags,
48+
Transform: transform.From(transformClusterRoleTags),
49+
},
50+
}),
51+
}
52+
}
53+
54+
func transformClusterRoleTags(_ context.Context, d *transform.TransformData) (interface{}, error) {
55+
obj := d.HydrateItem.(opengovernance.KubernetesClusterRole).Description.ClusterRole
56+
return mergeTags(obj.Labels, obj.Annotations), nil
57+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package kubernetes
2+
3+
import (
4+
"context"
5+
opengovernance "github.com/opengovern/og-describer-kubernetes/discovery/pkg/es"
6+
7+
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
8+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin"
9+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform"
10+
)
11+
12+
func tableKubernetesClusterRoleBinding(ctx context.Context) *plugin.Table {
13+
return &plugin.Table{
14+
Name: "kubernetes_cluster_role_binding",
15+
Description: "A ClusterRoleBinding grants the permissions defined in a cluster role to a user or set of users. Access granted by ClusterRoleBinding is cluster-wide.",
16+
Get: &plugin.GetConfig{
17+
Hydrate: opengovernance.GetKubernetesClusterRoleBinding,
18+
},
19+
List: &plugin.ListConfig{
20+
Hydrate: opengovernance.ListKubernetesClusterRoleBinding,
21+
},
22+
Columns: commonColumns([]*plugin.Column{
23+
{
24+
Name: "subjects",
25+
Type: proto.ColumnType_JSON,
26+
Description: "List of references to the objects the role applies to.",
27+
Transform: transform.FromField("Description.ClusterRoleBinding.Subjects"),
28+
},
29+
30+
//// RoleRef columns
31+
{
32+
Name: "role_name",
33+
Type: proto.ColumnType_STRING,
34+
Description: "Name of the cluster role for which access is granted to subjects.",
35+
Transform: transform.FromField("Description.ClusterRoleBinding.RoleRef.Name"),
36+
},
37+
{
38+
Name: "role_api_group",
39+
Type: proto.ColumnType_STRING,
40+
Description: "The group for the referenced role.",
41+
Transform: transform.FromField("Description.ClusterRoleBinding.RoleRef.APIGroup"),
42+
},
43+
{
44+
Name: "role_kind",
45+
Type: proto.ColumnType_STRING,
46+
Description: "Type of the role refrenced must be one of ClusterRole or Role.",
47+
Transform: transform.FromField("Description.ClusterRoleBinding.RoleRef.Kind"),
48+
},
49+
{
50+
Name: "title",
51+
Type: proto.ColumnType_STRING,
52+
Description: ColumnDescriptionTitle,
53+
Transform: transform.FromField("Description.ClusterRoleBinding.Name"),
54+
},
55+
{
56+
Name: "tags",
57+
Type: proto.ColumnType_JSON,
58+
Description: ColumnDescriptionTags,
59+
Transform: transform.From(transformClusterRoleBindingTags),
60+
},
61+
}),
62+
}
63+
}
64+
65+
func transformClusterRoleBindingTags(_ context.Context, d *transform.TransformData) (interface{}, error) {
66+
obj := d.HydrateItem.(opengovernance.KubernetesClusterRoleBinding).Description.ClusterRoleBinding
67+
return mergeTags(obj.Labels, obj.Annotations), nil
68+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package kubernetes
2+
3+
import (
4+
"context"
5+
opengovernance "github.com/opengovern/og-describer-kubernetes/discovery/pkg/es"
6+
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
7+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin"
8+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform"
9+
)
10+
11+
func tableKubernetesCronJob(ctx context.Context) *plugin.Table {
12+
return &plugin.Table{
13+
Name: "kubernetes_cronjob",
14+
Description: "Cron jobs are useful for creating periodic and recurring tasks, like running backups or sending emails.",
15+
Get: &plugin.GetConfig{
16+
Hydrate: opengovernance.GetKubernetesCronJob,
17+
},
18+
List: &plugin.ListConfig{
19+
Hydrate: opengovernance.ListKubernetesCronJob,
20+
},
21+
Columns: commonColumns([]*plugin.Column{
22+
//// CronJobSpec columns
23+
{
24+
Name: "failed_jobs_history_limit",
25+
Type: proto.ColumnType_INT,
26+
Description: "The number of failed finished jobs to retain. Value must be non-negative integer.",
27+
Transform: transform.FromField("Description.CronJob.Spec.FailedJobsHistoryLimit"),
28+
},
29+
{
30+
Name: "schedule",
31+
Type: proto.ColumnType_STRING,
32+
Description: "The schedule in Cron format.",
33+
Transform: transform.FromField("Description.CronJob.Spec.Schedule"),
34+
},
35+
{
36+
Name: "starting_deadline_seconds",
37+
Type: proto.ColumnType_INT,
38+
Description: "Optional deadline in seconds for starting the job if it misses scheduledtime for any reason.",
39+
Transform: transform.FromField("Description.CronJob.Spec.StartingDeadlineSeconds"),
40+
},
41+
{
42+
Name: "successful_jobs_history_limit",
43+
Type: proto.ColumnType_INT,
44+
Description: "The number of successful finished jobs to retain. Value must be non-negative integer.",
45+
Transform: transform.FromField("Description.CronJob.Spec.SuccessfulJobsHistoryLimit"),
46+
},
47+
{
48+
Name: "suspend",
49+
Type: proto.ColumnType_BOOL,
50+
Description: "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.",
51+
Transform: transform.FromField("Description.CronJob.Spec.Suspend"),
52+
},
53+
{
54+
Name: "concurrency_policy",
55+
Type: proto.ColumnType_JSON,
56+
Description: "Specifies how to treat concurrent executions of a Job.",
57+
Transform: transform.FromField("Description.CronJob.Spec.ConcurrencyPolicy"),
58+
},
59+
{
60+
Name: "job_template",
61+
Type: proto.ColumnType_JSON,
62+
Description: "Specifies the job that will be created when executing a CronJob.",
63+
Transform: transform.FromField("Description.CronJob.Spec.JobTemplate"),
64+
},
65+
66+
//// CronJobStatus columns
67+
{
68+
Name: "last_schedule_time",
69+
Type: proto.ColumnType_TIMESTAMP,
70+
Description: "Information when was the last time the job was successfully scheduled.",
71+
Transform: transform.FromField("Description.CronJob.Status.LastScheduleTime").Transform(v1TimeToRFC3339),
72+
},
73+
{
74+
Name: "last_successful_time",
75+
Type: proto.ColumnType_TIMESTAMP,
76+
Description: "Information when was the last time the job successfully completed.",
77+
Transform: transform.FromField("Description.CronJob.Status.LastSuccessfulTime").Transform(v1TimeToRFC3339),
78+
},
79+
{
80+
Name: "active",
81+
Type: proto.ColumnType_JSON,
82+
Description: "A list of pointers to currently running jobs.",
83+
Transform: transform.FromField("Description.CronJob.Status.Active"),
84+
},
85+
{
86+
Name: "title",
87+
Type: proto.ColumnType_STRING,
88+
Description: ColumnDescriptionTitle,
89+
Transform: transform.FromField("Description.CronJob.Name"),
90+
},
91+
{
92+
Name: "tags",
93+
Type: proto.ColumnType_JSON,
94+
Description: ColumnDescriptionTags,
95+
Transform: transform.From(transformCronJobTags),
96+
},
97+
}),
98+
}
99+
}
100+
101+
func transformCronJobTags(_ context.Context, d *transform.TransformData) (interface{}, error) {
102+
obj := d.HydrateItem.(opengovernance.KubernetesCronJob).Description.CronJob
103+
return mergeTags(obj.Labels, obj.Annotations), nil
104+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package kubernetes
2+
3+
import (
4+
"context"
5+
opengovernance "github.com/opengovern/og-describer-kubernetes/discovery/pkg/es"
6+
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
7+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin"
8+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform"
9+
)
10+
11+
func tableKubernetesCustomResource(ctx context.Context) *plugin.Table {
12+
return &plugin.Table{
13+
Name: "kubernetes_custom_resource",
14+
Description: "Custom resources are extensions of the Kubernetes API.",
15+
Get: &plugin.GetConfig{
16+
Hydrate: opengovernance.GetKubernetesCustomResource,
17+
},
18+
List: &plugin.ListConfig{
19+
Hydrate: opengovernance.ListKubernetesCustomResource,
20+
},
21+
Columns: commonColumns([]*plugin.Column{
22+
{
23+
Name: "fully_qualified_name",
24+
Type: proto.ColumnType_STRING,
25+
Description: "The fully qualified name of the custom resource.",
26+
Transform: transform.FromField("Description.FullyQualifiedName"),
27+
},
28+
{
29+
Name: "title",
30+
Type: proto.ColumnType_STRING,
31+
Description: ColumnDescriptionTitle,
32+
Transform: transform.FromField("Description.MetaObject.Name"),
33+
},
34+
{
35+
Name: "tags",
36+
Type: proto.ColumnType_JSON,
37+
Description: ColumnDescriptionTags,
38+
Transform: transform.From(transformCustomReousrceTags),
39+
},
40+
}),
41+
}
42+
}
43+
44+
func transformCustomReousrceTags(_ context.Context, d *transform.TransformData) (interface{}, error) {
45+
obj := d.HydrateItem.(opengovernance.KubernetesCustomResource).Description.MetaObject
46+
return mergeTags(obj.Labels, obj.Annotations), nil
47+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package kubernetes
2+
3+
import (
4+
"context"
5+
opengovernance "github.com/opengovern/og-describer-kubernetes/discovery/pkg/es"
6+
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
7+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin"
8+
"github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform"
9+
)
10+
11+
func tableKubernetesCustomResourceDefinition(ctx context.Context) *plugin.Table {
12+
return &plugin.Table{
13+
Name: "kubernetes_custom_resource_definition",
14+
Description: "Kubernetes Custom Resource Definition.",
15+
Get: &plugin.GetConfig{
16+
Hydrate: opengovernance.GetKubernetesCustomResourceDefinition,
17+
},
18+
List: &plugin.ListConfig{
19+
Hydrate: opengovernance.ListKubernetesCustomResourceDefinition,
20+
},
21+
Columns: commonColumns([]*plugin.Column{
22+
{
23+
Name: "spec",
24+
Description: "Spec describes how the user wants the resources to appear.",
25+
Type: proto.ColumnType_JSON,
26+
Transform: transform.FromField("Description.CustomResourceDefinition.Spec"),
27+
},
28+
{
29+
Name: "status",
30+
Description: "Status indicates the actual state of the CustomResourceDefinition.",
31+
Type: proto.ColumnType_JSON,
32+
Transform: transform.FromField("Description.CustomResourceDefinition.Status"),
33+
},
34+
}),
35+
}
36+
}

0 commit comments

Comments
 (0)