Skip to content

Commit 73c53ab

Browse files
committed
Fix windows default paths
1 parent 30194fa commit 73c53ab

23 files changed

+184
-144
lines changed

Diff for: lib/facter/docker.rb

+28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,34 @@
11
require 'facter'
22
require 'json'
33

4+
Facter.add(:docker_systemroot) do
5+
confine :osfamily => :windows
6+
setcode do
7+
ENV['SystemRoot']
8+
end
9+
end
10+
11+
Facter.add(:docker_program_files_path) do
12+
confine :osfamily => :windows
13+
setcode do
14+
ENV['ProgramFiles']
15+
end
16+
end
17+
18+
Facter.add(:docker_program_data_path) do
19+
confine :osfamily => :windows
20+
setcode do
21+
ENV['ProgramData']
22+
end
23+
end
24+
25+
Facter.add(:docker_user_temp_path) do
26+
confine :osfamily => :windows
27+
setcode do
28+
ENV['TEMP']
29+
end
30+
end
31+
432
docker_command = if Facter.value(:kernel) == 'windows'
533
'powershell -c docker'
634
else

Diff for: manifests/compose.pp

+16-26
Original file line numberDiff line numberDiff line change
@@ -54,26 +54,16 @@
5454
if $::osfamily == 'windows' {
5555
$docker_download_command = "if (Invoke-WebRequest ${docker_compose_url} ${proxy_opt} -UseBasicParsing -OutFile \"${docker_compose_location_versioned}\") { exit 0 } else { exit 1}"
5656

57-
exec { 'Enable TLS 1.2 in powershell':
58-
path => ['c:/Windows/Temp/', 'C:/Program Files/Docker/'],
59-
command => '[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12',
57+
exec { "Install Docker Compose ${version}":
58+
command => template('docker/windows/download_docker_compose.ps1.erb'),
6059
provider => powershell,
6160
creates => $docker_compose_location_versioned,
6261
}
6362

64-
$script_path = 'C:/Windows/Temp/download_docker_compose.ps1'
65-
file{ $script_path:
66-
ensure => present,
67-
force => true,
68-
content => template('docker/windows/download_docker_compose.ps1.erb'),
69-
notify => Exec["Install Docker Compose ${version}"],
70-
}
71-
72-
exec { "Install Docker Compose ${version}":
73-
path => ['c:/Windows/Temp/', 'C:/Program Files/Docker/'],
74-
command => "& ${script_path}",
75-
provider => powershell,
76-
creates => $docker_compose_location_versioned,
63+
file { $docker_compose_location:
64+
ensure => 'link',
65+
target => $docker_compose_location_versioned,
66+
require => Exec["Install Docker Compose ${version}"]
7767
}
7868
} else {
7969
ensure_packages(['curl'])
@@ -84,18 +74,18 @@
8474
creates => $docker_compose_location_versioned,
8575
require => Package['curl'],
8676
}
87-
}
8877

89-
file { $docker_compose_location_versioned:
90-
owner => $file_owner,
91-
mode => '0755',
92-
require => Exec["Install Docker Compose ${version}"]
93-
}
78+
file { $docker_compose_location_versioned:
79+
owner => $file_owner,
80+
mode => '0755',
81+
require => Exec["Install Docker Compose ${version}"]
82+
}
9483

95-
file { $docker_compose_location:
96-
ensure => 'link',
97-
target => $docker_compose_location_versioned,
98-
require => File[$docker_compose_location_versioned]
84+
file { $docker_compose_location:
85+
ensure => 'link',
86+
target => $docker_compose_location_versioned,
87+
require => File[$docker_compose_location_versioned]
88+
}
9989
}
10090
} else {
10191
file { [

Diff for: manifests/exec.pp

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
$docker_command = $docker::params::docker_command
2020

2121
if $::osfamily == 'windows' {
22-
$exec_environment = 'PATH=C:/Program Files/Docker/'
22+
$exec_environment = "PATH=${::docker_program_files_path}/Docker/"
2323
$exec_timeout = 3000
24-
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
24+
$exec_path = ["${::docker_program_files_path}/Docker/"]
2525
$exec_provider = 'powershell'
2626
} else {
2727
$exec_environment = 'HOME=/root'

Diff for: manifests/image.pp

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838

3939
if $::osfamily == 'windows' {
4040
$update_docker_image_template = 'docker/windows/update_docker_image.ps1.erb'
41-
$update_docker_image_path = 'C:/Windows/Temp/update_docker_image.ps1'
42-
$exec_environment = 'PATH=C:/Program Files/Docker/'
41+
$update_docker_image_path = "${::docker_user_temp_path}/update_docker_image.ps1"
42+
$exec_environment = "PATH=${::docker_program_files_path}/Docker/"
4343
$exec_timeout = 3000
4444
$update_docker_image_owner = undef
45-
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
45+
$exec_path = ["${::docker_program_files_path}/Docker/"]
4646
$exec_provider = 'powershell'
4747
} else {
4848
$update_docker_image_template = 'docker/update_docker_image.sh.erb'
@@ -117,15 +117,15 @@
117117
$image_install = "${docker_command} build -t ${image_arg} ${docker_dir}"
118118
} elsif $docker_file {
119119
if $::osfamily == windows {
120-
$image_install = "Get-Content ${docker_file} | ${docker_command} build -t ${image_arg} -"
120+
$image_install = "Get-Content ${docker_file} -Raw | ${docker_command} build -t ${image_arg} -"
121121
} else {
122122
$image_install = "${docker_command} build -t ${image_arg} - < ${docker_file}"
123123
}
124124
} elsif $docker_tar {
125125
$image_install = "${docker_command} load -i ${docker_tar}"
126126
} else {
127127
if $::osfamily == 'windows' {
128-
$image_install = "& ${update_docker_image_path} ${image_arg}"
128+
$image_install = "& ${update_docker_image_path} -DockerImage ${image_arg}"
129129
} else {
130130
$image_install = "${update_docker_image_path} ${image_arg}"
131131
}

Diff for: manifests/params.pp

+10-6
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
$tls_enable = false
2626
$tls_verify = true
2727
if ($::osfamily == 'windows') {
28-
$tls_cacert = 'C:/ProgramData/docker/certs.d/ca.pem'
29-
$tls_cert = 'C:/ProgramData/docker/certs.d/server-cert.pem'
30-
$tls_key = 'C:/ProgramData/docker/certs.d/server-key.pem'
28+
$tls_cacert = "${::docker_program_data_path}/docker/certs.d/ca.pem"
29+
$tls_cert = "${::docker_program_data_path}/docker/certs.d/server-cert.pem"
30+
$tls_key = "${::docker_program_data_path}/docker/certs.d/server-key.pem"
3131
$compose_version = '1.21.2'
32-
$compose_install_path = 'C:/Program Files/Docker'
32+
$compose_install_path = "${::docker_program_files_path}/Docker"
3333
} else {
3434
$tls_cacert = '/etc/docker/tls/ca.pem'
3535
$tls_cert = '/etc/docker/tls/cert.pem'
@@ -85,7 +85,11 @@
8585
$overlay2_override_kernel_check = false
8686
$manage_package = true
8787
$package_source = undef
88-
$docker_command = 'docker'
88+
if ($::osfamily == 'windows') {
89+
$docker_command = 'docker'
90+
} else {
91+
$docker_command = 'docker'
92+
}
8993
$service_name_default = 'docker'
9094
$docker_group_default = 'docker'
9195
$storage_devs = undef
@@ -224,7 +228,7 @@
224228
$msft_provider_version = $docker_msft_provider_version
225229
$msft_package_version = $version
226230
$service_config_template = 'docker/windows/config/daemon.json.erb'
227-
$service_config = 'C:/ProgramData/docker/config/daemon.json'
231+
$service_config = "${::docker_program_data_path}/docker/config/daemon.json"
228232
$docker_group = 'docker'
229233
$package_ce_source_location = undef
230234
$package_ce_key_source = undef

Diff for: manifests/plugin.pp

+4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@
6464

6565
$docker_command = "${docker::params::docker_command} plugin"
6666

67+
if ($::osfamily == 'windows') {
68+
fail(translate(('Feature not implemented on windows.')))
69+
}
70+
6771
if $ensure == 'present' {
6872
$docker_plugin_install_flags = docker_plugin_install_flags({
6973
plugin_name => $plugin_name,

Diff for: manifests/registry.pp

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@
4848
$docker_command = $docker::params::docker_command
4949

5050
if $::osfamily == 'windows' {
51-
$exec_environment = ['PATH=C:/Program Files/Docker/']
51+
$exec_environment = ["PATH=${::docker_program_files_path}/Docker/"]
5252
$exec_timeout = 3000
53-
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
53+
$exec_path = ["${::docker_program_files_path}/Docker/"]
5454
$exec_provider = 'powershell'
5555
$password_env = '$env:password'
5656
$exec_user = undef
@@ -113,7 +113,7 @@
113113
} else {
114114
# server may be an URI, which can contain /
115115
$server_strip = regsubst($server, '[/:]', '_', 'G')
116-
$passfile = "C:/Windows/Temp/registry-auth-puppet_receipt_${server_strip}_${local_user}"
116+
$passfile = "${::docker_user_temp_path}/registry-auth-puppet_receipt_${server_strip}_${local_user}"
117117
$_auth_command = "if (-not (${auth_cmd})) { Remove-Item -Path ${passfile} -Force -Recurse -EA SilentlyContinue; exit 0 } else { exit 0 }"
118118

119119
if $ensure == 'absent' {

Diff for: manifests/run.pp

+3-3
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,11 @@
218218
}
219219

220220
if $::osfamily == 'windows' {
221-
$exec_environment = 'PATH=C:/Program Files/Docker/;C:/Windows/System32/'
221+
$exec_environment = "PATH=${::docker_program_files_path}/Docker/;${::docker_systemroot}/System32/"
222222
$exec_timeout = 3000
223-
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
223+
$exec_path = ["${::docker_program_files_path}/Docker/"]
224224
$exec_provider = 'powershell'
225-
$cidfile = "c:/Windows/Temp/${service_prefix}${sanitised_title}.cid"
225+
$cidfile = "${::docker_user_temp_path}/${service_prefix}${sanitised_title}.cid"
226226
$restart_check = "${docker_command} inspect ${sanitised_title} -f '{{ if eq \\\"unhealthy\\\" .State.Health.Status }} {{ .Name }}{{ end }}' | findstr ${sanitised_title}"
227227
} else {
228228
$exec_environment = 'HOME=/root'

Diff for: manifests/service.pp

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@
152152
}
153153
}
154154
if $::osfamily == 'windows' {
155-
file { ['C:/ProgramData/docker/', 'C:/ProgramData/docker/config/']:
155+
file { ["${::docker_program_data_path}/docker/", "${::docker_program_data_path}/docker/config/"]:
156156
ensure => directory,
157157
}
158158
}

Diff for: manifests/services.pp

+1-2
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,8 @@
106106
}
107107

108108
if $::osfamily == 'windows' {
109-
$exec_environment = 'PATH=C:/Program Files/Docker/'
110109
$exec_timeout = 3000
111-
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
110+
$exec_path = ["${::docker_program_files_path}/Docker/"]
112111
$exec_provider = 'powershell'
113112
} else {
114113
$exec_environment = 'HOME=/root'

Diff for: manifests/swarm.pp

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@
9191
include docker::params
9292

9393
if $::osfamily == 'windows' {
94-
$exec_environment = 'PATH=C:/Program Files/Docker/'
95-
$exec_path = ['c:/Windows/Temp/', 'C:/Program Files/Docker/']
94+
$exec_environment = "PATH=${::docker_program_files_path}/Docker/"
95+
$exec_path = ["${::docker_program_files_path}/Docker/"]
9696
$exec_timeout = 3000
9797
$exec_provider = 'powershell'
9898
$unless_init = '$info = docker info | select-string -pattern "Swarm: active"

Diff for: spec/acceptance/docker_custom_source_spec.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class { 'docker': #{docker_args} }
9393

9494
shell("#{docker_command} inspect container-3-6", :acceptable_exit_codes => [1])
9595
if fact('osfamily') == 'windows'
96-
shell('test -f /cygdrive/c/Windows/Temp/container-3-6.service', :acceptable_exit_codes => [1])
96+
shell('test -f /cygdrive/c/Users/Administrator/AppData/Local/Temp/container-3-6.service', :acceptable_exit_codes => [1])
9797
else
9898
shell('test -f /etc/systemd/system/container-3-6.service', :acceptable_exit_codes => [1])
9999
end

Diff for: spec/acceptance/docker_full_spec.rb

+17-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
default_image_tag = '10.0.14393.2189'
77
second_image = 'hello-world'
88
default_digest = 'sha256:204c41542c0927ac0296802e44c56b886b47e99cf8220fb49d46951bd5fc1742'
9-
default_dockerfile = 'c:/windows/temp/Dockerfile'
9+
default_dockerfile = 'C:/Users/Administrator/AppData/Local/Temp/Dockerfile'
10+
dockerfile_test = 'C:/Windows/Dockerfile_test.txt'
1011
#The default args are set because:
1112
#restart => 'always' - there is no service created to manage containers
1213
#net => 'nat' - docker uses bridged by default when running a container. When installing docker on windows the default network is NAT.
@@ -15,7 +16,7 @@
1516
docker_command = "\"/cygdrive/c/Program Files/Docker/docker\""
1617
default_docker_exec_lr_command = 'cmd /c "ping 127.0.0.1 -t > c:\windows\temp\test_file.txt"'
1718
default_docker_exec_command = 'cmd /c "echo test > c:\windows\temp\test_file.txt"'
18-
docker_mount_path = "c:/windows/temp"
19+
docker_mount_path = 'C:/Users/Administrator/AppData/Local/Temp'
1920
storage_driver = "windowsfilter"
2021
elsif fact('osfamily') == 'RedHat'
2122
docker_args = "repo_opt => '--enablerepo=localmirror-extras'"
@@ -24,6 +25,7 @@
2425
default_image_tag = '3.7'
2526
default_digest = 'sha256:3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73a'
2627
default_dockerfile = '/root/Dockerfile'
28+
dockerfile_test = "#{default_dockerfile}_test.txt"
2729
docker_command = "docker"
2830
default_docker_run_arg = ''
2931
default_run_command = "init"
@@ -38,6 +40,7 @@
3840
default_image_tag = '3.7'
3941
default_digest = 'sha256:3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73a'
4042
default_dockerfile = '/root/Dockerfile'
43+
dockerfile_test = "#{default_dockerfile}_test.txt"
4144
docker_command = "docker"
4245
default_docker_run_arg = ''
4346
default_run_command = "init"
@@ -145,7 +148,7 @@ class { 'docker': #{docker_args} }
145148

146149
shell("#{docker_command} inspect container-3-6", :acceptable_exit_codes => [1])
147150
if fact('osfamily') == 'windows'
148-
shell('test -f /cygdrive/c/Windows/Temp/container-3-6.service', :acceptable_exit_codes => [1])
151+
shell('test -f /cygdrive/c/Users/Administrator/AppData/Local/Temp/container-3-6.service', :acceptable_exit_codes => [1])
149152
else
150153
shell('test -f /etc/systemd/system/container-3-6.service', :acceptable_exit_codes => [1])
151154
end
@@ -292,6 +295,13 @@ class { 'docker': #{docker_args} }
292295
end
293296

294297
it 'should create a new image based on a Dockerfile' do
298+
299+
if fact('osfamily') == 'windows'
300+
run_cmd = 'RUN echo test > C:\\Windows\\Temp\\Dockerfile_test.txt'
301+
else
302+
run_cmd = "RUN echo test > #{dockerfile_test}"
303+
end
304+
295305
pp=<<-EOS
296306
class { 'docker': #{docker_args} }
297307
@@ -302,7 +312,7 @@ class { 'docker': #{docker_args} }
302312
303313
file { '#{default_dockerfile}':
304314
ensure => present,
305-
content => "FROM #{default_image}\nRUN echo test > #{default_dockerfile}_test.txt",
315+
content => "FROM #{default_image}\n#{run_cmd}",
306316
before => Docker::Image['alpine_with_file'],
307317
}
308318
EOS
@@ -317,8 +327,8 @@ class { 'docker': #{docker_args} }
317327
expect(r.stdout).to match(/_test.txt/)
318328
end
319329
else
320-
shell("#{docker_command} run alpine_with_file ls #{default_dockerfile}_test.txt") do |r|
321-
expect(r.stdout).to match(/#{default_dockerfile}_test.txt/)
330+
shell("#{docker_command} run alpine_with_file ls #{dockerfile_test}") do |r|
331+
expect(r.stdout).to match(/#{dockerfile_test}/)
322332
end
323333
end
324334
end
@@ -542,7 +552,7 @@ class { 'docker': #{docker_args} }
542552
sleep 4
543553
container_id = shell("#{docker_command} ps | awk 'FNR == 2 {print $1}'")
544554
if fact('osfamily') == 'windows'
545-
shell("#{docker_command} exec #{container_id.stdout.strip} cmd /c dir Windows\\\\Temp\\\\mnt") do |r|
555+
shell("#{docker_command} exec #{container_id.stdout.strip} cmd /c dir Users\\\\Administrator\\\\AppData\\\\Local\\\\Temp\\\\mnt") do |r|
546556
expect(r.stdout).to match(/test_mount.txt/)
547557
end
548558
else

Diff for: spec/acceptance/docker_spec.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
docker_network = 'nat'
1313
registry_host = @windows_ip
1414
config_file = '/cygdrive/c/Users/Administrator/.docker/config.json'
15-
root_dir = "C:/Windows/Temp"
15+
root_dir = "C:/Users/Administrator/AppData/Local/Temp"
1616
server_strip = "#{registry_host}_#{registry_port}"
1717
bad_server_strip = "#{registry_host}_5001"
1818
broken = true

0 commit comments

Comments
 (0)