feat(refacto): move everything in internal package
This allows to install katenary with `go install` and to clean up the project folder.
This commit is contained in:
96
internal/generator/service.go
Normal file
96
internal/generator/service.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/katenary/katenary/internal/utils"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/compose-spec/compose-go/types"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
)
|
||||
|
||||
var _ Yaml = (*Service)(nil)
|
||||
|
||||
// Service is a kubernetes Service.
|
||||
type Service struct {
|
||||
*v1.Service `yaml:",inline"`
|
||||
service *types.ServiceConfig `yaml:"-"`
|
||||
}
|
||||
|
||||
// NewService creates a new Service from a compose service.
|
||||
func NewService(service types.ServiceConfig, appName string) *Service {
|
||||
ports := []v1.ServicePort{}
|
||||
|
||||
s := &Service{
|
||||
service: &service,
|
||||
Service: &v1.Service{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "Service",
|
||||
APIVersion: "v1",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: utils.TplName(service.Name, appName),
|
||||
Labels: GetLabels(service.Name, appName),
|
||||
Annotations: Annotations,
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
Selector: GetMatchLabels(service.Name, appName),
|
||||
Ports: ports,
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, port := range service.Ports {
|
||||
s.AddPort(port)
|
||||
}
|
||||
|
||||
return s
|
||||
}
|
||||
|
||||
// AddPort adds a port to the service.
|
||||
func (s *Service) AddPort(port types.ServicePortConfig, serviceName ...string) {
|
||||
var name string
|
||||
var finalport intstr.IntOrString
|
||||
|
||||
if targetPort := utils.GetServiceNameByPort(int(port.Target)); targetPort == "" {
|
||||
finalport = intstr.FromInt(int(port.Target))
|
||||
name = fmt.Sprintf("port-%d", port.Target)
|
||||
} else {
|
||||
finalport = intstr.FromString(targetPort)
|
||||
name = targetPort
|
||||
}
|
||||
|
||||
s.Spec.Ports = append(s.Spec.Ports, v1.ServicePort{
|
||||
Protocol: v1.ProtocolTCP,
|
||||
Port: int32(port.Target),
|
||||
TargetPort: finalport,
|
||||
Name: name,
|
||||
})
|
||||
}
|
||||
|
||||
// Filename returns the filename of the service.
|
||||
func (s *Service) Filename() string {
|
||||
return s.service.Name + ".service.yaml"
|
||||
}
|
||||
|
||||
// Yaml returns the yaml representation of the service.
|
||||
func (s *Service) Yaml() ([]byte, error) {
|
||||
var y []byte
|
||||
var err error
|
||||
if y, err = ToK8SYaml(s); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
lines := []string{}
|
||||
for line := range strings.SplitSeq(string(y), "\n") {
|
||||
if regexp.MustCompile(`^\s*loadBalancer:\s*`).MatchString(line) {
|
||||
continue
|
||||
}
|
||||
lines = append(lines, line)
|
||||
}
|
||||
y = []byte(strings.Join(lines, "\n"))
|
||||
|
||||
return y, err
|
||||
}
|
Reference in New Issue
Block a user