Skip to content

Commit 03316d9

Browse files
florindragosdavejrt
authored andcommitted
Add option to install download and install docker from a url on windows (#311)
1 parent 0f4ab77 commit 03316d9

File tree

3 files changed

+79
-7
lines changed

3 files changed

+79
-7
lines changed

manifests/install.pp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
$version = $docker::version,
2525
$nuget_package_provider_version = $docker::nuget_package_provider_version,
2626
$docker_msft_provider_version = $docker::docker_msft_provider_version,
27-
$docker_ee_package_name = $docker::docker_ee_package_name
27+
$docker_ee_package_name = $docker::docker_ee_package_name,
28+
$docker_download_url = $docker::package_location
2829
) {
2930
$docker_start_command = $docker::docker_start_command
3031
if $::osfamily {
@@ -88,12 +89,22 @@
8889
name => $docker::docker_package_name,
8990
}))
9091
} else {
91-
exec { 'install-docker-package':
92-
command => template('docker/windows/install_powershell_provider.ps1.erb'),
93-
provider => powershell,
94-
unless => template('docker/windows/check_powershell_provider.ps1.erb'),
95-
logoutput => true,
96-
notify => Exec['service-restart-on-failure'],
92+
if $docker::package_location {
93+
exec { 'install-docker-package':
94+
command => template('docker/windows/download_docker.ps1.erb'),
95+
provider => powershell,
96+
unless => template('docker/windows/check_docker_url.ps1.erb'),
97+
logoutput => true,
98+
notify => Exec['service-restart-on-failure'],
99+
}
100+
} else {
101+
exec { 'install-docker-package':
102+
command => template('docker/windows/install_powershell_provider.ps1.erb'),
103+
provider => powershell,
104+
unless => template('docker/windows/check_powershell_provider.ps1.erb'),
105+
logoutput => true,
106+
notify => Exec['service-restart-on-failure'],
107+
}
97108
}
98109
exec { 'service-restart-on-failure':
99110
command => 'SC.exe failure Docker reset= 432000 actions= restart/30000/restart/60000/restart/60000',
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
$dockerLocation = Join-Path $env:TEMP "docker.zip"
2+
3+
if ((test-path $dockerLocation))
4+
{
5+
$localModified = (Get-Item $dockerLocation).LastWriteTime
6+
$webRequest = [System.Net.HttpWebRequest]::Create("<%= @docker_download_url %>");
7+
$webRequest.Method = "HEAD";
8+
$webResponse = $webRequest.GetResponse()
9+
$remoteLastModified = ($webResponse.LastModified) -as [DateTime]
10+
$webResponse.Close()
11+
12+
if ($remoteLastModified -gt $localModified)
13+
{
14+
exit 1
15+
}
16+
else
17+
{
18+
exit 0
19+
}
20+
}
21+
22+
exit 1
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
$dockerLocation = Join-Path $env:TEMP "docker.zip"
2+
3+
Invoke-webrequest -UseBasicparsing -Outfile $dockerLocation "<%= @docker_download_url %>"
4+
5+
$cleanInstall = $false
6+
7+
$service = Get-Service "docker" -ErrorAction Ignore
8+
if ( -not $service ) {
9+
$cleanInstall = $true
10+
} elseif ( $service.Status -ne [ServiceProcess.ServiceControllerStatus]::Stopped ) {
11+
$timeSpan = New-Object Timespan 0,0,60
12+
try {
13+
$service.Stop()
14+
$service.WaitForStatus([ServiceProcess.ServiceControllerStatus]::Stopped, 60)
15+
}
16+
catch [Management.Automation.MethodInvocationException],[ServiceProcess.TimeoutException] {
17+
Write-Error "Failed to stop docker service"
18+
exit 1
19+
}
20+
}
21+
22+
# Extract the archive.
23+
Expand-Archive -Force $dockerLocation -DestinationPath $Env:ProgramFiles
24+
25+
# Install Docker. This will require rebooting.
26+
$null = Install-WindowsFeature containers
27+
28+
if ($cleanInstall) {
29+
# Add Docker to the path for the current session.
30+
$env:path += ";$env:ProgramFiles\docker"
31+
32+
# Optionally, modify PATH to persist across sessions.
33+
$newPath = "$env:ProgramFiles\docker;" + [Environment]::GetEnvironmentVariable("PATH", [EnvironmentVariableTarget]::Machine)
34+
35+
[Environment]::SetEnvironmentVariable("PATH", $newPath, [EnvironmentVariableTarget]::Machine)
36+
37+
# Register the Docker daemon as a service.
38+
dockerd --register-service
39+
}

0 commit comments

Comments
 (0)