Skip to content

Commit 191be8a

Browse files
authored
feat: added support to deploy global service (#126)
1 parent cd184d2 commit 191be8a

File tree

3 files changed

+42
-19
lines changed

3 files changed

+42
-19
lines changed

container_manager/service.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,24 @@ func (m Manager) serviceToServiceSpec(service Service) swarm.ServiceSpec {
216216
env = append(env, key+"="+value)
217217
}
218218

219+
var serviceMode swarm.ServiceMode
220+
221+
if service.DeploymentMode == DeploymentModeReplicated {
222+
// allow replicated service
223+
serviceMode = swarm.ServiceMode{
224+
Replicated: &swarm.ReplicatedService{
225+
Replicas: &service.Replicas,
226+
},
227+
}
228+
} else if service.DeploymentMode == DeploymentModeGlobal {
229+
// allow global service
230+
serviceMode = swarm.ServiceMode{
231+
Global: &swarm.GlobalService{},
232+
}
233+
} else {
234+
panic("invalid deployment mode")
235+
}
236+
219237
// Build service spec
220238
serviceSpec := swarm.ServiceSpec{
221239
// Set name of the service
@@ -235,11 +253,7 @@ func (m Manager) serviceToServiceSpec(service Service) swarm.ServiceSpec {
235253
Networks: networkAttachmentConfigs,
236254
},
237255
// allow replicated service
238-
Mode: swarm.ServiceMode{
239-
Replicated: &swarm.ReplicatedService{
240-
Replicas: &service.Replicas,
241-
},
242-
},
256+
Mode: serviceMode,
243257
// constant endpoint
244258
EndpointSpec: &swarm.EndpointSpec{
245259
Mode: swarm.ResolutionModeDNSRR,

container_manager/types.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,22 @@ type Manager struct {
1111
client *client.Client
1212
}
1313

14+
type DeploymentMode string
15+
16+
const (
17+
DeploymentModeReplicated DeploymentMode = "replicated"
18+
DeploymentModeGlobal DeploymentMode = "global"
19+
)
20+
1421
type Service struct {
15-
Name string `json:"name"`
16-
Image string `json:"image"`
17-
Command []string `json:"command,omitempty"`
18-
Env map[string]string `json:"env,omitempty"`
19-
VolumeMounts []VolumeMount `json:"volumemounts,omitempty"`
20-
Networks []string `json:"networks,omitempty"`
21-
Replicas uint64 `json:"replicas"`
22+
Name string `json:"name"`
23+
Image string `json:"image"`
24+
Command []string `json:"command,omitempty"`
25+
Env map[string]string `json:"env,omitempty"`
26+
VolumeMounts []VolumeMount `json:"volumemounts,omitempty"`
27+
Networks []string `json:"networks,omitempty"`
28+
DeploymentMode DeploymentMode `json:"deploymentmode"`
29+
Replicas uint64 `json:"replicas"`
2230
}
2331

2432
type ServiceRealtimeInfo struct {

swiftwave_service/worker/process_application_deploy_request.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,14 @@ func (m Manager) DeployApplication(request DeployApplicationRequest) error {
121121
}
122122
// create service
123123
service := containermanger.Service{
124-
Name: application.Name,
125-
Image: dockerImageUri,
126-
Command: []string{},
127-
Env: environmentVariablesMap,
128-
Networks: []string{m.ServiceConfig.SwarmNetwork},
129-
Replicas: uint64(application.Replicas),
130-
VolumeMounts: volumeMounts,
124+
Name: application.Name,
125+
Image: dockerImageUri,
126+
Command: []string{},
127+
Env: environmentVariablesMap,
128+
Networks: []string{m.ServiceConfig.SwarmNetwork},
129+
DeploymentMode: containermanger.DeploymentMode(application.DeploymentMode),
130+
Replicas: uint64(application.Replicas),
131+
VolumeMounts: volumeMounts,
131132
}
132133
// check if the service already exists
133134
_, err = m.ServiceManager.DockerManager.GetService(service.Name)

0 commit comments

Comments
 (0)