From 4bf13be489cdef9861ac2205002084e8aeeb1d55 Mon Sep 17 00:00:00 2001 From: David Desmarais-Michaud Date: Mon, 19 Feb 2024 12:11:24 -0500 Subject: [PATCH] adding to resource utility package --- cmd/platter/main.go | 67 +++++++++++++++++++------------- pkg/utils/resource/deployment.go | 33 ++++++++++++++++ pkg/utils/resource/resource.go | 31 --------------- pkg/utils/resource/service.go | 15 +++++++ 4 files changed, 89 insertions(+), 57 deletions(-) create mode 100644 pkg/utils/resource/deployment.go create mode 100644 pkg/utils/resource/service.go diff --git a/cmd/platter/main.go b/cmd/platter/main.go index 5c45193..4ced04b 100644 --- a/cmd/platter/main.go +++ b/cmd/platter/main.go @@ -16,36 +16,51 @@ func main() { } func run() error { - json.NewEncoder(os.Stdout).Encode([]any{ - k8.Deployment{ - APIVersion: "apps/v1", - Kind: "Deployment", - Metadata: k8.Metadata{ - Name: "sample-app", - Namespace: "default", - }, - Spec: k8.DeploymentSpec{ - Replicas: 3, - Selector: k8.Selector{ - MatchLabels: map[string]string{"app": "sample-app"}, - }, - Template: k8.PodTemplateSpec{ - Metadata: k8.TemplateMetadata{ - Labels: map[string]string{"app": "sample-app"}, - }, - Spec: k8.PodSpec{ - Containers: []k8.Container{ - { - Name: "web-app", - Image: "alpine:latest", - Command: []string{"watch", "echo", "hello", "world"}, - }, + name := "sample-app" + labels := map[string]string{"app": name} + + deployment := k8.Deployment{ + APIVersion: "apps/v1", + Kind: "Deployment", + Metadata: k8.Metadata{ + Name: name, + Namespace: "default", + }, + Spec: k8.DeploymentSpec{ + Replicas: 3, + Selector: k8.Selector{MatchLabels: labels}, + Template: k8.PodTemplateSpec{ + Metadata: k8.TemplateMetadata{Labels: labels}, + Spec: k8.PodSpec{ + Containers: []k8.Container{ + { + Name: "web-app", + Image: "alpine:latest", + Command: []string{"watch", "echo", "hello", "world"}, }, }, }, }, }, - }) + } + + service := k8.Service{ + APIVersion: "v1", + Kind: "Service", + Metadata: k8.Metadata{Name: name}, + Spec: k8.ServiceSpec{ + Selector: labels, + Ports: []k8.ServicePort{ + { + Protocol: "TCP", + Port: 80, + TargetPort: 3000, + }, + }, + }, + } - return nil + return json. + NewEncoder(os.Stdout). + Encode([]any{deployment, service}) } diff --git a/pkg/utils/resource/deployment.go b/pkg/utils/resource/deployment.go new file mode 100644 index 0000000..2d185db --- /dev/null +++ b/pkg/utils/resource/deployment.go @@ -0,0 +1,33 @@ +package resource + +type Deployment Resource[DeploymentSpec] + +type DeploymentSpec struct { + Replicas int32 `json:"replicas"` + Selector Selector `json:"selector"` + Template PodTemplateSpec `json:"template"` +} + +type PodTemplateSpec struct { + Metadata TemplateMetadata `json:"metadata"` + Spec PodSpec `json:"spec"` +} + +type TemplateMetadata struct { + Labels map[string]string `json:"labels"` +} + +type PodSpec struct { + Containers []Container `json:"containers"` +} + +type ContainerPort struct { + Name string `json:"name"` + ContainerPort int `json:"containerPort"` +} +type Container struct { + Name string `json:"name"` + Image string `json:"image"` + Command []string `json:"command,omitempty"` + Ports []ContainerPort `json:"ports,omitempty"` +} diff --git a/pkg/utils/resource/resource.go b/pkg/utils/resource/resource.go index a852cbe..88f389c 100644 --- a/pkg/utils/resource/resource.go +++ b/pkg/utils/resource/resource.go @@ -14,37 +14,6 @@ type Resource[T any] struct { Spec T `json:"spec"` } -type Deployment Resource[DeploymentSpec] - -type DeploymentSpec struct { - Replicas int32 `json:"replicas"` - Selector Selector `json:"selector"` - Template PodTemplateSpec `json:"template"` -} - type Selector struct { MatchLabels map[string]string `json:"matchLabels"` } - -type PodTemplateSpec struct { - Metadata TemplateMetadata `json:"metadata"` - Spec PodSpec `json:"spec"` -} - -type TemplateMetadata struct { - Labels map[string]string `json:"labels"` -} - -type PodSpec struct { - Containers []Container `json:"containers"` -} - -type Container struct { - Name string `json:"name"` - Image string `json:"image"` - Command []string `json:"command,omitempty"` - Ports []struct { - Name string `json:"name"` - ContainerPort int `json:"containerPort"` - } `json:"ports,omitempty"` -} diff --git a/pkg/utils/resource/service.go b/pkg/utils/resource/service.go new file mode 100644 index 0000000..2cb7c31 --- /dev/null +++ b/pkg/utils/resource/service.go @@ -0,0 +1,15 @@ +package resource + +type ServicePort struct { + Name string `json:"name"` + Protocol string `json:"protocol"` + Port int `json:"port"` + TargetPort int `json:"targetPort"` +} + +type ServiceSpec struct { + Selector map[string]string `json:"selector"` + Ports []ServicePort `json:"ports"` +} + +type Service Resource[ServiceSpec]