Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit aa1efb8

Browse files
committed
Fix kube selectors : do not only select on serviceName, also ProjectName
Signed-off-by: Guillaume Tardif <[email protected]>
1 parent e159e82 commit aa1efb8

File tree

3 files changed

+30
-42
lines changed

3 files changed

+30
-42
lines changed

kube/charts/kubernetes/kube.go

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"time"
2626

2727
"github.com/compose-spec/compose-go/types"
28+
"github.com/docker/compose-cli/api/compose"
2829
apps "k8s.io/api/apps/v1"
2930
core "k8s.io/api/core/v1"
3031
resource "k8s.io/apimachinery/pkg/api/resource"
@@ -34,8 +35,6 @@ import (
3435
)
3536

3637
const (
37-
headlessPort = 55555
38-
headlessName = "headless"
3938
clusterIPHeadless = "None"
4039
)
4140

@@ -52,13 +51,13 @@ func MapToKubernetesObjects(project *types.Project) (map[string]runtime.Object,
5251
}
5352

5453
if service.Deploy != nil && service.Deploy.Mode == "global" {
55-
daemonset, err := mapToDaemonset(project, service, project.Name)
54+
daemonset, err := mapToDaemonset(project, service)
5655
if err != nil {
5756
return nil, err
5857
}
5958
objects[fmt.Sprintf("%s-daemonset.yaml", service.Name)] = daemonset
6059
} else {
61-
deployment, err := mapToDeployment(project, service, project.Name)
60+
deployment, err := mapToDeployment(project, service)
6261
if err != nil {
6362
return nil, err
6463
}
@@ -67,7 +66,7 @@ func MapToKubernetesObjects(project *types.Project) (map[string]runtime.Object,
6766
for _, vol := range service.Volumes {
6867
if vol.Type == "volume" {
6968
vol.Source = strings.ReplaceAll(vol.Source, "_", "-")
70-
objects[fmt.Sprintf("%s-persistentvolumeclaim.yaml", vol.Source)] = mapToPVC(service, vol)
69+
objects[fmt.Sprintf("%s-persistentvolumeclaim.yaml", vol.Source)] = mapToPVC(project, service, vol)
7170
}
7271
}
7372
}
@@ -92,12 +91,6 @@ func mapToService(project *types.Project, service types.ServiceConfig) *core.Ser
9291
}
9392
if len(ports) == 0 { // headless service
9493
clusterIP = clusterIPHeadless
95-
ports = append(ports, core.ServicePort{
96-
Name: headlessName,
97-
Port: headlessPort,
98-
TargetPort: intstr.FromInt(headlessPort),
99-
Protocol: core.ProtocolTCP,
100-
})
10194
}
10295
return &core.Service{
10396
TypeMeta: meta.TypeMeta{
@@ -109,27 +102,24 @@ func mapToService(project *types.Project, service types.ServiceConfig) *core.Ser
109102
},
110103
Spec: core.ServiceSpec{
111104
ClusterIP: clusterIP,
112-
Selector: map[string]string{"com.docker.compose.service": service.Name},
105+
Selector: selectorLabels(project.Name, service.Name),
113106
Ports: ports,
114107
Type: serviceType,
115108
},
116109
}
117110
}
118111

