Fix "depends_on" check
If "depends_on" is set, we need to ensure that the target service has got declared ports. It's necessary, at this time, to ensure the target is started (with an initContainer) As soon as Kubernetes proposes a better check, we will be able to fix this requirement.
This commit is contained in:
@@ -91,11 +91,15 @@ func NewDeployment(service types.ServiceConfig, chart *HelmChart) *Deployment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DependsOn adds a initContainer to the deployment that will wait for the service to be up.
|
// DependsOn adds a initContainer to the deployment that will wait for the service to be up.
|
||||||
func (d *Deployment) DependsOn(to *Deployment) error {
|
func (d *Deployment) DependsOn(to *Deployment, servicename string) error {
|
||||||
// Add a initContainer with busybox:latest using netcat to check if the service is up
|
// Add a initContainer with busybox:latest using netcat to check if the service is up
|
||||||
// it will wait until the service responds to all ports
|
// it will wait until the service responds to all ports
|
||||||
for _, container := range to.Spec.Template.Spec.Containers {
|
for _, container := range to.Spec.Template.Spec.Containers {
|
||||||
commands := []string{}
|
commands := []string{}
|
||||||
|
if len(container.Ports) == 0 {
|
||||||
|
utils.Warn("No ports found for service ", servicename, ". You should declare a port in the service or use "+LABEL_PORTS+" label.")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
for _, port := range container.Ports {
|
for _, port := range container.Ports {
|
||||||
command := fmt.Sprintf("until nc -z %s %d; do\n sleep 1;\ndone", to.Name, port.ContainerPort)
|
command := fmt.Sprintf("until nc -z %s %d; do\n sleep 1;\ndone", to.Name, port.ContainerPort)
|
||||||
commands = append(commands, command)
|
commands = append(commands, command)
|
||||||
|
@@ -148,7 +148,7 @@ func Generate(project *types.Project) (*HelmChart, error) {
|
|||||||
for _, s := range project.Services {
|
for _, s := range project.Services {
|
||||||
for _, d := range s.GetDependencies() {
|
for _, d := range s.GetDependencies() {
|
||||||
if dep, ok := deployments[d]; ok {
|
if dep, ok := deployments[d]; ok {
|
||||||
deployments[s.Name].DependsOn(dep)
|
deployments[s.Name].DependsOn(dep, d)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("service %[1]s depends on %[2]s, but %[2]s is not defined", s.Name, d)
|
log.Printf("service %[1]s depends on %[2]s, but %[2]s is not defined", s.Name, d)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user