Compare commits

...

195 Commits
5.0 ... master

Author SHA1 Message Date
Daniel Tschada 98b44739e8 add new type __podan_compose 2019-12-03 18:40:52 +01:00
Darko Poljak b8c6f8c8f5 ++changelog 2019-11-21 17:01:27 +01:00
poljakowski 8efd2681db Merge branch '__apt_key_mktemp_gpghome' into 'master'
__apt_key: use mktemp for unique temporary gpg home

See merge request ungleich-public/cdist!812
2019-11-21 17:01:10 +01:00
ander 01bd01573e __apt_key: use mktemp for unique temporary gpg home 2019-11-21 14:15:51 +02:00
Darko Poljak ac2463fe31 ++changelog 2019-11-20 20:58:42 +01:00
poljakowski 96ffb4fd02 Merge branch 'xymon_client-msgcache' into 'master'
add `--msgcache`-parameter to support passive clients (__xymon_client)

See merge request ungleich-public/cdist!811
2019-11-20 20:59:10 +01:00
poljakowski 37ee988d1f Merge branch 'xymon_config-excludes' into 'master'
add parameters for ownership and generic rsync-options (__xymon_config)

See merge request ungleich-public/cdist!810
2019-11-20 20:57:31 +01:00
tom 552860b9cd add parameters for ownership and generic rsync-options (__xymon_config) 2019-11-20 15:49:25 +01:00
tom 34bd96db4b add `--msgcache`-parameter to support passive clients (__xymon_client)
Fix a typo along the way, too.
2019-11-20 15:47:25 +01:00
Darko Poljak 0bc00477ae Release 6.1.0 2019-11-19 21:54:56 +01:00
Darko Poljak 6c67d7194a ++changelog 2019-11-19 21:53:40 +01:00
poljakowski d10dfa7807 Merge branch 'hostname' into 'master'
[__hostname] Support more operating systems

See merge request ungleich-public/cdist!802
2019-11-19 21:51:54 +01:00
Darko Poljak c1633d9301 Release 6.0.4 2019-11-19 21:29:45 +01:00
Dennis Camera a45e306123 [__hostname] Better support different versions of SuSE 2019-11-17 19:39:09 +01:00
Dennis Camera f18bdd1fad [__hostname] Comment out support for ancient ArchLinux versions 2019-11-16 23:33:23 +01:00
Dennis Camera a885082534 [__hostname] Little bit of clean up 2019-11-16 14:58:30 +01:00
Dennis Camera 88947d45b3 [__hostname] Add support for Solaris 2019-11-16 14:57:27 +01:00
Nico Schottelius 8b0686766a ++changes 2019-11-08 13:27:38 +01:00
Nico Schottelius 7a17630c2d Merge branch 'master' of code.ungleich.ch:ungleich-public/cdist 2019-11-08 13:26:49 +01:00
Kirill Miazine 7b8f1f09d9 Correct a couple of typos. 2019-11-08 13:26:18 +01:00
Darko Poljak 5fcd4bc09f Release 6.0.3 2019-10-31 08:56:13 +01:00
Dennis Camera fbe9fc4204 Merge branch 'master' into hostname 2019-10-27 20:15:03 +01:00
Dennis Camera c939bd6bf6 [__hostname] Small fixes 2019-10-27 20:12:10 +01:00
Dennis Camera 5eb9fec550 [__hostname] Add support for Slackware 2019-10-27 20:06:12 +01:00
Dennis Camera 66c85230a0 [__hostname] Make __key_value names more meaningful 2019-10-27 20:02:59 +01:00
Dennis Camera b9571a2bbd [__hostname] Add support for Void Linux 2019-10-27 20:02:55 +01:00
Darko Poljak 39b320a19a ++changelog 2019-10-27 19:12:52 +01:00
poljakowski fe23355bfc Merge branch '__package_update_index_alpine' into 'master'
alpine support added in __package_update_index

See merge request ungleich-public/cdist!809
2019-10-27 18:11:08 +01:00
Ahmed Bilal 0ec52fd1bd alpine support added in __package_update_index 2019-10-27 18:11:08 +01:00
Dennis Camera cbae534af5 [__hostname] Patch for modern ArchLinux without hostname(1) 2019-10-26 21:01:54 +02:00
Dennis Camera f276813f7f [__hostname] Remove incorrectly sent messages (again)
The --onchage sent the message on the target where messaging is not supported.

Now the result is that a "changed" message is only emitted when the running
hostname changes, not when the persistent hostname changes.
2019-10-26 17:27:15 +02:00
Dennis Camera e7279680ed [__hostname/man.rst] Add link to RFC 1178 2019-10-26 17:12:08 +02:00
Dennis Camera 6eec5f87a4 [__hostame] Simplify and revert hostnamectl to be a last resort 2019-10-26 17:11:35 +02:00
Darko Poljak 00852cb17d ++changelog 2019-10-25 14:26:08 +02:00
poljakowski 2a4efb84c5 Merge branch 'build/support-pip-from-git' into 'master'
Build/support pip from git

See merge request ungleich-public/cdist!808
2019-10-25 14:24:14 +02:00
Dennis Camera b65ceba569 [__hostame] Resolve shellcheck errors 2019-10-25 02:16:43 +02:00
Dennis Camera d4313c7501 [__hostname] Fix checking of maximum hostname length against sysconf(3) 2019-10-25 01:41:26 +02:00
Dennis Camera 629d443f5a [__hostname] Fix "command not found" errors with old Bash 2019-10-25 01:40:48 +02:00
Dennis Camera c3b066c147 [__hostname] Check hostname length if getconf(1) is available 2019-10-24 19:44:51 +02:00
Darko Poljak 50a3130b0a ++changelog 2019-10-21 12:02:53 +02:00
Dmitry Bogatov 32c15f2ecb Fix spelling error in manpage 2019-10-21 12:00:52 +02:00
Nico Schottelius ecc77e55ed Add timing hack / test1 2019-10-18 19:45:19 +02:00
Darko Poljak f6a45808f9 Fix building man pages command 2019-10-18 13:12:08 +02:00
Darko Poljak 2d0af7b7cc Generate verions.py only if git cloned repo 2019-10-18 10:24:11 +02:00
Darko Poljak fc28f58c77 Generate version.py if it does not exist 2019-10-17 20:48:52 +02:00
Nico Schottelius 9f1ec6f89e Merge branch 'master' of code.ungleich.ch:ungleich-public/cdist 2019-10-17 16:47:28 +02:00
Nico Schottelius 076133028f ++changelog 2019-10-17 16:44:56 +02:00
Nico Schottelius 689b5a2992 [letsencrypt_cert] add support for alpine 2019-10-17 16:44:26 +02:00
Darko Poljak 778cd4ff0e Release 6.0.2 2019-10-17 11:14:09 +02:00
Darko Poljak 6214408f2a ++changelog 2019-10-15 20:19:57 +02:00
poljakowski 1dae7cf9c9 Merge branch 'monitoring-test' into 'master'
Fix issues/Make prometheus+grafana+blackbox types compatible with Debian 10

See merge request ungleich-public/cdist!807
2019-10-15 20:19:05 +02:00
Ahmed Bilal f5c725a57f Fix issues/Make prometheus+grafana+blackbox types compatible with Debian 10 2019-10-15 20:19:04 +02:00
Darko Poljak 3c86c175aa ++changelog 2019-10-14 11:41:04 +02:00
poljakowski df3092d4b4 Merge branch 'select-editor-type' into 'master'
Add __sensible_editor type

See merge request ungleich-public/cdist!800
2019-10-14 11:39:27 +02:00
Dennis Camera e462821e46 [__sensible_editor] Fix SC2028 2019-10-14 11:31:29 +02:00
Dennis Camera 9567826dc1 [__sensible_editor] Fix incorrect require variable 2019-10-14 09:21:23 +02:00
Dennis Camera 58eb474b01 [__sensible_editor] Add exists as a possible --state value 2019-10-13 13:49:51 +02:00
Dennis Camera 365974c447 [__sensible_editor] Use int comparisons in version_ge 2019-10-13 13:42:15 +02:00
Nico Schottelius 2bc26e398c [__letsencrypt_cert] Add Arch Linux support 2019-10-13 11:15:53 +02:00
Dennis Camera 9edf5e8fe0 [__sensible_utils] Fix Ubuntu version detection 2019-10-13 10:39:50 +02:00
Dennis Camera 8b0734f719 [__sensible_editor] Improve error message when a basename of an editor not in the alternatives is provided 2019-10-13 10:14:27 +02:00
Dennis Camera 3bbb7b02d2 [__sensible_editor] Allow to omit the --editor parameter if --state is absent 2019-10-13 10:14:05 +02:00
Dennis Camera 00dd16d7c3 [__sensible_editor] List available editors when an incorrect one is provided 2019-10-13 10:13:20 +02:00
Dennis Camera cee553a6dd [__hostname] Improve systemd hostname setting
This means we write to /etc/hostname before running hostnamectl, so that
it can overwrite the file if it wants to.
2019-10-12 18:49:31 +02:00
Dennis Camera 30c7d153e8 [__hostname] Only write to distro specific file when hostnamectl is missing 2019-10-12 18:47:27 +02:00
Dennis Camera f782a85470 [__sensible_editor] Reword limitations paragraph of man page 2019-10-12 13:27:42 +02:00
Dennis Camera d11b191547 [__sensible_editor] Document supported operating systems in man page 2019-10-12 13:02:26 +02:00
Dennis Camera e64d1710b5 [__sensible_editor] Add support for old Ubuntu versions 2019-10-12 13:01:39 +02:00
Dennis Camera 522100b9fb [__sensible_editor] Refactor 2019-10-12 11:07:39 +02:00
Darko Poljak c3af8a0cc0 ++changelog 2019-10-10 11:19:00 +02:00
poljakowski fa9a90677f Merge branch 'new-type__xymon_server' into 'master'
add new type `__xymon_server`

See merge request ungleich-public/cdist!806
2019-10-10 11:17:51 +02:00
Dennis Camera b6898b097f [__sensible_editor] Add support for RedHat derivatives
They have added sensible-utils lately.
select-editor(1) does not work because their alternatives system is broken,
but sensible-editor(1) works just fine, so we can support it.
2019-10-08 23:05:23 +02:00
tom 0bdc62482a add new type `__xymon_client` 2019-10-08 19:03:38 +02:00
tom e9289abfab add new type `__xymon_config` to configure xymon-servers
This allows configuration of a xymon-server.
The server can be installed with `__xymon_server` or manually. In the
latter case the `ext/`-dir symlink has to be added.
2019-10-08 18:55:37 +02:00
tom 48ed7f1754 correct condition -- should check on remote side 2019-10-08 18:38:33 +02:00
tom f35a1b9cdf add new type `__xymon_apache` as a helper for `__xymon_server`
Details in `man.rst`
2019-10-08 18:34:08 +02:00
tom 7d235fb013 add new type `__xymon_server`
This type installs a Xymon monitoring-server. See https://xymon.com/ for
a demo and further information.
2019-10-08 18:19:20 +02:00
Darko Poljak d1f4657ed9 Release 6.0.1 2019-10-08 14:16:33 +02:00
Darko Poljak be756f2189 ++changelog 2019-10-08 13:48:51 +02:00
jhagen 2abc34f922 Add --shallow option
Provides the capability to make shallow clones (including submodules) to deploy
repositories with huge history.

Note that this might not work with some servers (github.com) if the commit
that is required by a submodule is too far away from any reference.
2019-10-08 13:45:20 +02:00
jhagen 0c7d98e89e Use --recurse-submodules instead of --recursive
The option --recursive is not documented for git >2.11 (2016),
instead --recurse-submodules should be used.
2019-10-08 13:45:13 +02:00
Darko Poljak 6d2e81d0dc Revert "Fix missed parameter file reading"
This reverts commit e1c08c25b5.

