forked from puppetlabs/puppetlabs-docker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstack.pp
80 lines (73 loc) · 2.61 KB
/
stack.pp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
# @summary
# deploys Docker stacks or compose v3
#
# @param ensure
# This ensures that the stack is present or not.
#
# @param stack_name
# The name of the stack that you are deploying
#
# @param bundle_file
# Path to a Distributed Application Bundle file
# Please note this is experimental
#
# @param prune
# Prune services that are no longer referenced
#
# @param resolve_image
# Query the registry to resolve image digest and supported platforms
# Only accepts ("always"|"changed"|"never")
#
# @param with_registry_auth
# Send registry authentication details to Swarm agents
#
# @param compose_files
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,
}
}
}