153 lines
5.8 KiB
Puppet
153 lines
5.8 KiB
Puppet
# @summary
|
|
# Module to install an up-to-date version of Docker from a package repository.
|
|
# Only for Debian, Red Hat and Windows
|
|
#
|
|
# @param version
|
|
# The package version to install, used to set the package name.
|
|
#
|
|
# @param nuget_package_provider_version
|
|
# The version of the NuGet Package provider
|
|
#
|
|
# @param docker_msft_provider_version
|
|
# The version of the Microsoft Docker Provider Module
|
|
#
|
|
# @param docker_ee_package_name
|
|
# The name of the Docker Enterprise Edition package
|
|
#
|
|
# @param docker_download_url
|
|
#
|
|
# @param dependent_packages
|
|
#
|
|
class docker::install (
|
|
Optional[String] $version = $docker::version,
|
|
Optional[String] $nuget_package_provider_version = $docker::nuget_package_provider_version,
|
|
Optional[String] $docker_msft_provider_version = $docker::docker_msft_provider_version,
|
|
Optional[String] $docker_ee_package_name = $docker::docker_ee_package_name,
|
|
Optional[String] $docker_download_url = $docker::package_location,
|
|
Array $dependent_packages = $docker::dependent_packages,
|
|
) {
|
|
$docker_start_command = $docker::docker_start_command
|
|
|
|
if $facts['os']['family'] and ! $docker::acknowledge_unsupported_os {
|
|
assert_type(Pattern[/^(Debian|RedHat|windows)$/], $facts['os']['family']) |$a, $b| {
|
|
fail('This module only works on Debian, RedHat or Windows.')
|
|
}
|
|
}
|
|
if $docker::version and $docker::ensure != 'absent' {
|
|
$ensure = $docker::version
|
|
} else {
|
|
$ensure = $docker::ensure
|
|
}
|
|
|
|
if $docker::manage_package {
|
|
if empty($docker::repo_opt) {
|
|
$docker_hash = {}
|
|
} else {
|
|
$docker_hash = { 'install_options' => $docker::repo_opt }
|
|
}
|
|
|
|
if $docker::package_source {
|
|
if $facts['os']['family'] == 'windows' {
|
|
fail('Custom package source is currently not implemented on windows.')
|
|
}
|
|
case $docker::package_source {
|
|
/docker-engine/ : {
|
|
ensure_resource('package', 'docker', stdlib::merge($docker_hash, {
|
|
ensure => $ensure,
|
|
source => $docker::package_source,
|
|
name => $docker::docker_engine_package_name,
|
|
}))
|
|
}
|
|
/docker-ce/ : {
|
|
ensure_resource('package', 'docker', stdlib::merge($docker_hash, {
|
|
ensure => $ensure,
|
|
source => $docker::package_source,
|
|
name => $docker::docker_ce_package_name,
|
|
}))
|
|
ensure_resource('package', 'docker-ce-cli', stdlib::merge($docker_hash, {
|
|
ensure => $ensure,
|
|
source => $docker::package_source,
|
|
name => $docker::docker_ce_cli_package_name,
|
|
}))
|
|
}
|
|
default : {
|
|
# Empty
|
|
}
|
|
}
|
|
} else {
|
|
if $facts['os']['family'] != 'windows' {
|
|
ensure_resource('package', 'docker', stdlib::merge($docker_hash, {
|
|
ensure => $ensure,
|
|
name => $docker::docker_package_name,
|
|
}))
|
|
|
|
if $ensure == 'absent' {
|
|
ensure_resource('package', $dependent_packages, {
|
|
ensure => $ensure,
|
|
})
|
|
}
|
|
} else {
|
|
if $ensure == 'absent' {
|
|
$remove_docker_parameters = {
|
|
'docker_ee_package_name' => $docker_ee_package_name,
|
|
'version' => $version,
|
|
}
|
|
$check_docker_parameters = {
|
|
'docker_ee_package_name' => $docker_ee_package_name,
|
|
}
|
|
exec { 'remove-docker-package':
|
|
command => epp('docker/windows/remove_docker.ps1.epp', $remove_docker_parameters),
|
|
provider => powershell,
|
|
unless => epp('docker/windows/check_docker.ps1.epp', $check_docker_parameters),
|
|
logoutput => true,
|
|
}
|
|
} else {
|
|
if $docker::package_location {
|
|
$download_docker_parameters = {
|
|
'docker_download_url' => $docker_download_url,
|
|
}
|
|
$check_docker_url_parameters = {
|
|
'docker_download_url' => $docker_download_url,
|
|
}
|
|
exec { 'install-docker-package':
|
|
command => epp('docker/windows/download_docker.ps1.epp', $download_docker_parameters),
|
|
provider => powershell,
|
|
unless => epp('docker/windows/check_docker_url.ps1.epp', $check_docker_url_parameters),
|
|
logoutput => true,
|
|
notify => Exec['service-restart-on-failure'],
|
|
}
|
|
} else {
|
|
$install_powershell_provider_parameters = {
|
|
'nuget_package_provider_version' => $nuget_package_provider_version,
|
|
'docker_msft_provider_version' => $docker_msft_provider_version,
|
|
'version' => $version,
|
|
}
|
|
|
|
$check_powershell_provider_parameters = {
|
|
'nuget_package_provider_version' => $nuget_package_provider_version,
|
|
'docker_msft_provider_version' => $docker_msft_provider_version,
|
|
'docker_ee_package_name' => $docker_ee_package_name,
|
|
'version' => $version,
|
|
}
|
|
|
|
exec { 'install-docker-package':
|
|
command => epp('docker/windows/install_powershell_provider.ps1.epp', $install_powershell_provider_parameters),
|
|
provider => powershell,
|
|
unless => epp('docker/windows/check_powershell_provider.ps1.epp', $check_powershell_provider_parameters),
|
|
logoutput => true,
|
|
timeout => 1800,
|
|
notify => Exec['service-restart-on-failure'],
|
|
}
|
|
}
|
|
|
|
exec { 'service-restart-on-failure':
|
|
command => 'SC.exe failure Docker reset= 432000 actions= restart/30000/restart/60000/restart/60000',
|
|
refreshonly => true,
|
|
logoutput => true,
|
|
provider => powershell,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|