119-
func mapToDeployment(project *types.Project, service types.ServiceConfig, name string) (*apps.Deployment, error) {
120-
labels := map[string]string{
121-
"com.docker.compose.service": service.Name,
122-
"com.docker.compose.project": name,
123-
}
124-
podTemplate, err := toPodTemplate(project, service, labels)
125-
if err != nil {
126-
return nil, err
127-
}
112+
func mapToDeployment(project *types.Project, service types.ServiceConfig) (*apps.Deployment, error) {
113+
labels := selectorLabels(project.Name, service.Name)
128114
selector := new(meta.LabelSelector)
129115
selector.MatchLabels = make(map[string]string)
130116
for key, val := range labels {
131117
selector.MatchLabels[key] = val
132118
}
119+
podTemplate, err := toPodTemplate(project, service, labels)
120+
if err != nil {
121+
return nil, err
122+
}
133123
return &apps.Deployment{
134124
TypeMeta: meta.TypeMeta{
135125
Kind: "Deployment",
@@ -148,11 +138,15 @@ func mapToDeployment(project *types.Project, service types.ServiceConfig, name s
148138
}, nil
149139
}
150140

151-
func mapToDaemonset(project *types.Project, service types.ServiceConfig, name string) (*apps.DaemonSet, error) {
152-
labels := map[string]string{
153-
"com.docker.compose.service": service.Name,
154-
"com.docker.compose.project": name,
141+
func selectorLabels(projectName string, serviceName string) map[string]string {
142+
return map[string]string{
143+
compose.ProjectTag: projectName,
144+
compose.ServiceTag: serviceName,
155145
}
146+
}
147+
148+
func mapToDaemonset(project *types.Project, service types.ServiceConfig) (*apps.DaemonSet, error) {
149+
labels := selectorLabels(project.Name, service.Name)
156150
podTemplate, err := toPodTemplate(project, service, labels)
157151
if err != nil {
158152
return nil, err
@@ -195,7 +189,7 @@ func toDeploymentStrategy(deploy *types.DeployConfig) apps.DeploymentStrategy {
195189
}
196190
}
197191

198-
func mapToPVC(service types.ServiceConfig, vol types.ServiceVolumeConfig) runtime.Object {
192+
func mapToPVC(project *types.Project, service types.ServiceConfig, vol types.ServiceVolumeConfig) runtime.Object {
199193
rwaccess := core.ReadWriteOnce
200194
if vol.ReadOnly {
201195
rwaccess = core.ReadOnlyMany
@@ -207,7 +201,7 @@ func mapToPVC(service types.ServiceConfig, vol types.ServiceVolumeConfig) runtim
207201
},
208202
ObjectMeta: meta.ObjectMeta{
209203
Name: vol.Source,
210-
Labels: map[string]string{"com.docker.compose.service": service.Name},
204+
Labels: selectorLabels(project.Name, service.Name),
211205
},
212206
Spec: core.PersistentVolumeClaimSpec{
213207
VolumeName: vol.Source,

kube/charts/kubernetes/kube_test.go

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ services:
4848
Name: "nginx",
4949
},
5050
Spec: core.ServiceSpec{
51-
Selector: map[string]string{"com.docker.compose.service": "nginx"},
51+
Selector: map[string]string{"com.docker.compose.service": "nginx", "com.docker.compose.project": ""},
5252
Ports: []core.ServicePort{
5353
{
5454
Name: "80-tcp",
@@ -79,16 +79,9 @@ services:
7979
Name: "nginx",
8080
},
8181
Spec: core.ServiceSpec{
82-
Selector: map[string]string{"com.docker.compose.service": "nginx"},
82+
Selector: map[string]string{"com.docker.compose.service": "nginx", "com.docker.compose.project": ""},
8383
ClusterIP: "None",
84-
Ports: []core.ServicePort{
85-
{
86-
Name: headlessName,
87-
Protocol: core.ProtocolTCP,
88-
Port: headlessPort,
89-
TargetPort: intstr.IntOrString{IntVal: 55555},
90-
},
91-
},
92-
Type: core.ServiceTypeClusterIP,
84+
Ports: []core.ServicePort{},
85+
Type: core.ServiceTypeClusterIP,
9386
}})
9487
}

local/compose/labels.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,22 @@ package compose
1919
import (
2020
"fmt"
2121

22+
"github.com/docker/compose-cli/api/compose"
2223
"github.com/docker/docker/api/types/filters"
2324
)
2425

2526
const (
2627
containerNumberLabel = "com.docker.compose.container-number"
2728
oneoffLabel = "com.docker.compose.oneoff"
2829
slugLabel = "com.docker.compose.slug"
29-
projectLabel = "com.docker.compose.project"
30-
volumeLabel = "com.docker.compose.volume"
30+
projectLabel = compose.ProjectTag
31+
volumeLabel = compose.VolumeTag
3132
workingDirLabel = "com.docker.compose.project.working_dir"
3233
configFilesLabel = "com.docker.compose.project.config_files"
33-
serviceLabel = "com.docker.compose.service"
34+
serviceLabel = compose.ServiceTag
3435
versionLabel = "com.docker.compose.version"
3536
configHashLabel = "com.docker.compose.config-hash"
36-
networkLabel = "com.docker.compose.network"
37+
networkLabel = compose.NetworkTag
3738

3839
//ComposeVersion Compose version
3940
ComposeVersion = "1.0-alpha"

0 commit comments

Comments
 (0)