This fix was a mistake. No reading is needed, this is explorer
execution on the remote.
2019-10-08 08:30:27 +02:00
Dennis Camera c11e757dfa [__hostname] Add support for Gentoo 2019-10-07 12:06:24 +02:00
Darko Poljak e1c08c25b5 Fix missed parameter file reading 2019-10-07 11:29:28 +02:00
Dennis Camera 064e992a7a [__hostname] Support openSUSE and replace printf with echo 2019-10-06 21:03:49 +02:00
Dennis Camera da1d70e16a [__hostname] Also quote hostname in FreeBSD rc.conf 2019-10-06 18:43:27 +02:00
Dennis Camera 6e1a105c22 [__hostname] Lint 2019-10-06 18:37:40 +02:00
Dennis Camera cbb108d61c [__hostname] Copy FQDN-logic to gencode-remote
Otherwise, the code-remote gets run on the remote every time.
2019-10-06 18:35:29 +02:00
Dennis Camera 3e7cf68de5 [__hostname] Source sysconfig file instead of processing through AWK
This way quotes and expansions will be handled correctly.
2019-10-06 18:14:35 +02:00
Dennis Camera 74568e8a0a [__hostname] Use FQDN as hostname on RedHat derivatives and BSDs 2019-10-06 18:02:58 +02:00
Dennis Camera 7bf203509b [__hostname] Use __key_value exact_delimiter for shell-like files 2019-10-06 18:02:13 +02:00
Dennis Camera 77210c349e [__hostname] Extend os switches with RedHat-derivatives (CentOS, Fedora, RedHat, Scientific) 2019-10-06 18:01:36 +02:00
Dennis Camera d43eb5b22f [__hostname] Add support for NetBSD 2019-10-06 14:02:13 +02:00
Dennis Camera 9a6ca1a343 [__sensible_editor] Remove mixed error reporting from manifest 2019-10-06 12:07:54 +02:00
Dennis Camera 1bab641c94 [explorer/hostname] Do not shorten hostname in any case 2019-10-05 18:43:06 +02:00
Dennis Camera 56c654808d [__hostname] Unify persistent hostname explorers 2019-10-05 18:27:48 +02:00
Darko Poljak 4c21781c4b ++changelog 2019-10-05 07:52:34 +02:00
poljakowski a0c1d0d8b9 Merge branch 'b/prometheus-server' into 'master'
Added missing exit 1 in __prometheus_server cdist type

See merge request ungleich-public/cdist!805
2019-10-05 07:48:58 +02:00
rouxdo d106632b2f Added missing exit 1 in __prometheus_server cdist type 2019-10-05 07:48:58 +02:00
Darko Poljak 69170b20f6 ++changelog 2019-10-04 20:07:28 +02:00
Dennis Camera f5342e9a35 [explorer/hostname] Remove code reading persistent hostname 2019-10-04 20:05:01 +02:00
poljakowski 1c3379fe50 Merge branch 'unignore-manifest' into 'master'
Only ignore MANIFEST file in root directory

See merge request ungleich-public/cdist!804
2019-10-04 19:52:04 +02:00
Dennis Camera 2eebc300cf Only ignore MANIFEST file in root directory
On systems with case-insensitive file systems (like Mac OS X) the previous line
also ignores all types' manifest files.
This commit changes the .gitignore to only ignore the MANIFEST file in the root
directory generated for the PyPI release.
2019-10-04 19:35:01 +02:00
Dennis Camera 9e9c3982a8 Rename __select_editor to __sensible_editor 2019-10-04 14:45:14 +02:00
ahmadbilalkhalid a432d6a51e Support Added for Debian 10* in __letsencrypt_cert 2019-10-04 14:13:10 +05:00
Dennis Camera 644768cc02 Add __select_editor type 2019-10-03 22:03:44 +02:00
Dennis Camera ee440ec619 [__hostname] Compress state check 2019-10-03 21:41:51 +02:00
Darko Poljak b039e4b1b4 ++changelog 2019-10-03 20:36:25 +02:00
poljakowski 9a172b62cb Merge branch 'unquote-os-release' into 'master'
[explorer/os] Unquote values from /etc/os-release

See merge request ungleich-public/cdist!803
2019-10-03 20:32:28 +02:00
Dennis Camera 81ba849af8 Move __hostname hostname explorer to global scope 2019-10-03 19:19:06 +02:00
Dennis Camera fba14496e7 [explorer/os] Unquote values from os-release file 2019-10-03 18:30:52 +02:00
Dennis Camera abc765bd99 [__hostname/explorer/hostname] Darwin: Always fall back to hostname if scutil is missing or fails 2019-10-03 18:23:17 +02:00
Dennis Camera 2804a8bae6 [__hostname] Add support for macosx 2019-10-03 18:21:35 +02:00
Dennis Camera 3c9eb7bce7 [__hostname] Support all systemd OSes and prefer hostnamectl 2019-10-03 18:21:35 +02:00
Darko Poljak bf400928e2 ++changelog 2019-10-03 07:56:36 +02:00
poljakowski 4345afc8d8 Merge branch 'fix-sshkeys-escape' into 'master'
[__ssh_authorized_keys] Fix incorrectly escaped variable

See merge request ungleich-public/cdist!799
2019-10-03 07:55:14 +02:00
poljakowski b754ae576c Merge branch 'always-sort-interfaces' into 'master'
[explorer/interfaces] Always sort output

See merge request ungleich-public/cdist!801
2019-10-03 07:54:06 +02:00
Dennis Camera 55f8036377 [explorer/interfaces] Always sort output
Before, only the output of ifconfig was sorted.
2019-10-02 18:10:37 +02:00
Dennis Camera f57ce648a3 [__ssh_authorized_keys] Fix incorrectly escaped variable 2019-10-02 15:38:38 +02:00
Darko Poljak 7981f81dcd ++changelog 2019-10-01 13:18:01 +02:00
poljakowski 69e5e538ac Merge branch 'nogetent-dotssh' into 'master'
[__ssh_dot_ssh] Fall back to /etc files if getent(1) is not available

See merge request ungleich-public/cdist!796
2019-10-01 13:16:25 +02:00
poljakowski b57482d387 Merge branch 'nogetent-sshkeys' into 'master'
[__ssh_authorized_keys] Fall back to /etc files if getent(1) is not available

See merge request ungleich-public/cdist!797
2019-10-01 13:15:29 +02:00
poljakowski b7426b30e7 Merge branch 'nogetent-user' into 'master'
[__user] Fall back to /etc files if getent(1) is not available

See merge request ungleich-public/cdist!795
2019-10-01 13:14:28 +02:00
poljakowski 65f9161352 Merge branch 'nogetent-group' into 'master'
[__group] Fall back to /etc files if getent(1) is not available

See merge request ungleich-public/cdist!798
2019-10-01 13:12:46 +02:00
Dennis Camera 259aa13b6a [__ssh_authorized_keys] Better path checks 2019-10-01 11:07:29 +02:00
Dennis Camera bad3a4a4cb [__group] Fall back to /etc files if getent(1) is not available
Some (embedded) systems (and Mac OS X) don't provide getent(1). The workaround
parses /etc/group under the assumption that the system only uses local users and
groups.
2019-10-01 10:53:27 +02:00
Dennis Camera 95ab68a272 [__ssh_authorized_keys] Fall back to /etc files if getent(1) is not available
Some (embedded) systems don't provide getent(1). The workaround parses
/etc/passwd and /etc/group under the assumption that these sysems only use local
users and groups.
2019-10-01 08:43:32 +02:00
Dennis Camera 092dd19611 [__ssh_dot_ssh] Fall back to /etc files if getent(1) is not available
Some (embedded) systems don't provide getent(1). The workaround parses
/etc/passwd and /etc/group under the assumption that these sysems only use local
users and groups.
2019-10-01 08:43:12 +02:00
Dennis Camera 2d751443a4 [__user] Fall back to /etc files if getent(1) is not available
On systems without getent(1) the script would fail because "command -v getent"
exits with 1 which terminates the script due to it being called by sh -e.
2019-10-01 08:12:57 +02:00
Darko Poljak 828b4c867c Release 6.0.0 2019-10-01 07:14:35 +02:00
Darko Poljak 50156bd7cd shellcheck 2019-10-01 07:10:37 +02:00
Darko Poljak 9d8a0dae66 ++changelog 2019-10-01 07:01:38 +02:00
poljakowski f86768ab16 Merge branch 'fix_apt_key_dearmor' into 'master'
__apt_key: fix key dearmor when fetching from uri

See merge request ungleich-public/cdist!791
2019-10-01 07:00:33 +02:00
poljakowski 9d26fbdfb8 Merge branch 'git-recursive' into 'master'
__git type: Add --recursive option

See merge request ungleich-public/cdist!794
2019-10-01 06:25:31 +02:00
Dennis Camera 5c8e31b2ef [type/__git] Improve documentation of --recursive option 2019-09-30 13:22:55 +02:00
Darko Poljak 97bcfcc23c Release preos, i.e. make it non-beta 2019-09-20 19:56:17 +02:00
Darko Poljak b657ba8221 Fix log level when verbosity option is not specified 2019-09-20 19:51:55 +02:00
Nico Schottelius 90d9326740 [__sysctl] add alpine support 2019-09-20 21:17:13 +09:00
ander d147f4a86f __apt_key: fix key dearmor when fetching from uri 2019-09-20 12:00:22 +03:00
Darko Poljak 799ec72369 Implement preos 2019-09-20 07:15:37 +02:00
Darko Poljak eab540bd0f ++ 2019-09-18 07:04:41 +02:00
poljakowski 162f7d75e1 Merge branch 'fix_spelling' into 'master'
Fix beowulf's spelling

See merge request ungleich-public/cdist!790
2019-09-18 07:03:23 +02:00
PCoder 88fe83ed73 Fix beowulf's spelling 2019-09-14 15:24:36 +05:30
Dennis Camera 4294ff55e1 [type/__git] Add --recursive parameter 2019-09-09 16:12:16 +02:00
Darko Poljak 067d0a62e7 Release 5.1.3 2019-08-30 08:51:08 +02:00
Darko Poljak 65b9e1d00f ++changelog 2019-08-29 14:40:16 +02:00
poljakowski 61ce1c4756 Merge branch 'docker-swarm-fix' into 'master'
__docker_swarm: Fix for Docker 19.03

See merge request ungleich-public/cdist!789
2019-08-29 14:39:28 +02:00
lubo 451dfaffe4 __docker_swarm: Fix for Docker 19.03 2019-08-23 11:28:13 +02:00
Nico Schottelius 6c780c24c7 ++changes 2019-08-15 14:25:16 +02:00
Nico Schottelius a86893889b [letsencrypt] devuan/ascii: only install certbot package
It seems python-certbot is gone
2019-08-15 14:24:11 +02:00
Nico Schottelius 5033f67d96 Merge branch 'master' of code.ungleich.ch:ungleich-public/cdist 2019-08-15 14:20:42 +02:00
Nico Schottelius 7182de5968 ++changes 2019-08-15 14:20:14 +02:00
Nico Schottelius c0aa2214aa [letsencrypt] add support for devuan/beowulf 2019-08-15 14:19:54 +02:00
Darko Poljak 2f7dc5a65d Fix variable typo 2019-08-04 21:54:13 +02:00
Darko Poljak c6b739b5b6 ++changelog 2019-08-04 21:52:59 +02:00
poljakowski b9303b1ef6 Merge branch 'master' into 'master'
Added Devuan support for __docker type

See merge request ungleich-public/cdist!788
2019-08-04 21:52:19 +02:00
Dominique Roux 031d59c82c Added Devuan support for __docker type 2019-08-04 21:23:44 +02:00
Darko Poljak f7efde0d0a ++changelog 2019-07-25 08:06:58 +02:00
poljakowski 9773fcf719 Merge branch 'master' into 'master'
Updated repository configuration for grafana dashboard type

