From 9547a2fdd96e3624e1d9a8069abba283ace01c00 Mon Sep 17 00:00:00 2001 From: Michael Musenbrock Date: Mon, 10 Mar 2025 22:01:58 +0100 Subject: [PATCH] Add support for overlay2.size setting used to limit container storage usage * Usable when overlay2 storage is backed by an xfs filesystem with pquoata support * https://docs.docker.com/reference/cli/dockerd/#overlay2size --- REFERENCE.md | 20 ++++++++++++++++++++ manifests/init.pp | 6 ++++++ manifests/params.pp | 1 + manifests/service.pp | 5 +++++ spec/classes/init_spec.rb | 1 + spec/helper/get_defaults.rb | 2 ++ templates/etc/conf.d/docker.epp | 1 + templates/etc/conf.d/docker.gentoo.epp | 1 + templates/etc/default/docker.epp | 1 + templates/etc/sysconfig/docker-storage.epp | 1 + 10 files changed, 39 insertions(+) diff --git a/REFERENCE.md b/REFERENCE.md index 3bffa9a5..94d7d8d3 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -150,6 +150,7 @@ The following parameters are available in the `docker` class: * [`dm_blkdiscard`](#-docker--dm_blkdiscard) * [`dm_override_udev_sync_check`](#-docker--dm_override_udev_sync_check) * [`overlay2_override_kernel_check`](#-docker--overlay2_override_kernel_check) +* [`overlay2_size`](#-docker--overlay2_size) * [`manage_package`](#-docker--manage_package) * [`service_name`](#-docker--service_name) * [`docker_users`](#-docker--docker_users) @@ -736,6 +737,16 @@ Overrides the Linux kernel version check allowing using overlay2 with kernel < 4 Default value: `$docker::params::overlay2_override_kernel_check` +##### `overlay2_size` + +Data type: `Optional[String]` + +Sets the default max size of the container. It is supported only when the +backing filesystem is xfs and mounted with pquota mount option. +storage_driver needs to be set explicitely to overlay2 to be respected. + +Default value: `$docker::params::overlay2_size` + ##### `manage_package` Data type: `Boolean` @@ -1590,6 +1601,7 @@ The following parameters are available in the `docker::service` class: * [`dm_blkdiscard`](#-docker--service--dm_blkdiscard) * [`dm_override_udev_sync_check`](#-docker--service--dm_override_udev_sync_check) * [`overlay2_override_kernel_check`](#-docker--service--overlay2_override_kernel_check) +* [`overlay2_size`](#-docker--service--overlay2_size) * [`storage_devs`](#-docker--service--storage_devs) * [`storage_vg`](#-docker--service--storage_vg) * [`storage_root_size`](#-docker--service--storage_root_size) @@ -2040,6 +2052,14 @@ Data type: `Boolean` Default value: `$docker::overlay2_override_kernel_check` +##### `overlay2_size` + +Data type: `Optional[String]` + + + +Default value: `$docker::overlay2_size` + ##### `storage_devs` Data type: `Optional[String]` diff --git a/manifests/init.pp b/manifests/init.pp index ac10e1be..5343f83a 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -238,6 +238,11 @@ # @param overlay2_override_kernel_check # Overrides the Linux kernel version check allowing using overlay2 with kernel < 4.0. # +# @param overlay2_size +# Sets the default max size of the container. +# It is supported only when the backing filesystem is xfs and mounted with pquota mount option. +# storage_driver needs to be set explicitely to overlay2 to be respected. +# # @param manage_package # Won't install or define the docker package, useful if you want to use your own package # @@ -433,6 +438,7 @@ Optional[Boolean] $dm_blkdiscard = $docker::params::dm_blkdiscard, Optional[Boolean] $dm_override_udev_sync_check = $docker::params::dm_override_udev_sync_check, Boolean $overlay2_override_kernel_check = $docker::params::overlay2_override_kernel_check, + Optional[String] $overlay2_size = $docker::params::overlay2_size, Optional[String] $execdriver = $docker::params::execdriver, Boolean $manage_package = $docker::params::manage_package, Optional[String] $package_source = $docker::params::package_source, diff --git a/manifests/params.pp b/manifests/params.pp index 86984dd9..ed9fbd9e 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -66,6 +66,7 @@ $dm_blkdiscard = undef $dm_override_udev_sync_check = undef $overlay2_override_kernel_check = false + $overlay2_size = undef $manage_package = true $package_source = undef $service_name_default = 'docker' diff --git a/manifests/service.pp b/manifests/service.pp index 80c429b7..b7412de1 100644 --- a/manifests/service.pp +++ b/manifests/service.pp @@ -117,6 +117,8 @@ # # @param overlay2_override_kernel_check # +# @param overlay2_size +# # @param storage_devs # # @param storage_vg @@ -230,6 +232,7 @@ Optional[Boolean] $dm_blkdiscard = $docker::dm_blkdiscard, Optional[Boolean] $dm_override_udev_sync_check = $docker::dm_override_udev_sync_check, Boolean $overlay2_override_kernel_check = $docker::overlay2_override_kernel_check, + Optional[String] $overlay2_size = $docker::overlay2_size, Optional[String] $storage_devs = $docker::storage_devs, Optional[String] $storage_vg = $docker::storage_vg, Optional[String] $storage_root_size = $docker::storage_root_size, @@ -416,6 +419,7 @@ 'dm_blkdiscard' => $dm_blkdiscard, 'dm_override_udev_sync_check' => $dm_override_udev_sync_check, 'overlay2_override_kernel_check' => $overlay2_override_kernel_check, + 'overlay2_size' => $overlay2_size, } if $storage_config { @@ -480,6 +484,7 @@ 'dm_blkdiscard' => $dm_blkdiscard, 'dm_override_udev_sync_check' => $dm_override_udev_sync_check, 'overlay2_override_kernel_check' => $overlay2_override_kernel_check, + 'overlay2_size' => $overlay2_size, 'labels' => $labels, 'extra_parameters' => $extra_parameters, 'extra_parameters_array' => $extra_parameters_array, diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb index dc072224..32f3c4cf 100644 --- a/spec/classes/init_spec.rb +++ b/spec/classes/init_spec.rb @@ -131,6 +131,7 @@ 'nuget_package_provider_version' => defaults['nuget_package_provider_version'], 'os_lc' => defaults['os_lc'], 'overlay2_override_kernel_check' => defaults['overlay2_override_kernel_check'], + 'overlay2_size' => defaults['overlay2_size'], 'package_release' => defaults['package_release'], 'package_source' => defaults['package_source'], 'pin_upstream_package_source' => defaults['pin_upstream_package_source'], diff --git a/spec/helper/get_defaults.rb b/spec/helper/get_defaults.rb index aeffaaab..1aaafb88 100644 --- a/spec/helper/get_defaults.rb +++ b/spec/helper/get_defaults.rb @@ -58,6 +58,7 @@ def get_defaults(_facts) nuget_package_provider_version = :undef os_lc = _facts[:os]['name'] overlay2_override_kernel_check = false + overlay2_size = :undef package_source = :undef proxy = :undef registry_mirror = :undef @@ -399,6 +400,7 @@ def get_defaults(_facts) 'nuget_package_provider_version' => nuget_package_provider_version, 'os_lc' => os_lc, 'overlay2_override_kernel_check' => overlay2_override_kernel_check, + 'overlay2_size' => overlay2_size, 'package_ce_key_id' => package_ce_key_id, 'package_ce_key_source' => package_ce_key_source, 'package_ce_release' => package_ce_release, diff --git a/templates/etc/conf.d/docker.epp b/templates/etc/conf.d/docker.epp index 0fb46595..dadc7033 100644 --- a/templates/etc/conf.d/docker.epp +++ b/templates/etc/conf.d/docker.epp @@ -43,6 +43,7 @@ other_args="<% -%> <%- if $dm_override_udev_sync_check { %> --storage-opt dm.override_udev_sync_check=<%= $dm_override_udev_sync_check %><% } -%> <% } elsif $storage_driver == 'overlay2' { -%> <%- if $overlay2_override_kernel_check { %> --storage-opt overlay2.override_kernel_check=<%= $overlay2_override_kernel_check %><% } -%> + <%- if $overlay2_size { %> --storage-opt overlay2.size=<%= $overlay2_size %><% } -%> <% } -%> <% $labels.each |$label| { %> --label <%= $label %><% } -%> <% if $extra_parameters { %><% $extra_parameters_array.each |$param| { %> <%= $param %><% } %><% } -%> diff --git a/templates/etc/conf.d/docker.gentoo.epp b/templates/etc/conf.d/docker.gentoo.epp index 066f169f..9db258a3 100644 --- a/templates/etc/conf.d/docker.gentoo.epp +++ b/templates/etc/conf.d/docker.gentoo.epp @@ -43,6 +43,7 @@ DOCKER_OPTS="<% -%> <%- if $dm_override_udev_sync_check { %> --storage-opt dm.override_udev_sync_check=<%= $dm_override_udev_sync_check %><% } %> <% } elsif $storage_driver == 'overlay2' { -%> <%- if $overlay2_override_kernel_check { %> --storage-opt overlay2.override_kernel_check=<%= $overlay2_override_kernel_check %><% } %> + <%- if $overlay2_size { %> --storage-opt overlay2.size=<%= $overlay2_size %><% } %> <% } -%> <% $labels.each |$label| { %> --label <%= $label %><% } %> <% if $extra_parameters { %><% $extra_parameters_array.each |$param| { %> <%= $param %><% } %><% } %> diff --git a/templates/etc/default/docker.epp b/templates/etc/default/docker.epp index b8c3bf0e..f7c13575 100644 --- a/templates/etc/default/docker.epp +++ b/templates/etc/default/docker.epp @@ -62,6 +62,7 @@ DOCKER_OPTS="\ <%- if $dm_override_udev_sync_check { %> --storage-opt dm.override_udev_sync_check=<%= $dm_override_udev_sync_check %><% } -%> <% } elsif $storage_driver == 'overlay2' { -%> <%- if $overlay2_override_kernel_check { %> --storage-opt overlay2.override_kernel_check=<%= $overlay2_override_kernel_check %><% } -%> + <%- if $overlay2_size { %> --storage-opt overlay2.size=<%= $overlay2_size %><% } -%> <% } -%> <% $labels.each |$label| { %> --label <%= $label %><% } -%> <% if $extra_parameters { %><% $extra_parameters_array.each |$param| { %> <%= $param %><% } %><% } -%> diff --git a/templates/etc/sysconfig/docker-storage.epp b/templates/etc/sysconfig/docker-storage.epp index 75b8c930..53684f53 100644 --- a/templates/etc/sysconfig/docker-storage.epp +++ b/templates/etc/sysconfig/docker-storage.epp @@ -35,5 +35,6 @@ DOCKER_STORAGE_OPTIONS="<% -%> <%- if $dm_override_udev_sync_check { %> --storage-opt dm.override_udev_sync_check=<%= $dm_override_udev_sync_check %><% } -%> <% } elsif $storage_driver == 'overlay2' { -%> <%- if $overlay2_override_kernel_check { %> --storage-opt overlay2.override_kernel_check=<%= $overlay2_override_kernel_check %><% } -%> + <%- if $overlay2_size { %> --storage-opt overlay2.size=<%= $overlay2_size %><% } -%> <% } -%> "