Defined Type: docker::stack

Defined in:
manifests/stack.pp

Summary

deploys Docker stacks or compose v3

Overview

Parameters:

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

    This ensures that the stack is present or not.

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

    The name of the stack that you are deploying

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

    Path to a Distributed Application Bundle file Please note this is experimental

  • prune (Boolean) (defaults to: false)

    Prune services that are no longer referenced

  • resolve_image (Optional[Enum['always','changed','never']]) (defaults to: undef)

    Query the registry to resolve image digest and supported platforms Only accepts (“always”|“changed”|“never”)

  • with_registry_auth (Boolean) (defaults to: false)

    Send registry authentication details to Swarm agents

  • compose_files (Optional[Array]) (defaults to: undef)


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
# File 'manifests/stack.pp', line 25

define docker::stack (
  Enum[present,absent]                       $ensure             = 'present',
  Optional[String]                           $stack_name         = undef,
  Optional[String]                           $bundle_file        = undef,
  Optional[Array]                            $compose_files      = undef,
  Boolean                                    $prune              = false,
  Boolean                                    $with_registry_auth = false,
  Optional[Enum['always','changed','never']] $resolve_image      = undef,
) {
  include docker::params

  deprecation('docker::stack','The docker stack define type will be deprecated in a future release. Please migrate to the docker_stack type/provider.')

  $docker_command = "${docker::params::docker_command} stack"

  if $facts['os']['family'] == 'windows' {
    $exec_path   = ['C:/Program Files/Docker/',]
    $check_stack = '$info = docker stack ls | select-string -pattern web
                    if ($info -eq $null) { Exit 1 } else { Exit 0 }'
    $provider    = 'powershell'
  } else {
    $exec_path   = ['/bin', '/usr/bin',]
    $check_stack = "${docker_command} ls | grep '${stack_name}'"
    $provider    = undef
  }

  if $ensure == 'present' {
    $docker_stack_flags = docker_stack_flags ({
        stack_name         => $stack_name,
        bundle_file        => $bundle_file,
        compose_files      => $compose_files,
        prune              => $prune,
        with_registry_auth => $with_registry_auth,
        resolve_image      => $resolve_image,
      }
    )

    $exec_stack = "${docker_command} deploy ${docker_stack_flags} ${stack_name}"

    exec { "docker stack create ${stack_name}":
      command  => $exec_stack,
      unless   => $check_stack,
      path     => $exec_path,
      provider => $provider,
    }
  }

  if $ensure == 'absent' {
    exec { "docker stack destroy ${stack_name}":
      command  => "${docker_command} rm ${stack_name}",
      onlyif   => $check_stack,
      path     => $exec_path,
      provider => $provider,
    }
  }
}