See merge request ungleich-public/cdist!787
2019-07-25 08:05:05 +02:00
Dominique Roux a70d2e0af5 Had to change the apt_source_distribution to stable, since the repository doesn't differ in distributions 2019-07-24 13:35:46 +02:00
Dominique Roux 6bb58f8820 Updated the __grafana_dashboard type for the new package repository
- Changed the signing key uri
- Changed the repo uri
2019-07-24 13:32:39 +02:00
Darko Poljak 5c11c15ae4 Overcome bash CDPATH issue
Thanks to Dmitry Bogatov.
2019-06-23 20:00:25 +02:00
Darko Poljak 6915d30015 Release 5.1.2 2019-06-21 14:13:25 +02:00
Darko Poljak 8881ff2224 ++changelog 2019-06-21 12:55:33 +02:00
poljakowski b4f090fd7f Merge branch '__acl_improvements_vol3' into 'master'
__acl rewrite

See merge request ungleich-public/cdist!785
2019-06-21 12:55:08 +02:00
ander a4bc051ad9 __acl: use type deprecation 2019-06-21 13:02:44 +03:00
ander a5df0badaf __acl: add compatibility for deprecated parameters 2019-06-21 12:55:59 +03:00
ander 91a6ecc701 __acl: rewrite 2019-06-21 12:55:59 +03:00
Darko Poljak d723f60673 ++changelog 2019-06-20 18:12:50 +02:00
poljakowski 175ab90a9e Merge branch 'feature/support-type-param-deprecation' into 'master'
Add support for deprecated type parameters

See merge request ungleich-public/cdist!786
2019-06-20 18:12:26 +02:00
Darko Poljak 3cb4e76175 Allow custom message for each deprecated parameter 2019-06-20 10:54:40 +02:00
Darko Poljak 55ba49efac Add support for deprecated type parameters 2019-06-19 18:19:32 +02:00
Darko Poljak 8315677ad1 Release 5.1.1 2019-05-28 17:53:34 +02:00
poljakowski 3c8b470367 Merge branch 'manual/add-caveats-to-cdist-type-chapter' into 'master'
Stdin inside a loop caveats

Closes #778

See merge request ungleich-public/cdist!784
2019-05-25 20:06:07 +02:00
Darko Poljak 68837e45cc Document type stdin inside loop caveats 2019-05-25 20:02:45 +02:00
Darko Poljak 520cfeda98 ++ 2019-05-25 16:10:18 +02:00
poljakowski bd27d432b1 Merge branch '__acl_improvements_vol2' into 'master'
__acl improvements vol 2

See merge request ungleich-public/cdist!780
2019-05-25 16:06:46 +02:00
poljakowski 811ed151fc Merge branch '__apt_key' into 'master'
__apt_key improvements

See merge request ungleich-public/cdist!779
2019-05-25 15:58:40 +02:00
ander 1d57305d35 Use gpg key, fallback to deprecated apt-key
Fixes #762
2019-05-25 15:58:39 +02:00
Darko Poljak c58ae44409 Release 5.1.0 2019-05-22 18:34:31 +02:00
poljakowski 1f7d76ae75 Merge branch 'feature/support-type-deprecation' into 'master'
Add type deprecation support.

See merge request ungleich-public/cdist!783
2019-05-21 17:50:14 +02:00
Darko Poljak 4949af894e Add type deprecation support. 2019-05-20 18:50:25 +02:00
poljakowski ea291efbf6 Merge branch 'feature/cdist-new-type-helper-script' into 'master'
Add cdist-new-type helper scrpt

See merge request ungleich-public/cdist!782
2019-05-20 18:11:40 +02:00
Darko Poljak 34eec3c214 Add cdist-new-type helper scrpt 2019-05-20 18:10:35 +02:00
ander e30d76014a __acl: update man 2019-05-19 23:44:20 +03:00
ander 02e10b1ffd __acl: fix SC1117 2019-05-19 23:27:58 +03:00
ander 03f8c3aaed __acl: don't exit on missing file when dry run 2019-05-19 23:22:02 +03:00
Nico Schottelius 21a16f5584 consul, changelog, consul agent => alpine 2019-05-18 23:46:09 +02:00
ander 7a25ec00ed __acl: add TODO note about dry-run 2019-05-14 13:42:56 +03:00
ander 7dfc5bc473 __acl: we do not have to check here if file exist 2019-05-14 13:41:32 +03:00
ander ca8bc959ed __acl: add todo note 2019-05-14 13:27:43 +03:00
ander 4c21983698 __acl: remove macosx because no way to properly test 2019-04-24 00:39:54 +03:00
ander f586937614 __acl: drop Solaris because POSIX-draft ACL specification is not supported 2019-04-24 00:36:53 +03:00
ander d66b6969f3 __acl: rename missing_users_groups explorer to more generic name for future checks 2019-04-24 00:09:49 +03:00
ander 894311a572 __acl: if users/groups check fail, log error and exit in explorer 2019-04-24 00:08:43 +03:00
212 changed files with 12552 additions and 341 deletions

2
.gitignore vendored
View File

@ -34,7 +34,7 @@ cdist/inventory/
# Python: cache, distutils, distribution in general
__pycache__/
*.pyc
MANIFEST
/MANIFEST
dist/
cdist/version.py
cdist.egg-info/

View File

@ -31,9 +31,9 @@ help:
@echo "docs-clean clean documentation"
@echo "clean clean"
DOCS_SRC_DIR=docs/src
SPEECHDIR=docs/speeches
TYPEDIR=cdist/conf/type
DOCS_SRC_DIR=./docs/src
SPEECHDIR=./docs/speeches
TYPEDIR=./cdist/conf/type
SPHINXM=make -C $(DOCS_SRC_DIR) man
SPHINXH=make -C $(DOCS_SRC_DIR) html

View File

@ -451,7 +451,7 @@ eof
;;
shellcheck-scripts)
${SHELLCHECKCMD} scripts/cdist-dump || exit 0
${SHELLCHECKCMD} scripts/cdist-dump scripts/cdist-new-type || exit 0
;;
shellcheck-gencodes)

View File

@ -5,6 +5,7 @@ import logging
import collections
import functools
import cdist.configuration
import cdist.preos
# set of beta sub-commands
@ -20,6 +21,7 @@ parser = None
_verbosity_level_off = -2
_verbosity_level = {
None: logging.WARNING,
_verbosity_level_off: logging.OFF,
-1: logging.ERROR,
0: logging.WARNING,
@ -422,6 +424,9 @@ def get_parsers():
parser['inventory'].set_defaults(
func=cdist.inventory.Inventory.commandline)
# PreOs
parser['preos'] = parser['sub'].add_parser('preos', add_help=False)
# Shell
parser['shell'] = parser['sub'].add_parser(
'shell', parents=[parser['loglevel']])

View File

@ -1,7 +1,6 @@
#!/bin/sh
#
# 2010-2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -19,7 +18,12 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Retrieve the running hostname
#
if command -v uname >/dev/null; then
uname -n
if command -v hostname >/dev/null
then
hostname
else
uname -n
fi

View File

@ -18,13 +18,11 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
if command -v ip > /dev/null
if command -v ip >/dev/null
then
ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p'
elif command -v ifconfig > /dev/null
ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p'
elif command -v ifconfig >/dev/null
then
ifconfig -a \
| sed -n -E 's/^(.*)(:[[:space:]]*flags=|Link encap).*/\1/p' \
| sort -u
fi
ifconfig -a | sed -n -E 's/^(.*)(:[[:space:]]*flags=|Link encap).*/\1/p'
fi \
| sort -u

View File

@ -145,7 +145,7 @@ esac
if [ -f /etc/os-release ]; then
# already lowercase, according to:
# https://www.freedesktop.org/software/systemd/man/os-release.html
awk -F= '/^ID=/ {print $2;}' /etc/os-release
awk -F= '/^ID=/ { if ($2 ~ /^'"'"'(.*)'"'"'$/ || $2 ~ /^"(.*)"$/) { print substr($2, 2, length($2) - 2) } else { print $2 } }' /etc/os-release
exit 0
fi

View File

@ -18,30 +18,22 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
[ ! -e "/$__object_id" ] && exit 0
# TODO check if filesystem has ACL turned on etc
for parameter in user group
do
if [ ! -f "$__object/parameter/$parameter" ]
then
continue
fi
while read -r acl
if [ -f "$__object/parameter/acl" ]
then
grep -E '^(default:)?(user|group):' "$__object/parameter/acl" \
| while read -r acl
do
check="$( echo "$acl" | awk -F: '{print $1}' )"
param="$( echo "$acl" | awk -F: '{print $(NF-2)}' )"
check="$( echo "$acl" | awk -F: '{print $(NF-1)}' )"
if [ "$parameter" = 'user' ]
then
getent_db=passwd
else
getent_db="$parameter"
fi
[ "$param" = 'user' ] && db=passwd || db="$param"
if ! getent "$getent_db" "$check" > /dev/null
if ! getent "$db" "$check" > /dev/null
then
echo "missing $parameter '$check'"
echo "missing $param '$check'" >&2
exit 1
fi
done \
< "$__object/parameter/$parameter"
done
done
fi

View File

@ -20,59 +20,65 @@
file_is="$( cat "$__object/explorer/file_is" )"
[ "$file_is" = 'missing' ] && exit 0
missing_users_groups="$( cat "$__object/explorer/missing_users_groups" )"
if [ -n "$missing_users_groups" ]
then
echo "$missing_users_groups" >&2
exit 1
fi
[ "$file_is" = 'missing' ] && [ -z "$__cdist_dry_run" ] && exit 0
os="$( cat "$__global/explorer/os" )"
acl_is="$( cat "$__object/explorer/acl_is" )"
acl_path="/$__object_id"
if [ -f "$__object/parameter/default" ] && [ "$file_is" = 'directory' ]
acl_is="$( cat "$__object/explorer/acl_is" )"
if [ -f "$__object/parameter/acl" ]
then
set_default=1
acl_should="$( cat "$__object/parameter/acl" )"
elif
[ -f "$__object/parameter/user" ] \
|| [ -f "$__object/parameter/group" ] \
|| [ -f "$__object/parameter/mask" ] \
|| [ -f "$__object/parameter/other" ]
then
acl_should="$( for param in user group mask other
do
[ ! -f "$__object/parameter/$param" ] && continue
echo "$param" | grep -Eq 'mask|other' && sep=:: || sep=:
echo "$param$sep$( cat "$__object/parameter/$param" )"
done )"
else
set_default=0
echo 'no parameters set' >&2
exit 1
fi
acl_should="$( for parameter in user group mask other
do
if [ ! -f "$__object/parameter/$parameter" ]
then
continue
fi
if [ -f "$__object/parameter/default" ]
then
acl_should="$( echo "$acl_should" \
| sed 's/^default://' \
| sort -u \
| sed 's/\(.*\)/default:\1\n\1/' )"
fi
while read -r acl
do
if echo "$acl" | awk -F: '{ print $NF }' | grep -Fq 'X'
then
[ "$file_is" = 'directory' ] && rep=x || rep=-
if [ "$file_is" = 'regular' ] \
&& echo "$acl_should" | grep -Eq '^default:'
then
# only directories can have default ACLs,
# but instead of error,
# let's just remove default entries
acl_should="$( echo "$acl_should" | grep -Ev '^default:' )"
fi
acl="$( echo "$acl" | sed "s/\(.*\)X/\1$rep/" )"
fi
if echo "$acl_should" | awk -F: '{ print $NF }' | grep -Fq 'X'
then
[ "$file_is" = 'directory' ] && rep=x || rep=-
echo "$parameter" | grep -Eq '(mask|other)' && sep=:: || sep=:
echo "$parameter$sep$acl"
[ "$set_default" = '1' ] && echo "default:$parameter$sep$acl"
done \
< "$__object/parameter/$parameter"
done )"
acl_should="$( echo "$acl_should" | sed "s/\\(.*\\)X/\\1$rep/" )"
fi
setfacl_exec='setfacl'
if [ -f "$__object/parameter/recursive" ]
then
if echo "$os" | grep -Eq 'macosx|freebsd'
if echo "$os" | grep -Fq 'freebsd'
then
echo "$os setfacl do not support recursive operations" >&2
else
@ -82,44 +88,36 @@ fi
if [ -f "$__object/parameter/remove" ]
then
if echo "$os" | grep -Fq 'solaris'
then
# Solaris setfacl behaves differently.
# We will not support Solaris for now, because no way to test it.
# But adding support should be easy (use -s instead of -m on modify).
echo "$os setfacl do not support -x flag for ACL remove" >&2
else
echo "$acl_is" | while read -r acl
do
# Skip wanted ACL entries which already exist
# and skip mask and other entries, because we
# can't actually remove them, but only change.
if echo "$acl_should" | grep -Eq "^$acl" \
|| echo "$acl" | grep -Eq '^(default:)?(mask|other)'
then continue
fi
echo "$acl_is" | while read -r acl
do
# skip wanted ACL entries which already exist
# and skip mask and other entries, because we
# can't actually remove them, but only change.
if echo "$acl_should" | grep -Eq "^$acl" \
|| echo "$acl" | grep -Eq '^(default:)?(mask|other)'
then continue
fi
if echo "$os" | grep -Eq 'macosx|freebsd'
then
remove="$acl"
else
remove="$( echo "$acl" | sed 's/:...$//' )"
fi
if echo "$os" | grep -Fq 'freebsd'
then
remove="$acl"
else
remove="$( echo "$acl" | sed 's/:...$//' )"
fi
echo "$setfacl_exec -x \"$remove\" \"$acl_path\""
echo "removed '$remove'" >> "$__messages_out"
done
fi
echo "$setfacl_exec -x \"$remove\" \"$acl_path\""
echo "removed '$remove'" >> "$__messages_out"
done
fi
for acl in $acl_should
do
if ! echo "$acl_is" | grep -Eq "^$acl"
then
if echo "$os" | grep -Eq 'macosx|freebsd' \
if echo "$os" | grep -Fq 'freebsd' \
&& echo "$acl" | grep -Eq '^default:'
then
echo "setting default ACL in $os is currently not supported. sorry :(" >&2
echo "setting default ACL in $os is currently not supported" >&2
else
echo "$setfacl_exec -m \"$acl\" \"$acl_path\""
echo "added '$acl'" >> "$__messages_out"

