package models

type ServiceResource struct {
	Action            string `yaml:"action,omitempty"`
	SuccessCondition  string `yaml:"successCondition,omitempty"`
	FailureCondition  string `yaml:"failureCondition,omitempty"`
	SetOwnerReference bool   `yaml:"setOwnerReference,omitempty"`
	Manifest          string `yaml:"manifest,omitempty"`
}

type Service struct {
	APIVersion string      `yaml:"apiVersion"`
	Kind       string      `yaml:"kind"`
	Metadata   Metadata    `yaml:"metadata"`
	Spec       ServiceSpec `yaml:"spec"`
}

type Metadata struct {
	Name string `yaml:"name"`
}

// ServiceSpec is the specification of the Kubernetes Service
type ServiceSpec struct {
	Selector  map[string]string `yaml:"selector,omitempty"`
	Ports     []ServicePort     `yaml:"ports"`
	ClusterIP string            `yaml:"clusterIP,omitempty"`
	Type      string            `yaml:"type,omitempty"`
}

// ServicePort defines a port for a Kubernetes Service
type ServicePort struct {
	Name       string `yaml:"name"` // Even if empty need to be in the yaml
	Protocol   string `yaml:"protocol,omitempty"`
	Port       int    `yaml:"port"`
	TargetPort int    `yaml:"targetPort,omitempty"`
}