Add systemd module, required by rabbitmq
authorJulien Cristau <jcristau@debian.org>
Tue, 20 Nov 2018 20:09:44 +0000 (21:09 +0100)
committerJulien Cristau <jcristau@debian.org>
Tue, 20 Nov 2018 20:09:44 +0000 (21:09 +0100)
86 files changed:
3rdparty/Puppetfile
3rdparty/modules/systemd/CHANGELOG.md [new file with mode: 0644]
3rdparty/modules/systemd/Gemfile [new file with mode: 0644]
3rdparty/modules/systemd/HISTORY.md [new file with mode: 0644]
3rdparty/modules/systemd/LICENSE [new file with mode: 0644]
3rdparty/modules/systemd/README.md [new file with mode: 0644]
3rdparty/modules/systemd/Rakefile [new file with mode: 0644]
3rdparty/modules/systemd/checksums.json [new file with mode: 0644]
3rdparty/modules/systemd/data/Archlinux.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/CentOS-7.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/Debian-10.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/Debian-8.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/Debian-9.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/RedHat-7.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/Ubuntu-16.04.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/Ubuntu-18.04.yaml [new file with mode: 0644]
3rdparty/modules/systemd/data/common.yaml [new file with mode: 0644]
3rdparty/modules/systemd/lib/facter/systemd.rb [new file with mode: 0644]
3rdparty/modules/systemd/manifests/dropin_file.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/init.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/network.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/networkd.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/resolved.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/service_limits.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/system.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/systemctl/daemon_reload.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/timesyncd.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/tmpfile.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/tmpfiles.pp [new file with mode: 0644]
3rdparty/modules/systemd/manifests/unit_file.pp [new file with mode: 0644]
3rdparty/modules/systemd/metadata.json [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-5-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-5.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-vagrant.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-vagrant.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-vagrant.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-vagrant.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-vagrant.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-10.04-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04-x86_64-docker.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04-x86_64-openstack.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.10.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-16.04.yml [new file with mode: 0644]
3rdparty/modules/systemd/spec/classes/init_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/classes/systemctl/daemon_reload_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/classes/tmpfiles_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/default_module_facts.yaml [new file with mode: 0644]
3rdparty/modules/systemd/spec/defines/dropin_file_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/defines/network_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/defines/service_limits_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/defines/tmpfile_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/defines/unit_file_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/spec.opts [new file with mode: 0644]
3rdparty/modules/systemd/spec/spec_helper.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/unit/facter/systemd_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/spec/unit/facter/systemd_version_spec.rb [new file with mode: 0644]
3rdparty/modules/systemd/templates/limits.erb [new file with mode: 0644]
3rdparty/modules/systemd/types/dropin.pp [new file with mode: 0644]
3rdparty/modules/systemd/types/servicelimits.pp [new file with mode: 0644]
3rdparty/modules/systemd/types/unit.pp [new file with mode: 0644]

index fa2d4b2..31be6dd 100644 (file)
@@ -4,6 +4,7 @@ mod 'puppetlabs/stdlib', '4.19.0'
 mod 'puppetlabs/concat', '4.0.1'
 mod 'puppetlabs-postgresql', '5.1.0'
 
+mod 'camptocamp-systemd', '2.1.0'
 mod 'puppet/rabbitmq', '8.4.0'
 
 mod 'nanliu/staging', '1.0.3'
diff --git a/3rdparty/modules/systemd/CHANGELOG.md b/3rdparty/modules/systemd/CHANGELOG.md
new file mode 100644 (file)
index 0000000..148607f
--- /dev/null
@@ -0,0 +1,202 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+Each new release typically also includes the latest modulesync defaults.
+These should not affect the functionality of the module.
+
+## [v2.1.0](https://github.com/camptocamp/puppet-systemd/tree/v2.1.0) (2018-08-31)
+
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/2.0.0...v2.1.0)
+
+**Implemented enhancements:**
+
+- Modify service limit type [\#81](https://github.com/camptocamp/puppet-systemd/pull/81) ([bastelfreak](https://github.com/bastelfreak))
+- Add parameter to select resolver [\#79](https://github.com/camptocamp/puppet-systemd/pull/79) ([amateo](https://github.com/amateo))
+
+**Fixed bugs:**
+
+- Handle ensuring service\_limits to be absent [\#80](https://github.com/camptocamp/puppet-systemd/pull/80) ([ekohl](https://github.com/ekohl))
+
+**Merged pull requests:**
+
+- do not access facts as top scope variable [\#85](https://github.com/camptocamp/puppet-systemd/pull/85) ([bastelfreak](https://github.com/bastelfreak))
+- Release 2.1.0 [\#84](https://github.com/camptocamp/puppet-systemd/pull/84) ([bastelfreak](https://github.com/bastelfreak))
+- allow puppetlabs/stdlib 5.x [\#83](https://github.com/camptocamp/puppet-systemd/pull/83) ([bastelfreak](https://github.com/bastelfreak))
+- Fix CHANGELOG.md duplicate footer [\#78](https://github.com/camptocamp/puppet-systemd/pull/78) ([alexjfisher](https://github.com/alexjfisher))
+
+## [2.0.0](https://github.com/camptocamp/puppet-systemd/tree/2.0.0) (2018-07-11)
+
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/1.1.1...2.0.0)
+
+**Breaking changes:**
+
+- move params to data-in-modules [\#67](https://github.com/camptocamp/puppet-systemd/pull/67) ([bastelfreak](https://github.com/bastelfreak))
+
+**Implemented enhancements:**
+
+- add ubuntu 18.04 support [\#72](https://github.com/camptocamp/puppet-systemd/pull/72) ([bastelfreak](https://github.com/bastelfreak))
+- bump facter to latest 2.x version [\#71](https://github.com/camptocamp/puppet-systemd/pull/71) ([bastelfreak](https://github.com/bastelfreak))
+- Add enable and active parameters to unit\_file [\#69](https://github.com/camptocamp/puppet-systemd/pull/69) ([jcharaoui](https://github.com/jcharaoui))
+- Add support for Resource Accounting via systemd [\#65](https://github.com/camptocamp/puppet-systemd/pull/65) ([bastelfreak](https://github.com/bastelfreak))
+- Allow resolved class to configure DNS settings [\#59](https://github.com/camptocamp/puppet-systemd/pull/59) ([hfm](https://github.com/hfm))
+- Replace iterator with stdlib function [\#58](https://github.com/camptocamp/puppet-systemd/pull/58) ([jfleury-at-ovh](https://github.com/jfleury-at-ovh))
+
+**Closed issues:**
+
+- Better test for systemd \(and other init systems\) [\#37](https://github.com/camptocamp/puppet-systemd/issues/37)
+
+**Merged pull requests:**
+
+- fix puppet-linter warnings in README.md [\#75](https://github.com/camptocamp/puppet-systemd/pull/75) ([bastelfreak](https://github.com/bastelfreak))
+- release 2.0.0 [\#70](https://github.com/camptocamp/puppet-systemd/pull/70) ([bastelfreak](https://github.com/bastelfreak))
+- Update the documentation of facts [\#68](https://github.com/camptocamp/puppet-systemd/pull/68) ([ekohl](https://github.com/ekohl))
+- purge legacy puppet-lint checks [\#66](https://github.com/camptocamp/puppet-systemd/pull/66) ([bastelfreak](https://github.com/bastelfreak))
+- Reuse the systemd::dropin\_file in service\_limits [\#61](https://github.com/camptocamp/puppet-systemd/pull/61) ([ekohl](https://github.com/ekohl))
+- cleanup README.md [\#60](https://github.com/camptocamp/puppet-systemd/pull/60) ([bastelfreak](https://github.com/bastelfreak))
+- implement github changelog generator [\#45](https://github.com/camptocamp/puppet-systemd/pull/45) ([bastelfreak](https://github.com/bastelfreak))
+
+## [1.1.1](https://github.com/camptocamp/puppet-systemd/tree/1.1.1) (2017-11-29)
+
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/1.1.0...1.1.1)
+
+**Fixed bugs:**
+
+- fact systemd\_internal\_services is empty [\#47](https://github.com/camptocamp/puppet-systemd/issues/47)
+- Use the correct type on $service\_limits [\#52](https://github.com/camptocamp/puppet-systemd/pull/52) ([ekohl](https://github.com/ekohl))
+- Fix issue \#47 [\#48](https://github.com/camptocamp/puppet-systemd/pull/48) ([axxelG](https://github.com/axxelG))
+
+**Closed issues:**
+
+- Not able to set limits via systemd class [\#49](https://github.com/camptocamp/puppet-systemd/issues/49)
+
+**Merged pull requests:**
+
+- Clean up test tooling [\#54](https://github.com/camptocamp/puppet-systemd/pull/54) ([ekohl](https://github.com/ekohl))
+- Correct parameter documentation [\#53](https://github.com/camptocamp/puppet-systemd/pull/53) ([ekohl](https://github.com/ekohl))
+- Use a space-separated in timesyncd.conf [\#50](https://github.com/camptocamp/puppet-systemd/pull/50) ([hfm](https://github.com/hfm))
+- Use the same systemd drop-in file for different units [\#46](https://github.com/camptocamp/puppet-systemd/pull/46) ([countsudoku](https://github.com/countsudoku))
+
+## [1.1.0](https://github.com/camptocamp/puppet-systemd/tree/1.1.0) (2017-10-24)
+
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/1.0.0...1.1.0)
+
+**Closed issues:**
+
+- Add explicit ordering to README.md [\#24](https://github.com/camptocamp/puppet-systemd/issues/24)
+- Manage drop-in files [\#15](https://github.com/camptocamp/puppet-systemd/issues/15)
+
+**Merged pull requests:**
+
+- Add systemd-timesyncd support [\#43](https://github.com/camptocamp/puppet-systemd/pull/43) ([bastelfreak](https://github.com/bastelfreak))
+- Reuse the service\_provider fact from stdlib [\#42](https://github.com/camptocamp/puppet-systemd/pull/42) ([ekohl](https://github.com/ekohl))
+- \(doc\) Adds examples of running the service created [\#29](https://github.com/camptocamp/puppet-systemd/pull/29) ([petems](https://github.com/petems))
+- Quote hash keys in example of service limits [\#20](https://github.com/camptocamp/puppet-systemd/pull/20) ([stbenjam](https://github.com/stbenjam))
+
+## [1.0.0](https://github.com/camptocamp/puppet-systemd/tree/1.0.0) (2017-09-04)
+
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.4.0...1.0.0)
+
+**Closed issues:**
+
+- PR\#18 broke service limits capacity [\#35](https://github.com/camptocamp/puppet-systemd/issues/35)
+- stdlib functions are used, but no stdlib requirement in metadata.json [\#28](https://github.com/camptocamp/puppet-systemd/issues/28)
+- investigate update to camptocamp/systemd module  [\#21](https://github.com/camptocamp/puppet-systemd/issues/21)
+- Module should be updated to use the new Puppet 4 goodness [\#17](https://github.com/camptocamp/puppet-systemd/issues/17)
+
+**Merged pull requests:**
+
+- Add support for drop-in files [\#39](https://github.com/camptocamp/puppet-systemd/pull/39) ([countsudoku](https://github.com/countsudoku))
+- Adds control group limits to ServiceLimits [\#36](https://github.com/camptocamp/puppet-systemd/pull/36) ([trevor-vaughan](https://github.com/trevor-vaughan))
+- it's systemd not SystemD [\#33](https://github.com/camptocamp/puppet-systemd/pull/33) ([shibumi](https://github.com/shibumi))
+- General cleanup + add Puppet4 datatypes [\#32](https://github.com/camptocamp/puppet-systemd/pull/32) ([bastelfreak](https://github.com/bastelfreak))
+- add management for systemd-resolved [\#31](https://github.com/camptocamp/puppet-systemd/pull/31) ([bastelfreak](https://github.com/bastelfreak))
+- Add a network defined resource [\#30](https://github.com/camptocamp/puppet-systemd/pull/30) ([bastelfreak](https://github.com/bastelfreak))
+- Add seltype to systemd directory [\#27](https://github.com/camptocamp/puppet-systemd/pull/27) ([petems](https://github.com/petems))
+- Add MemoryLimit to limits template [\#23](https://github.com/camptocamp/puppet-systemd/pull/23) ([pkilambi](https://github.com/pkilambi))
+- Update to support Puppet 4 [\#18](https://github.com/camptocamp/puppet-systemd/pull/18) ([trevor-vaughan](https://github.com/trevor-vaughan))
+- Manage resource limits of services [\#13](https://github.com/camptocamp/puppet-systemd/pull/13) ([ruriky](https://github.com/ruriky))
+- Refactor systemd facts [\#12](https://github.com/camptocamp/puppet-systemd/pull/12) ([petems](https://github.com/petems))
+
+## [0.4.0](https://github.com/camptocamp/puppet-systemd/tree/0.4.0) (2016-08-18)
+
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.3.0...0.4.0)
+
+**Closed issues:**
+
+- No LICENSE file [\#11](https://github.com/camptocamp/puppet-systemd/issues/11)
+- Forge update  [\#7](https://github.com/camptocamp/puppet-systemd/issues/7)
+
+**Merged pull requests:**
+
+- Add target param for the unit file [\#10](https://github.com/camptocamp/puppet-systemd/pull/10) ([tampakrap](https://github.com/tampakrap))
+- only use awk, instead of grep and awk [\#9](https://github.com/camptocamp/puppet-systemd/pull/9) ([igalic](https://github.com/igalic))
+
+## [0.3.0](https://forge.puppetlabs.com/camptocamp/systemd/0.3.0) (2016-05-16)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.2.2...0.3.0)
+
+**Implemented enhancements:**
+
+- Shortcut for creating unit files / tmpfiles [\#4](https://github.com/camptocamp/puppet-systemd/pull/4) ([felixb](https://github.com/felixb))
+- Add systemd facts [\#6](https://github.com/camptocamp/puppet-systemd/pull/6) ([roidelapluie](https://github.com/roidelapluie))
+
+
+## [0.2.2](https://forge.puppetlabs.com/camptocamp/systemd/0.2.2) (2015-08-25)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.2.1...0.2.2)
+
+**Implemented enhancements:**
+
+- Add 'systemd-tmpfiles-create' [\#1](https://github.com/camptocamp/puppet-systemd/pull/1) ([roidelapluie](https://github.com/roidelapluie))
+
+
+## [0.2.1](https://forge.puppetlabs.com/camptocamp/systemd/0.2.1) (2015-08-21)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.2.0...0.2.1)
+
+- Use docker for acceptance tests
+
+## [0.1.15](https://forge.puppetlabs.com/camptocamp/systemd/0.1.15) (2015-06-26)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.14...0.1.15)
+
+- Fix strict_variables activation with rspec-puppet 2.2
+
+## [0.1.14](https://forge.puppetlabs.com/camptocamp/systemd/0.1.14) (2015-05-28)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.13...0.1.14)
+
+- Add beaker_spec_helper to Gemfile
+
+## [0.1.13](https://forge.puppetlabs.com/camptocamp/systemd/0.1.13) (2015-05-26)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.12...0.1.13)
+
+- Use random application order in nodeset
+
+## [0.1.12](https://forge.puppetlabs.com/camptocamp/systemd/0.1.12) (2015-05-26)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.11...0.1.12)
+
+- Add utopic & vivid nodesets
+
+## [0.1.11](https://forge.puppetlabs.com/camptocamp/systemd/0.1.11) (2015-05-25)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.10...0.1.11)
+
+- Don't allow failure on Puppet 4
+
+## [0.1.10](https://forge.puppetlabs.com/camptocamp/systemd/0.1.10) (2015-05-13)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.9...0.1.10)
+
+- Add puppet-lint-file_source_rights-check gem
+
+## [0.1.9](https://forge.puppetlabs.com/camptocamp/systemd/0.1.9) (2015-05-12)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.8...0.1.9)
+
+- Don't pin beaker
+
+## [0.1.8](https://forge.puppetlabs.com/camptocamp/systemd/0.1.8) (2015-04-27)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.7...0.1.8)
+
+- Add nodeset ubuntu-12.04-x86_64-openstack
+
+## [0.1.7](https://forge.puppetlabs.com/camptocamp/systemd/0.1.7) (2015-04-03)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.6...0.1.7)
+
+- Confine rspec pinning to ruby 1.8
+
+
+\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
diff --git a/3rdparty/modules/systemd/Gemfile b/3rdparty/modules/systemd/Gemfile
new file mode 100644 (file)
index 0000000..c94c457
--- /dev/null
@@ -0,0 +1,51 @@
+source ENV['GEM_SOURCE'] || "https://rubygems.org"
+
+group :development, :unit_tests do
+  gem 'rake',                                              :require => false
+  gem 'rspec',                                             :require => false
+  gem 'rspec-puppet',                                      :require => false
+  gem 'puppetlabs_spec_helper',                            :require => false
+  gem 'metadata-json-lint',                                :require => false
+  gem 'puppet-lint',                                       :require => false
+  gem 'puppet-lint-unquoted_string-check',                 :require => false
+  gem 'puppet-lint-empty_string-check',                    :require => false
+  gem 'puppet-lint-spaceship_operator_without_tag-check',  :require => false
+  gem 'puppet-lint-undef_in_function-check',               :require => false
+  gem 'puppet-lint-leading_zero-check',                    :require => false
+  gem 'puppet-lint-trailing_comma-check',                  :require => false
+  gem 'puppet-lint-file_ensure-check',                     :require => false
+  gem 'puppet-lint-version_comparison-check',              :require => false
+  gem 'puppet-lint-file_source_rights-check',              :require => false
+  gem 'puppet-lint-alias-check',                           :require => false
+  gem 'rspec-puppet-facts',                                :require => false
+  gem 'ruby-augeas',                                       :require => false
+  gem 'json_pure', '< 2.0.2',                              :require => false
+end
+
+group :system_tests do
+  gem 'beaker', '~>3.13',     :require => false
+  gem 'beaker-rspec', '> 5',  :require => false
+  gem 'beaker_spec_helper',   :require => false
+  gem 'serverspec',           :require => false
+  gem 'specinfra',            :require => false
+end
+
+if facterversion = ENV['FACTER_GEM_VERSION']
+  gem 'facter', facterversion, :require => false
+else
+  gem 'facter', :require => false
+end
+
+if puppetversion = ENV['PUPPET_GEM_VERSION']
+  gem 'puppet', puppetversion, :require => false
+else
+  gem 'puppet', :require => false
+end
+
+group :release do
+  gem 'github_changelog_generator',  :require => false, :git => 'https://github.com/github-changelog-generator/github-changelog-generator' if RUBY_VERSION >= '2.2.2'
+  gem 'puppet-blacksmith',           :require => false
+  gem 'voxpupuli-release',           :require => false, :git => 'https://github.com/voxpupuli/voxpupuli-release-gem'
+end
+
+# vim:ft=ruby
diff --git a/3rdparty/modules/systemd/HISTORY.md b/3rdparty/modules/systemd/HISTORY.md
new file mode 100644 (file)
index 0000000..9c8b61f
--- /dev/null
@@ -0,0 +1,66 @@
+## [0.3.0](https://forge.puppetlabs.com/camptocamp/systemd/0.3.0) (2016-05-16)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.2.2...0.3.0)
+
+**Implemented enhancements:**
+
+- Shortcut for creating unit files / tmpfiles [\#4](https://github.com/camptocamp/puppet-systemd/pull/4) ([felixb](https://github.com/felixb))
+- Add systemd facts [\#6](https://github.com/camptocamp/puppet-systemd/pull/6) ([roidelapluie](https://github.com/roidelapluie))
+
+
+## [0.2.2](https://forge.puppetlabs.com/camptocamp/systemd/0.2.2) (2015-08-25)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.2.1...0.2.2)
+
+**Implemented enhancements:**
+
+- Add 'systemd-tmpfiles-create' [\#1](https://github.com/camptocamp/puppet-systemd/pull/1) ([roidelapluie](https://github.com/roidelapluie))
+
+
+## [0.2.1](https://forge.puppetlabs.com/camptocamp/systemd/0.2.1) (2015-08-21)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.2.0...0.2.1)
+
+- Use docker for acceptance tests
+
+## [0.1.15](https://forge.puppetlabs.com/camptocamp/systemd/0.1.15) (2015-06-26)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.14...0.1.15)
+
+- Fix strict_variables activation with rspec-puppet 2.2
+
+## [0.1.14](https://forge.puppetlabs.com/camptocamp/systemd/0.1.14) (2015-05-28)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.13...0.1.14)
+
+- Add beaker_spec_helper to Gemfile
+
+## [0.1.13](https://forge.puppetlabs.com/camptocamp/systemd/0.1.13) (2015-05-26)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.12...0.1.13)
+
+- Use random application order in nodeset
+
+## [0.1.12](https://forge.puppetlabs.com/camptocamp/systemd/0.1.12) (2015-05-26)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.11...0.1.12)
+
+- Add utopic & vivid nodesets
+
+## [0.1.11](https://forge.puppetlabs.com/camptocamp/systemd/0.1.11) (2015-05-25)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.10...0.1.11)
+
+- Don't allow failure on Puppet 4
+
+## [0.1.10](https://forge.puppetlabs.com/camptocamp/systemd/0.1.10) (2015-05-13)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.9...0.1.10)
+
+- Add puppet-lint-file_source_rights-check gem
+
+## [0.1.9](https://forge.puppetlabs.com/camptocamp/systemd/0.1.9) (2015-05-12)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.8...0.1.9)
+
+- Don't pin beaker
+
+## [0.1.8](https://forge.puppetlabs.com/camptocamp/systemd/0.1.8) (2015-04-27)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.7...0.1.8)
+
+- Add nodeset ubuntu-12.04-x86_64-openstack
+
+## [0.1.7](https://forge.puppetlabs.com/camptocamp/systemd/0.1.7) (2015-04-03)
+[Full Changelog](https://github.com/camptocamp/puppet-systemd/compare/0.1.6...0.1.7)
+
+- Confine rspec pinning to ruby 1.8
diff --git a/3rdparty/modules/systemd/LICENSE b/3rdparty/modules/systemd/LICENSE
new file mode 100644 (file)
index 0000000..8d968b6
--- /dev/null
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!) The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/3rdparty/modules/systemd/README.md b/3rdparty/modules/systemd/README.md
new file mode 100644 (file)
index 0000000..7cd89a3
--- /dev/null
@@ -0,0 +1,209 @@
+# Systemd
+
+[![Puppet Forge](http://img.shields.io/puppetforge/v/camptocamp/systemd.svg)](https://forge.puppetlabs.com/camptocamp/systemd)
+[![Build Status](https://travis-ci.org/camptocamp/puppet-systemd.png?branch=master)](https://travis-ci.org/camptocamp/puppet-systemd)
+
+## Overview
+
+This module declares exec resources to create global sync points for reloading systemd.
+
+**Version 2 and newer of the module don't work with Hiera 3! You need to migrate your existing Hiera setup to Hiera 5**
+
+## Usage and examples
+
+There are two ways to use this module.
+
+### unit files
+
+Let this module handle file creation and systemd reloading.
+
+```puppet
+systemd::unit_file { 'foo.service':
+ source => "puppet:///modules/${module_name}/foo.service",
+}
+~> service {'foo':
+  ensure => 'running',
+}
+```
+
+Or handle file creation yourself and trigger systemd.
+
+```puppet
+include systemd::systemctl::daemon_reload
+
+file { '/usr/lib/systemd/system/foo.service':
+  ensure => file,
+  owner  => 'root',
+  group  => 'root',
+  mode   => '0644',
+  source => "puppet:///modules/${module_name}/foo.service",
+}
+~> Class['systemd::systemctl::daemon_reload']
+
+service {'foo':
+  ensure    => 'running',
+  subscribe => File['/usr/lib/systemd/system/foo.service'],
+}
+```
+
+You can also use this module to more fully manage the new unit. This example deploys the unit, reloads systemd and then enables and starts it.
+
+```puppet
+systemd::unit_file { 'foo.service':
+ source => "puppet:///modules/${module_name}/foo.service",
+ enable => true,
+ active => true,
+}
+```
+
+### drop-in files
+
+Drop-in files are used to add or alter settings of a unit without modifying the
+unit itself. As for the unit files, the module can handle the file and
+directory creation and systemd reloading:
+
+```puppet
+systemd::dropin_file { 'foo.conf':
+  unit   => 'foo.service',
+  source => "puppet:///modules/${module_name}/foo.conf",
+}
+~> service {'foo':
+  ensure    => 'running',
+}
+```
+
+Or handle file and directory creation yourself and trigger systemd:
+
+```puppet
+include systemd::systemctl::daemon_reload
+
+file { '/etc/systemd/system/foo.service.d':
+  ensure => directory,
+  owner  => 'root',
+  group  => 'root',
+}
+
+file { '/etc/systemd/system/foo.service.d/foo.conf':
+  ensure => file,
+  owner  => 'root',
+  group  => 'root',
+  mode   => '0644',
+  source => "puppet:///modules/${module_name}/foo.conf",
+}
+~> Class['systemd::systemctl::daemon_reload']
+
+service {'foo':
+  ensure    => 'running',
+  subscribe => File['/etc/systemd/system/foo.service.d/foo.conf'],
+}
+```
+
+### tmpfiles
+
+Let this module handle file creation and systemd reloading
+
+```puppet
+systemd::tmpfile { 'foo.conf':
+  source => "puppet:///modules/${module_name}/foo.conf",
+}
+```
+
+Or handle file creation yourself and trigger systemd.
+
+```puppet
+include systemd::tmpfiles
+
+file { '/etc/tmpfiles.d/foo.conf':
+  ensure => file,
+  owner  => 'root',
+  group  => 'root',
+  mode   => '0644',
+  source => "puppet:///modules/${module_name}/foo.conf",
+}
+~> Class['systemd::tmpfiles']
+```
+
+### service limits
+
+Manage soft and hard limits on various resources for executed processes.
+
+```puppet
+systemd::service_limits { 'foo.service':
+  limits => {
+    'LimitNOFILE' => 8192,
+    'LimitNPROC'  => 16384,
+  }
+}
+```
+
+Or provide the configuration file yourself. Systemd reloading and restarting of the service are handled by the module.
+
+```puppet
+systemd::service_limits { 'foo.service':
+  source => "puppet:///modules/${module_name}/foo.conf",
+}
+```
+
+### network
+
+systemd-networkd is able to manage your network configuration. We provide a
+defined resource which can write the interface configurations. systemd-networkd
+needs to be restarted to apply the configs. The defined resource can do this
+for you:
+
+```puppet
+systemd::network{'eth0.network':
+  source          => "puppet:///modules/${module_name}/eth0.network",
+  restart_service => true,
+}
+```
+
+### Services
+
+Systemd provides multiple services. Currently you can manage `systemd-resolved`,
+`systemd-timesyncd` and `systemd-networkd` via the main class:
+
+```puppet
+class{'systemd':
+  manage_resolved  => true,
+  manage_networkd  => true,
+  manage_timesyncd => true,
+}
+```
+
+$manage_networkd is required if you want to reload it for new
+`systemd::network` resources. Setting $manage_resolved will also manage your
+`/etc/resolv.conf`.
+
+When configuring `systemd::resolved` you could set `dns_stub_resolver` to false (default) to use a *standard* `/etc/resolved.conf`, or you could set it to `true` to use the local resolver provided by `systemd-resolved`.
+
+It is possible to configure the default ntp servers in /etc/systemd/timesyncd.conf:
+
+```puppet
+class{'systemd':
+  manage_timesyncd    => true,
+  ntp_server          => ['0.pool.ntp.org', '1.pool.ntp.org'],
+  fallback_ntp_server => ['2.pool.ntp.org', '3.pool.ntp.org'],
+}
+```
+
+This requires puppetlabs-inifile, which is only a soft dependency in this module (you need to explicitly install it). Both parameters accept a string or an array.
+
+### Resource Accounting
+
+Systemd has support for different accounting option. It can track
+CPU/Memory/Network stats per process. This is explained in depth at [systemd-system.conf](https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html).
+This defaults to off (default on most operating systems). You can enable this
+with the `$manage_accounting` parameter. The module provides a default set of
+working accounting options per operating system, but you can still modify them
+with `$accounting`:
+
+```puppet
+class{'systemd':
+  manage_accounting => true,
+  accounting        => {
+    'DefaultCPUAccounting'    => 'yes',
+    'DefaultMemoryAccounting' => 'no',
+  }
+}
+```
diff --git a/3rdparty/modules/systemd/Rakefile b/3rdparty/modules/systemd/Rakefile
new file mode 100644 (file)
index 0000000..646ad6f
--- /dev/null
@@ -0,0 +1,30 @@
+require 'puppetlabs_spec_helper/rake_tasks'
+require 'puppet-lint/tasks/puppet-lint'
+
+Rake::Task[:lint].clear
+PuppetLint::RakeTask.new :lint do |config|
+  config.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp", "vendor/**/*.pp"]
+  config.disable_checks = ['140chars']
+  config.fail_on_warnings = true
+end
+
+PuppetSyntax.exclude_paths = ["spec/fixtures/**/*.pp", "vendor/**/*"]
+
+# Publishing tasks
+unless RUBY_VERSION =~ /^1\./
+  require 'puppet_blacksmith'
+  require 'puppet_blacksmith/rake_tasks'
+end
+
+begin
+  require 'github_changelog_generator/task'
+  GitHubChangelogGenerator::RakeTask.new :changelog do |config|
+    version = (Blacksmith::Modulefile.new).version
+    config.future_release = "v#{version}" if version =~ /^\d+\.\d+.\d+$/
+    config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module."
+    config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog}
+    config.user = 'camptocamp'
+    config.project = 'puppet-systemd'
+  end
+rescue LoadError
+end
diff --git a/3rdparty/modules/systemd/checksums.json b/3rdparty/modules/systemd/checksums.json
new file mode 100644 (file)
index 0000000..717edf5
--- /dev/null
@@ -0,0 +1,87 @@
+{
+  "CHANGELOG.md": "1b6c3b3fcf40b2101eef09115d45e98f",
+  "Gemfile": "63d22a26acea65c0d337e1677b06de7b",
+  "HISTORY.md": "058e58d38f4298469cc4b9650e89e023",
+  "LICENSE": "0e5ccf641e613489e66aa98271dbe798",
+  "README.md": "256953c827e54aa7284bcfba675d4f76",
+  "Rakefile": "b638dcdf3d4b865f9944e70050696169",
+  "data/Archlinux.yaml": "132d2a05bfbbeeb2e1768c5d5e5465a4",
+  "data/CentOS-7.yaml": "4cd858563b8d1f09bd41b63ee3aaca46",
+  "data/Debian-10.yaml": "132d2a05bfbbeeb2e1768c5d5e5465a4",
+  "data/Debian-8.yaml": "cda4a0c67b5c02694714a275a1558862",
+  "data/Debian-9.yaml": "cda4a0c67b5c02694714a275a1558862",
+  "data/RedHat-7.yaml": "4cd858563b8d1f09bd41b63ee3aaca46",
+  "data/Ubuntu-16.04.yaml": "4cd858563b8d1f09bd41b63ee3aaca46",
+  "data/Ubuntu-18.04.yaml": "132d2a05bfbbeeb2e1768c5d5e5465a4",
+  "data/common.yaml": "e7abdb8d7975b5bba8149f5219d3581d",
+  "hiera.yaml": "95af0fd82f551cb12fe923d67ee0fca7",
+  "lib/facter/systemd.rb": "097bfc197ee80791b7fc5ffbedc68fad",
+  "manifests/dropin_file.pp": "0c9331bb7eb38710fdff0adbc074270d",
+  "manifests/init.pp": "0661761117910d6b4c2f90487c424353",
+  "manifests/network.pp": "71e5a66c79c86ce5d6105946dccc82f9",
+  "manifests/networkd.pp": "2dd4681c21305be938d80a1cf7542d1b",
+  "manifests/resolved.pp": "7985eb5806782d5ec0d54c22c7221a2c",
+  "manifests/service_limits.pp": "1e9f75395c8db15af5c42add5986a113",
+  "manifests/system.pp": "87fd2802ee517be1bbc29a1ab7cab717",
+  "manifests/systemctl/daemon_reload.pp": "e7168a9f55ea3d8209cf3097631aae1e",
+  "manifests/timesyncd.pp": "b495e114d5d44edff2ea41ea180db0b5",
+  "manifests/tmpfile.pp": "50f7cad2c6cb6f5b2bc16004f4e0551b",
+  "manifests/tmpfiles.pp": "c19150a103c3b883434437cc3f6618d7",
+  "manifests/unit_file.pp": "222f6960266abdddeb5ef96610831627",
+  "metadata.json": "55ec7b886dce87aea3b5b8ad8c022f90",
+  "spec/acceptance/nodesets/centos-5-x86_64-docker.yml": "916223adf56a5eae28fc4dbc8d3d5d09",
+  "spec/acceptance/nodesets/centos-5.yml": "329c2ecf383375a296316540b17dead8",
+  "spec/acceptance/nodesets/centos-6-x86_64-docker.yml": "79ee475e5497307c173a1aba59e1a206",
+  "spec/acceptance/nodesets/centos-6-x86_64-openstack.yml": "5509e2ebb2bee49bec7905141d91535b",
+  "spec/acceptance/nodesets/centos-6-x86_64-vagrant.yml": "f973bde1c355b0af3ba5c08e02311580",
+  "spec/acceptance/nodesets/centos-6.yml": "f0e3e5327185edaab414af3371e86c98",
+  "spec/acceptance/nodesets/centos-7-x86_64-docker.yml": "1d4713c4b0788eaaed0a5767ba0268d4",
+  "spec/acceptance/nodesets/centos-7-x86_64-openstack.yml": "554374fca1889b858d90a81226578b82",
+  "spec/acceptance/nodesets/centos-7-x86_64-vagrant.yml": "82b8ada243c70d9a2d8c9a3a4385416c",
+  "spec/acceptance/nodesets/centos-7.yml": "64e996635943b77309efcf2a0c6d3c02",
+  "spec/acceptance/nodesets/debian-6-x86_64-docker.yml": "d6cb2154bf149715439b5bc64ef627bc",
+  "spec/acceptance/nodesets/debian-6-x86_64-openstack.yml": "83b0b0ecb7212b45179546ac6b6b83b7",
+  "spec/acceptance/nodesets/debian-6-x86_64-vagrant.yml": "d6356946a61858342d0be2b6b670eb55",
+  "spec/acceptance/nodesets/debian-6.yml": "4078ec869c78a6bb51a0bcfa350cc674",
+  "spec/acceptance/nodesets/debian-7-x86_64-docker.yml": "2d68216014870420714f306fb3aaa601",
+  "spec/acceptance/nodesets/debian-7-x86_64-openstack.yml": "47f0b02b2d6ea2134574f045e9a315af",
+  "spec/acceptance/nodesets/debian-7-x86_64-vagrant.yml": "2dacc8c1cce7bc4fa8e3b13267df9ecd",
+  "spec/acceptance/nodesets/debian-7.yml": "7ff246ef2e9a9f2b957eacc1d2274898",
+  "spec/acceptance/nodesets/debian-8-x86_64-docker.yml": "d7fb01335b3273723b8b418faef51538",
+  "spec/acceptance/nodesets/debian-8-x86_64-openstack.yml": "075a6d6389a6b6cbe3b11f7a6e160059",
+  "spec/acceptance/nodesets/debian-8-x86_64-vagrant.yml": "9c33b450b4aa17476acc86d839d79dd2",
+  "spec/acceptance/nodesets/debian-8.yml": "7cc01dfb4cf846bba1fff66a6cceab66",
+  "spec/acceptance/nodesets/ubuntu-10.04-x86_64-docker.yml": "11480a9d30e9c4daee140dd420176723",
+  "spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml": "46cc4eceef33f04818ce74855630e05b",
+  "spec/acceptance/nodesets/ubuntu-12.04-x86_64-openstack.yml": "d1619ba4430c1a61cd9407533ac91de2",
+  "spec/acceptance/nodesets/ubuntu-12.04.yml": "5e21f60e951be4936f6bca1031553808",
+  "spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml": "5390c092066afa65780816b162dfb4aa",
+  "spec/acceptance/nodesets/ubuntu-14.04-x86_64-openstack.yml": "535b98aa7c5d0df88817675af991d2b6",
+  "spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml": "8622e2d9cae7a0923b8510561f1daf5a",
+  "spec/acceptance/nodesets/ubuntu-14.04.yml": "7614de568fe061eed346e987e0f80bbd",
+  "spec/acceptance/nodesets/ubuntu-14.10-x86_64-docker.yml": "df4b8f4bd33f38e0053a806d739db819",
+  "spec/acceptance/nodesets/ubuntu-14.10-x86_64-openstack.yml": "cdfa94d70efdcbb4ae0e9caea474c4b1",
+  "spec/acceptance/nodesets/ubuntu-14.10.yml": "b3671a973bdc6386af78925d6471e951",
+  "spec/acceptance/nodesets/ubuntu-15.04-x86_64-docker.yml": "cefdea8d6ead29b5f492adb971019a81",
+  "spec/acceptance/nodesets/ubuntu-15.04-x86_64-openstack.yml": "60a9ce9983e881df4b83c2720dc014ed",
+  "spec/acceptance/nodesets/ubuntu-15.04.yml": "cea5658fe126394b01e94286e7854fd1",
+  "spec/acceptance/nodesets/ubuntu-15.10.yml": "6bc135e884164d541704dfb00ba09a3c",
+  "spec/acceptance/nodesets/ubuntu-16.04.yml": "17dc63e8b2a15a5285c6aca6d91b4aec",
+  "spec/classes/init_spec.rb": "67731efaaf6790f0696988a62f3e85a3",
+  "spec/classes/systemctl/daemon_reload_spec.rb": "cb9a0300c2318103d9bbf0e4b4f65aa1",
+  "spec/classes/tmpfiles_spec.rb": "0e5b6c4057f66fe169217c08f3814c38",
+  "spec/default_module_facts.yaml": "d0967d84ae8037c7ec7f1d52f14de7df",
+  "spec/defines/dropin_file_spec.rb": "d7fa0e4a9bfaba40965ed81880df1098",
+  "spec/defines/network_spec.rb": "b7a0ec46c10eb5b68b05ecda934f2422",
+  "spec/defines/service_limits_spec.rb": "758243b295ca9a92021576569c7f3dd3",
+  "spec/defines/tmpfile_spec.rb": "d1050916e84502cb022764435004d008",
+  "spec/defines/unit_file_spec.rb": "9ad980913d445255f846d2fae749f9f9",
+  "spec/spec.opts": "a600ded995d948e393fbe2320ba8e51c",
+  "spec/spec_helper.rb": "1524f103a4d70c412ed1794e50e614a5",
+  "spec/unit/facter/systemd_spec.rb": "60ddfbee71614dc0e822a44199baa283",
+  "spec/unit/facter/systemd_version_spec.rb": "14f915e98f11a610c8513c39dc0ddc55",
+  "templates/limits.erb": "8e18a431f012d940ac22e0a98da8f115",
+  "types/dropin.pp": "14af455c863528e9b1d546a757a756b2",
+  "types/servicelimits.pp": "c6750c64ee955b2cabc852473d3c67f2",
+  "types/unit.pp": "ab1246b0129a8f1728347585bafb149c"
+}
\ No newline at end of file
diff --git a/3rdparty/modules/systemd/data/Archlinux.yaml b/3rdparty/modules/systemd/data/Archlinux.yaml
new file mode 100644 (file)
index 0000000..176f0ed
--- /dev/null
@@ -0,0 +1,8 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultIOAccounting: 'yes'
+  DefaultIPAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
+  DefaultTasksAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/CentOS-7.yaml b/3rdparty/modules/systemd/data/CentOS-7.yaml
new file mode 100644 (file)
index 0000000..888cb17
--- /dev/null
@@ -0,0 +1,6 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
+  DefaultTasksAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/Debian-10.yaml b/3rdparty/modules/systemd/data/Debian-10.yaml
new file mode 100644 (file)
index 0000000..176f0ed
--- /dev/null
@@ -0,0 +1,8 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultIOAccounting: 'yes'
+  DefaultIPAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
+  DefaultTasksAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/Debian-8.yaml b/3rdparty/modules/systemd/data/Debian-8.yaml
new file mode 100644 (file)
index 0000000..a3be163
--- /dev/null
@@ -0,0 +1,5 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/Debian-9.yaml b/3rdparty/modules/systemd/data/Debian-9.yaml
new file mode 100644 (file)
index 0000000..a3be163
--- /dev/null
@@ -0,0 +1,5 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/RedHat-7.yaml b/3rdparty/modules/systemd/data/RedHat-7.yaml
new file mode 100644 (file)
index 0000000..888cb17
--- /dev/null
@@ -0,0 +1,6 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
+  DefaultTasksAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/Ubuntu-16.04.yaml b/3rdparty/modules/systemd/data/Ubuntu-16.04.yaml
new file mode 100644 (file)
index 0000000..888cb17
--- /dev/null
@@ -0,0 +1,6 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
+  DefaultTasksAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/Ubuntu-18.04.yaml b/3rdparty/modules/systemd/data/Ubuntu-18.04.yaml
new file mode 100644 (file)
index 0000000..176f0ed
--- /dev/null
@@ -0,0 +1,8 @@
+---
+systemd::accounting:
+  DefaultCPUAccounting: 'yes'
+  DefaultIOAccounting: 'yes'
+  DefaultIPAccounting: 'yes'
+  DefaultBlockIOAccounting: 'yes'
+  DefaultMemoryAccounting: 'yes'
+  DefaultTasksAccounting: 'yes'
diff --git a/3rdparty/modules/systemd/data/common.yaml b/3rdparty/modules/systemd/data/common.yaml
new file mode 100644 (file)
index 0000000..13950df
--- /dev/null
@@ -0,0 +1,21 @@
+---
+systemd::service_limits: {}
+systemd::manage_resolved: false
+systemd::resolved_ensure: 'running'
+systemd::dns: ~
+systemd::fallback_dns: ~
+systemd::domains: ~
+systemd::llmnr: ~
+systemd::multicast_dns: ~
+systemd::dnssec: ~
+systemd::cache: false
+systemd::dns_stub_listener: ~
+systemd::use_stub_resolver: false
+systemd::manage_networkd: false
+systemd::networkd_ensure: 'running'
+systemd::manage_timesyncd: false
+systemd::timesyncd_ensure: 'running'
+systemd::ntp_server: ~
+systemd::fallback_ntp_server: ~
+systemd::manage_accounting: false
+systemd::accounting: {}
diff --git a/3rdparty/modules/systemd/lib/facter/systemd.rb b/3rdparty/modules/systemd/lib/facter/systemd.rb
new file mode 100644 (file)
index 0000000..4061c59
--- /dev/null
@@ -0,0 +1,61 @@
+# Fact: systemd
+#
+# Purpose:
+#   Determine whether systemd is the init system on the node
+#
+# Resolution:
+#   Check if the service_provider fact is systemd
+#
+# Caveats:
+#   If you override the service provider then it will return false, even if the
+#   underlying system still is systemd.
+#
+
+# Fact: systemd_version
+#
+# Purpose:
+#   Determine the version of systemd installed
+#
+# Resolution:
+#   Check the output of systemctl --version
+#
+# Caveats:
+#
+
+# Fact: systemd_internal_services
+#
+# Purpose:
+#   List all systemd internal real services + their state
+#
+# Resolution:
+#   Check the output of systemctl --list-unit-files systemd-* and parse it into
+#   a hash with the status
+#
+# Caveats:
+#
+Facter.add(:systemd) do
+  confine :kernel => :linux
+  setcode do
+    Facter.value(:service_provider) == 'systemd'
+  end
+end
+
+Facter.add(:systemd_version) do
+  confine :systemd => true
+  setcode do
+    Facter::Util::Resolution.exec("systemctl --version | awk '/systemd/{ print $2 }'")
+  end
+end
+
+Facter.add(:systemd_internal_services) do
+  confine :systemd => true
+  setcode do
+    command_output = Facter::Util::Resolution.exec(
+      'systemctl list-unit-files --no-legend --no-pager "systemd-*" -t service --state=enabled,disabled,enabled-runtime,indirect'
+    )
+    lines = command_output.lines.lazy.map { |line| line.split(/\s+/) }
+    lines.each_with_object({}) do |(service, status, *), result|
+      result[service] = status
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/manifests/dropin_file.pp b/3rdparty/modules/systemd/manifests/dropin_file.pp
new file mode 100644 (file)
index 0000000..55a8542
--- /dev/null
@@ -0,0 +1,68 @@
+# Creates a drop-in file for a systemd unit
+#
+# @api public
+#
+# @see systemd.unit(5)
+#
+# @attr name [Pattern['^.+\.conf$']]
+#   The target unit file to create
+#
+#   * Must not contain ``/``
+#
+# @attr path
+#   The main systemd configuration path
+#
+# @attr content
+#   The full content of the unit file
+#
+#   * Mutually exclusive with ``$source``
+#
+# @attr source
+#   The ``File`` resource compatible ``source``
+#
+#   * Mutually exclusive with ``$content``
+#
+# @attr target
+#   If set, will force the file to be a symlink to the given target
+#
+#   * Mutually exclusive with both ``$source`` and ``$content``
+#
+define systemd::dropin_file(
+  Systemd::Unit                     $unit,
+  Systemd::Dropin                   $filename = $name,
+  Enum['present', 'absent', 'file'] $ensure   = 'present',
+  Stdlib::Absolutepath              $path     = '/etc/systemd/system',
+  Optional[String]                  $content  = undef,
+  Optional[String]                  $source   = undef,
+  Optional[Stdlib::Absolutepath]    $target   = undef,
+) {
+  include systemd
+
+  if $target {
+    $_ensure = 'link'
+  } else {
+    $_ensure = $ensure ? {
+      'present' => 'file',
+      default   => $ensure,
+    }
+  }
+
+  if $ensure != 'absent' {
+    ensure_resource('file', "${path}/${unit}.d", {
+      ensure => directory,
+      owner  => 'root',
+      group  => 'root',
+    })
+  }
+
+  file { "${path}/${unit}.d/${filename}":
+    ensure  => $_ensure,
+    content => $content,
+    source  => $source,
+    target  => $target,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0444',
+    notify  => Class['systemd::systemctl::daemon_reload'],
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/init.pp b/3rdparty/modules/systemd/manifests/init.pp
new file mode 100644 (file)
index 0000000..6ee5588
--- /dev/null
@@ -0,0 +1,110 @@
+# This module allows triggering systemd commands once for all modules
+#
+# @api public
+#
+# @param service_limits
+#   May be passed a resource hash suitable for passing directly into the
+#   ``create_resources()`` function as called on ``systemd::service_limits``
+#
+# @param manage_resolved
+#   Manage the systemd resolver
+#
+# @param resolved_ensure
+#   The state that the ``resolved`` service should be in
+#
+# @param dns
+#   A space-separated list of IPv4 and IPv6 addresses to use as system DNS servers.
+#   DNS requests are sent to one of the listed DNS servers in parallel to suitable
+#   per-link DNS servers acquired from systemd-networkd.service(8) or set at runtime
+#   by external applications. requires puppetlabs-inifile
+#
+# @param fallback_dns
+#   A space-separated list of IPv4 and IPv6 addresses to use as the fallback DNS
+#   servers. Any per-link DNS servers obtained from systemd-networkd take
+#   precedence over this setting. requires puppetlabs-inifile
+#
+# @param domains
+#   A space-separated list of domains host names or IP addresses to be used
+#   systemd-resolved take precedence over this setting.
+#
+# @param llmnr
+#   Takes a boolean argument or "resolve".
+#
+# @param multicast_dns
+#   Takes a boolean argument or "resolve".
+#
+# @param dnssec
+#   Takes a boolean argument or "allow-downgrade".
+#
+# @param cache
+#   Takes a boolean argument.
+#
+# @param dns_stub_listener
+#   Takes a boolean argument or one of "udp" and "tcp".
+#
+# @param use_stub_resolver
+#   Takes a boolean argument. When "false" (default) it uses /var/run/systemd/resolve/resolv.conf
+#   as /etc/resolv.conf. When "true", it uses /var/run/systemd/resolve/stub-resolv.conf
+# @param manage_networkd
+#   Manage the systemd network daemon
+#
+# @param networkd_ensure
+#   The state that the ``networkd`` service should be in
+#
+# @param manage_timesyncd
+#   Manage the systemd tiemsyncd daemon
+#
+# @param timesyncd_ensure
+#   The state that the ``timesyncd`` service should be in
+#
+# @param ntp_server
+#   comma separated list of ntp servers, will be combined with interface specific
+#   addresses from systemd-networkd. requires puppetlabs-inifile
+#
+# @param fallback_ntp_server
+#   A space-separated list of NTP server host names or IP addresses to be used
+#   as the fallback NTP servers. Any per-interface NTP servers obtained from
+#   systemd-networkd take precedence over this setting. requires puppetlabs-inifile
+class systemd (
+  Hash[String,Hash[String, Any]]                     $service_limits,
+  Boolean                                            $manage_resolved,
+  Enum['stopped','running']                          $resolved_ensure,
+  Optional[Variant[Array[String],String]]            $dns,
+  Optional[Variant[Array[String],String]]            $fallback_dns,
+  Optional[Variant[Array[String],String]]            $domains,
+  Optional[Variant[Boolean,Enum['resolve']]]         $llmnr,
+  Optional[Variant[Boolean,Enum['resolve']]]         $multicast_dns,
+  Optional[Variant[Boolean,Enum['allow-downgrade']]] $dnssec,
+  Boolean                                            $cache,
+  Optional[Variant[Boolean,Enum['udp','tcp']]]       $dns_stub_listener,
+  Boolean                                            $use_stub_resolver,
+  Boolean                                            $manage_networkd,
+  Enum['stopped','running']                          $networkd_ensure,
+  Boolean                                            $manage_timesyncd,
+  Enum['stopped','running']                          $timesyncd_ensure,
+  Optional[Variant[Array,String]]                    $ntp_server,
+  Optional[Variant[Array,String]]                    $fallback_ntp_server,
+  Boolean                                            $manage_accounting,
+  Hash[String,String]                                $accounting,
+){
+
+  contain systemd::systemctl::daemon_reload
+
+  create_resources('systemd::service_limits', $service_limits)
+
+  if $manage_resolved and $facts['systemd_internal_services'] and $facts['systemd_internal_services']['systemd-resolved.service'] {
+    contain systemd::resolved
+  }
+
+  if $manage_networkd and $facts['systemd_internal_services'] and $facts['systemd_internal_services']['systemd-networkd.service'] {
+    contain systemd::networkd
+  }
+
+  if $manage_timesyncd and $facts['systemd_internal_services'] and $facts['systemd_internal_services']['systemd-timesyncd.service'] {
+    contain systemd::timesyncd
+  }
+
+  if $manage_accounting {
+    contain systemd::system
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/network.pp b/3rdparty/modules/systemd/manifests/network.pp
new file mode 100644 (file)
index 0000000..5a49005
--- /dev/null
@@ -0,0 +1,30 @@
+# -- Define: systemd::network
+# Creates network config for systemd-networkd
+define systemd::network (
+  Enum['file', 'absent'] $ensure         = file,
+  Stdlib::Absolutepath $path             = '/etc/systemd/network',
+  Optional[String] $content              = undef,
+  Optional[String] $source               = undef,
+  Optional[Stdlib::Absolutepath] $target = undef,
+  Boolean $restart_service               = true,
+){
+
+  include systemd
+
+  if $restart_service and $systemd::manage_networkd {
+    $notify = Service['systemd-networkd']
+  } else {
+    $notify = undef
+  }
+
+  file { "${path}/${name}":
+    ensure  => $ensure,
+    content => $content,
+    source  => $source,
+    target  => $target,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0444',
+    notify  => $notify,
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/networkd.pp b/3rdparty/modules/systemd/manifests/networkd.pp
new file mode 100644 (file)
index 0000000..37d56ee
--- /dev/null
@@ -0,0 +1,24 @@
+# **NOTE: THIS IS A [PRIVATE](https://github.com/puppetlabs/puppetlabs-stdlib#assert_private) CLASS**
+#
+# This class provides an abstract way to trigger systemd-networkd
+#
+# @param ensure
+#   The state that the ``networkd`` service should be in
+#
+class systemd::networkd (
+  Enum['stopped','running'] $ensure = $systemd::networkd_ensure,
+){
+
+  assert_private()
+
+  $_enable_networkd = $ensure ? {
+    'stopped' => false,
+    'running' => true,
+    default   => $ensure,
+  }
+
+  service{ 'systemd-networkd':
+    ensure => $ensure,
+    enable => $_enable_networkd,
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/resolved.pp b/3rdparty/modules/systemd/manifests/resolved.pp
new file mode 100644 (file)
index 0000000..f34772d
--- /dev/null
@@ -0,0 +1,212 @@
+# **NOTE: THIS IS A [PRIVATE](https://github.com/puppetlabs/puppetlabs-stdlib#assert_private) CLASS**
+#
+# This class provides an abstract way to trigger resolved.
+# Each parameters correspond to resolved.conf(5):
+# https://www.freedesktop.org/software/systemd/man/resolved.conf.html
+#
+# @param ensure
+#   The state that the ``resolved`` service should be in
+#
+# @param dns
+#   A space-separated list of IPv4 and IPv6 addresses to use as system DNS servers.
+#   DNS requests are sent to one of the listed DNS servers in parallel to suitable
+#   per-link DNS servers acquired from systemd-networkd.service(8) or set at runtime
+#   by external applications. requires puppetlabs-inifile
+#
+# @param fallback_dns
+#   A space-separated list of IPv4 and IPv6 addresses to use as the fallback DNS
+#   servers. Any per-link DNS servers obtained from systemd-networkd take
+#   precedence over this setting. requires puppetlabs-inifile
+#
+# @param domains
+#   A space-separated list of domains host names or IP addresses to be used
+#   systemd-resolved take precedence over this setting.
+#
+# @param llmnr
+#   Takes a boolean argument or "resolve".
+#
+# @param multicast_dns
+#   Takes a boolean argument or "resolve".
+#
+# @param dnssec
+#   Takes a boolean argument or "allow-downgrade".
+#
+# @param cache
+#   Takes a boolean argument.
+#
+# @param dns_stub_listener
+#   Takes a boolean argument or one of "udp" and "tcp".
+#
+# @param use_stub_resolver
+#   Takes a boolean argument. When "false" (default) it uses /var/run/systemd/resolve/resolv.conf
+#   as /etc/resolv.conf. When "true", it uses /var/run/systemd/resolve/stub-resolv.conf
+#
+class systemd::resolved (
+  Enum['stopped','running'] $ensure                                = $systemd::resolved_ensure,
+  Optional[Variant[Array[String],String]] $dns                     = $systemd::dns,
+  Optional[Variant[Array[String],String]] $fallback_dns            = $systemd::fallback_dns,
+  Optional[Variant[Array[String],String]] $domains                 = $systemd::domains,
+  Optional[Variant[Boolean,Enum['resolve']]] $llmnr                = $systemd::llmnr,
+  Optional[Variant[Boolean,Enum['resolve']]] $multicast_dns        = $systemd::multicast_dns,
+  Optional[Variant[Boolean,Enum['allow-downgrade']]] $dnssec       = $systemd::dnssec,
+  Boolean $cache                                                   = $systemd::cache,
+  Optional[Variant[Boolean,Enum['udp', 'tcp']]] $dns_stub_listener = $systemd::dns_stub_listener,
+  Boolean $use_stub_resolver                                       = $systemd::use_stub_resolver,
+){
+
+  assert_private()
+
+  $_enable_resolved = $ensure ? {
+    'stopped' => false,
+    'running' => true,
+    default   => $ensure,
+  }
+
+  service { 'systemd-resolved':
+    ensure => $ensure,
+    enable => $_enable_resolved,
+  }
+
+  $_resolv_conf_target = $use_stub_resolver ? {
+    true    => '/run/systemd/resolve/stub-resolv.conf',
+    default => '/run/systemd/resolve/resolv.conf',
+  }
+  file { '/etc/resolv.conf':
+    ensure  => 'symlink',
+    target  => $_resolv_conf_target,
+    require => Service['systemd-resolved'],
+  }
+
+  if $dns {
+    if $dns =~ String {
+      $_dns = $dns
+    } else {
+      $_dns = join($dns, ' ')
+    }
+    ini_setting{ 'dns':
+      ensure  => 'present',
+      value   => $_dns,
+      setting => 'DNS',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  if $fallback_dns {
+    if $fallback_dns =~ String {
+      $_fallback_dns = $fallback_dns
+    } else {
+      $_fallback_dns = join($fallback_dns, ' ')
+    }
+    ini_setting{ 'fallback_dns':
+      ensure  => 'present',
+      value   => $_fallback_dns,
+      setting => 'FallbackDNS',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  if $domains {
+    if $domains =~ String {
+      $_domains = $domains
+    } else {
+      $_domains = join($domains, ' ')
+    }
+    ini_setting{ 'domains':
+      ensure  => 'present',
+      value   => $_domains,
+      setting => 'Domains',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  $_llmnr = $llmnr ? {
+    true    => 'yes',
+    false   => 'no',
+    default => $llmnr,
+  }
+
+  if $_llmnr {
+    ini_setting{ 'llmnr':
+      ensure  => 'present',
+      value   => $_llmnr,
+      setting => 'LLMNR',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  $_multicast_dns = $multicast_dns ? {
+    true    => 'yes',
+    false   => 'no',
+    default => $multicast_dns,
+  }
+
+  if $_multicast_dns {
+    ini_setting{ 'multicast_dns':
+      ensure  => 'present',
+      value   => $_multicast_dns,
+      setting => 'MulticastDNS',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  $_dnssec = $dnssec ? {
+    true    => 'yes',
+    false   => 'no',
+    default => $dnssec,
+  }
+
+  if $_dnssec {
+    ini_setting{ 'dnssec':
+      ensure  => 'present',
+      value   => $_dnssec,
+      setting => 'DNSSEC',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  $_cache = $cache ? {
+    true    => 'yes',
+    false   => 'no',
+  }
+
+  if $cache {
+    ini_setting{ 'cache':
+      ensure  => 'present',
+      value   => $_cache,
+      setting => 'Cache',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+  $_dns_stub_listener = $dns_stub_listener ? {
+    true    => 'yes',
+    false   => 'no',
+    default => $dns_stub_listener,
+  }
+
+  if $_dns_stub_listener {
+    ini_setting{ 'dns_stub_listener':
+      ensure  => 'present',
+      value   => $_dns_stub_listener,
+      setting => 'DNSStubListener',
+      section => 'Resolve',
+      path    => '/etc/systemd/resolved.conf',
+      notify  => Service['systemd-resolved'],
+    }
+  }
+
+}
diff --git a/3rdparty/modules/systemd/manifests/service_limits.pp b/3rdparty/modules/systemd/manifests/service_limits.pp
new file mode 100644 (file)
index 0000000..bbeb1cb
--- /dev/null
@@ -0,0 +1,77 @@
+# Adds a set of custom limits to the service
+#
+# @api public
+#
+# @see systemd.exec(5)
+#
+# @attr name [Pattern['^.+\.(service|socket|mount|swap)$']]
+#   The name of the service that you will be modifying
+#
+# @param $ensure
+#   Whether to drop a file or remove it
+#
+# @param path
+#   The path to the main systemd settings directory
+#
+# @param limits
+#   A Hash of service limits matching the settings in ``systemd.exec(5)``
+#
+#   * Mutually exclusive with ``$source``
+#
+# @param source
+#   A ``File`` resource compatible ``source``
+#
+#  * Mutually exclusive with ``$limits``
+#
+# @param restart_service
+#   Restart the managed service after setting the limits
+#
+define systemd::service_limits(
+  Enum['present', 'absent', 'file'] $ensure          = 'present',
+  Stdlib::Absolutepath              $path            = '/etc/systemd/system',
+  Optional[Systemd::ServiceLimits]  $limits          = undef,
+  Optional[String]                  $source          = undef,
+  Boolean                           $restart_service = true
+) {
+
+  include systemd
+
+  if $name !~ Pattern['^.+\.(service|socket|mount|swap)$'] {
+    fail('$name must match Pattern["^.+\.(service|socket|mount|swap)$"]')
+  }
+
+  if $limits and !empty($limits) {
+    $_content = template("${module_name}/limits.erb")
+  }
+  else {
+    $_content = undef
+  }
+
+  if $ensure != 'absent' {
+    if ($limits and !empty($limits)) and $source {
+      fail('You may not supply both limits and source parameters to systemd::service_limits')
+    }
+    elsif ($limits == undef or empty($limits)) and ($source == undef) {
+      fail('You must supply either the limits or source parameter to systemd::service_limits')
+    }
+  }
+
+  systemd::dropin_file { "${name}-90-limits.conf":
+    ensure   => $ensure,
+    unit     => $name,
+    filename => '90-limits.conf',
+    path     => $path,
+    content  => $_content,
+    source   => $source,
+  }
+
+  if $restart_service {
+    exec { "restart ${name} because limits":
+      command     => "systemctl restart ${name}",
+      path        => $::path,
+      refreshonly => true,
+      subscribe   => File["${path}/${name}.d/90-limits.conf"],
+      require     => Class['systemd::systemctl::daemon_reload'],
+    }
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/system.pp b/3rdparty/modules/systemd/manifests/system.pp
new file mode 100644 (file)
index 0000000..82b4a9e
--- /dev/null
@@ -0,0 +1,19 @@
+# **NOTE: THIS IS A [PRIVATE](https://github.com/puppetlabs/puppetlabs-stdlib#assert_private) CLASS**
+#
+# This class provides a solution to enable accounting
+#
+class systemd::system {
+
+  assert_private()
+
+  $systemd::accounting.each |$option, $value| {
+    ini_setting{$option:
+      ensure  => 'present',
+      path    => '/etc/systemd/system.conf',
+      section => 'Manager',
+      setting => $option,
+      value   => $value,
+      notify  => Class['systemd::systemctl::daemon_reload'],
+    }
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/systemctl/daemon_reload.pp b/3rdparty/modules/systemd/manifests/systemctl/daemon_reload.pp
new file mode 100644 (file)
index 0000000..61b9f52
--- /dev/null
@@ -0,0 +1,10 @@
+# Reload the systemctl daemon
+#
+# @api public
+class systemd::systemctl::daemon_reload {
+  exec { 'systemctl-daemon-reload':
+    command     => 'systemctl daemon-reload',
+    refreshonly => true,
+    path        => $facts['path'],
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/timesyncd.pp b/3rdparty/modules/systemd/manifests/timesyncd.pp
new file mode 100644 (file)
index 0000000..16d5f43
--- /dev/null
@@ -0,0 +1,66 @@
+# **NOTE: THIS IS A [PRIVATE](https://github.com/puppetlabs/puppetlabs-stdlib#assert_private) CLASS**
+#
+# This class provides an abstract way to trigger systemd-timesyncd
+#
+# @param ensure
+#   The state that the ``networkd`` service should be in
+#
+# @param $ntp_server
+#   A space-separated list of NTP servers, will be combined with interface specific
+#   addresses from systemd-networkd. requires puppetlabs-inifile
+#
+# @param fallback_ntp_server
+#   A space-separated list of NTP server host names or IP addresses to be used
+#   as the fallback NTP servers. Any per-interface NTP servers obtained from
+#   systemd-networkd take precedence over this setting. requires puppetlabs-inifile
+class systemd::timesyncd (
+  Enum['stopped','running'] $ensure                    = $systemd::timesyncd_ensure,
+  Optional[Variant[Array,String]] $ntp_server          = $systemd::ntp_server,
+  Optional[Variant[Array,String]] $fallback_ntp_server = $systemd::fallback_ntp_server,
+){
+
+  assert_private()
+
+  $_enable_timesyncd = $ensure ? {
+    'stopped' => false,
+    'running' => true,
+    default   => $ensure,
+  }
+
+  service{ 'systemd-timesyncd':
+    ensure => $ensure,
+    enable => $_enable_timesyncd,
+  }
+
+  if $ntp_server {
+    if $ntp_server =~ String {
+      $_ntp_server = $ntp_server
+    } else {
+      $_ntp_server = join($ntp_server, ' ')
+    }
+    ini_setting{'ntp_server':
+      ensure  => 'present',
+      value   => $_ntp_server,
+      setting => 'NTP',
+      section => 'Time',
+      path    => '/etc/systemd/timesyncd.conf',
+      notify  => Service['systemd-timesyncd'],
+    }
+  }
+
+  if $fallback_ntp_server {
+    if $fallback_ntp_server =~ String {
+      $_fallback_ntp_server = $fallback_ntp_server
+    } else {
+      $_fallback_ntp_server = join($fallback_ntp_server, ' ')
+    }
+    ini_setting{'fallback_ntp_server':
+      ensure  => 'present',
+      value   => $_fallback_ntp_server,
+      setting => 'FallbackNTP',
+      section => 'Time',
+      path    => '/etc/systemd/timesyncd.conf',
+      notify  => Service['systemd-timesyncd'],
+    }
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/tmpfile.pp b/3rdparty/modules/systemd/manifests/tmpfile.pp
new file mode 100644 (file)
index 0000000..c18eaae
--- /dev/null
@@ -0,0 +1,54 @@
+# Creates a systemd tmpfile
+#
+# @api public
+#
+# @see systemd-tmpfiles(8)
+#
+# @attr name [String]
+#   The name of the tmpfile to create
+#
+#   * May not contain ``/``
+#
+# @param $ensure
+#   Whether to drop a file or remove it
+#
+# @param path
+#   The path to the main systemd tmpfiles directory
+#
+# @param content
+#   The literal content to write to the file
+#
+#   * Mutually exclusive with ``$source``
+#
+# @param source
+#   A ``File`` resource compatible ``source``
+#
+#  * Mutually exclusive with ``$limits``
+#
+define systemd::tmpfile(
+  Enum['present', 'absent', 'file'] $ensure  = 'file',
+  Stdlib::Absolutepath              $path    = '/etc/tmpfiles.d',
+  Optional[String]                  $content = undef,
+  Optional[String]                  $source  = undef,
+) {
+  include systemd::tmpfiles
+
+  if $name =~ Pattern['/'] {
+    fail('$name may not contain a forward slash "(/)"')
+  }
+
+  $_tmp_file_ensure = $ensure ? {
+    'present' => 'file',
+    default   => $ensure,
+  }
+
+  file { "${path}/${name}":
+    ensure  => $_tmp_file_ensure,
+    content => $content,
+    source  => $source,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0444',
+    notify  => Class['systemd::tmpfiles'],
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/tmpfiles.pp b/3rdparty/modules/systemd/manifests/tmpfiles.pp
new file mode 100644 (file)
index 0000000..cad5371
--- /dev/null
@@ -0,0 +1,24 @@
+# Update the systemd temp files
+#
+# @api public
+#
+# @see systemd-tmpfiles(8)
+#
+# @param operations
+#   The operations to perform on the systemd tempfiles
+#
+#   * All operations may be combined but you'll probably only ever want to
+#     use ``create``
+#
+class systemd::tmpfiles (
+  Array[Enum['create','clean','remove']] $operations = ['create']
+) {
+
+  $_ops = join(prefix($operations, '--'), ' ')
+
+  exec { 'systemd-tmpfiles':
+    command     => "systemd-tmpfiles ${_ops}",
+    refreshonly => true,
+    path        => $::path,
+  }
+}
diff --git a/3rdparty/modules/systemd/manifests/unit_file.pp b/3rdparty/modules/systemd/manifests/unit_file.pp
new file mode 100644 (file)
index 0000000..3c0406e
--- /dev/null
@@ -0,0 +1,78 @@
+# Creates a systemd unit file
+#
+# @api public
+#
+# @see systemd.unit(5)
+#
+# @attr name [Pattern['^.+\.(service|socket|device|mount|automount|swap|target|path|timer|slice|scope)$']]
+#   The target unit file to create
+#
+#   * Must not contain ``/``
+#
+# @attr path
+#   The main systemd configuration path
+#
+# @attr content
+#   The full content of the unit file
+#
+#   * Mutually exclusive with ``$source``
+#
+# @attr source
+#   The ``File`` resource compatible ``source``
+#
+#   * Mutually exclusive with ``$content``
+#
+# @attr target
+#   If set, will force the file to be a symlink to the given target
+#
+#   * Mutually exclusive with both ``$source`` and ``$content``
+#
+# @attr enable
+#   If set, will manage the unit enablement status.
+#
+# @attr active
+#   If set, will manage the state of the unit.
+#
+define systemd::unit_file(
+  Enum['present', 'absent', 'file']        $ensure  = 'present',
+  Stdlib::Absolutepath                     $path    = '/etc/systemd/system',
+  Optional[String]                         $content = undef,
+  Optional[String]                         $source  = undef,
+  Optional[Stdlib::Absolutepath]           $target  = undef,
+  Optional[Variant[Boolean, Enum['mask']]] $enable  = undef,
+  Optional[Boolean]                        $active  = undef,
+) {
+  include systemd
+
+  assert_type(Systemd::Unit, $name)
+
+  if $target {
+    $_ensure = 'link'
+  } else {
+    $_ensure = $ensure ? {
+      'present' => 'file',
+      default   => $ensure,
+    }
+  }
+
+  file { "${path}/${name}":
+    ensure  => $_ensure,
+    content => $content,
+    source  => $source,
+    target  => $target,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0444',
+    notify  => Class['systemd::systemctl::daemon_reload'],
+  }
+
+  if $enable != undef or $active != undef {
+    service { $name:
+      ensure    => $active,
+      enable    => $enable,
+      provider  => 'systemd',
+      subscribe => File["${path}/${name}"],
+      require   => Class['systemd::systemctl::daemon_reload'],
+    }
+  }
+}
diff --git a/3rdparty/modules/systemd/metadata.json b/3rdparty/modules/systemd/metadata.json
new file mode 100644 (file)
index 0000000..57d9515
--- /dev/null
@@ -0,0 +1,55 @@
+{
+  "name": "camptocamp-systemd",
+  "version": "2.1.0",
+  "author": "camptocamp",
+  "summary": "Puppet Systemd module",
+  "license": "Apache-2.0",
+  "source": "https://github.com/camptocamp/puppet-systemd",
+  "project_page": "https://github.com/camptocamp/puppet-systemd",
+  "issues_url": "https://github.com/camptocamp/puppet-systemd/issues",
+  "dependencies": [
+    {
+      "name": "puppetlabs/stdlib",
+      "version_requirement": ">= 4.13.1 < 6.0.0"
+    }
+  ],
+  "data_provider": null,
+  "requirements": [
+    {
+      "name": "puppet",
+      "version_requirement": ">= 4.10.10 < 6.0.0"
+    }
+  ],
+  "operatingsystem_support": [
+    {
+      "operatingsystem": "Debian",
+      "operatingsystemrelease": [
+        "8",
+        "9",
+        "10"
+      ]
+    },
+    {
+      "operatingsystem": "Ubuntu",
+      "operatingsystemrelease": [
+        "16.04",
+        "18.04"
+      ]
+    },
+    {
+      "operatingsystem": "RedHat",
+      "operatingsystemrelease": [
+        "7"
+      ]
+    },
+    {
+      "operatingsystem": "CentOS",
+      "operatingsystemrelease": [
+        "7"
+      ]
+    },
+    {
+      "operatingsystem": "Archlinux"
+    }
+  ]
+}
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-5-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-5-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..679afb0
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  centos-5-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-5-x86_64
+    hypervisor : docker
+    image: centos:5
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'yum install -y crontabs tar wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-5.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-5.yml
new file mode 100644 (file)
index 0000000..a26f27f
--- /dev/null
@@ -0,0 +1,16 @@
+HOSTS:
+  centos-5-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-5-x86_64
+    hypervisor : docker
+    image: tianon/centos:5.10
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'yum install -y crontabs tar wget which'
+      - 'sed -i -e "/mingetty/d" /etc/inittab'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..9cab03d
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  centos-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-6-x86_64
+    hypervisor : docker
+    image: centos:6
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'yum install -y crontabs tar wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..e325b9e
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  centos-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-6-x86_64
+    hypervisor : openstack
+    flavor: m1.small
+    image: centos-6-latest
+    user: root
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-vagrant.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6-x86_64-vagrant.yml
new file mode 100644 (file)
index 0000000..f06036e
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  centos-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-6-x86_64
+    hypervisor : vagrant
+    box : camptocamp/centos-6-x86_64
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-6.yml
new file mode 100644 (file)
index 0000000..71e23cd
--- /dev/null
@@ -0,0 +1,17 @@
+HOSTS:
+  centos-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-6-x86_64
+    hypervisor : docker
+    image: centos:6
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'rm -rf /var/run/network/*'
+      - 'yum install -y crontabs tar wget'
+      - 'rm /etc/init/tty.conf'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..0bc9727
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  centos-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-7-x86_64
+    hypervisor : docker
+    image: centos:7
+    docker_preserve_image: true
+    docker_cmd: '["/usr/sbin/init"]'
+    docker_image_commands:
+      - 'yum install -y crontabs tar wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..9003c86
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  centos-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-7-x86_64
+    hypervisor : openstack
+    flavor: m1.small
+    image: centos-7-latest
+    user: centos
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-vagrant.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7-x86_64-vagrant.yml
new file mode 100644 (file)
index 0000000..95402e5
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  centos-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-7-x86_64
+    hypervisor : vagrant
+    box : camptocamp/centos-7-x86_64
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/centos-7.yml
new file mode 100644 (file)
index 0000000..a8fa468
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  centos-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: el-7-x86_64
+    hypervisor : docker
+    image: centos:7
+    docker_preserve_image: true
+    docker_cmd: '["/usr/sbin/init"]'
+    docker_image_commands:
+      - 'yum install -y crontabs tar wget iproute'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..359dae7
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  debian-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-6-amd64
+    hypervisor : docker
+    image: debian:6
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..c6c192f
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  debian-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-6-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: debian-6-latest
+    user: debian
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-vagrant.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6-x86_64-vagrant.yml
new file mode 100644 (file)
index 0000000..03db0fa
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  debian-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-6-amd64
+    hypervisor : vagrant
+    box : puppetlabs/debian-6.0.10-64-nocm
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-6.yml
new file mode 100644 (file)
index 0000000..d7b0275
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  debian-6-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-6-amd64
+    hypervisor : docker
+    image: debian/eol:squeeze
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y cron locales-all net-tools wget'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..fc11f57
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  debian-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-7-amd64
+    hypervisor : docker
+    image: debian:7
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y cron wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..017b4c7
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  debian-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-7-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: debian-7-latest
+    user: debian
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-vagrant.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7-x86_64-vagrant.yml
new file mode 100644 (file)
index 0000000..8ed1264
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  debian-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-7-amd64
+    hypervisor : vagrant
+    box : camptocamp/debian-7-amd64
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-7.yml
new file mode 100644 (file)
index 0000000..9591ea7
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  debian-7-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-7-amd64
+    hypervisor : docker
+    image: debian:7
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y cron locales-all net-tools wget'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..86a55e1
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  debian-8-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-8-amd64
+    hypervisor : docker
+    image: debian:8
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y cron wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..003b6f4
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  debian-8-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-8-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: debian-8-latest
+    user: debian
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-vagrant.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8-x86_64-vagrant.yml
new file mode 100644 (file)
index 0000000..5cc7f0c
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  debian-8-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-8-amd64
+    hypervisor : vagrant
+    box : camptocamp/debian-8-amd64
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/debian-8.yml
new file mode 100644 (file)
index 0000000..5fb24c6
--- /dev/null
@@ -0,0 +1,16 @@
+HOSTS:
+  debian-8-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: debian-8-amd64
+    hypervisor : docker
+    image: debian:8
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y cron locales-all net-tools wget'
+      - 'rm -f /usr/sbin/policy-rc.d'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-10.04-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-10.04-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..933dee6
--- /dev/null
@@ -0,0 +1,13 @@
+HOSTS:
+  ubuntu-1004-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-10.04-amd64
+    hypervisor : docker
+    image: ubuntu:10.04
+    # This stops the image from being deleted on completion, speeding up the process.
+    docker_preserve_image: true
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..f0ec72b
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  ubuntu-1204-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-12.04-amd64
+    hypervisor : docker
+    image: ubuntu:12.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..f81b04b
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  ubuntu-1204-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-12.04-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: ubuntu-1204-latest
+    user: ubuntu
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-12.04.yml
new file mode 100644 (file)
index 0000000..594e177
--- /dev/null
@@ -0,0 +1,16 @@
+HOSTS:
+  ubuntu-1204-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-12.04-amd64
+    hypervisor : docker
+    image: ubuntu:12.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y net-tools wget'
+      - 'locale-gen en_US.UTF-8'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..6fb9281
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  ubuntu-1404-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.04-amd64
+    hypervisor : docker
+    image: ubuntu:14.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..2eeb912
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  ubuntu-1404-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.04-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: ubuntu-1404-latest
+    user: ubuntu
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04-x86_64-vagrant.yml
new file mode 100644 (file)
index 0000000..3b37695
--- /dev/null
@@ -0,0 +1,11 @@
+HOSTS:
+  ubuntu-1404-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.04-amd64
+    hypervisor : vagrant
+    box : puppetlabs/ubuntu-14.04-64-nocm
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.04.yml
new file mode 100644 (file)
index 0000000..2b293c9
--- /dev/null
@@ -0,0 +1,18 @@
+HOSTS:
+  ubuntu-1404-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.04-amd64
+    hypervisor : docker
+    image: ubuntu:14.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'rm /usr/sbin/policy-rc.d'
+      - 'rm /sbin/initctl; dpkg-divert --rename --remove /sbin/initctl'
+      - 'apt-get install -y net-tools wget'
+      - 'locale-gen en_US.UTF-8'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..2be425c
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  ubuntu-1410-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.10-amd64
+    hypervisor : docker
+    image: ubuntu:14.10
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..58a2acd
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  ubuntu-1410-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.10-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: ubuntu-1410-latest
+    user: ubuntu
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-14.10.yml
new file mode 100644 (file)
index 0000000..7ce09b2
--- /dev/null
@@ -0,0 +1,18 @@
+HOSTS:
+  ubuntu-1410-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-14.10-amd64
+    hypervisor : docker
+    image: ubuntu:14.10
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'rm /usr/sbin/policy-rc.d'
+      - 'rm /sbin/initctl; dpkg-divert --rename --remove /sbin/initctl'
+      - 'apt-get install -y net-tools wget'
+      - 'locale-gen en_US.UTF-8'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04-x86_64-docker.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04-x86_64-docker.yml
new file mode 100644 (file)
index 0000000..caed722
--- /dev/null
@@ -0,0 +1,15 @@
+HOSTS:
+  ubuntu-1504-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-15.04-amd64
+    hypervisor : docker
+    image: ubuntu:15.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y wget'
+CONFIG:
+  type: foss
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04-x86_64-openstack.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04-x86_64-openstack.yml
new file mode 100644 (file)
index 0000000..22ef76c
--- /dev/null
@@ -0,0 +1,14 @@
+HOSTS:
+  ubuntu-1504-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-15.04-amd64
+    hypervisor : openstack
+    flavor: m1.small
+    image: ubuntu-1504-latest
+    user: ubuntu
+CONFIG:
+  type: foss
+  log_level: debug
+  openstack_network: default
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.04.yml
new file mode 100644 (file)
index 0000000..329f331
--- /dev/null
@@ -0,0 +1,16 @@
+HOSTS:
+  ubuntu-1504-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-15.04-amd64
+    hypervisor : docker
+    image: ubuntu:15.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y net-tools wget'
+      - 'locale-gen en_US.UTF-8'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.10.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-15.10.yml
new file mode 100644 (file)
index 0000000..487795a
--- /dev/null
@@ -0,0 +1,16 @@
+HOSTS:
+  ubuntu-1510-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-15.10-amd64
+    hypervisor : docker
+    image: ubuntu:15.10
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y net-tools wget'
+      - 'locale-gen en_US.UTF-8'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-16.04.yml b/3rdparty/modules/systemd/spec/acceptance/nodesets/ubuntu-16.04.yml
new file mode 100644 (file)
index 0000000..6c32b96
--- /dev/null
@@ -0,0 +1,16 @@
+HOSTS:
+  ubuntu-1604-x64:
+    default_apply_opts:
+      order: random
+      strict_variables:
+    platform: ubuntu-16.04-amd64
+    hypervisor : docker
+    image: ubuntu:16.04
+    docker_preserve_image: true
+    docker_cmd: '["/sbin/init"]'
+    docker_image_commands:
+      - 'apt-get install -y net-tools wget'
+      - 'locale-gen en_US.UTF-8'
+CONFIG:
+  type: aio
+  log_level: debug
diff --git a/3rdparty/modules/systemd/spec/classes/init_spec.rb b/3rdparty/modules/systemd/spec/classes/init_spec.rb
new file mode 100644 (file)
index 0000000..0bd148a
--- /dev/null
@@ -0,0 +1,160 @@
+require 'spec_helper'
+
+describe 'systemd' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        it { is_expected.to compile.with_all_deps }
+        it { is_expected.to create_class('systemd') }
+        it { is_expected.to create_class('systemd::systemctl::daemon_reload') }
+        it { is_expected.to_not create_service('systemd-resolved') }
+        it { is_expected.to_not create_service('systemd-networkd') }
+        it { is_expected.to_not create_service('systemd-timesyncd') }
+
+        context 'when enabling resolved and networkd' do
+          let(:params) {{
+            :manage_resolved => true,
+            :manage_networkd => true
+          }}
+
+          it { is_expected.to create_service('systemd-resolved').with_ensure('running') }
+          it { is_expected.to create_service('systemd-resolved').with_enable(true) }
+          it { is_expected.to create_service('systemd-networkd').with_ensure('running') }
+          it { is_expected.to create_service('systemd-networkd').with_enable(true) }
+        end
+
+        context 'when enabling resolved with DNS values (string)' do
+          let(:params) {{
+            :manage_resolved => true,
+            :dns => '8.8.8.8 8.8.4.4',
+            :fallback_dns => '2001:4860:4860::8888 2001:4860:4860::8844',
+          }}
+
+          it { is_expected.to create_service('systemd-resolved').with_ensure('running') }
+          it { is_expected.to create_service('systemd-resolved').with_enable(true) }
+          it { is_expected.to contain_ini_setting('dns')}
+          it { is_expected.to contain_ini_setting('fallback_dns')}
+          it { is_expected.not_to contain_ini_setting('domains')}
+          it { is_expected.not_to contain_ini_setting('multicast_dns')}
+          it { is_expected.not_to contain_ini_setting('llmnr')}
+          it { is_expected.not_to contain_ini_setting('dnssec')}
+          it { is_expected.not_to contain_ini_setting('cache')}
+          it { is_expected.not_to contain_ini_setting('dns_stub_listener')}
+        end
+
+        context 'when enabling resolved with DNS values (array)' do
+          let(:params) {{
+            :manage_resolved => true,
+            :dns => %w(8.8.8.8 8.8.4.4),
+            :fallback_dns => %w(2001:4860:4860::8888 2001:4860:4860::8844),
+          }}
+
+          it { is_expected.to create_service('systemd-resolved').with_ensure('running') }
+          it { is_expected.to create_service('systemd-resolved').with_enable(true) }
+          it { is_expected.to contain_ini_setting('dns')}
+          it { is_expected.to contain_ini_setting('fallback_dns')}
+          it { is_expected.not_to contain_ini_setting('domains')}
+          it { is_expected.not_to contain_ini_setting('multicast_dns')}
+          it { is_expected.not_to contain_ini_setting('llmnr')}
+          it { is_expected.not_to contain_ini_setting('dnssec')}
+          it { is_expected.not_to contain_ini_setting('cache')}
+          it { is_expected.not_to contain_ini_setting('dns_stub_listener')}
+        end
+
+        context 'when enabling resolved with DNS values (full)' do
+          let(:params) {{
+            :manage_resolved => true,
+            :dns => %w(8.8.8.8 8.8.4.4),
+            :fallback_dns => %w(2001:4860:4860::8888 2001:4860:4860::8844),
+            :domains => %w(2001:4860:4860::8888 2001:4860:4860::8844),
+            :llmnr => true,
+            :multicast_dns => false,
+            :dnssec => false,
+            :cache => true,
+            :dns_stub_listener => 'udp',
+          }}
+
+          it { is_expected.to create_service('systemd-resolved').with_ensure('running') }
+          it { is_expected.to create_service('systemd-resolved').with_enable(true) }
+          it { is_expected.to contain_ini_setting('dns')}
+          it { is_expected.to contain_ini_setting('fallback_dns')}
+          it { is_expected.to contain_ini_setting('domains')}
+          it { is_expected.to contain_ini_setting('multicast_dns')}
+          it { is_expected.to contain_ini_setting('llmnr')}
+          it { is_expected.to contain_ini_setting('dnssec')}
+          it { is_expected.to contain_ini_setting('cache')}
+          it { is_expected.to contain_ini_setting('dns_stub_listener')}
+        end
+
+        context 'when enabling timesyncd' do
+          let(:params) {{
+            :manage_timesyncd => true
+          }}
+
+          it { is_expected.to create_service('systemd-timesyncd').with_ensure('running') }
+          it { is_expected.to create_service('systemd-timesyncd').with_enable(true) }
+          it { is_expected.not_to create_service('systemd-resolved').with_ensure('running') }
+          it { is_expected.not_to create_service('systemd-resolved').with_enable(true) }
+          it { is_expected.not_to create_service('systemd-networkd').with_ensure('running') }
+          it { is_expected.not_to create_service('systemd-networkd').with_enable(true) }
+        end
+
+        context 'when enabling timesyncd with NTP values (string)' do
+          let(:params) {{
+            :manage_timesyncd => true,
+            :ntp_server => '0.pool.ntp.org 1.pool.ntp.org',
+            :fallback_ntp_server => '2.pool.ntp.org 3.pool.ntp.org'
+          }}
+          it { is_expected.to compile.with_all_deps }
+          it { is_expected.to contain_ini_setting('ntp_server')}
+          it { is_expected.to contain_ini_setting('fallback_ntp_server')}
+        end
+
+        context 'when enabling timesyncd with NTP values (array)' do
+          let(:params) {{
+            :manage_timesyncd => true,
+            :ntp_server => %w(0.pool.ntp.org 1.pool.ntp.org),
+            :fallback_ntp_server => %w(2.pool.ntp.org 3.pool.ntp.org)
+          }}
+          it { is_expected.to compile.with_all_deps }
+          it { is_expected.to contain_ini_setting('ntp_server')}
+          it { is_expected.to contain_ini_setting('fallback_ntp_server')}
+        end
+
+        context 'when passing service limits' do
+          let(:params) {{
+            :service_limits => {'openstack-nova-compute.service' => {'limits' => {'LimitNOFILE' => 32768}}}
+          }}
+
+          it { is_expected.to compile.with_all_deps }
+          it { is_expected.to contain_systemd__service_limits('openstack-nova-compute.service').with_limits({'LimitNOFILE' => 32768}) }
+        end
+
+        context 'when managing Accounting options' do
+          let :params do
+            {
+              manage_accounting: true,
+            }
+          end
+
+          it { is_expected.to contain_class('systemd::system')}
+
+          case facts[:os]['family']
+          when 'Archlinux'
+            accounting = ['DefaultCPUAccounting', 'DefaultIOAccounting', 'DefaultIPAccounting', 'DefaultBlockIOAccounting', 'DefaultMemoryAccounting', 'DefaultTasksAccounting']
+          when 'Debian'
+            accounting = ['DefaultCPUAccounting', 'DefaultBlockIOAccounting', 'DefaultMemoryAccounting']
+          when 'RedHat'
+            accounting = ['DefaultCPUAccounting', 'DefaultBlockIOAccounting', 'DefaultMemoryAccounting', 'DefaultTasksAccounting']
+          end
+          accounting.each do |account|
+            it { is_expected.to contain_ini_setting(account)}
+          end
+          it { is_expected.to compile.with_all_deps }
+        end
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/classes/systemctl/daemon_reload_spec.rb b/3rdparty/modules/systemd/spec/classes/systemctl/daemon_reload_spec.rb
new file mode 100644 (file)
index 0000000..ec5f00e
--- /dev/null
@@ -0,0 +1,15 @@
+require 'spec_helper'
+
+describe 'systemd::systemctl::daemon_reload' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        it { is_expected.to compile.with_all_deps }
+        it { is_expected.to create_class('systemd::systemctl::daemon_reload') }
+        it { is_expected.to create_exec('systemctl-daemon-reload') }
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/classes/tmpfiles_spec.rb b/3rdparty/modules/systemd/spec/classes/tmpfiles_spec.rb
new file mode 100644 (file)
index 0000000..13defae
--- /dev/null
@@ -0,0 +1,15 @@
+require 'spec_helper'
+
+describe 'systemd::tmpfiles' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        it { is_expected.to compile.with_all_deps }
+        it { is_expected.to create_class('systemd::tmpfiles') }
+        it { is_expected.to contain_exec('systemd-tmpfiles').with_command('systemd-tmpfiles --create') }
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/default_module_facts.yaml b/3rdparty/modules/systemd/spec/default_module_facts.yaml
new file mode 100644 (file)
index 0000000..d89376c
--- /dev/null
@@ -0,0 +1,10 @@
+---
+systemd-fsck-root.service: enabled-runtime
+systemd-journal-gatewayd.service: indirect
+systemd-journal-remote.service: indirect
+systemd-journal-upload.service: disabled
+systemd-networkd-wait-online.service: enabled
+systemd-networkd.service: enabled
+systemd-nspawn@.service: disabled
+systemd-resolved.service: enabled
+systemd-timesyncd.service: disabled
diff --git a/3rdparty/modules/systemd/spec/defines/dropin_file_spec.rb b/3rdparty/modules/systemd/spec/defines/dropin_file_spec.rb
new file mode 100644 (file)
index 0000000..a4e8745
--- /dev/null
@@ -0,0 +1,71 @@
+require 'spec_helper'
+
+describe 'systemd::dropin_file' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        let(:title) { 'test.conf' }
+
+        let(:params) {{
+          :unit    => 'test.service',
+          :content => 'random stuff'
+        }}
+
+        it { is_expected.to compile.with_all_deps }
+
+        it { is_expected.to create_file("/etc/systemd/system/#{params[:unit]}.d").with(
+          :ensure  => 'directory',
+        ) }
+
+        it { is_expected.to create_file("/etc/systemd/system/#{params[:unit]}.d/#{title}").with(
+          :ensure  => 'file',
+          :content => /#{params[:content]}/,
+          :mode    => '0444'
+        ) }
+
+        it { is_expected.to create_file("/etc/systemd/system/#{params[:unit]}.d/#{title}").that_notifies('Class[systemd::systemctl::daemon_reload]') }
+
+        context 'with a bad unit type' do
+          let(:title) { 'test.badtype' }
+
+          it {
+            expect{
+              is_expected.to compile.with_all_deps
+            }.to raise_error(/expects a match for Systemd::Dropin/)
+          }
+        end
+
+        context 'with another drop-in file with the same filename (and content)' do
+          let(:default_params) {{
+            :filename => 'longer-timeout.conf',
+            :content  => 'random stuff'
+          }}
+          # Create drop-in file longer-timeout.conf for unit httpd.service
+          let :pre_condition do
+            "systemd::dropin_file { 'httpd_longer-timeout':
+              filename => '#{default_params[:filename]}',
+              unit     => 'httpd.service',
+              content  => '#{default_params[:context]}',
+            }"
+          end
+          #
+          # Create drop-in file longer-timeout.conf for unit ftp.service
+          let (:title) {'ftp_longer-timeout'}
+          let :params do
+            default_params.merge({
+              :unit     => 'ftp.service'
+            })
+          end
+
+          it { is_expected.to create_file("/etc/systemd/system/#{params[:unit]}.d/#{params[:filename]}").with(
+            :ensure  => 'file',
+            :content => /#{params[:content]}/,
+            :mode    => '0444'
+          ) }
+        end
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/defines/network_spec.rb b/3rdparty/modules/systemd/spec/defines/network_spec.rb
new file mode 100644 (file)
index 0000000..ea9215b
--- /dev/null
@@ -0,0 +1,21 @@
+require 'spec_helper'
+
+describe 'systemd::network' do
+  let :params do
+    {
+      restart_service: true
+    }
+  end
+
+  let(:title) { 'eth0.network' }
+
+  on_supported_os.each do |os, facts|
+    let :facts do
+      facts
+    end
+
+    context 'with all defaults' do
+      it { is_expected.to compile.with_all_deps }
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/defines/service_limits_spec.rb b/3rdparty/modules/systemd/spec/defines/service_limits_spec.rb
new file mode 100644 (file)
index 0000000..e030a93
--- /dev/null
@@ -0,0 +1,86 @@
+require 'spec_helper'
+
+describe 'systemd::service_limits' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        let(:title) { 'test.service' }
+
+        describe 'with limits and present' do
+          let(:params) {{
+            :limits => {
+              'LimitCPU'    => '10m',
+              'LimitFSIZE'  => 'infinity',
+              'LimitDATA'   => '10K',
+              'LimitNOFILE' => '20:infinity',
+              'LimitNICE'   => '-10',
+              'LimitRTPRIO' => 50,
+              'IODeviceWeight' => [
+                {'/dev/weight' => 10},
+                {'/dev/weight2' => 20}
+              ],
+              'IOReadBandwidthMax' => [
+                {'/bw/max' => '10K'}
+              ]
+            }
+          }}
+
+          it { is_expected.to compile.with_all_deps }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :ensure  => 'file',
+              :content => /LimitCPU=10m/,
+              :mode    => '0444'
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => /LimitFSIZE=infinity/
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => /LimitDATA=10K/
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => /LimitNOFILE=20:infinity/
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => /LimitNICE=-10/
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => /LimitRTPRIO=50/
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => %r(IODeviceWeight=/dev/weight 10)
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => %r(IODeviceWeight=/dev/weight2 20)
+          ) }
+          it { is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf").with(
+            :content => %r(IOReadBandwidthMax=/bw/max 10K)
+          ) }
+          it { is_expected.to create_exec("restart #{title} because limits").with(
+            :command => "systemctl restart #{title}",
+            :refreshonly => true
+          ) }
+        end
+
+        describe 'ensured absent' do
+          let(:params) {{
+            :ensure => 'absent',
+          }}
+
+          it { is_expected.to compile.with_all_deps }
+          it do
+            is_expected.to create_file("/etc/systemd/system/#{title}.d/90-limits.conf")
+              .with_ensure('absent')
+              .that_notifies("Exec[restart #{title} because limits]")
+          end
+          it do
+            is_expected.to create_exec("restart #{title} because limits")
+              .with_command("systemctl restart #{title}")
+              .with_refreshonly(true)
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/defines/tmpfile_spec.rb b/3rdparty/modules/systemd/spec/defines/tmpfile_spec.rb
new file mode 100644 (file)
index 0000000..56323d2
--- /dev/null
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe 'systemd::tmpfile' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        let(:title) { 'random_tmpfile' }
+
+        let(:params) {{
+          :content => 'random stuff'
+        }}
+
+        it { is_expected.to compile.with_all_deps }
+        it { is_expected.to create_file("/etc/tmpfiles.d/#{title}").with(
+          :ensure  => 'file',
+          :content => /#{params[:content]}/,
+          :mode    => '0444'
+        ) }
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/defines/unit_file_spec.rb b/3rdparty/modules/systemd/spec/defines/unit_file_spec.rb
new file mode 100644 (file)
index 0000000..d151d45
--- /dev/null
@@ -0,0 +1,55 @@
+require 'spec_helper'
+
+describe 'systemd::unit_file' do
+  context 'supported operating systems' do
+    on_supported_os.each do |os, facts|
+      context "on #{os}" do
+        let(:facts) { facts }
+
+        let(:title) { 'test.service' }
+
+        let(:params) {{
+          :content => 'random stuff'
+        }}
+
+        it { is_expected.to compile.with_all_deps }
+
+        it { is_expected.to create_file("/etc/systemd/system/#{title}").with(
+          :ensure  => 'file',
+          :content => /#{params[:content]}/,
+          :mode    => '0444'
+        ) }
+
+        it { is_expected.to create_file("/etc/systemd/system/#{title}").that_notifies('Class[systemd::systemctl::daemon_reload]') }
+
+        context 'with a bad unit type' do
+          let(:title) { 'test.badtype' }
+
+          it {
+            expect{
+              is_expected.to compile.with_all_deps
+            }.to raise_error(/expects a match for Systemd::Unit/)
+          }
+        end
+
+        context 'with enable => true and active => true' do
+          let(:params) do
+            super().merge({
+              :enable => true,
+              :active => true
+            })
+          end
+
+          it { is_expected.to contain_service('test.service').with(
+            :ensure   => true,
+            :enable   => true,
+            :provider => 'systemd'
+          ) }
+
+          it { is_expected.to contain_service('test.service').that_subscribes_to("File[/etc/systemd/system/#{title}]") }
+          it { is_expected.to contain_service('test.service').that_requires('Class[systemd::systemctl::daemon_reload]') }
+        end
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/spec.opts b/3rdparty/modules/systemd/spec/spec.opts
new file mode 100644 (file)
index 0000000..91cd642
--- /dev/null
@@ -0,0 +1,6 @@
+--format
+s
+--colour
+--loadby
+mtime
+--backtrace
diff --git a/3rdparty/modules/systemd/spec/spec_helper.rb b/3rdparty/modules/systemd/spec/spec_helper.rb
new file mode 100644 (file)
index 0000000..35b452a
--- /dev/null
@@ -0,0 +1,35 @@
+require 'puppetlabs_spec_helper/module_spec_helper'
+require 'rspec-puppet-facts'
+include RspecPuppetFacts
+
+
+add_custom_fact :systemd_internal_services, YAML.load(File.read(File.expand_path('../default_module_facts.yaml', __FILE__)))
+
+RSpec.configure do |c|
+  c.include PuppetlabsSpec::Files
+
+  # Useless backtrace noise
+  backtrace_exclusion_patterns = [
+    /spec_helper/,
+    /gems/
+  ]
+
+  if c.respond_to?(:backtrace_exclusion_patterns)
+    c.backtrace_exclusion_patterns = backtrace_exclusion_patterns
+  elsif c.respond_to?(:backtrace_clean_patterns)
+    c.backtrace_clean_patterns = backtrace_exclusion_patterns
+  end
+
+  c.before :each do
+    # Store any environment variables away to be restored later
+    @old_env = {}
+    ENV.each_key {|k| @old_env[k] = ENV[k]}
+
+    c.strict_variables = Gem::Version.new(Puppet.version) >= Gem::Version.new('3.5')
+    Puppet.features.stubs(:root?).returns(true)
+  end
+
+  c.after :each do
+    PuppetlabsSpec::Files.cleanup
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/unit/facter/systemd_spec.rb b/3rdparty/modules/systemd/spec/unit/facter/systemd_spec.rb
new file mode 100644 (file)
index 0000000..e1b44eb
--- /dev/null
@@ -0,0 +1,36 @@
+require "spec_helper"
+
+describe Facter::Util::Fact do
+  before { Facter.clear }
+  after { Facter.clear }
+
+  describe 'systemd' do
+    context 'returns true when systemd present' do
+      before do
+        Facter.fact(:kernel).stubs(:value).returns(:linux)
+        Facter.add(:service_provider) { setcode { 'systemd' } }
+      end
+
+      it { expect(Facter.value(:service_provider)).to eq('systemd') }
+      it { expect(Facter.value(:systemd)).to be true }
+    end
+
+    context 'returns false when systemd not present' do
+      before do
+        Facter.fact(:kernel).stubs(:value).returns(:linux)
+        Facter.add(:service_provider) { setcode { 'redhat' } }
+      end
+
+      it { expect(Facter.value(:service_provider)).to eq('redhat') }
+      it { expect(Facter.value(:systemd)).to be false }
+    end
+
+    context 'returns nil when kernel is not linux' do
+      before do
+        Facter.fact(:kernel).stubs(:value).returns(:windows)
+      end
+
+      it { expect(Facter.value(:systemd)).to be_nil }
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/spec/unit/facter/systemd_version_spec.rb b/3rdparty/modules/systemd/spec/unit/facter/systemd_version_spec.rb
new file mode 100644 (file)
index 0000000..5007dc6
--- /dev/null
@@ -0,0 +1,31 @@
+require "spec_helper"
+
+describe Facter::Util::Fact do
+  before {
+    Facter.clear
+  }
+
+  describe "systemd_version" do
+    context 'returns version when systemd fact present' do
+      before do
+        Facter.fact(:systemd).stubs(:value).returns(true)
+      end
+      let(:facts) { {:systemd => true} }
+      it do
+        Facter::Util::Resolution.expects(:exec).with("systemctl --version | awk '/systemd/{ print $2 }'").returns('229')
+        expect(Facter.value(:systemd_version)).to eq('229')
+      end
+    end
+    context 'returns nil when systemd fact not present' do
+      before do
+        Facter.fact(:systemd).stubs(:value).returns(false)
+      end
+      let(:facts) { {:systemd => false } }
+      it do
+        Facter::Util::Resolution.stubs(:exec)
+        Facter::Util::Resolution.expects(:exec).with("systemctl --version | awk '/systemd/{ print $2 }'").never
+        expect(Facter.value(:systemd_version)).to eq(nil)
+      end
+    end
+  end
+end
diff --git a/3rdparty/modules/systemd/templates/limits.erb b/3rdparty/modules/systemd/templates/limits.erb
new file mode 100644 (file)
index 0000000..f51d756
--- /dev/null
@@ -0,0 +1,16 @@
+# This file managed by Puppet - DO NOT EDIT
+[Service]
+<%
+  @limits.keys.sort.each do |k|
+
+    # Handles the Path and Option entries
+    if @limits[k].is_a?(Array)
+      output = @limits[k].map{|x|
+        x = %(#{k}=#{x.to_a.flatten.join(' ')})
+      }.join("\n")
+   else
+     output = %(#{k}=#{@limits[k]})
+   end
+-%>
+<%= output %>
+<% end -%>
diff --git a/3rdparty/modules/systemd/types/dropin.pp b/3rdparty/modules/systemd/types/dropin.pp
new file mode 100644 (file)
index 0000000..d9085a4
--- /dev/null
@@ -0,0 +1 @@
+type Systemd::Dropin = Pattern['^.+\.conf$']
diff --git a/3rdparty/modules/systemd/types/servicelimits.pp b/3rdparty/modules/systemd/types/servicelimits.pp
new file mode 100644 (file)
index 0000000..efdf6fb
--- /dev/null
@@ -0,0 +1,44 @@
+# Matches Systemd Service Limit Struct
+type Systemd::ServiceLimits = Struct[
+  {
+    Optional['LimitCPU']            => Pattern['^\d+(s|m|h|d|w|M|y)?(:\d+(s|m|h|d|w|M|y)?)?$'],
+    Optional['LimitFSIZE']          => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitDATA']           => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitSTACK']          => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitCORE']           => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitRSS']            => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitNOFILE']         => Variant[Integer[-1],Pattern['^(infinity|\d+(:(infinity|\d+))?)$']],
+    Optional['LimitAS']             => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitNPROC']          => Integer[1],
+    Optional['LimitMEMLOCK']        => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitLOCKS']          => Integer[1],
+    Optional['LimitSIGPENDING']     => Integer[1],
+    Optional['LimitMSGQUEUE']       => Pattern['^(infinity|((\d+(K|M|G|T|P|E)(:\d+(K|M|G|T|P|E))?)))$'],
+    Optional['LimitNICE']           => Variant[Integer[0,40], Pattern['^(-\+([0-1]?[0-9]|20))|([0-3]?[0-9]|40)$']],
+    Optional['LimitRTPRIO']         => Integer[0],
+    Optional['LimitRTTIME']         => Pattern['^\d+(ms|s|m|h|d|w|M|y)?(:\d+(ms|s|m|h|d|w|M|y)?)?$'],
+    Optional['CPUAccounting']       => Boolean,
+    Optional['CPUShares']           => Integer[2,262144],
+    Optional['StartupCPUShares']    => Integer[2,262144],
+    Optional['CPUQuota']            => Pattern['^([1-9][0-9]?$|^100)%$'],
+    Optional['MemoryAccounting']    => Boolean,
+    Optional['MemoryLow']           => Pattern['^(\d+(K|M|G|T)?)$'],
+    Optional['MemoryHigh']          => Pattern['^(\d+(K|M|G|T)?)$'],
+    Optional['MemoryMax']           => Pattern['^(\d+(K|M|G|T)?)$'],
+    Optional['MemoryLimit']         => Pattern['^(\d+(K|M|G|T)?)$'],
+    Optional['TasksAccounting']     => Boolean,
+    Optional['TasksMax']            => Variant[Integer[1],Pattern['^(infinity|([1-9][0-9]?$|^100)%)$']],
+    Optional['IOAccounting']        => Boolean,
+    Optional['IOWeight']            => Integer[1,10000],
+    Optional['StartupIOWeight']     => Integer[1,10000],
+    Optional['IODeviceWeight']      => Array[Hash[Stdlib::Absolutepath, Integer[1,10000], 1, 1]],
+    Optional['IOReadBandwidthMax']  => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+    Optional['IOWriteBandwidthMax'] => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+    Optional['IOReadIOPSMax']       => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+    Optional['IOWriteIOPSMax']      => Array[Hash[Stdlib::Absolutepath, Pattern['^(\d+(K|M|G|T)?)$'], 1, 1]],
+    Optional['DeviceAllow']         => String[1],
+    Optional['DevicePolicy']        => Enum['auto','closed','strict'],
+    Optional['Slice']               => String[1],
+    Optional['Delegate']            => Boolean
+  }
+]
diff --git a/3rdparty/modules/systemd/types/unit.pp b/3rdparty/modules/systemd/types/unit.pp
new file mode 100644 (file)
index 0000000..a96cd54
--- /dev/null
@@ -0,0 +1 @@
+type Systemd::Unit = Pattern['^.+\.(service|socket|device|mount|automount|swap|target|path|timer|slice|scope)$']