View File

@ -8,46 +8,36 @@ cdist-type__acl - Set ACL entries
DESCRIPTION
-----------
ACL must be defined as 3-symbol combination, using ``r``, ``w``, ``x`` and ``-``.
Fully supported on Linux (tested on Debian and CentOS).
Partial support for FreeBSD, OSX and Solaris.
OpenBSD and NetBSD support is not possible.
Fully supported and tested on Linux (ext4 filesystem), partial support for FreeBSD.
See ``setfacl`` and ``acl`` manpages for more details.
OPTIONAL MULTIPLE PARAMETERS
REQUIRED MULTIPLE PARAMETERS
----------------------------
user
Add user ACL entry.
group
Add group ACL entry.
OPTIONAL PARAMETERS
-------------------
mask
Add mask ACL entry.
other
Add other ACL entry.
acl
Set ACL entry following ``getfacl`` output syntax.
BOOLEAN PARAMETERS
------------------
default
Set all ACL entries as default too.
Only directories can have default ACLs.
Setting default ACL in FreeBSD is currently not supported.
recursive
Make ``setfacl`` recursive (Linux only), but not ``getfacl`` in explorer.
default
Add default ACL entries (FreeBSD not supported).
remove
Remove undefined ACL entries (Solaris not supported).
ACL entries for ``mask`` and ``other`` can't be removed.
Remove undefined ACL entries.
``mask`` and ``other`` entries can't be removed, but only changed.
DEPRECATED PARAMETERS
---------------------
Parameters ``user``, ``group``, ``mask`` and ``other`` are deprecated and they
will be removed in future versions. Please use ``acl`` parameter instead.
EXAMPLES
@ -56,15 +46,30 @@ EXAMPLES
.. code-block:: sh
__acl /srv/project \
--default \
--recursive \
--remove \
--acl user:alice:rwx \
--acl user:bob:r-x \
--acl group:project-group:rwx \
--acl group:some-other-group:r-x \
--acl mask::r-x \
--acl other::r-x
# give Alice read-only access to subdir,
# but don't allow her to see parent content.
__acl /srv/project2 \
--remove \
--acl default:group:secret-project:rwx \
--acl group:secret-project:rwx \
--acl user:alice:--x
__acl /srv/project2/subdir \
--default \
--remove \
--user alice:rwx \
--user bob:r-x \
--group project-group:rwx \
--group some-other-group:r-x \
--mask r-x \
--other r-x
--acl group:secret-project:rwx \
--acl user:alice:r-x
AUTHORS

View File

@ -0,0 +1 @@
see manual for details

View File

@ -0,0 +1 @@
see manual for details

View File

@ -0,0 +1 @@
see manual for details

View File

@ -0,0 +1 @@
see manual for details

View File

@ -1,2 +1,3 @@
acl
user
group

View File

@ -27,6 +27,18 @@ else
keyid="$__object_id"
fi
apt-key export "$keyid" | head -n 1 | grep -Fqe "BEGIN PGP PUBLIC KEY BLOCK" \
&& echo present \
|| echo absent
keydir="$(cat "$__object/parameter/keydir")"
keyfile="$keydir/$__object_id.gpg"
if [ -d "$keydir" ]
then
if [ -f "$keyfile" ]
then echo present
else echo absent
fi
else
# fallback to deprecated apt-key
apt-key export "$keyid" | head -n 1 | grep -Fqe "BEGIN PGP PUBLIC KEY BLOCK" \
&& echo present \
|| echo absent
fi

View File

@ -31,12 +31,82 @@ if [ "$state_should" = "$state_is" ]; then
exit 0
fi
keydir="$(cat "$__object/parameter/keydir")"
keyfile="$keydir/$__object_id.gpg"
case "$state_should" in
present)
keyserver="$(cat "$__object/parameter/keyserver")"
echo "apt-key adv --keyserver \"$keyserver\" --recv-keys \"$keyid\""
if [ -f "$__object/parameter/uri" ]; then
uri="$(cat "$__object/parameter/uri")"
if [ -d "$keydir" ]; then
cat << EOF
curl -s -L \\
-o "$keyfile" \\
"$uri"
key="\$( cat "$keyfile" )"
if echo "\$key" | grep -Fq 'BEGIN PGP PUBLIC KEY BLOCK'
then
echo "\$key" | gpg --dearmor > "$keyfile"
fi
EOF
else
# fallback to deprecated apt-key
echo "curl -s -L '$uri' | apt-key add -"
fi
elif [ -d "$keydir" ]; then
# we need to kill gpg after 30 seconds, because gpg
# can get stuck if keyserver is not responding.
# exporting env var and not exit 1,
# because we need to clean up and kill dirmngr.
cat << EOF
gpgtmphome="\$( mktemp -d )"
if timeout 30s \\
gpg --homedir "\$gpgtmphome" \\
--keyserver "$keyserver" \\
--recv-keys "$keyid"
then
gpg --homedir "\$gpgtmphome" \\
--export "$keyid" \\
> "$keyfile"
else
export GPG_GOT_STUCK=1
fi
GNUPGHOME="\$gpgtmphome" gpgconf --kill dirmngr
rm -rf "\$gpgtmphome"
if [ -n "\$GPG_GOT_STUCK" ]
then
echo "GPG GOT STUCK - no response from keyserver after 30 seconds" >&2
exit 1
fi
EOF
else
# fallback to deprecated apt-key
echo "apt-key adv --keyserver \"$keyserver\" --recv-keys \"$keyid\""
fi
echo "added '$keyid'" >> "$__messages_out"
;;
absent)
echo "apt-key del \"$keyid\""
if [ -f "$keyfile" ]; then
echo "rm '$keyfile'"
else
# fallback to deprecated apt-key
echo "apt-key del \"$keyid\""
fi
echo "removed '$keyid'" >> "$__messages_out"
;;
esac

View File

@ -28,6 +28,12 @@ keyserver
the keyserver from which to fetch the key. If omitted the default set
in ./parameter/default/keyserver is used.
keydir
key save location, defaults to ``/etc/apt/trusted.pgp.d``
uri
the URI from which to download the key
EXAMPLES
--------
@ -47,15 +53,20 @@ EXAMPLES
# same thing with other keyserver
__apt_key UbuntuArchiveKey --keyid 437D05B5 --keyserver keyserver.ubuntu.com
# download key from the internet
__apt_key rabbitmq \
--uri http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
Ander Punnar <ander-at-kvlt-dot-ee>
COPYING
-------
Copyright \(C) 2011-2014 Steven Armstrong. You can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
Copyright \(C) 2011-2019 Steven Armstrong and Ander Punnar. You can
redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

View File

@ -0,0 +1,8 @@
#!/bin/sh -e
__package gnupg
if [ -f "$__object/parameter/uri" ]
then __package curl
else __package dirmngr
fi

View File

@ -0,0 +1 @@
/etc/apt/trusted.gpg.d

View File

@ -1,3 +1,5 @@
state
keyid
keyserver
keydir
uri

View File

@ -0,0 +1 @@
886614099 103959898 consul

View File

@ -0,0 +1 @@
https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip

View File

@ -42,7 +42,7 @@ source_file_name="${source##*/}"
cksum_should=$(cut -d' ' -f1,2 "$version_dir/cksum")
cat << eof
tmpdir=\$(mktemp -d --tmpdir="/tmp" "${__type##*/}.XXXXXXXXXX")
tmpdir=\$(mktemp -d -p /tmp "${__type##*/}.XXXXXXXXXX")
curl -s -L "$source" > "\$tmpdir/$source_file_name"
unzip -p "\$tmpdir/$source_file_name" > "${destination}.tmp"
rm -rf "\$tmpdir"

View File

@ -24,7 +24,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
scientific|centos|redhat|ubuntu|debian|devuan|archlinux|gentoo)
alpine|scientific|centos|redhat|ubuntu|debian|devuan|archlinux|gentoo)
# any linux should work
:
;;
@ -47,6 +47,7 @@ fi
if [ -f "$__object/parameter/direct" ]; then
__package unzip
__package curl
else
__staged_file /usr/local/bin/consul \
--source "$(cat "$version_dir/source")" \

View File

@ -0,0 +1,38 @@
#!/sbin/openrc-run
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
description="consul agent"
pidfile="${CONSUL_PIDFILE:-"/var/run/$RC_SVCNAME/pidfile"}"
command="${CONSUL_BINARY:-"/usr/local/bin/consul"}"
checkconfig() {
if [ ! -d /var/run/consul ] ; then
mkdir -p /var/run/consul || return 1
chown consul:consul /var/run/$NAME || return 1
chmod 2770 /var/run/$NAME || return 1
fi
}
start() {
need net
start-stop-daemon --start --quiet --oknodo \
--pidfile "$pidfile" --background \
--exec $command -- agent -pid-file="$pidfile" -config-dir /etc/consul/conf.d
}
start_pre() {
checkconfig
}
stop() {
if [ "${RC_CMD}" = "restart" ] ; then
checkconfig || return 1
fi
ebegin "Stopping $RC_SVCNAME"
start-stop-daemon --stop --exec "$command" \
--pidfile "$pidfile" --quiet
eend $?
}

View File

@ -1,7 +1,7 @@
#!/bin/sh -e
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2015-2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -23,7 +23,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
scientific|centos|debian|devuan|redhat|ubuntu)
alpine|scientific|centos|debian|devuan|redhat|ubuntu)
# whitelist safeguard
:
;;
@ -181,22 +181,25 @@ init_upstart()
# Install init script to start on boot
case "$os" in
centos|redhat)
os_version="$(sed 's/[^0-9.]//g' "$__global/explorer/os_version")"
major_version="${os_version%%.*}"
case "$major_version" in
[456])
init_sysvinit redhat
;;
7)
init_systemd
;;
*)
echo "Unsupported CentOS/Redhat version: $os_version" >&2
exit 1
;;
esac
;;
alpine|devuan)
init_sysvinit debian
;;
centos|redhat)
os_version="$(sed 's/[^0-9.]//g' "$__global/explorer/os_version")"
major_version="${os_version%%.*}"
case "$major_version" in
[456])
init_sysvinit redhat
;;
7)
init_systemd
;;
*)
echo "Unsupported CentOS/Redhat version: $os_version" >&2
exit 1
;;
esac
;;
debian)
os_version=$(cat "$__global/explorer/os_version")
@ -214,13 +217,9 @@ case "$os" in
exit 1
;;
esac
;;
devuan)
init_sysvinit debian
;;
;;
ubuntu)
init_upstart
;;
;;
esac

