Puppet Class: docker::machine

Inherits:
docker::params
Defined in:
manifests/machine.pp

Summary

install Docker Machine using the recommended curl command.

Overview

Parameters:

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

    Whether to install or remove Docker Machine Valid values are absent present

  • version (Optional[String]) (defaults to: $docker::params::machine_version)

    The version of Docker Machine to install.

  • install_path (Optional[String]) (defaults to: $docker::params::machine_install_path)

    The path where to install Docker Machine.

  • proxy (Optional[Pattern['^((http[s]?)?:\/\/)?([^:^@]+:[^:^@]+@|)([\da-z\.-]+)\.([\da-z\.]{2,6})(:[\d])?([\/\w \.-]*)*\/?$']]) (defaults to: undef)

    Proxy to use for downloading Docker Machine.

  • url (Optional[Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]]) (defaults to: undef)

    The URL from which the docker machine binary should be fetched

  • curl_ensure (Optional[Boolean]) (defaults to: $docker::params::curl_ensure)

    Whether or not the curl package is ensured by this module.



23
24
25
26
27
28
29
30
31
32
33
34
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
# File 'manifests/machine.pp', line 23

class docker::machine (
  Enum[present,absent]                                 $ensure       = 'present',
  Optional[String]                                     $version      = $docker::params::machine_version,
  Optional[String]                                     $install_path = $docker::params::machine_install_path,
  Optional[Pattern['^((http[s]?)?:\/\/)?([^:^@]+:[^:^@]+@|)([\da-z\.-]+)\.([\da-z\.]{2,6})(:[\d])?([\/\w \.-]*)*\/?$']] $proxy = undef,
  Optional[Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]] $url          = undef,
  Optional[Boolean]                                    $curl_ensure  = $docker::params::curl_ensure,
) inherits docker::params {
  if $facts['os']['family'] == 'windows' {
    $file_extension = '.exe'
    $file_owner     = 'Administrator'
  } else {
    $file_extension = ''
    $file_owner     = 'root'
  }

  $docker_machine_location           = "${install_path}/docker-machine${file_extension}"
  $docker_machine_location_versioned = "${install_path}/docker-machine-${version}${file_extension}"

  if $ensure == 'present' {
    $docker_machine_url = $url ? {
      undef   => "https://github.com/docker/machine/releases/download/v${version}/docker-machine-${facts['kernel']}-x86_64${file_extension}",
      default => $url,
    }

    if $proxy != undef {
      $proxy_opt = "--proxy ${proxy}"
    } else {
      $proxy_opt = ''
    }

    if $facts['os']['family'] == 'windows' {
      $docker_download_command = "if (Invoke-WebRequest ${docker_machine_url} ${proxy_opt} -UseBasicParsing -OutFile \"${docker_machine_location_versioned}\") { exit 0 } else { exit 1}" # lint:ignore:140chars

      $parameters = {
        'proxy'                             => $proxy,
        'docker_machine_url'                => $docker_machine_url,
        'docker_machine_location_versioned' => $docker_machine_location_versioned,
      }

      exec { "Install Docker Machine ${version}":
        command  => epp('docker/windows/download_docker_machine.ps1.epp', $parameters),
        provider => powershell,
        creates  => $docker_machine_location_versioned,
      }

      file { $docker_machine_location:
        ensure  => 'link',
        target  => $docker_machine_location_versioned,
        require => Exec["Install Docker Machine ${version}"],
      }
    } else {
      if $curl_ensure {
        stdlib::ensure_packages(['curl'])
      }

      exec { "Install Docker Machine ${version}":
        path    => '/usr/bin/',
        cwd     => '/tmp',
        command => "curl -s -S -L ${proxy_opt} ${docker_machine_url} -o ${docker_machine_location_versioned}",
        creates => $docker_machine_location_versioned,
        require => Package['curl'],
      }

      file { $docker_machine_location_versioned:
        owner   => $file_owner,
        mode    => '0755',
        require => Exec["Install Docker Machine ${version}"],
      }

      file { $docker_machine_location:
        ensure  => 'link',
        target  => $docker_machine_location_versioned,
        require => File[$docker_machine_location_versioned],
      }
    }
  } else {
    file { $docker_machine_location_versioned:
      ensure => absent,
    }

    file { $docker_machine_location:
      ensure => absent,
    }
  }
}