New behavior for nodeport + fix storage
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"katenary/compose"
|
"katenary/compose"
|
||||||
"katenary/helm"
|
"katenary/helm"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -91,6 +92,11 @@ func CreateReplicaObject(name string, s compose.Service) (ret []interface{}) {
|
|||||||
|
|
||||||
exists := make(map[int]string)
|
exists := make(map[int]string)
|
||||||
for _, port := range s.Ports {
|
for _, port := range s.Ports {
|
||||||
|
_p := strings.Split(port, ":")
|
||||||
|
port = _p[0]
|
||||||
|
if len(_p) > 1 {
|
||||||
|
port = _p[1]
|
||||||
|
}
|
||||||
portNumber, _ := strconv.Atoi(port)
|
portNumber, _ := strconv.Atoi(port)
|
||||||
portName := name
|
portName := name
|
||||||
for _, n := range exists {
|
for _, n := range exists {
|
||||||
@@ -163,10 +169,10 @@ func CreateReplicaObject(name string, s compose.Service) (ret []interface{}) {
|
|||||||
wait := &sync.WaitGroup{}
|
wait := &sync.WaitGroup{}
|
||||||
initContainers := make([]*helm.Container, 0)
|
initContainers := make([]*helm.Container, 0)
|
||||||
for _, dp := range s.DependsOn {
|
for _, dp := range s.DependsOn {
|
||||||
if len(s.Ports) == 0 && len(s.Expose) == 0 {
|
//if len(s.Ports) == 0 && len(s.Expose) == 0 {
|
||||||
Redf("No port exposed for %s that is in dependency", name)
|
// Redf("No port exposed for %s that is in dependency", name)
|
||||||
os.Exit(1)
|
// os.Exit(1)
|
||||||
}
|
//}
|
||||||
c := helm.NewContainer("check-"+dp, "busybox", nil, s.Labels)
|
c := helm.NewContainer("check-"+dp, "busybox", nil, s.Labels)
|
||||||
command := strings.ReplaceAll(strings.TrimSpace(dependScript), "__service__", dp)
|
command := strings.ReplaceAll(strings.TrimSpace(dependScript), "__service__", dp)
|
||||||
|
|
||||||
@@ -209,10 +215,10 @@ func CreateReplicaObject(name string, s compose.Service) (ret []interface{}) {
|
|||||||
// Create a service (k8s).
|
// Create a service (k8s).
|
||||||
func createService(name string, s compose.Service) []interface{} {
|
func createService(name string, s compose.Service) []interface{} {
|
||||||
|
|
||||||
|
ret := make([]interface{}, 0)
|
||||||
Magenta("Generating service for ", name)
|
Magenta("Generating service for ", name)
|
||||||
ks := helm.NewService(name)
|
ks := helm.NewService(name)
|
||||||
defaultPort := 0
|
defaultPort := 0
|
||||||
names := make(map[int]int)
|
|
||||||
|
|
||||||
for i, p := range s.Ports {
|
for i, p := range s.Ports {
|
||||||
port := strings.Split(p, ":")
|
port := strings.Split(p, ":")
|
||||||
@@ -220,35 +226,36 @@ func createService(name string, s compose.Service) []interface{} {
|
|||||||
target := src
|
target := src
|
||||||
if len(port) > 1 {
|
if len(port) > 1 {
|
||||||
target, _ = strconv.Atoi(port[1])
|
target, _ = strconv.Atoi(port[1])
|
||||||
|
log.Println(target)
|
||||||
}
|
}
|
||||||
ks.Spec.Ports = append(ks.Spec.Ports, helm.NewServicePort(src, target))
|
ks.Spec.Ports = append(ks.Spec.Ports, helm.NewServicePort(target, target))
|
||||||
names[target] = 1
|
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
defaultPort = target
|
defaultPort = target
|
||||||
detected(name, target)
|
detected(name, target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for i, p := range s.Expose {
|
|
||||||
if _, ok := names[p]; ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ks.Spec.Ports = append(ks.Spec.Ports, helm.NewServicePort(p, p))
|
|
||||||
if i == 0 {
|
|
||||||
defaultPort = p
|
|
||||||
detected(name, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ks.Spec.Selector = buildSelector(name, s)
|
ks.Spec.Selector = buildSelector(name, s)
|
||||||
|
|
||||||
ret := make([]interface{}, 0)
|
|
||||||
ret = append(ret, ks)
|
ret = append(ret, ks)
|
||||||
if v, ok := s.Labels[helm.K+"/expose-ingress"]; ok && v == "true" {
|
if v, ok := s.Labels[helm.K+"/expose-ingress"]; ok && v == "true" {
|
||||||
|
Cyanf("Create an ingress for %d port on %s service\n", defaultPort, name)
|
||||||
ing := createIngress(name, defaultPort, s)
|
ing := createIngress(name, defaultPort, s)
|
||||||
ret = append(ret, ing)
|
ret = append(ret, ing)
|
||||||
|
Green("Done ingress ", name)
|
||||||
|
}
|
||||||
|
Green("Done service ", name)
|
||||||
|
|
||||||
|
if len(s.Expose) > 0 {
|
||||||
|
Magenta("Generating service for ", name+"-external")
|
||||||
|
ks := helm.NewService(name + "-external")
|
||||||
|
ks.Spec.Type = "NodePort"
|
||||||
|
for _, p := range s.Expose {
|
||||||
|
ks.Spec.Ports = append(ks.Spec.Ports, helm.NewServicePort(p, p))
|
||||||
|
}
|
||||||
|
ks.Spec.Selector = buildSelector(name, s)
|
||||||
|
ret = append(ret, ks)
|
||||||
}
|
}
|
||||||
|
|
||||||
Green("Done service ", name)
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -74,3 +74,6 @@ func Bluef(format string, args ...interface{}) {
|
|||||||
func Magentaf(format string, args ...interface{}) {
|
func Magentaf(format string, args ...interface{}) {
|
||||||
colorf(MAGENTA, format, args...)
|
colorf(MAGENTA, format, args...)
|
||||||
}
|
}
|
||||||
|
func Cyanf(format string, args ...interface{}) {
|
||||||
|
colorf(CYAN, format, args...)
|
||||||
|
}
|
||||||
|
@@ -34,6 +34,7 @@ func NewServicePort(port, target int) *ServicePort {
|
|||||||
type ServiceSpec struct {
|
type ServiceSpec struct {
|
||||||
Selector map[string]string
|
Selector map[string]string
|
||||||
Ports []*ServicePort
|
Ports []*ServicePort
|
||||||
|
Type string `yaml:"type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewServiceSpec() *ServiceSpec {
|
func NewServiceSpec() *ServiceSpec {
|
||||||
|
@@ -16,7 +16,7 @@ func NewPVC(name, storageName string) *Storage {
|
|||||||
pvc.Spec = &PVCSpec{
|
pvc.Spec = &PVCSpec{
|
||||||
Resouces: map[string]interface{}{
|
Resouces: map[string]interface{}{
|
||||||
"requests": map[string]string{
|
"requests": map[string]string{
|
||||||
"capacity": "{{ .Values." + name + ".persistence." + storageName + ".capacity }}",
|
"storage": "{{ .Values." + name + ".persistence." + storageName + ".capacity }}",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
AccessModes: []string{"ReadWriteOnce"},
|
AccessModes: []string{"ReadWriteOnce"},
|
||||||
|
25
main.go
25
main.go
@@ -85,11 +85,11 @@ func main() {
|
|||||||
for _, c := range f {
|
for _, c := range f {
|
||||||
kind := c.(helm.Kinded).Get()
|
kind := c.(helm.Kinded).Get()
|
||||||
kind = strings.ToLower(kind)
|
kind = strings.ToLower(kind)
|
||||||
fname := filepath.Join(templatesDir, n+"."+kind+".yaml")
|
|
||||||
fp, _ := os.Create(fname)
|
|
||||||
c.(helm.Signable).BuildSHA(ComposeFile)
|
c.(helm.Signable).BuildSHA(ComposeFile)
|
||||||
switch c := c.(type) {
|
switch c := c.(type) {
|
||||||
case *helm.Storage:
|
case *helm.Storage:
|
||||||
|
fname := filepath.Join(templatesDir, n+"."+kind+".yaml")
|
||||||
|
fp, _ := os.Create(fname)
|
||||||
volname := c.K8sBase.Metadata.Labels[helm.K+"/pvc-name"]
|
volname := c.K8sBase.Metadata.Labels[helm.K+"/pvc-name"]
|
||||||
fp.WriteString("{{ if .Values." + n + ".persistence." + volname + ".enabled }}\n")
|
fp.WriteString("{{ if .Values." + n + ".persistence." + volname + ".enabled }}\n")
|
||||||
enc := yaml.NewEncoder(fp)
|
enc := yaml.NewEncoder(fp)
|
||||||
@@ -97,6 +97,8 @@ func main() {
|
|||||||
enc.Encode(c)
|
enc.Encode(c)
|
||||||
fp.WriteString("{{- end -}}")
|
fp.WriteString("{{- end -}}")
|
||||||
case *helm.Deployment:
|
case *helm.Deployment:
|
||||||
|
fname := filepath.Join(templatesDir, n+"."+kind+".yaml")
|
||||||
|
fp, _ := os.Create(fname)
|
||||||
buffer := bytes.NewBuffer(nil)
|
buffer := bytes.NewBuffer(nil)
|
||||||
enc := yaml.NewEncoder(buffer)
|
enc := yaml.NewEncoder(buffer)
|
||||||
enc.SetIndent(2)
|
enc.SetIndent(2)
|
||||||
@@ -118,20 +120,37 @@ func main() {
|
|||||||
}
|
}
|
||||||
fp.WriteString(line + "\n")
|
fp.WriteString(line + "\n")
|
||||||
}
|
}
|
||||||
|
fp.Close()
|
||||||
|
case *helm.Service:
|
||||||
|
suffix := ""
|
||||||
|
if c.Spec.Type == "NodePort" {
|
||||||
|
suffix = "-external"
|
||||||
|
}
|
||||||
|
fname := filepath.Join(templatesDir, n+suffix+"."+kind+".yaml")
|
||||||
|
fp, _ := os.Create(fname)
|
||||||
|
enc := yaml.NewEncoder(fp)
|
||||||
|
enc.Encode(c)
|
||||||
|
fp.Close()
|
||||||
|
|
||||||
case *helm.Ingress:
|
case *helm.Ingress:
|
||||||
|
fname := filepath.Join(templatesDir, n+"."+kind+".yaml")
|
||||||
|
fp, _ := os.Create(fname)
|
||||||
ingresses[n] = c // keep it to generate notes
|
ingresses[n] = c // keep it to generate notes
|
||||||
enc := yaml.NewEncoder(fp)
|
enc := yaml.NewEncoder(fp)
|
||||||
enc.SetIndent(2)
|
enc.SetIndent(2)
|
||||||
fp.WriteString("{{- if .Values." + n + ".ingress.enabled -}}\n")
|
fp.WriteString("{{- if .Values." + n + ".ingress.enabled -}}\n")
|
||||||
enc.Encode(c)
|
enc.Encode(c)
|
||||||
fp.WriteString("{{- end -}}")
|
fp.WriteString("{{- end -}}")
|
||||||
|
fp.Close()
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
fname := filepath.Join(templatesDir, n+"."+kind+".yaml")
|
||||||
|
fp, _ := os.Create(fname)
|
||||||
enc := yaml.NewEncoder(fp)
|
enc := yaml.NewEncoder(fp)
|
||||||
enc.SetIndent(2)
|
enc.SetIndent(2)
|
||||||
enc.Encode(c)
|
enc.Encode(c)
|
||||||
|
fp.Close()
|
||||||
}
|
}
|
||||||
fp.Close()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user