View File

@ -64,6 +64,43 @@ case "$os" in
require="__apt_source/docker" __package docker-ce --state "${state}"
fi
;;
devuan)
os_version="$(cat "$__global/explorer/os_version")"
case "$os_version" in
ascii)
distribution="stretch"
;;
jessie)
distribution="jessie"
;;
*)
echo "Your devuan release ($os_version) is currently not supported by this type (${__type##*/}).">&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
if [ "${state}" = "present" ]; then
__package apt-transport-https
__package ca-certificates
__package gnupg2
fi
__apt_key_uri docker --name "Docker Release (CE deb) <docker@docker.com>" \
--uri "https://download.docker.com/linux/${os}/gpg" --state "${state}"
require="__apt_key_uri/docker" __apt_source docker \
--uri "https://download.docker.com/linux/${os}" \
--distribution "${distribution}" \
--state "${state}" \
--component "stable"
if [ "$version" != "latest" ]; then
require="__apt_source/docker" __package docker-ce --version "${version}" --state "${state}"
else
require="__apt_source/docker" __package docker-ce --state "${state}"
fi
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2

View File

@ -18,4 +18,4 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
docker info 2>/dev/null | grep "^Swarm: " | cut -d " " -f 2-
docker info 2>/dev/null | grep '^ *Swarm: ' | awk '{print $2}'

View File

@ -19,32 +19,34 @@
#
#
state_is="$(cat "$__object/explorer/state")"
owner_is="$(cat "$__object/explorer/owner")"
group_is="$(cat "$__object/explorer/group")"
state_is=$(cat "$__object/explorer/state")
owner_is=$(cat "$__object/explorer/owner")
group_is=$(cat "$__object/explorer/group")
state_should="$(cat "$__object/parameter/state")"
state_should=$(cat "$__object/parameter/state")
branch="$(cat "$__object/parameter/branch")"
branch=$(cat "$__object/parameter/branch")
source="$(cat "$__object/parameter/source")"
source=$(cat "$__object/parameter/source")
destination="/$__object_id"
owner="$(cat "$__object/parameter/owner")"
group="$(cat "$__object/parameter/group")"
mode="$(cat "$__object/parameter/mode")"
owner=$(cat "$__object/parameter/owner")
group=$(cat "$__object/parameter/group")
mode=$(cat "$__object/parameter/mode")
[ "$state_should" = "$state_is" ] && \
[ "$owner" = "$owner_is" ] && \
[ "$group" = "$group_is" ] && \
[ -n "$mode" ] && exit 0
[ -f "$__object/parameter/recursive" ] && recursive='--recurse-submodules' || recursive=''
[ -f "$__object/parameter/shallow" ] && shallow='--depth 1 --shallow-submodules' || shallow=''
[ "$state_should" = "$state_is" ] \
&& [ "$owner" = "$owner_is" ] \
&& [ "$group" = "$group_is" ] \
&& [ -n "$mode" ] && exit 0
case $state_should in
present)
if [ "$state_should" != "$state_is" ]; then
echo git clone --quiet --branch "$branch" "$source" "$destination"
echo git clone --quiet "$recursive" "$shallow" --branch "$branch" "$source" "$destination"
fi
if { [ -n "$owner" ] && [ "$owner_is" != "$owner" ]; } || \
{ [ -n "$group" ] && [ "$group_is" != "$group" ]; }; then
@ -54,8 +56,9 @@ case $state_should in
echo chmod -R "$mode" "$destination"
fi
;;
# Handled in manifest
absent)
# Handled in manifest
;;
*)

View File

@ -35,6 +35,12 @@ mode
owner
User to chown to.
recursive
Passes the --recurse-submodules flag to git when cloning the repository.
shallow
Sets --depth=1 and --shallow-submodules for cloning repositories with big history.
EXAMPLES
--------

View File

@ -0,0 +1,2 @@
recursive
shallow

View File

@ -8,10 +8,16 @@ case $os in
debian|devuan)
case $os_version in
8*|jessie)
apt_source_distribution=jessie
# Differntation not needed anymore
apt_source_distribution=stable
;;
9*|ascii/ceres|ascii)
apt_source_distribution=stretch
# Differntation not needed anymore
apt_source_distribution=stable
;;
10*)
# Differntation not needed anymore
apt_source_distribution=stable
;;
*)
echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" >&2
@ -21,16 +27,15 @@ case $os in
__apt_key_uri grafana \
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
--uri https://packages.grafana.com/gpg.key
require="$require __apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--uri https://packages.grafana.com/oss/deb \
--distribution $apt_source_distribution \
--component main
__package apt-transport-https
require="$require __apt_source/grafana __package/apt-transport-https" __package grafana
require="$require __apt_source/grafana" __apt_update_index
require="$require __package/apt-transport-https __apt_update_index" __package grafana
require="$require __package/grafana" __start_on_boot grafana-server
require="$require __start_on_boot/grafana-server" __process grafana-server --start "service grafana-server start"
;;

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -21,7 +22,21 @@
# Get an existing groups group entry.
#
not_supported() {
echo "Your operating system ($("$__explorer/os")) is currently not supported." >&2
echo "Cannot extract group information." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
}
name=$__object_id
getent group "$name" || true
if command -v getent >/dev/null
then
getent group "$name" || true
elif [ -f /etc/group ]
then
grep "^${name}:" /etc/group || true
else
not_supported
fi

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2011-2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -22,13 +23,28 @@
#
name=$__object_id
os="$("$__explorer/os")"
os=$("$__explorer/os")
case "$os" in
"freebsd"|"netbsd")
echo "$os does not have getent gshadow"
exit 0
;;
not_supported() {
echo "Your operating system ($os) is currently not supported." >&2
echo "Cannot extract group information." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
}
case $os in
"freebsd"|"netbsd")
echo "$os does not have getent gshadow" >&2
exit 0
;;
esac
getent gshadow "$name" || true
if command -v getent >/dev/null
then
getent gshadow "$name" || true
elif [ -f /etc/gshadow ]
then
grep "^${name}:" /etc/gshadow || true
else
not_supported
fi

View File

@ -21,4 +21,4 @@
# Check whether system has hostnamectl
#
command -v hostnamectl || true
command -v hostnamectl 2>/dev/null || true

View File

@ -0,0 +1,10 @@
#!/bin/sh -e
command -v getconf >/dev/null || exit 0
val=$(getconf HOST_NAME_MAX 2>/dev/null) || exit 0
if test -n "${val}" -a "${val}" != 'undefined'
then
echo "${val}"
fi

View File

@ -2,6 +2,7 @@
#
# 2014-2017 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -19,60 +20,81 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
if [ -f "$__object/parameter/name" ]; then
name_should="$(cat "$__object/parameter/name")"
else
name_should="${__target_host%%.*}"
fi
os=$(cat "$__global/explorer/os")
name_running=$(cat "$__global/explorer/hostname")
name_config=$(cat "$__object/explorer/hostname_file")
name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig")
has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
if test -s "$__object/parameter/name"
then
name_should=$(cat "$__object/parameter/name")
else
case $os
in
# RedHat-derivatives and BSDs
centos|fedora|redhat|scientific|freebsd|macosx|netbsd|openbsd)
# Hostname is FQDN
name_should="${__target_host}"
;;
*)
# Hostname is only first component of FQDN
name_should="${__target_host%%.*}"
;;
esac
fi
################################################################################
# If everything is ok -> exit
# Check if the (running) hostname is already correct
#
case "$os" in
archlinux|debian|suse|ubuntu|devuan|coreos|alpine)
if [ "$name_config" = "$name_should" ] && [ "$name_running" = "$name_should" ]; then
exit 0
fi
;;
scientific|centos|freebsd|openbsd)
if [ "$name_sysconfig" = "$name_should" ] && [ "$name_running" = "$name_should" ]; then
exit 0
fi
;;
*)
echo "Unsupported os: $os" >&2
exit 1
;;
esac
test "$name_running" != "$name_should" || exit 0
################################################################################
# Setup hostname
#
echo changed >> "$__messages_out"
echo 'changed' >>"$__messages_out"
# Use the good old way to set the hostname even on machines running systemd.
case "$os" in
archlinux|debian|ubuntu|devuan|centos|coreos|alpine)
printf "printf '%%s\\\\n' '$name_should' > /etc/hostname\\n"
echo "hostname -F /etc/hostname"
# Use the good old way to set the hostname.
case $os
in
alpine|debian|devuan|ubuntu)
echo 'hostname -F /etc/hostname'
;;
freebsd|openbsd)
archlinux)
echo 'command -v hostnamectl >/dev/null 2>&1' \
"&& hostnamectl set-hostname '$name_should'" \
"|| hostname '$name_should'"
;;
centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|gentoo|void)
echo "hostname '$name_should'"
;;
suse)
macosx)
echo "scutil --set HostName '$name_should'"
;;
solaris)
echo "uname -S '$name_should'"
;;
slackware|suse|opensuse-leap)
# We do not read from /etc/HOSTNAME, because the running
# hostname is the first component only while the file contains
# the FQDN.
echo "hostname '$name_should'"
printf "printf '%%s\\\\n' '$name_should' > /etc/HOSTNAME\\n"
;;
*)
# Fall back to set the hostname using hostnamectl, if available.
if test -n "$has_hostnamectl"
then
# Don't use hostnamectl as the primary means to set the hostname for
# systemd systems, because it cannot be trusted to work reliably and
# exit with non-zero when it fails (e.g. hostname too long,
# D-Bus failure, etc.).
echo "hostnamectl set-hostname \"\$(cat /etc/hostname)\""
echo "test \"\$(hostname)\" = \"\$(cat /etc/hostname)\"" \
" || hostname -F /etc/hostname"
else
printf "echo 'Unsupported OS: %s' >&2\nexit 1\n" "$os"
fi
;;
esac
if [ "$has_hostnamectl" ]; then
# Allow hostnamectl set-hostname to fail silently.
# Who the fuck invented a tool that needs dbus to set the hostname anyway ...
echo "hostnamectl set-hostname '$name_should' || true"
fi

View File

@ -8,7 +8,10 @@ cdist-type__hostname - Set the hostname
DESCRIPTION
-----------
Set's the hostname on various operating systems.
Sets the hostname on various operating systems.
**Tip:** For advice on choosing a hostname, see
`RFC 1178 <https://tools.ietf.org/html/rfc1178>`_.
REQUIRED PARAMETERS
@ -18,7 +21,7 @@ None.
OPTIONAL PARAMETERS
-------------------
name
The hostname to set. Defaults to the first segment of __target_host
The hostname to set. Defaults to the first segment of __target_host
(${__target_host%%.*})

View File

