122 lines
3.9 KiB
Puppet
122 lines
3.9 KiB
Puppet
# @summary
|
|
# A define that manages a docker plugin
|
|
#
|
|
# @param plugin_name
|
|
# This ensures whether the plugin is installed or not.
|
|
# Note that the default behaviour of docker plugin
|
|
# requires a plugin be disabled before it can be removed
|
|
#
|
|
# @param enabled
|
|
# A setting to enable or disable an installed plugin.
|
|
#
|
|
# @param timeout
|
|
# The number of seconds to wait when enabling a plugin
|
|
#
|
|
# @param plugin_alias
|
|
# An alternative name to use for an installed plugin
|
|
#
|
|
# @param disable_on_install
|
|
# Alters the default behaviour of enabling a plugin upon install
|
|
#
|
|
# @param disable_content_trust
|
|
# Skip image verification
|
|
#
|
|
# @param grant_all_permissions
|
|
# Grant all permissions necessary to run the plugin
|
|
#
|
|
# @param force_remove
|
|
# Force the removal of an active plugin
|
|
#
|
|
# @param settings
|
|
# Any additional settings to pass to the plugin during install
|
|
#
|
|
# @param ensure
|
|
#
|
|
define docker::plugin (
|
|
Enum[present,absent] $ensure = 'present',
|
|
String $plugin_name = $title,
|
|
Boolean $enabled = true,
|
|
Optional[String] $timeout = undef,
|
|
Optional[String] $plugin_alias = undef,
|
|
Boolean $disable_on_install = false,
|
|
Boolean $disable_content_trust = true,
|
|
Boolean $grant_all_permissions = true,
|
|
Boolean $force_remove = true,
|
|
Array $settings = [],
|
|
) {
|
|
include docker::params
|
|
|
|
$docker_command = "${docker::params::docker_command} plugin"
|
|
|
|
if ($facts['os']['family'] == 'windows') {
|
|
fail('Feature not implemented on windows.')
|
|
}
|
|
|
|
if $ensure == 'present' {
|
|
$docker_plugin_install_flags = docker_plugin_install_flags({
|
|
plugin_name => $plugin_name,
|
|
plugin_alias => $plugin_alias,
|
|
disable_on_install => $disable_on_install,
|
|
disable_content_trust => $disable_content_trust,
|
|
grant_all_permissions => $grant_all_permissions,
|
|
settings => $settings,
|
|
}
|
|
)
|
|
|
|
$exec_install = "${docker_command} install ${docker_plugin_install_flags}"
|
|
$unless_install = "${docker_command} ls --format='{{.PluginReference}}' | grep -w ${plugin_name}"
|
|
|
|
exec { "plugin install ${plugin_name}":
|
|
command => $exec_install,
|
|
environment => 'HOME=/root',
|
|
path => ['/bin', '/usr/bin'],
|
|
timeout => 0,
|
|
unless => $unless_install,
|
|
}
|
|
} elsif $ensure == 'absent' {
|
|
$docker_plugin_remove_flags = docker_plugin_remove_flags({
|
|
plugin_name => $plugin_name,
|
|
force_remove => $force_remove,
|
|
}
|
|
)
|
|
|
|
$exec_rm = "${docker_command} rm ${docker_plugin_remove_flags}"
|
|
$onlyif_rm = "${docker_command} ls --format='{{.PluginReference}}' | grep -w ${plugin_name}"
|
|
|
|
exec { "plugin remove ${plugin_name}":
|
|
command => $exec_rm,
|
|
environment => 'HOME=/root',
|
|
path => ['/bin', '/usr/bin'],
|
|
timeout => 0,
|
|
onlyif => $onlyif_rm,
|
|
}
|
|
}
|
|
|
|
if $enabled {
|
|
$docker_plugin_enable_flags = docker_plugin_enable_flags({
|
|
plugin_name => $plugin_name,
|
|
plugin_alias => $plugin_alias,
|
|
timeout => $timeout,
|
|
}
|
|
)
|
|
|
|
$exec_enable = "${docker_command} enable ${docker_plugin_enable_flags}"
|
|
$onlyif_enable = "${docker_command} ls -f enabled=false --format='{{.PluginReference}}' | grep -w ${plugin_name}"
|
|
|
|
exec { "plugin enable ${plugin_name}":
|
|
command => $exec_enable,
|
|
environment => 'HOME=/root',
|
|
path => ['/bin', '/usr/bin'],
|
|
timeout => 0,
|
|
onlyif => $onlyif_enable,
|
|
}
|
|
} elsif $enabled == false {
|
|
exec { "disable ${plugin_name}":
|
|
command => "${docker_command} disable ${plugin_name}",
|
|
environment => 'HOME=/root',
|
|
path => ['/bin', '/usr/bin',],
|
|
timeout => 0,
|
|
unless => "${docker_command} ls -f enabled=false --format='{{.PluginReference}}' | grep -w ${plugin_name}",
|
|
}
|
|
}
|
|
}
|