Defined Type: docker::plugin

Defined in:
manifests/plugin.pp

Summary

A define that manages a docker plugin

Overview

Parameters:

  • plugin_name (String) (defaults to: $title)

    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

  • enabled (Boolean) (defaults to: true)

    A setting to enable or disable an installed plugin.

  • timeout (Optional[String]) (defaults to: undef)

    The number of seconds to wait when enabling a plugin

  • plugin_alias (Optional[String]) (defaults to: undef)

    An alternative name to use for an installed plugin

  • disable_on_install (Boolean) (defaults to: false)

    Alters the default behaviour of enabling a plugin upon install

  • disable_content_trust (Boolean) (defaults to: true)

    Skip image verification

  • grant_all_permissions (Boolean) (defaults to: true)

    Grant all permissions necessary to run the plugin

  • force_remove (Boolean) (defaults to: true)

    Force the removal of an active plugin

  • settings (Array) (defaults to: [])

    Any additional settings to pass to the plugin during install

  • ensure (Enum[present,absent]) (defaults to: 'present')


35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'manifests/plugin.pp', line 35

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}",
    }
  }
}