@ -2,6 +2,7 @@
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -19,50 +20,170 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
not_supported() {
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
}
set_hostname_systemd() {
echo "$1" | __file /etc/hostname --source -
}
os=$(cat "$__global/explorer/os")
if [ -f "$__object/parameter/name" ]; then
name_should="$(cat "$__object/parameter/name")"
os_version=$(cat "$__global/explorer/os_version")
os_major=$(echo "$os_version" | grep -o '^[0-9][0-9]*')
max_len=$(cat "$__object/explorer/max_len")
has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
if test -s "$__object/parameter/name"
then
name_should=$(cat "$__object/parameter/name")
else
case "$os" in
openbsd)
name_should="${__target_host}"
;;
*)
name_should="${__target_host%%.*}"
;;
case $os
in
# RedHat-derivatives and BSDs
centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|slackware)
# Hostname is FQDN
name_should="${__target_host}"
;;
suse|opensuse-leap)
# Classic SuSE stores the FQDN in /etc/HOSTNAME, while
# systemd does not. The running hostname is the first
# component in both cases.
# In versions before 15.x, the FQDN is stored in /etc/hostname.
if test -n "$has_hostnamectl" && test "$os_major" -ge 15 \
&& test "$os_major" -ne 42
then
name_should="${__target_host%%.*}"
else
name_should="${__target_host}"
fi
;;
*)
# Hostname is only first component of FQDN on all other systems.
name_should="${__target_host%%.*}"
;;
esac
fi
if test -n "$max_len" && test "$(printf '%s' "$name_should" | wc -c)" -gt "$max_len"
then
printf "Host name too long. Up to %u characters allowed.\n" "${max_len}" >&2
exit 1
fi
not_supported() {
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
}
case $os
in
alpine|debian|devuan|ubuntu|void)
echo "$name_should" | __file /etc/hostname --source -
;;
archlinux)
if test -n "$has_hostnamectl"
then
set_hostname_systemd "$name_should"
else
echo 'Ancient ArchLinux variants without hostnamectl are not supported.' >&2
exit 1
# Only for ancient ArchLinux, write to /etc/rc.conf on pre-systemd
# versions. There are some versions which use /etc/hostname but not
# systemd. It is unclear which ones these are.
case "$os" in
archlinux|debian|suse|ubuntu|devuan|coreos|alpine)
# __key_value '/etc/rc.conf:HOSTNAME' \
# --file /etc/rc.conf \
# --delimiter '=' --exact_delimiter \
# --key 'HOSTNAME' \
# --value "\"$name_should\""
fi
;;
centos|fedora|redhat|scientific)
if test -z "$has_hostnamectl"
then
# Only write to /etc/sysconfig/network on non-systemd versions.
# On systemd-based versions this entry is ignored.
__key_value '/etc/sysconfig/network:HOSTNAME' \
--file /etc/sysconfig/network \
--delimiter '=' --exact_delimiter \
--key HOSTNAME \
--value "\"$name_should\""
else
set_hostname_systemd "$name_should"
fi
;;
gentoo)
# Only write to /etc/conf.d/hostname on OpenRC-based installations.
# On systemd use hostnamectl(1) in gencode-remote.
if test -z "$has_hostnamectl"
then
__key_value '/etc/conf.d/hostname:hostname' \
--file /etc/conf.d/hostname \
--delimiter '=' --exact_delimiter \
--key 'hostname' \
--value "\"$name_should\""
else
set_hostname_systemd "$name_should"
fi
;;
freebsd)
__key_value '/etc/rc.conf:hostname' \
--file /etc/rc.conf \
--delimiter '=' --exact_delimiter \
--key 'hostname' \
--value "\"$name_should\""
;;
macosx)
# handled in gencode-remote
:
;;
scientific|centos)
__key_value sysconfig-hostname \
--file /etc/sysconfig/network \
--delimiter '=' \
--key HOSTNAME \
--value "$name_should" --exact_delimiter
;;
freebsd)
__key_value rcconf-hostname \
netbsd)
__key_value '/etc/rc.conf:hostname' \
--file /etc/rc.conf \
--delimiter '=' \
--delimiter '=' --exact_delimiter \
--key 'hostname' \
--value "$name_should"
--value "\"$name_should\""
# To avoid confusion, ensure that the hostname is only stored once.
__file /etc/myname --state absent
;;
openbsd)
echo "$name_should" | __file /etc/myname --source -
;;
slackware)
# We write the FQDN into /etc/HOSTNAME. But /etc/rc.d/rc.M will only
# read the first component from this file and set it as the running
# hostname on boot.
echo "$name_should" | __file /etc/HOSTNAME --source -
;;
solaris)
echo "$name_should" | __file /etc/nodename --source -
;;
suse|opensuse-leap)
# Modern SuSE provides /etc/HOSTNAME as a symlink for
# backwards-compatibility. Unfortunately it cannot be used
# here as __file does not follow the symlink.
# Therefore, we use the presence of the hostnamectl binary as
# an indication of which file to use. This unfortunately does
# not work correctly on openSUSE 12.x which provides
# hostnamectl but not /etc/hostname.
if test -n "$has_hostnamectl" -a "$os_major" -gt 12
then
hostname_file='/etc/hostname'
else
hostname_file='/etc/HOSTNAME'
fi
echo "$name_should" | __file "$hostname_file" --source -
;;
*)
not_supported
# On other operating systems we fall back to systemd's
# hostnamectl if available…
if test -n "$has_hostnamectl"
then
set_hostname_systemd "$name_should"
else
not_supported
fi
;;
esac

View File

@ -7,6 +7,12 @@ if [ -z "${certbot_fullpath}" ]; then
os_version="$(cat "${__global}/explorer/os_version")"
case "$os" in
archlinux)
__package certbot
;;
alpine)
__package certbot
;;
debian)
case "$os_version" in
8*)
@ -33,6 +39,10 @@ if [ -z "${certbot_fullpath}" ]; then
require="__apt_source/stretch-backports" __package_apt certbot \
--target-release stretch-backports
;;
10*)
__package_apt certbot
;;
*)
echo "Unsupported OS version: $os_version" >&2
exit 1
@ -62,11 +72,12 @@ if [ -z "${certbot_fullpath}" ]; then
--distribution ascii-backports \
--component main
require="__apt_source/ascii-backports" __package_apt python-certbot \
--target-release ascii-backports
require="__apt_source/ascii-backports" __package_apt certbot \
--target-release ascii-backports
;;
beowulf*)
__package_apt certbot
;;
*)
echo "Unsupported OS version: $os_version" >&2
exit 1

View File

@ -34,6 +34,9 @@ case "$type" in
echo 0
fi
;;
alpine)
echo 0
;;
*) echo "Your specified type ($type) is currently not supported." >&2
echo "Please contribute an implementation for it if you can." >&2
;;

View File

@ -26,6 +26,7 @@ else
amazon|scientific|centos|fedora|redhat) echo "yum" ;;
debian|ubuntu|devuan) echo "apt" ;;
archlinux) echo "pacman" ;;
alpine) echo "apk" ;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1

View File

@ -47,6 +47,10 @@ case "$type" in
echo "pacman --noprogressbar --sync --refresh"
echo "pacman package database synced (age was: $currage)" >> "$__messages_out"
;;
alpine)
echo "apk update"
echo "apk package database updated."
;;
*)
echo "Don't know how to manage packages for type: $type" >&2
exit 1

View File

@ -1,6 +1,6 @@
#!/bin/sh
#!/bin/sh -e
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2019 Daniel Tschada
#
# This file is part of cdist.
#
@ -17,14 +17,8 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Retrieve the contents of /etc/hostname
#
# Almost any distribution
if [ -f /etc/hostname ]; then
cat /etc/hostname
# SuSE
elif [ -f /etc/HOSTNAME ]; then
cat /etc/HOSTNAME
fi
install="$(cat "$__object/parameter/install")"
state="$(cat "$__object/parameter/state")"
user="$(cat "$__object/parameter/user")"
version="$(cat "$__object/parameter/version")"

View File

@ -0,0 +1,61 @@
cdist-type__podman_compose(7)
=============================
NAME
----
cdist-type__podman_compose - install podman-compose
DESCRIPTION
-----------
Installs podman-compose package.
State 'absent' will not remove podman binary itself,
only podman-compose binary will be removed
REQUIRED PARAMETERS
-------------------
install
defaults to 'pip'
OPTIONAL PARAMETERS
-------------------
state
'present' or 'absent', defaults to 'present'
user
the user who owns the file, defaults to 'root'
BOOLEAN PARAMETERS
------------------
None.
EXAMPLES
--------
.. code-block:: sh
# Install podman-compose
__podman_compose
# Install latest version via pip
__podman_compose --state present --install pip
# Install latest version via pip and change user
__podman_compose --state present --install pip --user root
# Remove podman-compose
__podman_compose --state absent
AUTHORS
-------
Daniel Tschada <mail--@--moep.name>
COPYING
-------
Copyright \(C) 2019 Daniel Tschada. Free use of this software is
granted under the terms of the GNU General Public License version 3 or later (GPLv3+).

View File

@ -0,0 +1,50 @@
#!/bin/sh -e
#
# 2019 Daniel Tschada
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# shellcheck disable=SC2154
# shellcheck disable=SC2034
install="$(cat "$__object/parameter/install")"
state="$(cat "$__object/parameter/state")"
user="$(cat "$__object/parameter/user")"
version="$(cat "$__object/parameter/version")"
# install it with pip
if [ "${install}" = "pip" ]; then
if [ "${state}" = "present" ]; then
__package_pip podman-compose --state present --pip /usr/local/bin/podman-compose --runas "${user}"
elif [ "${state}" = "absent" ]; then
__package_pip podman-compose --state absent
else
if [ "${state}" != "present" ] -a [ "${state}" != "absent" ]; then
echo "Unknown state: ${state}" >&2
exit 1
else
echo "Unknown user: ${user}" >&2
exit 1
fi
fi
else
echo "Unknown user: ${install}" >&2
exit 1
fi

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1 @@
root

View File

@ -0,0 +1,4 @@
install
state
user
version

View File

@ -0,0 +1 @@
install

View File

@ -30,6 +30,7 @@ if [ -f "$__object/parameter/install-from-backports" ]; then
*)
echo "--install-from-backports is only supported on Devuan -- ignoring." >&2
echo "Send a pull request if you require it." >&2
exit 1
;;
esac
else
@ -60,5 +61,5 @@ require="$require __directory/$storage_path $require_pkg" \
__config_file $CONF \
--source "$config" \
--group prometheus --mode 640 \
--onchange "service prometheus-alertmanager reload" # TODO when a config-check tool is available, check config here
--onchange "service prometheus-alertmanager restart" # TODO when a config-check tool is available, check config here

View File

@ -5,9 +5,11 @@ export GOBIN=/opt/gocode/bin # where to find go binaries
exporter="$(cat "$__object/parameter/exporter")"
[ -z "$exporter" ] && exporter="$__object_id"
__user prometheus --system
__user prometheus
require="__user/prometheus" __group prometheus
require="__group/prometheus" __user_groups prometheus --group prometheus
require=""
require="__user_groups/prometheus"
case $exporter in
node)
TEXTFILES=/service/node-exporter/textfiles # path for the textfiles collector

View File

@ -33,11 +33,13 @@ if [ -f "$__object/parameter/install-from-backports" ]; then
*)
echo "--install-from-backports is only supported on Devuan -- ignoring." >&2
echo "Send a pull request if you require it." >&2
exit 1
;;
esac
else
__package prometheus
require_pkg="__package/prometheus"
__package prometheus-blackbox-exporter
require_pkg="__package/prometheus __package/prometheus-blackbox-exporter"
fi
##### PREPARE PATHS AND SUCH ################################################
@ -58,7 +60,7 @@ require="$require __directory/$storage_path $require_pkg" \
__config_file $CONF \
--source "$config" \
--group prometheus --mode 640 \
--onchange "promtool check config $CONF && service prometheus reload"
--onchange "promtool check config $CONF && service prometheus restart"
for file in $rule_files; do
dest=$CONF_DIR/$(basename "$file")
@ -66,6 +68,6 @@ for file in $rule_files; do
__config_file "$dest" \
--source "$file" \
--owner prometheus \
--onchange "promtool check rules '$dest' && service prometheus reload"
--onchange "promtool check rules '$dest' && service prometheus restart"
done

View File

