Skip to content

Commit

Permalink
Add service_provider parameter to docker::run
Browse files Browse the repository at this point in the history
This module already has the code to support all systemd-based
distributions, yet it is artificially locked to just Red Hat and
Ubuntu/Debian.  By exposing the `service_provider` parameter in the
`docker::run` defined type (a parameter that is also exposed in the main
`docker` class), this module becomes usable on most other distributions.

Other minor fixes have been added to set missing variables when running
under a non-Debian or non-RedHat operating system.
  • Loading branch information
jameslikeslinux committed Apr 25, 2019
1 parent 813dcbd commit 4b57d04
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 128 deletions.
15 changes: 12 additions & 3 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -502,13 +502,14 @@
Optional[Boolean] $service_hasstatus = $docker::params::service_hasstatus,
Optional[Boolean] $service_hasrestart = $docker::params::service_hasrestart,
Optional[String] $registry_mirror = $docker::params::registry_mirror,
Boolean $acknowledge_unsupported_os = false,
# Windows specific parameters
Optional[String] $docker_msft_provider_version = $docker::params::docker_msft_provider_version,
Optional[String] $nuget_package_provider_version = $docker::params::nuget_package_provider_version,
) inherits docker::params {


if $::osfamily {
if $::osfamily and !$acknowledge_unsupported_os {
assert_type(Pattern[/^(Debian|RedHat|windows)$/], $::osfamily) |$a, $b| {
fail(translate('This module only works on Debian, Red Hat or Windows based systems.'))
}
Expand Down Expand Up @@ -620,7 +621,11 @@
'windows': {
fail(translate('This module only work for Docker Enterprise Edition on Windows.'))
}
default: {}
default: {
$package_location = $docker_package_location
$package_key_source = $docker_package_key_source
$package_key_check_source = $docker_package_key_check_source
}
}
$docker_start_command = $docker_ce_start_command
$docker_package_name = $docker_ce_package_name
Expand All @@ -640,7 +645,11 @@
$package_key_source = $docker_package_key_source
$package_key_check_source = $docker_package_key_check_source
}
default : {}
default : {
$package_location = $docker_package_location
$package_key_source = $docker_package_key_source
$package_key_check_source = $docker_package_key_check_source
}
}
$docker_start_command = $docker_engine_start_command
$docker_package_name = $docker_engine_package_name
Expand Down
2 changes: 1 addition & 1 deletion manifests/install.pp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

) {
$docker_start_command = $docker::docker_start_command
if $::osfamily {
if $::osfamily and !::docker::acknowledge_unsupported_os {
assert_type(Pattern[/^(Debian|RedHat|windows)$/], $::osfamily) |$a, $b| {
fail(translate('This module only works on Debian, RedHat or Windows.'))
}
Expand Down
30 changes: 22 additions & 8 deletions manifests/run.pp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@
Variant[String,Array,Undef] $dns_search = [],
Variant[String,Array,Undef] $lxc_conf = [],
Optional[String] $service_prefix = 'docker-',
Optional[String] $service_provider = undef,
Optional[Boolean] $restart_service = true,
Optional[Boolean] $restart_service_on_docker_refresh = true,
Optional[Boolean] $manage_service = true,
Expand Down Expand Up @@ -176,8 +177,16 @@
assert_type(Pattern[/^(no|always|on-success|on-failure|on-abnormal|on-abort|on-watchdog)$/], $systemd_restart)
}

$service_provider_real = $service_provider ? {
undef => $docker::params::service_provider,
default => $service_provider,
}

if $detach == undef {
$valid_detach = $docker::params::detach_service_in_init
$valid_detach = $service_provider_real ? {
'systemd' => false,
default => $docker::params::detach_service_in_init,
}
} else {
$valid_detach = $detach
}
Expand Down Expand Up @@ -335,22 +344,24 @@
$docker_run_inline_start = template('docker/docker-run-start.erb')
$docker_run_inline_stop = template('docker/docker-run-stop.erb')

case $docker::params::service_provider {
case $service_provider_real {
'systemd': {
$initscript = "/etc/systemd/system/${service_prefix}${sanitised_title}.service"
$startscript = "/usr/local/bin/docker-run-${sanitised_title}-start.sh"
$stopscript = "/usr/local/bin/docker-run-${sanitised_title}-stop.sh"
$startstop_template = 'docker/usr/local/bin/docker-run.sh.epp'
$init_template = 'docker/etc/systemd/system/docker-run.erb'
$mode = '0644'
$hasstatus = true
}
'upstart': {
$initscript = "/etc/init.d/${service_prefix}${sanitised_title}"
$init_template = 'docker/etc/init.d/docker-run.erb'
$mode = '0750'
$startscript = undef
$stopscript = undef
$starstop_template = undef
$startstop_template = undef
$hasstatus = true
}
default: {
if $::osfamily != 'windows' {
Expand All @@ -359,6 +370,8 @@
elsif $ensure == 'present' {
fail(translate('Restart parameter is required for Windows'))
}

$hasstatus = $::docker::params::service_hasstatus
}
}

Expand All @@ -385,7 +398,8 @@
service { "${service_prefix}${sanitised_title}":
ensure => false,
enable => false,
hasstatus => $docker::params::service_hasstatus,
hasstatus => $hasstatus,
provider => $service_provider_real,
}
}
exec {
Expand Down Expand Up @@ -453,7 +467,7 @@
service { "${service_prefix}${sanitised_title}":
ensure => $running,
enable => false,
hasstatus => $docker::params::service_hasstatus,
hasstatus => $hasstatus,
require => File[$initscript],
}
}
Expand Down Expand Up @@ -482,8 +496,8 @@
service { "${service_prefix}${sanitised_title}":
ensure => $running,
enable => true,
provider => $docker::params::service_provider,
hasstatus => $docker::params::service_hasstatus,
provider => $service_provider_real,
hasstatus => $hasstatus,
require => File[$initscript],
}
}
Expand All @@ -502,7 +516,7 @@
}
}
}
if $docker::params::service_provider == 'systemd' {
if $service_provider_real == 'systemd' {
exec { "docker-${sanitised_title}-systemd-reload":
path => ['/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/'],
command => 'systemctl daemon-reload',
Expand Down
4 changes: 3 additions & 1 deletion manifests/service.pp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@
$root_dir_flag = $docker::root_dir_flag,
) {

unless $::osfamily =~ /(Debian|RedHat|windows)/ {
unless $::osfamily =~ /(Debian|RedHat|windows)/ or $::docker::acknowledge_unsupported_os {
fail(translate('The docker::service class needs a Debian, Redhat or Windows based system.'))
}

Expand All @@ -137,6 +137,8 @@
} else {
if $::osfamily == 'Debian' {
$_service_config = "/etc/default/${service_name}"
} else {
$_service_config = undef
}
}

Expand Down
Loading

0 comments on commit 4b57d04

Please sign in to comment.