206 lines
6.3 KiB
ObjectPascal
206 lines
6.3 KiB
ObjectPascal
|
# @summary define that managers a Docker services
|
||
|
#
|
||
|
# @param ensure
|
||
|
# This ensures that the service is present or not.
|
||
|
#
|
||
|
# @param image
|
||
|
# The Docker image to spwan the service from.
|
||
|
#
|
||
|
# @param detach
|
||
|
# Exit immediately instead of waiting for the service to converge (default true)
|
||
|
#
|
||
|
# @param env
|
||
|
# Set environment variables
|
||
|
#
|
||
|
# @param label
|
||
|
# Service labels.
|
||
|
# This used as metdata to configure constraints etc.
|
||
|
#
|
||
|
# @param publish
|
||
|
# Publish port(s) as node ports.
|
||
|
#
|
||
|
# @param replicas
|
||
|
# Number of tasks (containers per service)
|
||
|
#
|
||
|
# @param tty
|
||
|
# Allocate a pseudo-TTY
|
||
|
#
|
||
|
# @param user
|
||
|
# Username or UID (format: <name|uid>[:<group|gid>])
|
||
|
#
|
||
|
# @param workdir
|
||
|
# Working directory inside the container
|
||
|
#
|
||
|
# @param extra_params
|
||
|
# Allows you to pass any other flag that the Docker service create supports.
|
||
|
# This must be passed as an array. See docker service create --help for all options
|
||
|
#
|
||
|
# @param update
|
||
|
# This changes the docker command to
|
||
|
# docker service update, you must pass a service name with this option
|
||
|
#
|
||
|
# @param scale
|
||
|
# This changes the docker command to
|
||
|
# docker service scale, this can only be used with service name and
|
||
|
# replicas
|
||
|
#
|
||
|
# @param host_socket
|
||
|
# This will allow the service to connect to the host linux socket.
|
||
|
#
|
||
|
# @param registry_mirror
|
||
|
# This will allow the service to set a registry mirror.
|
||
|
#
|
||
|
# @param mounts
|
||
|
# Allows attaching filesystem mounts to the service (specified as an array)
|
||
|
#
|
||
|
# @param networks
|
||
|
# Allows attaching the service to networks (specified as an array)
|
||
|
#
|
||
|
# @param command
|
||
|
# Command to run on the container
|
||
|
#
|
||
|
# @param create
|
||
|
#
|
||
|
# @param service_name
|
||
|
#
|
||
|
define docker::services (
|
||
|
Enum[present,absent] $ensure = 'present',
|
||
|
Boolean $create = true,
|
||
|
Boolean $update = false,
|
||
|
Boolean $scale = false,
|
||
|
Boolean $detach = true,
|
||
|
Boolean $tty = false,
|
||
|
Array $env = [],
|
||
|
Array $label = [],
|
||
|
Array $extra_params = [],
|
||
|
Optional[Variant[String,Array]] $image = undef,
|
||
|
Optional[Variant[String,Array]] $service_name = undef,
|
||
|
Optional[Variant[String,Array]] $publish = undef,
|
||
|
Optional[Variant[String,Array]] $replicas = undef,
|
||
|
Optional[Variant[String,Array]] $user = undef,
|
||
|
Optional[Variant[String,Array]] $workdir = undef,
|
||
|
Optional[Variant[String,Array]] $host_socket = undef,
|
||
|
Optional[Variant[String,Array]] $registry_mirror = undef,
|
||
|
Optional[Variant[String,Array]] $mounts = undef,
|
||
|
Optional[Array] $networks = undef,
|
||
|
Optional[Variant[String,Array]] $command = undef,
|
||
|
) {
|
||
|
include docker::params
|
||
|
|
||
|
$docker_command = "${docker::params::docker_command} service"
|
||
|
|
||
|
if $ensure == 'absent' {
|
||
|
if $update {
|
||
|
fail('When removing a service you can not update it.')
|
||
|
}
|
||
|
|
||
|
if $scale {
|
||
|
fail('When removing a service you can not update it.')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if $facts['os']['family'] == 'windows' {
|
||
|
$exec_environment = "PATH=${facts['docker_program_files_path']}/Docker/;${facts['docker_systemroot']}/System32/"
|
||
|
$exec_path = ["${facts['docker_program_files_path']}/Docker/",]
|
||
|
$exec_provider = 'powershell'
|
||
|
$exec_timeout = 3000
|
||
|
} else {
|
||
|
$exec_environment = 'HOME=/root'
|
||
|
$exec_path = ['/bin', '/usr/bin',]
|
||
|
$exec_provider = undef
|
||
|
$exec_timeout = 0
|
||
|
}
|
||
|
|
||
|
if $create {
|
||
|
$docker_service_create_flags = docker_service_flags({
|
||
|
detach => $detach,
|
||
|
env => any2array($env),
|
||
|
service_name => $service_name,
|
||
|
label => any2array($label),
|
||
|
publish => $publish,
|
||
|
replicas => $replicas,
|
||
|
tty => $tty,
|
||
|
user => $user,
|
||
|
workdir => $workdir,
|
||
|
extra_params => any2array($extra_params),
|
||
|
image => $image,
|
||
|
host_socket => $host_socket,
|
||
|
registry_mirror => $registry_mirror,
|
||
|
mounts => $mounts,
|
||
|
networks => $networks,
|
||
|
command => $command,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
$exec_create = "${docker_command} create --name ${docker_service_create_flags}"
|
||
|
$unless_create = "docker service ps ${service_name}"
|
||
|
|
||
|
exec { "${title} docker service create":
|
||
|
command => $exec_create,
|
||
|
environment => $exec_environment,
|
||
|
path => $exec_path,
|
||
|
timeout => $exec_timeout,
|
||
|
provider => $exec_provider,
|
||
|
unless => $unless_create,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if $update {
|
||
|
$docker_service_flags = docker_service_flags({
|
||
|
detach => $detach,
|
||
|
env => any2array($env),
|
||
|
service_name => $service_name,
|
||
|
label => any2array($label),
|
||
|
publish => $publish,
|
||
|
replicas => $replicas,
|
||
|
tty => $tty,
|
||
|
user => $user,
|
||
|
workdir => $workdir,
|
||
|
extra_params => any2array($extra_params),
|
||
|
image => $image,
|
||
|
host_socket => $host_socket,
|
||
|
registry_mirror => $registry_mirror,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
$exec_update = "${docker_command} update ${docker_service_flags}"
|
||
|
|
||
|
exec { "${title} docker service update":
|
||
|
command => $exec_update,
|
||
|
environment => $exec_environment,
|
||
|
path => $exec_path,
|
||
|
provider => $exec_provider,
|
||
|
timeout => $exec_timeout,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if $scale {
|
||
|
$docker_service_flags = docker_service_flags({
|
||
|
service_name => $service_name,
|
||
|
replicas => $replicas,
|
||
|
extra_params => any2array($extra_params),
|
||
|
}
|
||
|
)
|
||
|
|
||
|
$exec_scale = "${docker_command} scale ${service_name}=${replicas}"
|
||
|
|
||
|
exec { "${title} docker service scale":
|
||
|
command => $exec_scale,
|
||
|
environment => $exec_environment,
|
||
|
path => $exec_path,
|
||
|
timeout => $exec_timeout,
|
||
|
provider => $exec_provider,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if $ensure == 'absent' {
|
||
|
exec { "${title} docker service remove":
|
||
|
command => "docker service rm ${service_name}",
|
||
|
onlyif => "docker service ps ${service_name}",
|
||
|
path => $exec_path,
|
||
|
provider => $exec_provider,
|
||
|
timeout => $exec_timeout,
|
||
|
}
|
||
|
}
|
||
|
}
|