@ -0,0 +1,131 @@
#!/bin/sh -e
#
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Check if the given editor is present on the target system and determine its
# absolute path.
#
die() {
echo "$@" >&2
exit 1
}
editor_missing() { die "Editor '$1' is missing on the target system."; }
editor_no_alternative() {
die "Editor '$1' is not in the alternatives list of the target system." \
"$(test -n "${editors}" && printf '\nPlease choose one of:\n\n%s\n' "${editors}")"
}
# No need to check for the path if the file is supposed to be removed.
test "$(cat "${__object}/parameter/state")" != 'absent' || exit 0
case $("${__explorer}/os")
in
debian|devuan|ubuntu)
has_alternatives=true
# NOTE: Old versions do not support `--list`, in this case ignore the errors.
# This will require an absolute path to be provided, though.
editors=$(update-alternatives --list editor 2>/dev/null)
;;
*)
# NOTE: RedHat has an alternatives system but it doesn't usually track
# editors and it is a pain to extract the list.
has_alternatives=false
;;
esac
# Read --editor parameter and check its value since it is "optional"
editor=$(cat "${__object}/parameter/editor" 2>/dev/null) || true
test -n "${editor}" || die 'Please provide an --editor to configure.'
case $editor
in
/*)
is_abspath=true
;;
*/*)
die 'Relative editor paths are not supported'
;;
*)
is_abspath=false
;;
esac
if $has_alternatives && test -n "${editors}"
then
IFS='
'
if ! $is_abspath
then
# First, try to resolve the absolute path using $editors.
while true
do
for e in $editors
do
if test "$(basename "${e}")" = "${editor}"
then
editor="${e}"
break 2 # break out of both loops
fi
done
# Iterating through alternatives did not yield a result
editor_no_alternative "${editor}"
break
done
fi
# Check if editor is present
test -f "${editor}" || editor_missing "${editor}"
for e in $editors
do
if test "${editor}" = "${e}"
then
# Editor is part of the alternatives list -> use it!
echo "${editor}"
exit 0
fi
done
editor_no_alternative "${editor}"
else
# NOTE: This branch is mostly for RedHat-based systems which do
# not track editor alternatives. To make this type useful
# on RedHat at all we allow an absoloute path to be provided
# in any case.
if $is_abspath
then
test -x "${editor}" || editor_missing "${editor}"
echo "${editor}"
exit 0
else
die "The target doesn't list any editor alternatives. " \
"Please specify an absolute path or populate the alternatives list."
fi
fi
# The script should never reach this statement!
exit 1

View File

@ -0,0 +1,26 @@
#!/bin/sh -e
#
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Determines the primary group of the user.
#
user=$__object_id
id -gn "${user}" 2>/dev/null

View File

@ -0,0 +1,33 @@
#!/bin/sh -e
#
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Determines the home folder of the target user.
#
user=$__object_id
home=$(getent passwd "${user}" | cut -d':' -f6)
if ! test -d "${home}"
then
echo "Cannot find home directory of user ${user}" >&2
exit 1
fi
echo "${home}"

View File

@ -0,0 +1,78 @@
cdist-type__sensible_editor(7)
==============================
NAME
----
cdist-type__sensible_editor - Select the sensible-editor
DESCRIPTION
-----------
This cdist type allows you to select the :strong:`sensible-editor` for
a given user.
REQUIRED PARAMETERS
-------------------
editor
Name or path of the editor to be selected.
On systems other than Debian derivatives an absolute path is required.
It is permissible to omit this parameter if --state is absent.
OPTIONAL PARAMETERS
-------------------
state
'present', 'absent', or 'exists'. Defaults to 'present', where:
present
the sensible-editor is exactly what is specified in --editor.
absent
no sensible-editor configuration is present.
exists
the sensible-editor will be set to what is specified in --editor,
unless there already is a configuration on the target system.
EXAMPLES
--------
.. code-block:: sh
__sensible_editor root --editor /bin/ed # ed(1) is the standard
__sensible_editor noob --editor nano
LIMITATIONS
-----------
This type depends upon the :strong:`sensible-editor`\ (1) script which
is part of the sensible-utils package.
Therefore, the following operating systems are supported:
* Debian 8 (jessie) or later
* Devuan
* Ubuntu 8.10 (intrepid) or later
* RHEL/CentOS 7 or later (EPEL repo required)
* Fedora 21 or later
Note: on old versions of Ubuntu the sensible-* utils are part of the
debianutils package.
SEE ALSO
--------
:strong:`select-editor`\ (1), :strong:`sensible-editor`\ (1).
AUTHOR
-------
Dennis Camera <dennis.camera--@--ssrq-sds-fds.ch>
COPYING
-------
Copyright \(C) 2019 Dennis Camera.
You can redistribute it and/or modify it under the terms of the GNU General
Public License as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.

View File

@ -0,0 +1,94 @@
#!/bin/sh -e
# -*- mode: sh; indent-tabs-mode: t -*-
#
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
version_ge() {
awk -F '[^0-9.]' -v target="${1:?}" '
function max(x, y) { return x > y ? x : y; }
BEGIN {
getline;
nx = split($1, x, ".");
ny = split(target, y, ".");
for (i = 1; i <= max(nx, ny); ++i) {
diff = int(x[i]) - int(y[i]);
if (diff < 0) exit 1;
else if (diff > 0) exit 0;
else continue;
}
}'
}
not_supported() {
echo "OS ${os} does not support __sensible_editor." >&2
echo 'If it does, please provide a patch.' >&2
exit 1
}
os=$(cat "${__global}/explorer/os")
os_version=$(cat "${__global}/explorer/os_version")
state=$(cat "${__object}/parameter/state")
user=$__object_id
if test "${state}" != 'present' && test "${state}" != 'exists' && test "${state}" != 'absent'
then
echo 'Only "present", "exists", and "absent" are allowed for --state' >&2
exit 1
fi
package_name='sensible-utils'
case $os
in
debian)
pkg_type='apt'
;;
devuan)
pkg_type='apt'
;;
ubuntu)
(echo "${os_version}" | version_ge 10.04) || package_name='debianutils'
pkg_type='apt'
;;
centos|fedora|redhat|scientific)
pkg_type='yum'
;;
*)
not_supported
;;
esac
if test "${state}" != 'absent'
then
__package "${package_name}" --state present \
--type "${pkg_type}"
export require="__package/${package_name}"
fi
editor_path=$(cat "${__object}/explorer/editor_path")
user_home=$(cat "${__object}/explorer/user_home")
group=$(cat "${__object}/explorer/group")
__file "${user_home}/.selected_editor" --state "${state}" \
--owner "${user}" --group "${group}" --mode 0644 \
--source - <<EOF
# Managed by cdist
SELECTED_EDITOR="${editor_path}"
EOF

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1,2 @@
editor
state

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -19,9 +20,42 @@
#
if [ -f "$__object/parameter/file" ]; then
cat "$__object/parameter/file"
cat "$__object/parameter/file"
else
owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")"
home=$(getent passwd "$owner" | cut -d':' -f 6)
echo "$home/.ssh/authorized_keys"
if [ -s "$__object/parameter/owner" ]
then
owner=$(cat "$__object/parameter/owner")
else
owner="$__object_id"
fi
if command -v getent >/dev/null
then
owner_line=$(getent passwd "$owner")
elif [ -f /etc/passwd ]
then
case $owner
in
[0-9][0-9]*)
owner_line=$(awk -F: "\$3 == \"${owner}\" { print }" /etc/passwd)
;;
*)
owner_line=$(awk -F: "\$1 == \"${owner}\" { print }" /etc/passwd)
;;
esac
fi
if [ "$owner_line" ]
then
home=$(echo "$owner_line" | cut -d':' -f6)
fi
if [ ! -d "$home" ]
then
# Don't know how to determine user's home directory, fall back to ~
home="~$owner"
command -v realpath >/dev/null && home=$(realpath "$home")
fi
[ -d "$home" ] && echo "$home/.ssh/authorized_keys"
fi

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -18,6 +19,28 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")"
gid="$(getent passwd "$owner" | cut -d':' -f 4)"
getent group "$gid" || true
if [ -s "$__object/parameter/owner" ]
then
owner=$(cat "$__object/parameter/owner")
else
owner="$__object_id"
fi
if command -v getent >/dev/null
then
gid=$(getent passwd "$owner" | cut -d':' -f4)
getent group "$gid" || true
else
# Fallback to local file scanning
case $owner
in
[0-9][0-9]*)
gid=$(awk -F: "\$3 == \"${owner}\" { print \$4 }" /etc/passwd)
;;
*)
gid=$(awk -F: "\$1 == \"${owner}\" { print \$4 }" /etc/passwd)
;;
esac
awk -F: "\$3 == \"$gid\" { print }" /etc/group
fi

View File

@ -23,6 +23,12 @@ owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")"
state="$(cat "$__object/parameter/state" 2>/dev/null)"
file="$(cat "$__object/explorer/file")"
if [ ! -f "$__object/parameter/nofile" ] && [ -z "$file" ]
then
echo "Cannot determine path of authorized_keys file" >&2
exit 1
fi
if [ ! -f "$__object/parameter/noparent" ] || [ ! -f "$__object/parameter/nofile" ]; then
group="$(cut -d':' -f 1 "$__object/explorer/group")"
if [ -z "$group" ]; then

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -18,5 +19,11 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
gid="$("$__type_explorer/passwd" | cut -d':' -f 4)"
getent group "$gid" || true
gid=$("$__type_explorer/passwd" | cut -d':' -f4)
if command -v getent >/dev/null
then
getent group "$gid" || true
else
awk -F: "\$3 == \"$gid\" { print }" /etc/group
fi

View File

@ -2,6 +2,7 @@
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -21,4 +22,16 @@
owner="$__object_id"
getent passwd "$owner" || true
if command -v getent >/dev/null
then
getent passwd "$owner" || true
else
case $owner in
[0-9][0-9]*)
awk -F: "\$3 == \"$owner\" { print }" /etc/passwd
;;
*)
grep "^$owner:" /etc/passwd || true
;;
esac
fi

View File

@ -2,6 +2,7 @@
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2018 Takashi Yoshi (takashi at yoshi.email)
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -24,7 +25,7 @@ os=$(cat "$__global/explorer/os")
case "$os" in
# Linux
redhat|centos|ubuntu|debian|devuan|archlinux|coreos)
alpine|redhat|centos|ubuntu|debian|devuan|archlinux|coreos)
:
;;
# BSD

View File

@ -23,11 +23,9 @@
if [ -f "$__object/parameter/gid" ]; then
gid=$(cat "$__object/parameter/gid")
getent=$(command -v getent)
if [ X != X"${getent}" ]; then
"${getent}" group "$gid" || true
if command -v getent >/dev/null; then
getent group "$gid" || true
elif [ -f /etc/group ]; then
grep -E "^(${gid}|([^:]+:){2}${gid}):" /etc/group || true
fi
fi

View File

@ -23,9 +23,8 @@
name=$__object_id
getent=$(command -v getent)
if [ X != X"${getent}" ]; then
"${getent}" passwd "$name" || true
if command -v getent >/dev/null; then
getent passwd "$name" || true
elif [ -f /etc/passwd ]; then
grep "^${name}:" /etc/passwd || true
fi

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/sh -e
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
@ -22,18 +22,19 @@
#
name=$__object_id
os="$("$__explorer/os")"
# Default to using shadow passwords
database="shadow"
case "$os" in
"freebsd"|"netbsd"|"openbsd") database="passwd";;
case $("$__explorer/os") in
'freebsd'|'netbsd'|'openbsd')
database='passwd'
;;
# Default to using shadow passwords
*)
database='shadow'
;;
esac
getent=$(command -v getent)
if [ X != X"${getent}" ]; then
"${getent}" "$database" "$name" || true
if command -v getent >/dev/null; then
getent "$database" "$name" || true
elif [ -f /etc/shadow ]; then
grep "^${name}:" /etc/shadow || true
fi

View File

@ -1,6 +1,6 @@
#!/bin/sh
#!/bin/sh -e
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
@ -16,11 +16,7 @@
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Retrieve the contents of /etc/hostname
#
if [ -f /etc/sysconfig/network ]; then
awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network
if [ -d /etc/apache2/mods-enabled ]; then
ls -1 /etc/apache2/conf-enabled/
fi

View File

