Skip to content
This repository has been archived by the owner on Oct 22, 2021. It is now read-only.

Use one kube service per bosh job #382

Merged
merged 16 commits into from
Sep 6, 2018
Merged
88 changes: 47 additions & 41 deletions kube/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func NewPod(role *model.InstanceGroup, settings ExportSettings, grapher util.Mod

// getContainerMapping returns the container list entry mapping for the provided role
func getContainerMapping(role *model.InstanceGroup, settings ExportSettings, grapher util.ModelGrapher) (*helm.Mapping, error) {
roleName := strings.Replace(strings.ToLower(role.Name), "_", "-", -1)
roleName := util.ConvertNameToKey(role.Name)
roleVarName := makeVarName(roleName)

vars, err := getEnvVars(role, settings)
Expand Down Expand Up @@ -210,40 +210,42 @@ func getContainerImageName(role *model.InstanceGroup, settings ExportSettings, g
// getContainerPorts returns a list of ports for a role
func getContainerPorts(role *model.InstanceGroup, settings ExportSettings) (helm.Node, error) {
var ports []helm.Node
for _, port := range role.Run.ExposedPorts {
if settings.CreateHelmChart && port.CountIsConfigurable {
sizing := fmt.Sprintf(".Values.sizing.%s.ports.%s", makeVarName(role.Name), makeVarName(port.Name))

fail := fmt.Sprintf(`{{ fail "%s.count must not exceed %d" }}`, sizing, port.Max)
block := fmt.Sprintf("if gt (int %s.count) %d", sizing, port.Max)
ports = append(ports, helm.NewNode(fail, helm.Block(block)))

fail = fmt.Sprintf(`{{ fail "%s.count must be at least 1" }}`, sizing)
block = fmt.Sprintf("if lt (int %s.count) 1", sizing)
ports = append(ports, helm.NewNode(fail, helm.Block(block)))

block = fmt.Sprintf("range $port := until (int %s.count)", sizing)
newPort := helm.NewMapping()
newPort.Set(helm.Block(block))
newPort.Add("containerPort", fmt.Sprintf("{{ add %d $port }}", port.InternalPort))
if port.Max > 1 {
newPort.Add("name", fmt.Sprintf("%s-{{ $port }}", port.Name))
} else {
newPort.Add("name", port.Name)
}
newPort.Add("protocol", port.Protocol)
ports = append(ports, newPort)
} else {
for portNumber := port.InternalPort; portNumber < port.InternalPort+port.Count; portNumber++ {
for _, job := range role.JobReferences {
for _, port := range job.ContainerProperties.BoshContainerization.Ports {
if settings.CreateHelmChart && port.CountIsConfigurable {
sizing := fmt.Sprintf(".Values.sizing.%s.ports.%s", makeVarName(role.Name), makeVarName(port.Name))

fail := fmt.Sprintf(`{{ fail "%s.count must not exceed %d" }}`, sizing, port.Max)
block := fmt.Sprintf("if gt (int %s.count) %d", sizing, port.Max)
ports = append(ports, helm.NewNode(fail, helm.Block(block)))

fail = fmt.Sprintf(`{{ fail "%s.count must be at least 1" }}`, sizing)
block = fmt.Sprintf("if lt (int %s.count) 1", sizing)
ports = append(ports, helm.NewNode(fail, helm.Block(block)))

block = fmt.Sprintf("range $port := until (int %s.count)", sizing)
newPort := helm.NewMapping()
newPort.Add("containerPort", portNumber)
newPort.Set(helm.Block(block))
newPort.Add("containerPort", fmt.Sprintf("{{ add %d $port }}", port.InternalPort))
if port.Max > 1 {
newPort.Add("name", fmt.Sprintf("%s-%d", port.Name, portNumber))
newPort.Add("name", fmt.Sprintf("%s-{{ $port }}", port.Name))
} else {
newPort.Add("name", port.Name)
}
newPort.Add("protocol", port.Protocol)
ports = append(ports, newPort)
} else {
for portNumber := port.InternalPort; portNumber < port.InternalPort+port.Count; portNumber++ {
newPort := helm.NewMapping()
newPort.Add("containerPort", portNumber)
if port.Max > 1 {
newPort.Add("name", fmt.Sprintf("%s-%d", port.Name, portNumber))
} else {
newPort.Add("name", port.Name)
}
newPort.Add("protocol", port.Protocol)
ports = append(ports, newPort)
}
}
}
}
Expand Down Expand Up @@ -339,7 +341,7 @@ func getEnvVarsFromConfigs(configs model.Variables, settings ExportSettings) (he
// KUBE_SIZING_role_COUNT
match := sizingCountRegexp.FindStringSubmatch(config.Name)
if match != nil {
roleName := strings.Replace(strings.ToLower(match[1]), "_", "-", -1)
roleName := util.ConvertNameToKey(match[1])
role := settings.RoleManifest.LookupInstanceGroup(roleName)
if role == nil {
return nil, fmt.Errorf("Role %s for %s not found", roleName, config.Name)
Expand All @@ -361,7 +363,7 @@ func getEnvVarsFromConfigs(configs model.Variables, settings ExportSettings) (he
// KUBE_SIZING_role_PORTS_port_MIN/MAX
match = sizingPortsRegexp.FindStringSubmatch(config.Name)
if match != nil {
roleName := strings.Replace(strings.ToLower(match[1]), "_", "-", -1)
roleName := util.ConvertNameToKey(match[1])
role := settings.RoleManifest.LookupInstanceGroup(roleName)
if role == nil {
return nil, fmt.Errorf("Role %s for %s not found", roleName, config.Name)
Expand All @@ -370,12 +372,14 @@ func getEnvVarsFromConfigs(configs model.Variables, settings ExportSettings) (he
return nil, fmt.Errorf("%s must not be a secret variable", config.Name)
}

portName := strings.Replace(strings.ToLower(match[2]), "_", "-", -1)
var port *model.RoleRunExposedPort
for _, exposedPort := range role.Run.ExposedPorts {
if (exposedPort.PortIsConfigurable || exposedPort.CountIsConfigurable) && exposedPort.Name == portName {
port = exposedPort
break
portName := util.ConvertNameToKey(match[2])
var port *model.JobExposedPort
for _, job := range role.JobReferences {
for _, exposedPort := range job.ContainerProperties.BoshContainerization.Ports {
if (exposedPort.PortIsConfigurable || exposedPort.CountIsConfigurable) && exposedPort.Name == portName {
port = &exposedPort
break
}
}
}
if port == nil {
Expand Down Expand Up @@ -601,11 +605,13 @@ func getContainerReadinessProbe(role *model.InstanceGroup) (helm.Node, error) {
return probe.Sort(), err
}
}
var readinessPort *model.RoleRunExposedPort
for _, port := range role.Run.ExposedPorts {
if port.Protocol == "TCP" {
readinessPort = port
break
var readinessPort *model.JobExposedPort
for _, job := range role.JobReferences {
for _, port := range job.ContainerProperties.BoshContainerization.Ports {
if port.Protocol == "TCP" {
readinessPort = &port
break
}
}
}
if readinessPort == nil {
Expand Down
38 changes: 25 additions & 13 deletions kube/pod_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -482,13 +482,19 @@ func TestPodGetEnvVarsFromConfigSizingPortsKube(t *testing.T) {
InstanceGroups: []*model.InstanceGroup{
&model.InstanceGroup{
Name: "foo",
Run: &model.RoleRun{
ExposedPorts: []*model.RoleRunExposedPort{
&model.RoleRunExposedPort{
Name: "store",
CountIsConfigurable: true,
InternalPort: 333,
Count: 55,
JobReferences: []*model.JobReference{
&model.JobReference{
ContainerProperties: model.JobContainerProperties{
BoshContainerization: model.JobBoshContainerization{
Ports: []model.JobExposedPort{
model.JobExposedPort{
Name: "store",
CountIsConfigurable: true,
InternalPort: 333,
Count: 55,
},
},
},
},
},
},
Expand Down Expand Up @@ -530,12 +536,18 @@ func TestPodGetEnvVarsFromConfigSizingPortsHelm(t *testing.T) {
InstanceGroups: []*model.InstanceGroup{
&model.InstanceGroup{
Name: "foo",
Run: &model.RoleRun{
ExposedPorts: []*model.RoleRunExposedPort{
&model.RoleRunExposedPort{
Name: "store",
CountIsConfigurable: true,
InternalPort: 333,
JobReferences: []*model.JobReference{
&model.JobReference{
ContainerProperties: model.JobContainerProperties{
BoshContainerization: model.JobBoshContainerization{
Ports: []model.JobExposedPort{
model.JobExposedPort{
Name: "store",
CountIsConfigurable: true,
InternalPort: 333,
},
},
},
},
},
},
Expand Down
Loading