require "kubernetes" # Define types module module ContainerMom::Types # Source credentials structure struct SourceCredentials include Kubernetes::Serializable field username : String field password : String end # Source configuration structure struct SourceConfig include Kubernetes::Serializable field type : String field url : String field credentials : SourceCredentials? end # Define the ContainerDeployment spec structure struct ContainerDeploymentSpec include Kubernetes::Serializable field regions : Array(String) field resources : Hash(String, String)? field domain : Hash(String, String)? field billing : Hash(String, String)? field source : SourceConfig end end # Define resources module module ContainerMom::Resources extend self extend Kubernetes::Client::ResourceDefinition # Define standard Kubernetes resources define_resource "secrets", group: "", type: Kubernetes::Resource(JSON::Any), kind: "Secret", version: "v1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] define_resource "configmaps", group: "", type: Kubernetes::Resource(JSON::Any), kind: "ConfigMap", version: "v1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] define_resource "jobs", group: "batch", type: Kubernetes::Resource(JSON::Any), kind: "Job", version: "v1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] define_resource "deployments", group: "apps", type: Kubernetes::Resource(JSON::Any), kind: "Deployment", version: "v1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] define_resource "services", group: "", type: Kubernetes::Resource(JSON::Any), kind: "Service", version: "v1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] define_resource "ingresses", group: "networking.k8s.io", type: Kubernetes::Resource(JSON::Any), kind: "Ingress", version: "v1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] # Define our custom ContainerDeployment resource define_resource "containerdeployments", group: "app.container.mom", type: Kubernetes::Resource(ContainerMom::Types::ContainerDeploymentSpec), kind: "ContainerDeployment", version: "v1alpha1", verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "apply"] end # Include resources in ContainerMom module module ContainerMom include Types include Resources end