@ -0,0 +1,5 @@
#!/bin/sh -e
if [ -d /etc/apache2/mods-enabled ]; then
/usr/sbin/apachectl -t -D DUMP_MODULES | awk '/.*_module/ { gsub(/_module.*$/, ""); gsub(/^ /, ""); print }'
fi

View File

@ -0,0 +1,56 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
state=$(cat "$__object/parameter/state")
os=$(cat "$__global/explorer/os")
case "$os" in
debian|ubuntu)
:
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
if [ "$state" = "present" ]; then
if ! grep -q ^rewrite "$__object/explorer/active-modules"; then
echo "a2enmod rewrite >/dev/null"
echo "mod:rewrite enabled" >> "$__messages_out"
fi
if ! grep -q "^cgi$" "$__object/explorer/active-modules"; then
echo "a2enmod cgi >/dev/null"
echo "mod:cgi enabled" >> "$__messages_out"
fi
if ! grep -q ^xymon.conf "$__object/explorer/active-conf"; then
echo "a2enconf xymon >/dev/null"
echo "conf:xymon enabled" >> "$__messages_out"
fi
fi
if grep -q "^mod:.* enabled" "$__messages_out"; then
echo "systemctl restart apache2.service"
echo "apache restarted" >> "$__messages_out"
elif grep -q "^conf:xymon enabled" "$__messages_out"; then
echo "systemctl reload apache2.service"
echo "apache reloaded" >> "$__messages_out"
fi

View File

@ -0,0 +1,79 @@
cdist-type__xymon_apache(7)
===========================
NAME
----
cdist-type__xymon_apache - Configure apache2-webserver for Xymon
DESCRIPTION
-----------
This cdist type installs and configures apache2 to be used "exclusively" (in
the sense that no other use is taken care of) with Xymon (the systems and
network monitor).
It depends on `__xymon_server`.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
state
'present', 'absent', defaults to 'present'.
ipacl
IP(-ranges) that have access to the Xymon webpages and CGIs. Apache2-style
syntax suitable for `Require ip ...`. Example: `192.168.1.0/24 10.0.0.0/8`
MESSAGES
--------
mod:rewrite enabled
apache module enabled
conf:xymon enabled
apache config for xymon enabled
apache restarted
apache2.service was reloaded
apache reloaded
apache2.service was restarted
EXPLORERS
---------
active-conf
lists apache2 `conf-enabled`
active-modules
lists active apache2-modules
EXAMPLES
--------
.. code-block:: sh
# minmal, only localhost-access:
__xymon_apache
# allow more IPs to access the Xymon-webinterface:
__xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8" --state "present"
SEE ALSO
--------
:strong:`cdist__xymon_server`\ (7)
AUTHORS
-------
Thomas Eckert <tom--@--it-eckert.de>
COPYING
-------
Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

View File

@ -0,0 +1,42 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
state=$(cat "$__object/parameter/state")
os=$(cat "$__global/explorer/os")
case "$os" in
debian|ubuntu)
:
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
__package apache2 --state "$state"
## edit xymon.conf IP-ranges
if [ -f "$__object/parameter/ipacl" ]; then
require="__package/xymon" __line /etc/apache2/conf-available/xymon.conf \
--line " Require ip $(cat "$__object/parameter/ipacl")" \
--after "^[[:space:]]*Require local" \
--state "present"
fi

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1,2 @@
state
ipacl

View File

View File

@ -0,0 +1,28 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
servers=$(cat "$__object/parameter/servers")
if grep -q ^__key_value/CLIENTHOSTNAME "$__messages_in" || grep -q ^__key_value/XYMONSERVERS "$__messages_in" ; then
echo "systemctl restart xymon-client"
echo "restarted" >> "$__messages_out"
cat <<-EOT
echo "xymon-client xymon-client/XYMONSERVERS string $servers" | debconf-set-selections
EOT
fi

View File

@ -0,0 +1,66 @@
cdist-type__xymon_client(7)
===========================
NAME
----
cdist-type__xymon_client - Install the Xymon client
DESCRIPTION
-----------
This cdist type installs the Xymon client and configures it to report with
FQDN.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
state
'present', 'absent', defaults to 'present'.
servers
One or more IP addresses (space separated) of the Xymon server(s) to report
to. While DNS-names are ok it is discouraged, defaults to 127.0.0.1.
BOOLEAN PARAMETERS
------------------
msgcache
Enable xymon `msgcache`. Note: XYMONSERVER has to be `127.0.0.1` for using
`msgcache` (see `msgcache (8)` of the xymon documentation for details).
EXAMPLES
--------
.. code-block:: sh
# minimal, report to 127.0.0.1
__xymon_client
# specify server:
__xymon_client --servers "192.168.1.1"
# activate `msgcache` for passive client:
__xymon_client --msgcache
SEE ALSO
--------
:strong:`cdist__xymon_server`\ (7), :strong:`xymon`\ (7), :strong:`msgcache`\ (8)
AUTHORS
-------
Thomas Eckert <tom--@--it-eckert.de>
COPYING
-------
Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

View File

@ -0,0 +1,54 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
state=$(cat "$__object/parameter/state")
servers=$(cat "$__object/parameter/servers")
os=$(cat "$__global/explorer/os")
case "$os" in
debian|ubuntu)
:
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
__package xymon-client --state "$state"
if [ -f "$__object/parameter/msgcache" ]; then
require="__package/xymon-client" __line /etc/xymon/clientlaunch.cfg \
--regex DISABLED --state absent
fi
require="__package/xymon-client" __key_value CLIENTHOSTNAME \
--file /etc/default/xymon-client \
--value "'$__target_hostname'" \
--delimiter '=' \
--state "$state"
require="__package/xymon-client" __key_value XYMONSERVERS \
--file /etc/default/xymon-client \
--value "'$servers'" \
--delimiter '=' \
--state "$state"
## CLI-usage often requires a shell:
require="__package/xymon-client" __user xymon --shell "/bin/bash" --state "$state"

View File

@ -0,0 +1 @@
msgcache

View File

@ -0,0 +1 @@
127.0.0.1

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1,2 @@
state
servers

View File

View File

@ -0,0 +1,23 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
## to speed up config-reload we send a HUP to the server process:
cat <<-EOT
pkill -HUP xymond || { echo "HUPing xymond failed" >&2; exit 1; }
EOT

View File

@ -0,0 +1,78 @@
cdist-type__xymon_config(7)
===========================
NAME
----
cdist-type__xymon_config - Deploy a Xymon configuration-directory
DESCRIPTION
-----------
This cdist type deploys a full Xymon configuration directory from the files-dir
to the host. This type requires an installed Xymon server, e.g. deployed by
`__xymon_server`.
WARNING: This type _replaces_ the `/etc/xymon/`-directory! The previous
contents is replaced/deleted!
REQUIRED PARAMETERS
-------------------
confdir
The directory in `./files/` that contains the `/etc/xymon/`-content to be
deployed.
OPTIONAL PARAMETERS
-------------------
owner
passed as-is as `--owner` to `__rsync`
group
passed as-is as `--group` to `__rsync`
OPTIONAL MULTIPLE PARAMETERS
----------------------------
rsync-opts
identical to __rsync type, only `--`-options are supported
REQUIRED FILES
--------------
The directory specified by `confdir` has to contain a valid xymon-configuration
(`/etc/xymon/`) _plus_ the `ext/`-directory that normally resides in
`/usr/lib/xymon/server/`.
EXAMPLES
--------
.. code-block:: sh
__xymon_config --confdir=xymon.example.com
# this will replace /etc/xymon/ on the target host with
# the contents from __xymon_config/files/xymon.example.com/
## the same but set ownership to `xymon:xymon` and exclude
## the `netrc`-file:
__xymon_config --confdir=xymon.example.com \
--owner xymon --group xymon \
--rsync-opts "exclude=netrc"
SEE ALSO
--------
:strong:`cdist__xymon_server`\ (7), :strong:`cdist__rsync`\ (7), :strong:`xymon`\ (7)
AUTHORS
-------
Thomas Eckert <tom--@--it-eckert.de>
COPYING
-------
Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

View File

@ -0,0 +1,43 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
confdir=$(cat "$__object/parameter/confdir")
set --
if [ -f "$__object/parameter/owner" ]; then
owner=$(cat "$__object/parameter/owner")
set -- "$@" "--owner $owner"
fi
if [ -f "$__object/parameter/group" ]; then
group=$(cat "$__object/parameter/group")
set -- "$@" "--group $group"
fi
## pass `--rsync-opts` as-is to `__rsync`:
if [ -f "$__object/parameter/rsync-opts" ]; then
while read -r opts; do
# shellcheck disable=SC2089
set -- "$@" "--rsync-opts '$opts'"
done < "$__object/parameter/rsync-opts"
fi
# shellcheck disable=SC2068,SC2090
__rsync /etc/xymon/ \
--source "$__type/files/$confdir/" \
--rsync-opts "delete" \
$@

View File

@ -0,0 +1,2 @@
owner
group

View File

@ -0,0 +1 @@
rsync-opts

View File

@ -0,0 +1 @@
confdir

View File

View File

@ -0,0 +1,26 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
## "move" user-modified dirs to /etc/xymon to be managed by __xymon_config:
cat <<-EOT
if [ ! -L /usr/lib/xymon/server/ext ]; then
mv /usr/lib/xymon/server/ext /etc/xymon
ln -s /etc/xymon/ext /usr/lib/xymon/server/
fi
EOT

View File

@ -0,0 +1,87 @@
cdist-type__xymon_server(7)
===========================
NAME
----
cdist-type__xymon_server - Install a Xymon server
DESCRIPTION
-----------
This cdist type installs a Xymon (https://www.xymon.com/) server and (optional)
required helper packages.
This includes the Xymon client as a dependency, so NO NEED to install
`__xymon_client` separately.
To access the webinterface a webserver is required. The cdist-type
`__xymon_apache` can be used to install and configure the apache webserver for
the use with Xymon.
Further and day-to-day configuration of Xymon can either be done manually in
`/etc/xymon/` or the directory can be deployed and managed by `__xymon_config`.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
state
'present', 'absent', defaults to 'present'. If '--install_helpers' is
specified for 'absent' the helper packages will be un-installed.
BOOLEAN PARAMETERS
------------------
install_helpers
Install helper packages used by Xymon (fping, heirloom-mailx, traceroute,
ntpdate).
EXAMPLES
--------
.. code-block:: sh
# minmal
__xymon_server
# the same
__xymon_server --state present
# also install helper packages:
__xymon_server --install_helpers
# examples to give a more complete picture: __xymon_server installed on
# `xymon.example.com` w/ IP 192.168.1.1:
#
# install webserver and grant 2 private subnets access to the webinterface:
__xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8"
# deploy server-configuration with __xymon_config:
__xymon_config --confdir=xymon.example.com
# install xymon-client on other machines (not needed on the server):
__xymon_client --servers "192.168.1.1"
SEE ALSO
--------
:strong:`cdist__xymon_apache`\ (7), :strong:`cdist__xymon_config`\ (7),
:strong:`cdist__xymon_client`\ (7), :strong:`xymon`\ (7)
AUTHORS
-------
Thomas Eckert <tom--@--it-eckert.de>
COPYING
-------
Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

View File

@ -0,0 +1,50 @@
#!/bin/sh -e
#
# 2018-2019 Thomas Eckert (tom at it-eckert.de)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
state=$(cat "$__object/parameter/state")
if [ -f "$__object/parameter/install_helpers" ]; then
install_helpers=1
else
install_helpers=0
fi
os=$(cat "$__global/explorer/os")
case "$os" in
debian|ubuntu)
:
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
__package xymon --state "$state"
## install helper-packages/tools used by the xymon server if requested:
if [ "$install_helpers" = "1" ]; then
__package fping --state "$state"
__package heirloom-mailx --state "$state"
__package traceroute --state "$state"
__package ntpdate --state "$state"
fi
## CLI-usage often requires a shell:
require="__package/xymon" __user xymon --shell "/bin/bash" --state "$state"

View File

@ -0,0 +1 @@
install_helpers

Some files were not shown because too many files have changed in this diff Show More