Skip to content

Commit 43cbaeb

Browse files
authored
Merge pull request #274 from florindragos/docker_services
Run docker services on windows
2 parents 6e3336e + 6901556 commit 43cbaeb

File tree

3 files changed

+54
-16
lines changed

3 files changed

+54
-16
lines changed

lib/puppet/parser/functions/docker_service_flags.rb

+4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ module Puppet::Parser::Functions
6666
flags << "'#{opts['image']}'"
6767
end
6868

69+
if opts['command'].to_s != 'undef'
70+
flags << opts['command'].to_s
71+
end
72+
6973
flags.flatten.join(' ')
7074
end
7175
end

manifests/services.pp

+36-13
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@
6767
# This will allow the service to set a registry mirror.
6868
# defaults to undef
6969
#
70+
# [*command*]
71+
# Command to run on the container
72+
#
7073

7174
define docker::services(
7275
Optional[Pattern[/^present$|^absent$/]] $ensure = 'present',
@@ -86,6 +89,7 @@
8689
Variant[String,Array,Undef] $workdir = undef,
8790
Variant[String,Array,Undef] $host_socket = undef,
8891
Variant[String,Array,Undef] $registry_mirror = undef,
92+
Variant[String,Array,Undef] $command = undef,
8993
){
9094

9195
include docker::params
@@ -101,6 +105,19 @@
101105
}
102106
}
103107

108+
if $::osfamily == 'windows' {
109+
$exec_environment = 'PATH=C:/Program Files/Docker/'
110+
$exec_timeout = 3000
111+
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
112+
$exec_provider = 'powershell'
113+
} else {
114+
$exec_environment = 'HOME=/root'
115+
$exec_path = ['/bin', '/usr/bin']
116+
$exec_timeout = 0
117+
$exec_provider = undef
118+
}
119+
120+
104121
if $create {
105122
$docker_service_create_flags = docker_service_flags({
106123
detach => $detach,
@@ -116,16 +133,18 @@
116133
image => $image,
117134
host_socket => $host_socket,
118135
registry_mirror => $registry_mirror,
136+
command => $command,
119137
})
120138

121139
$exec_create = "${docker_command} create --name ${docker_service_create_flags}"
122-
$unless_create = "docker service ls | grep -w ${service_name}"
140+
$unless_create = "docker service ps ${service_name}"
123141

124142
exec { "${title} docker service create":
125143
command => $exec_create,
126-
environment => 'HOME=/root',
127-
path => ['/bin', '/usr/bin'],
128-
timeout => 0,
144+
environment => $exec_environment,
145+
path => $exec_path,
146+
timeout => $exec_timeout,
147+
provider => $exec_provider,
129148
unless => $unless_create,
130149
}
131150
}
@@ -151,9 +170,10 @@
151170

152171
exec { "${title} docker service update":
153172
command => $exec_update,
154-
environment => 'HOME=/root',
155-
path => ['/bin', '/usr/bin'],
156-
timeout => 0,
173+
environment => $exec_environment,
174+
path => $exec_path,
175+
provider => $exec_provider,
176+
timeout => $exec_timeout,
157177
}
158178
}
159179

@@ -168,17 +188,20 @@
168188

169189
exec { "${title} docker service scale":
170190
command => $exec_scale,
171-
environment => 'HOME=/root',
172-
path => ['/bin', '/usr/bin'],
173-
timeout => 0,
191+
environment => $exec_environment,
192+
path => $exec_path,
193+
timeout => $exec_timeout,
194+
provider => $exec_provider,
174195
}
175196
}
176197

177198
if $ensure == 'absent' {
178199
exec { "${title} docker service remove":
179-
command => "docker service rm ${service_name}",
180-
onlyif => "docker service ls | grep -w ${service_name}",
181-
path => ['/bin', '/usr/bin'],
200+
command => "docker service rm ${service_name}",
201+
onlyif => "docker service ps ${service_name}",
202+
path => $exec_path,
203+
provider => $exec_provider,
204+
timeout => $exec_timeout,
182205
}
183206
}
184207
}

spec/acceptance_swarm/swarm_spec.rb

+14-3
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,23 @@ class { 'docker': #{docker_args} }
9999
on swarm_worker, 'netsh advfirewall firewall add rule name="Swarm comm udp" dir=in action=allow protocol=UDP localport=7946', :acceptable_exit_codes => [0]
100100
on swarm_worker, 'netsh advfirewall firewall add rule name="Swarm network" dir=in action=allow protocol=UDP localport=4789', :acceptable_exit_codes => [0]
101101
end
102-
103-
on swarm_manager, 'docker network create --driver=overlay swarmnet', :acceptable_exit_codes => [0]
104102
end
105103

106104
it 'should start a container' do
107-
on swarm_manager, "docker service create --name=helloworld --endpoint-mode dnsrr --network=swarmnet #{test_docker_image} #{test_docker_command}", :acceptable_exit_codes => [0]
105+
@start_service = <<-code
106+
docker::services {'helloworld':
107+
create => true,
108+
service_name => 'helloworld',
109+
image => '#{test_docker_image}',
110+
extra_params => ['--endpoint-mode dnsrr'],
111+
command => '#{test_docker_command}',
112+
replicas => '2',
113+
}
114+
code
115+
116+
apply_manifest_on(swarm_manager, @start_service, :catch_failures=>true)
117+
118+
#on swarm_manager, "docker service create --name=helloworld --endpoint-mode dnsrr --network=swarmnet #{test_docker_image} #{test_docker_command}", :acceptable_exit_codes => [0]
108119
on swarm_manager, 'docker service ps helloworld', :acceptable_exit_codes => [0] do |result|
109120
expect(result.stdout).to match(/Running/)
110121
end

0 commit comments

Comments
 (0)