Compare commits

...

337 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
0bdc62482a add new type __xymon_client 2019-10-08 19:03:38 +02:00
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
48ed7f1754 correct condition -- should check on remote side 2019-10-08 18:38:33 +02:00
f35a1b9cdf add new type __xymon_apache as a helper for __xymon_server
Details in `man.rst`
2019-10-08 18:34:08 +02:00
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
a4bc051ad9 __acl: use type deprecation 2019-06-21 13:02:44 +03:00
a5df0badaf __acl: add compatibility for deprecated parameters 2019-06-21 12:55:59 +03:00
91a6ecc701 __acl: rewrite 2019-06-21 12:55:59 +03:00
Darko Poljak
d723f60673 ++changelog 2019-06-20 18:12:50 +02:00
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
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
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
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
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
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
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
e30d76014a __acl: update man 2019-05-19 23:44:20 +03:00
02e10b1ffd __acl: fix SC1117 2019-05-19 23:27:58 +03:00
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
Darko Poljak
4a5425a95e Release 5.0.2 2019-05-17 13:03:54 +02:00
Darko Poljak
d604a9db7a Fix pycodestyle 2019-05-17 13:03:54 +02:00
Darko Poljak
7195b594f3 ++changelog 2019-05-16 21:59:39 +02:00
f376eb361f Merge branch 'dry_run_env_var' into 'master'
set __cdist_dry_run env var if dry-run

See merge request ungleich-public/cdist!781
2019-05-16 21:58:47 +02:00
69622b0fa5 set __cdist_dry_run env var if dry-run 2019-05-16 21:58:47 +02:00
Nico Schottelius
fe643b9092 ++doc 2019-05-14 17:10:46 +02:00
Nico Schottelius
ce52203ba3 __user add alpine support 2019-05-14 17:10:26 +02:00
Nico Schottelius
5f462d6380 ++alpine support 2019-05-14 16:49:33 +02:00
7a25ec00ed __acl: add TODO note about dry-run 2019-05-14 13:42:56 +03:00
7dfc5bc473 __acl: we do not have to check here if file exist 2019-05-14 13:41:32 +03:00
ca8bc959ed __acl: add todo note 2019-05-14 13:27:43 +03:00
Nico Schottelius
569ae29955 [__package_apk] fix / add support for @yrepo syntax 2019-05-14 11:47:15 +02:00
Darko Poljak
66cdbc5233 Simplify maintainer's helper script 2019-05-09 21:05:33 +02:00
Darko Poljak
afa00a9094 Fix build-helper script 2019-05-09 19:35:52 +02:00
Darko Poljak
a8ee4356ef Release 5.0.1 2019-05-09 19:11:09 +02:00
Darko Poljak
15f01149f9 Update old homepage residual refs and non working git protocol 2019-05-09 08:26:42 +02:00
Darko Poljak
73fd1ffbc1 Update homepage 2019-05-08 23:38:43 +02:00
5ceb4928c7 Merge branch 'cleanup/rearrange-makefile-and-build-helper' into 'master'
Re-arrange Makefile and build-helper script

See merge request ungleich-public/cdist!778
2019-05-08 22:37:26 +02:00
Darko Poljak
4f40c6ac65 Re-arrange Makefile and build-helper script
Maintainers should use build-helper script.
End users should use Makefile, which contains targets
that can be run on pure source (without git repository).
2019-05-08 22:34:03 +02:00
Darko Poljak
d696a55879 ++changelog 2019-05-06 17:13:36 +02:00
fb52bfb353 Merge branch 'documentation/update-best-practice' into 'master'
Add 'Perils of CDIST_ORDER_DEPENDENCY' sub-section

See merge request ungleich-public/cdist!777
2019-05-06 17:12:47 +02:00
Darko Poljak
02eb6c75a7 Add 'CDIST_ORDER_DEPENDENCY kills parallelization' 2019-05-06 17:11:23 +02:00
Darko Poljak
28082c710a Add refs to perils of CDIST_ORDER_DEPENDENCY 2019-05-06 11:11:10 +02:00
Darko Poljak
735f57b3a0 Add 'Perils of CDIST_ORDER_DEPENDENCY' sub-section 2019-05-05 18:09:17 +02:00
Darko Poljak
4d75a05e35 Rm redundant tag description from rel notes 2019-05-05 10:31:23 +02:00
Darko Poljak
aad6c34178 Release 5.0.0 2019-05-05 00:03:04 +02:00
Darko Poljak
10a29ca9e6 Fix pycodestyle issue 2019-05-05 00:03:04 +02:00
954663475a Merge branch 'cdist-5.0.0' into 'master'
Cdist 5.0.0

See merge request ungleich-public/cdist!775
2019-05-04 11:39:52 +02:00
Darko Poljak
513fde1cc1 ++changelog 2019-05-04 10:51:10 +02:00
Darko Poljak
d242f1e758 Unify build-helper scripts 2019-05-04 10:09:39 +02:00
Darko Poljak
2f93320627 Generating speeches is not part of cdist release
Speeches should be generated on demand when needed
and the cdist website should be updated.
2019-05-03 22:18:19 +02:00
Darko Poljak
249ac917d3 Changes due to new website 2019-05-03 22:18:19 +02:00
Darko Poljak
0ab43e2405 Release -j/--jobs option, i.e. make it non-beta 2019-05-03 22:18:19 +02:00
Darko Poljak
bd9884fac4 Tell curl to use HTTP version 1.1
By default, was getting the following error:
curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
2019-05-03 22:16:51 +02:00
Darko Poljak
71945ef956 Fix copy-paste thing 2019-05-03 21:55:27 +02:00
Darko Poljak
fe833fdfcb Sign git tag as one of the last steps
If it fails then the whole release should not fail,
signing git tag can be tried again.
2019-05-03 21:46:17 +02:00
Darko Poljak
6258e397ed Include changelog in gitlab release 2019-05-03 21:39:25 +02:00
Darko Poljak
2a0a24eccc ++changelog 2019-05-03 14:38:48 +02:00
de1c198dc0 Merge branch 'feature/detect-dependency-cycle' into 'master'
Detect dependency cycle as soon as possible

See merge request ungleich-public/cdist!774
2019-05-03 14:38:09 +02:00
Darko Poljak
edfaa65d2b Detect dependency cycle as soon as possible 2019-05-01 14:19:08 +02:00
Darko Poljak
2505023387 Append requirement only if already not present 2019-05-01 12:31:30 +02:00
Darko Poljak
6ad261fdf2 ++changelog 2019-04-25 23:04:38 +02:00
Darko Poljak
8b93bf0218 Migrate from github to ungleich gitlab 2019-04-25 22:23:06 +02:00
Darko Poljak
3ca337dfe0 ++changelog 2019-04-24 12:23:37 +02:00
Darko Poljak
880f653ec2
Merge pull request #771 from sideeffect42/quote-block
__block: Quote prefix/suffix
2019-04-24 12:23:19 +02:00
Darko Poljak
5b20950045
Merge pull request #773 from sideeffect42/postgres-nopw
__postgres_{database,role}: Run psql with --no-password (-w)
2019-04-24 12:20:48 +02:00
Darko Poljak
281691cfd9
Merge pull request #772 from sideeffect42/openbsd-init
explorer/init: Add support for OpenBSD
2019-04-24 12:17:11 +02:00
Takashi Yoshi
f7ace88ec2 [__postgres_{database,role}] Run psql with --no-password (-w)
cdist does not work with interactive processes, so it's better to fail when
manual password input is required.
2019-04-24 11:38:31 +02:00
Takashi Yoshi
6dd5278ade [explorer/init] Add support for OpenBSD 2019-04-24 11:29:24 +02:00
Takashi Yoshi
510ea220f2 [type/__block] Quote prefix and suffix correctly
Before prefix and suffix were not allowed to contain " (quotes).
2019-04-24 11:27:26 +02:00
4c21983698 __acl: remove macosx because no way to properly test 2019-04-24 00:39:54 +03:00
f586937614 __acl: drop Solaris because POSIX-draft ACL specification is not supported 2019-04-24 00:36:53 +03:00
d66b6969f3 __acl: rename missing_users_groups explorer to more generic name for future checks 2019-04-24 00:09:49 +03:00
894311a572 __acl: if users/groups check fail, log error and exit in explorer 2019-04-24 00:08:43 +03:00
Darko Poljak
31b9859e08 ++changelog 2019-04-23 17:22:02 +02:00
Dmitry Bogatov
a95d4ffefa Fix spelling error in manpage 2019-04-23 17:18:28 +02:00
Darko Poljak
2536cd6f95 Release 4.11.1 2019-04-22 21:12:09 +02:00
Darko Poljak
7c0ba0d5be pycodestyle 2019-04-22 21:11:36 +02:00
Darko Poljak
6bd34c74d3 ++ 2019-04-22 21:03:53 +02:00
Darko Poljak
e516c9741a
Merge pull request #770 from darko-poljak/bugfix/disks-should-not-break-config
Print empty disk list for unsupported OS
2019-04-22 21:00:17 +02:00
Darko Poljak
7ca66b7b6a ++changelog 2019-04-22 09:22:52 +02:00
Darko Poljak
c2d32a78a9
Merge pull request #768 from 4nd3r/fixes_for_solaris
[RFC] fixes for solaris
2019-04-22 09:20:57 +02:00
Darko Poljak
5314f514c5 Print empty disk list for unsupported OS 2019-04-22 09:12:20 +02:00
Darko Poljak
a8588019ee ++changelog 2019-04-21 07:46:32 +02:00
Darko Poljak
84c4bf5577
Merge pull request #767 from darko-poljak/feature/better-explorer-error-report
Report explorer error better
2019-04-21 07:46:28 +02:00
Darko Poljak
b0273af0d4 Rm relicts, pypi before web publishing 2019-04-20 17:41:07 +02:00
Darko Poljak
c10074780e Release 4.11.0 2019-04-20 17:09:26 +02:00
Darko Poljak
d08ab628da ++ 2019-04-20 17:04:34 +02:00
Darko Poljak
c8bf78d651
Merge pull request #763 from darko-poljak/bugfix/disks-explorer-fallback
explorer/disks: do fallback right, in a POSIX way
2019-04-20 17:03:43 +02:00
038524ba30 support solaris in __(file|directory)/explorer/stat 2019-04-20 16:10:17 +03:00
e3a900c1c9 __ssh_authorized_keys: remove legacy code 2019-04-20 16:10:17 +03:00
Darko Poljak
087066687c Report explorer error better
Fixes #766
2019-04-20 14:30:28 +02:00
Darko Poljak
b5bdb54b7f Currently support only Linux, FreeBSD, OpenBSD, NetBSD
Make no assumptions, but rather output that system is unsupported
and ask the user to add support for it.
2019-04-20 13:08:22 +02:00
Darko Poljak
250f3d3fb8 shellcheck: remove unused var 2019-04-20 12:40:04 +02:00
Darko Poljak
3b3ac95ac3 ++changelog 2019-04-20 12:35:47 +02:00
Darko Poljak
f8d36446db
Merge pull request #765 from 4nd3r/__better_interfaces
global interfaces explorer: only check if we have ip or ifconfig
2019-04-20 12:35:24 +02:00
ab3544d5e8 global interfaces explorer: only check if we have ip or ifconfig and be more compatible.
tests on debian, centos, freebsd, openbsd, netbsd and solaris confirm that this is enough and extra os check is not needed here.
2019-04-20 02:05:32 +03:00
Darko Poljak
69fc80ec95 ++ 2019-04-19 17:50:09 +02:00
Darko Poljak
e32982a648
Merge pull request #760 from 4nd3r/__acl_improvements
__acl improvements
2019-04-19 17:49:46 +02:00
108e46abee __acl: fix removal in freebsd 2019-04-19 15:04:18 +03:00
186ce77bb2 __acl: add messaging 2019-04-19 14:58:44 +03:00
c7e6109462 __acl: tabs vs spaces 2019-04-19 14:49:02 +03:00
05225352aa __acl: check for missing users and groups (common mistake) 2019-04-19 14:48:26 +03:00
6d71ae342a __acl: update man more 2019-04-19 14:47:16 +03:00
13df0a2a2b __acl: update man 2019-04-19 14:11:29 +03:00
8729e39c21 __acl: combine two explorers into one 2019-04-19 13:48:24 +03:00
86f45db1b9 __acl: add nice oneliners and move default ACL decision out of the loop 2019-04-19 13:30:50 +03:00
0f3c162696 __acl: setting default ACL in FreeBSD and macOS is currently not supported 2019-04-19 13:16:35 +03:00
0809d89836 __acl: replace sed -r where possible or make it portable without -r 2019-04-19 12:56:55 +03:00
f5d3196dd4 __acl: getfacl's -E not supported on FreeBSD 2019-04-19 11:31:38 +03:00
Darko Poljak
82f310f4f8 ++changelog 2019-04-19 09:36:24 +02:00
Darko Poljak
3defdfa8df
Merge pull request #757 from darko-poljak/bugfix/order_dependency
Fix circular dep for CDIST_ORDER_DEPENDENCY
2019-04-19 09:36:03 +02:00
Nico Schottelius
aba1ae68f0 [explorer] disks: use echo instead of find as fallback
Fixes #761
2019-04-17 20:50:39 +02:00
68f61c35ff __acl: check for X after last occurrence of colon 2019-04-16 23:36:54 +03:00
f23099218a __acl: juggle man sections around because user/group are more important parameters 2019-04-16 23:29:38 +03:00
7924c1339c __acl: avoid duplication and safer sed for last occurence replacement 2019-04-16 23:28:30 +03:00
8b3c84dfef __acl: remove whitespace before inline comments too 2019-04-16 23:15:58 +03:00
a1634b3ec0 __acl: optimize gencode-remote 2019-04-16 19:24:38 +03:00
c1a34caba7 __acl: add "other" ACL entry support and some comments, remove getfacl's inline comments 2019-04-16 19:06:48 +03:00
e04d647d8e __acl: fix always check first if path exists 2019-04-16 18:09:47 +03:00
53c963b2ee __acl: be bit more precise where the X is 2019-04-16 15:35:11 +03:00
8b9b2c56ab __acl: be more strict because of reasons 2019-04-16 15:28:25 +03:00
cea639d1c9 __acl: we can't remove mask 2019-04-16 15:27:47 +03:00
731986ef8b __acl: trying to understand X 2019-04-16 15:21:41 +03:00
9e3cd47b9a __acl: command -v stdout to devnull 2019-04-16 15:03:07 +03:00
2b5887bdbd __acl: we only care whether file is directory 2019-04-16 14:51:26 +03:00
ab954ffbcf __acl: always check first if path exists 2019-04-16 14:44:32 +03:00
ef8ff06b5f __acl: only directories can have default ACLs 2019-04-16 14:39:45 +03:00
d71eb3d8bd __acl: (open|net)bsd do not have (get|set)facl 2019-04-16 14:20:13 +03:00
2cde09648c __acl: check if getfacl is available 2019-04-16 14:15:48 +03:00
Darko Poljak
e997e98a73 ++changelog 2019-04-16 11:02:51 +02:00
Darko Poljak
c7a4ae112f
Merge pull request #759 from jimis/acl_mask
Add support for ACL mask.
2019-04-16 11:00:27 +02:00
Dimitrios Apostolou
437af3a0a3 Silence getfacl
otherwise it always prints the message:

    getfacl: Removing leading '/' from absolute path names
2019-04-15 20:51:02 +02:00
Nico Schottelius
63d7499b75 [directory] add alpine support 2019-04-15 19:27:42 +02:00
Nico Schottelius
1722fced72 [file] add alpine support 2019-04-15 19:13:44 +02:00
Nico Schottelius
a1cb9ee869 [locale/alpine] exit 0 in gencode-remote 2019-04-15 18:56:51 +02:00
Nico Schottelius
e290733a00 [locale] Add alpine support 2019-04-15 18:54:30 +02:00
Nico Schottelius
f4db6e908e [hostname] add alpine support 2019-04-15 18:48:49 +02:00
Nico Schottelius
c801fb4965 [timezone] + alpine support 2019-04-15 18:44:30 +02:00
Dimitrios Apostolou
6062e3557c Output of grep should be quiet, as we care only for the exit code. 2019-04-15 18:05:16 +02:00
Dimitrios Apostolou
45e9ed441e Add support for ACL mask. 2019-04-15 18:05:16 +02:00
Nico Schottelius
978aee668c ++changelog 2019-04-15 17:03:12 +02:00
Nico Schottelius
ec935353d7 [__start_on_boot] Merge alpine and gentoo, update gentoo 2019-04-15 17:02:09 +02:00
Nico Schottelius
dbf29c18c1 [__start_on_boot] alpine fix 2019-04-15 16:41:27 +02:00
Nico Schottelius
707426d1f0 [__start_on_boot] add code for alpine handling, fix explorer 2019-04-15 16:35:10 +02:00
Nico Schottelius
e32d92c109 [__start_on_boot] Begin to add alpine support 2019-04-15 16:32:54 +02:00
Nico Schottelius
c7a9e60de0 Merge branch 'master' of github.com:ungleich/cdist 2019-04-15 16:20:31 +02:00
Nico Schottelius
c17f5a7ccd ++changelog 2019-04-15 16:13:25 +02:00
Nico Schottelius
3a2041019b [alpine] add support for alpine in __package and __package_apk 2019-04-15 16:11:58 +02:00
Darko Poljak
797522f91e Fix circular dep for CDIST_ORDER_DEPENDENCY
Fixes #756
2019-04-14 16:58:18 +02:00
Darko Poljak
d18584b4ff Update gitignore 2019-04-13 20:54:59 +02:00
Darko Poljak
51e650423e Fix version.py location inside raw source archive
Note that this fix only matters for maintainers using build-helper
script. Source archive is generated during release process and
uploaded to github, along its signature.
For 4.10.11 those files were fixed and uploaded manually after
build-helper script process has been finished. In future releases
this process will be automatic - no need for manual step that was
necessary for 4.10.11.
2019-04-13 20:43:11 +02:00
Darko Poljak
b37b25f573 Release 4.10.11 2019-04-13 19:53:54 +02:00
Darko Poljak
4d9a8d78f7 ++changelog 2019-04-13 19:50:44 +02:00
Darko Poljak
b21b6d0a7e
Merge pull request #755 from 4nd3r/bsd_stat_fix
fix __(file|directory)/explorer/stat for BSDs
2019-04-13 19:49:45 +02:00
44c9d09383 fix __(file|directory)/explorer/stat for BSDs 2019-04-12 23:34:28 +03:00
Darko Poljak
4c8037764a ++changelog 2019-04-12 20:41:11 +02:00
Ander Punnar
1c152f0acb fix disks explorer (#753)
* fix disks explorer

* fix SC2230

* exclude floppies

* update comment about excluded floppies

* add link to linux documentation about device majors

* try to support netbsd

* update possible netbsd disk devices
2019-04-12 20:41:05 +02:00
Darko Poljak
20a16fe853 Add version.py into generated raw source archive
Resolves #751
2019-04-12 19:58:43 +02:00
Darko Poljak
279aada5db Fix broken quiet mode
Resolves #754
2019-04-12 09:13:25 +02:00
Darko Poljak
a4ed9e4d0e Release 4.10.10 2019-04-11 14:46:56 +02:00
Darko Poljak
2ec553b480 Add cdist-dump man page 2019-04-11 14:30:23 +02:00
Darko Poljak
7a68df48f1 Add missing delimiter argument 2019-04-11 14:10:18 +02:00
Darko Poljak
d11ac7dda4 Rename debug-dump.sh to cdist-dump 2019-04-11 13:56:03 +02:00
Darko Poljak
540434557d ++changelog 2019-04-11 13:43:13 +02:00
Darko Poljak
e37d955845
Merge pull request #752 from 4nd3r/__link_messaging
__link: add messaging
2019-04-11 13:42:53 +02:00
204a572709 __link: add messaging 2019-04-11 13:59:15 +03:00
Darko Poljak
13671c666c ++changelog 2019-04-11 08:20:52 +02:00
Darko Poljak
1ba5f6276e
Merge pull request #748 from markasoftware/ufw
UFW (Uncomplicated FireWall)
2019-04-11 08:19:37 +02:00
Mark Polyakov
0ce96f0860 Added __ufw and __ufw_rule. 2019-04-10 19:45:34 -07:00
Darko Poljak
e90e296266 Release 4.10.9 2019-04-09 22:46:03 +02:00
Darko Poljak
671bb82a46 Fix shellcheck issues 2019-04-09 22:44:40 +02:00
Darko Poljak
f6b318bb00 Fire onchange for present and exists states
Even if no attribute is changed.
Fixes #750.
2019-04-09 22:23:21 +02:00
Darko Poljak
8ee667f57f ++changelog 2019-04-09 22:08:47 +02:00
Darko Poljak
1402e3f084
Merge pull request #749 from darko-poljak/feature/debug-dump-script
Add debug dump script
2019-04-09 22:07:16 +02:00
Darko Poljak
9cd95f12dc Add debug dump script 2019-04-09 10:41:00 +02:00
Darko Poljak
cabb0be7b6 ++changelog 2019-04-08 08:25:53 +02:00
Steven Armstrong
88513e6693 __ssh_authorized_keys: properly handle multiple --option parameters, fixes #393
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
2019-04-07 12:17:19 +02:00
285 changed files with 14424 additions and 1850 deletions

2
.gitattributes vendored
View file

@ -4,3 +4,5 @@
docs/speeches export-ignore
docs/video export-ignore
docs/src/man7 export-ignore
bin/build-helper export-ignore
README-maintainers export-ignore

4
.gitignore vendored
View file

@ -12,6 +12,7 @@ Session.vim
# Temporary
.netrwhist
*~
*.tmp
# Auto-generated tag files
tags
# Persistent undo
@ -33,7 +34,7 @@ cdist/inventory/
# Python: cache, distutils, distribution in general
__pycache__/
*.pyc
MANIFEST
/MANIFEST
dist/
cdist/version.py
cdist.egg-info/
@ -43,6 +44,7 @@ _build/
docs/dist
# Ignore temp files used for signing
cdist-*.tar
cdist-*.tar.gz
cdist-*.tar.gz.asc

216
Makefile
View file

@ -18,36 +18,30 @@
#
#
helper=./bin/build-helper
.PHONY: help
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo "man build only man user documentation"
@echo "html build only html user documentation"
@echo "docs build both man and html user documentation"
@echo "dotman build man pages for types in your ~/.cdist directory"
@echo "speeches build speeches pdf files"
@echo "install install in the system site-packages directory"
@echo "install-user install in the user site-packages directory"
@echo "docs-clean clean documentation"
@echo "clean clean"
DOCS_SRC_DIR=docs/src
SPEECHDIR=docs/speeches
TYPEDIR=cdist/conf/type
WEBSRCDIR=docs/web
WEBDIR=$$HOME/vcs/www.nico.schottelius.org
WEBBLOG=$(WEBDIR)/blog
WEBBASE=$(WEBDIR)/software/cdist
WEBPAGE=$(WEBBASE).mdwn
CHANGELOG_VERSION=$(shell $(helper) changelog-version)
CHANGELOG_FILE=docs/changelog
PYTHON_VERSION=cdist/version.py
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
SPHINXC=make -C $(DOCS_SRC_DIR) clean
SHELLCHECKCMD=shellcheck -s sh -f gcc -x
# Skip SC2154 for variables starting with __ since such variables are cdist
# environment variables.
SHELLCHECK_SKIP=grep -v ': __.*is referenced but not assigned.*\[SC2154\]'
################################################################################
# Manpages
#
MAN1DSTDIR=$(DOCS_SRC_DIR)/man1
MAN7DSTDIR=$(DOCS_SRC_DIR)/man7
# Manpages #1: Types
@ -69,11 +63,16 @@ DOCSREFSH=$(DOCS_SRC_DIR)/cdist-reference.rst.sh
$(DOCSREF): $(DOCSREFSH)
$(DOCSREFSH)
version:
@[ -f "cdist/version.py" ] || { \
printf "Missing 'cdist/version.py', please generate it first.\n" && exit 1; \
}
# Manpages #3: generic part
man: $(MANTYPES) $(DOCSREF) $(PYTHON_VERSION)
man: version $(MANTYPES) $(DOCSREF)
$(SPHINXM)
html: $(MANTYPES) $(DOCSREF) $(PYTHON_VERSION)
html: version $(MANTYPES) $(DOCSREF)
$(SPHINXH)
docs: man html
@ -81,24 +80,6 @@ docs: man html
docs-clean:
$(SPHINXC)
# Manpages #5: release part
MANWEBDIR=$(WEBBASE)/man/$(CHANGELOG_VERSION)
HTMLBUILDDIR=docs/dist/html
docs-dist: html
rm -rf "${MANWEBDIR}"
mkdir -p "${MANWEBDIR}"
# mkdir -p "${MANWEBDIR}/man1" "${MANWEBDIR}/man7"
# cp ${MAN1DSTDIR}/*.html ${MAN1DSTDIR}/*.css ${MANWEBDIR}/man1
# cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${MANWEBDIR}/man7
cp -R ${HTMLBUILDDIR}/* ${MANWEBDIR}
cd ${MANWEBDIR} && git add . && git commit -m "cdist manpages update: $(CHANGELOG_VERSION)" || true
man-latest-link: web-pub
# Fix ikiwiki, which does not like symlinks for pseudo security
ssh staticweb.ungleich.ch \
"cd /home/services/www/nico/nico.schottelius.org/www/software/cdist/man/ && rm -f latest && ln -sf "$(CHANGELOG_VERSION)" latest"
# Manpages: .cdist Types
DOT_CDIST_PATH=${HOME}/.cdist
DOTMAN7DSTDIR=$(MAN7DSTDIR)
@ -111,8 +92,7 @@ DOTMANTYPES=$(subst /man.rst,.rst,$(DOTMANTYPEPREFIX))
$(DOTMAN7DSTDIR)/cdist-type%.rst: $(DOTTYPEDIR)/%/man.rst
ln -sf "$^" $@
# Manpages #3: generic part
dotman: $(DOTMANTYPES)
dotman: version $(DOTMANTYPES)
$(SPHINXM)
################################################################################
@ -120,7 +100,6 @@ dotman: $(DOTMANTYPES)
#
SPEECHESOURCES=$(SPEECHDIR)/*.tex
SPEECHES=$(SPEECHESOURCES:.tex=.pdf)
SPEECHESWEBDIR=$(WEBBASE)/speeches
# Create speeches and ensure Toc is up-to-date
$(SPEECHDIR)/%.pdf: $(SPEECHDIR)/%.tex
@ -130,157 +109,26 @@ $(SPEECHDIR)/%.pdf: $(SPEECHDIR)/%.tex
speeches: $(SPEECHES)
speeches-dist: speeches
rm -rf "${SPEECHESWEBDIR}"
mkdir -p "${SPEECHESWEBDIR}"
cp ${SPEECHES} "${SPEECHESWEBDIR}"
cd ${SPEECHESWEBDIR} && git add . && git commit -m "cdist speeches updated" || true
################################################################################
# Website
# Misc
#
BLOGFILE=$(WEBBLOG)/cdist-$(CHANGELOG_VERSION)-released.mdwn
$(BLOGFILE): $(CHANGELOG_FILE)
$(helper) blog $(CHANGELOG_VERSION) $(BLOGFILE)
web-blog: $(BLOGFILE)
web-doc:
# Go to top level, because of cdist.mdwn
rsync -av "$(WEBSRCDIR)/" "${WEBBASE}/.."
cd "${WEBBASE}/.." && git add cdist* && git commit -m "cdist doc update" cdist* || true
web-dist: web-blog web-doc
web-pub: web-dist docs-dist speeches-dist
cd "${WEBDIR}" && make pub
web-release-all: man-latest-link
web-release-all-no-latest: web-pub
################################################################################
# Release: Mailinglist
#
ML_FILE=.lock-ml
# Only send mail once - lock until new changelog things happened
$(ML_FILE): $(CHANGELOG_FILE)
$(helper) ml-release $(CHANGELOG_VERSION)
touch $@
ml-release: $(ML_FILE)
################################################################################
# pypi
#
PYPI_FILE=.pypi-release
$(PYPI_FILE): man $(PYTHON_VERSION)
python3 setup.py sdist upload
touch $@
pypi-release: $(PYPI_FILE)
################################################################################
# archlinux
#
ARCHLINUX_FILE=.lock-archlinux
ARCHLINUXTAR=cdist-$(CHANGELOG_VERSION)-1.src.tar.gz
$(ARCHLINUXTAR): PKGBUILD
umask 022; mkaurball
PKGBUILD: PKGBUILD.in $(PYTHON_VERSION)
./PKGBUILD.in $(CHANGELOG_VERSION)
$(ARCHLINUX_FILE): $(ARCHLINUXTAR) $(PYTHON_VERSION)
burp -c system $(ARCHLINUXTAR)
touch $@
archlinux-release: $(ARCHLINUX_FILE)
################################################################################
# Release
#
$(PYTHON_VERSION) version: .git/refs/heads/master
$(helper) version
# Code that is better handled in a shell script
check-%:
$(helper) $@
release:
$(helper) $@
################################################################################
# Cleanup
#
clean:
clean: docs-clean
rm -f $(DOCS_SRC_DIR)/cdist-reference.rst
find "$(DOCS_SRC_DIR)" -mindepth 2 -type l \
| xargs rm -f
make -C $(DOCS_SRC_DIR) clean
find * -name __pycache__ | xargs rm -rf
# Archlinux
rm -f cdist-*.pkg.tar.xz cdist-*.tar.gz
rm -rf pkg/ src/
rm -f MANIFEST PKGBUILD
rm -rf dist/
# Signed release
rm -f cdist-*.tar.gz
rm -f cdist-*.tar.gz.asc
distclean: clean
rm -f cdist/version.py
# distutils
rm -rf ./build
################################################################################
# Misc
# install
#
# The pub is Nico's "push to all git remotes" way ("make pub")
pub:
git push --mirror
install:
python3 setup.py install
test:
$(helper) $@
test-remote:
$(helper) $@
pycodestyle pep8:
$(helper) $@
shellcheck-global-explorers:
@find cdist/conf/explorer -type f -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-type-explorers:
@find cdist/conf/type -type f -path "*/explorer/*" -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-manifests:
@find cdist/conf/type -type f -name manifest -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-local-gencodes:
@find cdist/conf/type -type f -name gencode-local -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-remote-gencodes:
@find cdist/conf/type -type f -name gencode-remote -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-gencodes: shellcheck-local-gencodes shellcheck-remote-gencodes
shellcheck-types: shellcheck-type-explorers shellcheck-manifests shellcheck-gencodes
shellcheck: shellcheck-global-explorers shellcheck-types
shellcheck-type-files:
@find cdist/conf/type -type f -path "*/files/*" -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-with-files: shellcheck shellcheck-type-files
install-user:
python3 setup.py install --user

View file

@ -9,7 +9,7 @@ pkgver=$version
pkgrel=1
pkgdesc='A Usable Configuration Management System"'
arch=('any')
url='http://www.nico.schottelius.org/software/cdist/'
url='https://www.cdi.st/'
license=('GPL3')
depends=('python>=3.2.0')
source=("http://pypi.python.org/packages/source/c/cdist/cdist-\${pkgver}.tar.gz")

3
README
View file

@ -3,4 +3,5 @@ cdist
cdist is a usable configuration management system.
For the web documentation have a look at docs/web/.
For the web documentation have a look at https://www.cdi.st/
or at docs/src for reStructuredText manual.

4
README-maintainers Normal file
View file

@ -0,0 +1,4 @@
Maintainers should use ./bin/build-helper script.
Makefile is intended for end users. It can be used for non-maintaining
targets that can be run from pure source (without git repository).

View file

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2016-2019 Darko Poljak (darko.poljak at gmail.com)
#
# This file is part of cdist.
#
@ -18,17 +19,66 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# This file contains the heavy lifting found usually in the Makefile
# This file contains the heavy lifting found usually in the Makefile.
#
basedir=${0%/*}/../
# Change to checkout directory
cd "$basedir"
usage() {
printf "usage: %s TARGET [TARGET-ARGS...]
Available targets:
changelog-changes
changelog-version
check-date
check-unittest
ml-release
archlinux-release
pypi-release
release-git-tag
sign-git-release
release
test
test-remote
pycodestyle
pep8
check-pycodestyle
shellcheck-global-explorers
shellcheck-type-explorers
shellcheck-manifests
shellcheck-local-gencodes
shellcheck-remote-gencodes
shellcheck-scripts
shellcheck-gencodes
shellcheck-types
shellcheck
shellcheck-type-files
shellcheck-with-files
shellcheck-build-helper
check-shellcheck
version-branch
version
target-version
clean
distclean\n" "$1"
}
version=$(git describe)
basename="${0##*/}"
if [ $# -lt 1 ]
then
usage "${basename}"
exit 1
fi
option=$1; shift
SHELLCHECKCMD="shellcheck -s sh -f gcc -x"
# Skip SC2154 for variables starting with __ since such variables are cdist
# environment variables.
SHELLCHECK_SKIP=': __.*is referenced but not assigned.*\[SC2154\]'
# Change to checkout directory
basedir="${0%/*}/../"
cd "$basedir"
case "$option" in
changelog-changes)
if [ "$#" -eq 1 ]; then
@ -66,8 +116,8 @@ case "$option" in
date_changelog=$(grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/.*: //')
if [ "$date_today" != "$date_changelog" ]; then
echo "Date in changelog is not today"
echo "Changelog: $date_changelog"
printf "Date in changelog is not today\n"
printf "Changelog date: %s\n" "${date_changelog}"
exit 1
fi
;;
@ -76,54 +126,17 @@ case "$option" in
"$0" test
;;
blog)
version=$1; shift
blogfile=$1; shift
dir=${blogfile%/*}
file=${blogfile##*/}
cat << eof > "$blogfile"
[[!meta title="Cdist $version released"]]
Here's a short overview about the changes found in version ${version}:
eof
$0 changelog-changes "$version" >> "$blogfile"
cat << eof >> "$blogfile"
For more information visit the [[cdist homepage|software/cdist]].
[[!tag cdist config unix]]
eof
cd "$dir"
git add "$file"
# Allow git commit to fail if there are no changes
git commit -m "cdist blog update: $version" "$blogfile" || true
;;
ml-release)
if [ $# -ne 1 ]; then
echo "$0 ml-release version" >&2
printf "%s ml-release version\n" "$0" >&2
exit 1
fi
version=$1; shift
to_a=cdist
to_d=l.schottelius.org
to=${to_a}@${to_d}
from_a=nico-cdist
from_d=schottelius.org
from=${from_a}@${from_d}
(
cat << eof
From: Nico -telmich- Schottelius <$from>
To: cdist mailing list <$to>
Subject: cdist $version released
Subject: cdist $version has been released
Hello .*,
@ -134,25 +147,41 @@ eof
"$0" changelog-changes "$version"
cat << eof
Cheers,
Nico
--
Automatisation at its best level. With cdist.
eof
) | /usr/sbin/sendmail -f "$from" "$to"
) > mailinglist.tmp
;;
archlinux-release)
if [ $# -ne 1 ]; then
printf "%s archlinux-release version\n" "$0" >&2
exit 1
fi
version=$1; shift
ARCHLINUXTAR="cdist-${version}-1.src.tar.gz"
./PKGBUILD.in "${version}"
umask 022
mkaurball
burp -c system "${ARCHLINUXTAR}"
;;
pypi-release)
# Ensure that pypi release has the right version
"$0" version
make docs-clean
make docs
python3 setup.py sdist upload
;;
release-git-tag)
target_version=$($0 changelog-version)
if git rev-parse --verify refs/tags/$target_version 2>/dev/null; then
echo "Tag for $target_version exists, aborting"
if git rev-parse --verify "refs/tags/${target_version}" 2>/dev/null; then
printf "Tag for %s exists, aborting\n" "${target_version}"
exit 1
fi
printf "Enter tag description for ${target_version}: "
read tagmessage
printf "Enter tag description for %s: " "${target_version}"
read -r tagmessage
# setup for signed tags:
# gpg --fulL-gen-key
@ -170,7 +199,8 @@ eof
# gpg --verify <asc-file> <file>
# gpg --no-default-keyring --keyring <pubkey.gpg> --verify <asc-file> <file>
# Ensure gpg-agent is running.
export GPG_TTY=$(tty)
GPG_TTY=$(tty)
export GPG_TTY
gpg-agent
git tag -s "$target_version" -m "$tagmessage"
@ -180,14 +210,14 @@ eof
sign-git-release)
if [ $# -lt 2 ]
then
printf "usage: $0 sign-git-release TAG TOKEN [ARCHIVE]\n"
printf "usage: %s sign-git-release TAG TOKEN [ARCHIVE]\n" "$0"
printf " if ARCHIVE is not specified then it is created\n"
exit 1
fi
tag="$1"
if ! git rev-parse -q --verify "${tag}" >/dev/null 2>&1
then
printf "Tag \"${tag}\" not found.\n"
printf "Tag \"%s\" not found.\n" "${tag}"
exit 1
fi
token="$2"
@ -195,44 +225,53 @@ eof
then
archivename="$3"
else
archivename="cdist-${tag}.tar.gz"
archivename="cdist-${tag}.tar"
git archive --prefix="cdist-${tag}/" -o "${archivename}" "${tag}" \
|| exit 1
# make sure target version is generated
"$0" target-version
tar -x -f "${archivename}" || exit 1
cp cdist/version.py "cdist-${tag}/cdist/version.py" || exit 1
tar -c -f "${archivename}" "cdist-${tag}/" || exit 1
rm -r -f "cdist-${tag}/"
gzip "${archivename}" || exit 1
archivename="${archivename}.gz"
fi
gpg --armor --detach-sign "${archivename}" || exit 1
# make github release
curl -H "Authorization: token ${token}" \
--request POST \
--data "{ \"tag_name\":\"${tag}\", \
\"target_commitish\":\"master\", \
\"name\": \"${tag}\", \
\"body\":\"${tag}\", \
\"draft\":false, \
\"prerelease\": false}" \
"https://api.github.com/repos/ungleich/cdist/releases" || exit 1
project="ungleich-public%2Fcdist"
sed_cmd='s/^.*"markdown":"\([^"]*\)".*$/\1/'
# get release ID
repoid=$(curl "https://api.github.com/repos/ungleich/cdist/releases/tags/${tag}" \
| python3 -c 'import json; import sys; print(json.loads(sys.stdin.read())["id"])') \
|| exit 1
# upload archive
response_archive=$(curl -f -X POST \
--http1.1 \
-H "PRIVATE-TOKEN: ${token}" \
-F "file=@${archivename}" \
"https://code.ungleich.ch/api/v4/projects/${project}/uploads" \
| sed "${sed_cmd}") || exit 1
# upload archive and then signature
curl -H "Authorization: token ${token}" \
-H "Accept: application/vnd.github.manifold-preview" \
-H "Content-Type: application/x-gtar" \
--data-binary @${archivename} \
"https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}" \
|| exit 1
curl -H "Authorization: token ${token}" \
-H "Accept: application/vnd.github.manifold-preview" \
-H "Content-Type: application/pgp-signature" \
--data-binary @${archivename}.asc \
"https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}.asc" \
# upload archive signature
response_archive_sig=$(curl -f -X POST \
--http1.1 \
-H "PRIVATE-TOKEN: ${token}" \
-F "file=@${archivename}.asc" \
"https://code.ungleich.ch/api/v4/projects/${project}/uploads" \
| sed "${sed_cmd}") || exit 1
# make release
changelog=$("$0" changelog-changes "$1" | sed 's/^[[:space:]]*//')
release_notes=$(
printf "%s\n\n%s\n\n**Changelog**\n\n%s\n" \
"${response_archive}" "${response_archive_sig}" "${changelog}"
)
curl -f -X POST \
-H "PRIVATE-TOKEN: ${token}" \
-F "description=${release_notes}" \
"https://code.ungleich.ch/api/v4/projects/${project}/repository/tags/${tag}/release" \
|| exit 1
# remove generated files (archive and asc)
if [ $# -eq 2]
if [ $# -eq 2 ]
then
rm -f "${archivename}"
fi
@ -244,30 +283,30 @@ eof
target_version=$($0 changelog-version)
target_branch=$($0 version-branch)
echo "Beginning release process for $target_version"
printf "Beginning release process for %s\n" "${target_version}"
# First check everything is sane
"$0" check-date
"$0" check-unittest
"$0" check-pycodestyle
"$0" shellcheck
"$0" check-shellcheck
# Generate version file to be included in packaging
"$0" target-version
# Ensure the git status is clean, else abort
if ! git diff-index --name-only --exit-code HEAD ; then
echo "Unclean tree, see files above, aborting"
printf "Unclean tree, see files above, aborting.\n"
exit 1
fi
# Ensure we are on the master branch
masterbranch=yes
if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ]; then
echo "Releases are happening from the master branch, aborting"
printf "Releases are happening from the master branch, aborting.\n"
echo "Enter the magic word to release anyway"
read magicword
printf "Enter the magic word to release anyway:"
read -r magicword
if [ "$magicword" = "iknowwhatido" ]; then
masterbranch=no
@ -278,7 +317,7 @@ eof
if [ "$masterbranch" = yes ]; then
# Ensure version branch exists
if ! git rev-parse --verify refs/heads/$target_branch 2>/dev/null; then
if ! git rev-parse --verify "refs/heads/${target_branch}" 2>/dev/null; then
git branch "$target_branch"
fi
@ -296,20 +335,12 @@ eof
make docs-clean
make docs
# Generate speeches (indirect check if they build)
make speeches
#############################################################
# Everything green, let's do the release
# Tag the current commit
"$0" release-git-tag
# sign git tag
printf "Enter github authentication token: "
read token
"$0" sign-git-release "${target_version}" "${token}"
# Also merge back the version branch
if [ "$masterbranch" = yes ]; then
git checkout master
@ -317,41 +348,41 @@ eof
fi
# Publish git changes
make pub
# publish man, speeches, website
if [ "$masterbranch" = yes ]; then
make web-release-all
else
make web-release-all-no-latest
fi
# Ensure that pypi release has the right version
"$0" version
# if you want to have mirror locally then uncomment this and comment below
# git push --mirror
git push
# push also new branch and set up tracking
git push -u origin "${target_branch}"
# fi
# Create and publish package for pypi
make pypi-release
"$0" pypi-release
# Archlinux release is based on pypi
make archlinux-release
# sign git tag
printf "Enter upstream repository authentication token: "
read -r token
"$0" sign-git-release "${target_version}" "${token}"
# Announce change on ML
make ml-release
"$0" ml-release "${target_version}"
cat << eof
Manual steps post release:
- linkedin
- hackernews
- reddit
- cdist-web
- send mail body generated in mailinglist.tmp and inform Dmitry for deb
- twitter
eof
;;
test)
export PYTHONPATH="$(pwd -P)"
if [ ! -f "cdist/version.py" ]
then
printf "cdist/version.py is missing, generate it first.\n"
exit 1
fi
PYTHONPATH="$(pwd -P)"
export PYTHONPATH
if [ $# -lt 1 ]; then
python3 -m cdist.test
@ -361,7 +392,15 @@ eof
;;
test-remote)
export PYTHONPATH="$(pwd -P)"
if [ ! -f "cdist/version.py" ]
then
printf "cdist/version.py is missing, generate it first.\n"
exit 1
fi
PYTHONPATH="$(pwd -P)"
export PYTHONPATH
python3 -m cdist.test.exec.remote
;;
@ -374,9 +413,9 @@ eof
printf "\\nPlease review pycodestyle report.\\n"
while true
do
echo "Continue (yes/no)?"
printf "Continue (yes/no)?\n"
any=
read any
read -r any
case "$any" in
yes)
break
@ -385,20 +424,74 @@ eof
exit 1
;;
*)
echo "Please answer with 'yes' or 'no' explicitly."
printf "Please answer with 'yes' or 'no' explicitly.\n"
;;
esac
done
;;
shellcheck-global-explorers)
find cdist/conf/explorer -type f -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" || exit 0
;;
shellcheck-type-explorers)
find cdist/conf/type -type f -path "*/explorer/*" -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" || exit 0
;;
shellcheck-manifests)
find cdist/conf/type -type f -name manifest -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" || exit 0
;;
shellcheck-local-gencodes)
find cdist/conf/type -type f -name gencode-local -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" || exit 0
;;
shellcheck-remote-gencodes)
find cdist/conf/type -type f -name gencode-remote -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" || exit 0
;;
shellcheck-scripts)
${SHELLCHECKCMD} scripts/cdist-dump scripts/cdist-new-type || exit 0
;;
shellcheck-gencodes)
"$0" shellcheck-local-gencodes
"$0" shellcheck-remote-gencodes
;;
shellcheck-types)
"$0" shellcheck-type-explorers
"$0" shellcheck-manifests
"$0" shellcheck-gencodes
;;
shellcheck)
make helper=${helper} WEBDIR=${WEBDIR} shellcheck
"$0" shellcheck-global-explorers
"$0" shellcheck-types
"$0" shellcheck-scripts
;;
shellcheck-type-files)
find cdist/conf/type -type f -path "*/files/*" -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" || exit 0
;;
shellcheck-with-files)
"$0" shellcheck
"$0" shellcheck-type-files
;;
shellcheck-build-helper)
${SHELLCHECKCMD} ./bin/build-helper
;;
check-shellcheck)
"$0" shellcheck
printf "\\nPlease review shellcheck report.\\n"
while true
do
echo "Continue (yes/no)?"
printf "Continue (yes/no)?\n"
any=
read any
read -r any
case "$any" in
yes)
break
@ -407,7 +500,7 @@ eof
exit 1
;;
*)
echo "Please answer with 'yes' or 'no' explicitly."
printf "Please answer with 'yes' or 'no' explicitly.\n"
;;
esac
done
@ -418,16 +511,39 @@ eof
;;
version)
echo "VERSION = \"$(git describe)\"" > cdist/version.py
printf "VERSION = \"%s\"\n" "$(git describe)" > cdist/version.py
;;
target-version)
target_version=$($0 changelog-version)
echo "VERSION = \"${target_version}\"" > cdist/version.py
printf "VERSION = \"%s\"\n" "${target_version}" > cdist/version.py
;;
clean)
make clean
# Archlinux
rm -f cdist-*.pkg.tar.xz cdist-*.tar.gz
rm -rf pkg/ src/
rm -f MANIFEST PKGBUILD
rm -rf dist/
# Signed release
rm -f cdist-*.tar.gz
rm -f cdist-*.tar.gz.asc
# Temp files
rm -f ./*.tmp
;;
distclean)
"$0" clean
rm -f cdist/version.py
;;
*)
echo "Unknown helper target $@ - aborting"
printf "Unknown target: '%s'.\n" "${option}" >&2
usage "${basename}"
exit 1
;;

View file

@ -1,496 +0,0 @@
#!/bin/sh
#
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2016 Darko Poljak (darko.poljak at gmail.com)
#
# 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/>.
#
#
# This file contains the heavy lifting found usually in the Makefile
#
# vars for make
helper=$0
basedir=${0%/*}/../
# run_as is used to check how the script is called (by $0 value)
# currently supported sufixes for $0 are:
# .freebsd - run as freebsd
basename=${0##*/}
run_as=${basename#*.}
case "$run_as" in
freebsd)
to_a=cdist-configuration-management
to_d=googlegroups.com
from_a=darko.poljak
from_d=gmail.com
ml_name="Darko Poljak"
ml_sig_name="Darko"
# vars for make
WEBDIR=../vcs/www.nico.schottelius.org
;;
*)
to_a=cdist
to_d=l.schottelius.org
from_a=nico-cdist
from_d=schottelius.org
ml_name="Nico -telmich- Schottelius"
ml_sig_name="Nico"
# vars for make
WEBDIR=$$HOME/vcs/www.nico.schottelius.org
;;
esac
# Change to checkout directory
cd "$basedir"
version=$(git describe)
option=$1; shift
case "$option" in
print-make-vars)
printf "helper: ${helper}\n"
printf "WEBDIR: ${WEBDIR}\n"
;;
print-runas)
printf "run_as: $run_as\n"
;;
changelog-changes)
if [ "$#" -eq 1 ]; then
start=$1
else
start="[[:digit:]]"
fi
end="[[:digit:]]"
awk -F: "BEGIN { start=0 }
{
if(start == 0) {
if (\$0 ~ /^$start/) {
start = 1
}
} else {
if (\$0 ~ /^$end/) {
exit
} else {
print \$0
}
}
}" "$basedir/docs/changelog"
;;
changelog-version)
# get version from changelog
grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/:.*//'
;;
check-date)
# verify date in changelog is today
date_today="$(date +%Y-%m-%d)"
date_changelog=$(grep '^[[:digit:]]' "$basedir/docs/changelog" | head -n1 | sed 's/.*: //')
if [ "$date_today" != "$date_changelog" ]; then
echo "Date in changelog is not today"
echo "Changelog: $date_changelog"
exit 1
fi
;;
check-unittest)
"$0" test
;;
blog)
version=$1; shift
blogfile=$1; shift
dir=${blogfile%/*}
file=${blogfile##*/}
cat << eof > "$blogfile"
[[!meta title="Cdist $version released"]]
Here's a short overview about the changes found in version ${version}:
eof
$0 changelog-changes "$version" >> "$blogfile"
cat << eof >> "$blogfile"
For more information visit the [[cdist homepage|software/cdist]].
[[!tag cdist config unix]]
eof
cd "$dir"
git add "$file"
# Allow git commit to fail if there are no changes
git commit -m "cdist blog update: $version" "$blogfile" || true
;;
ml-release)
if [ $# -ne 1 ]; then
echo "$0 ml-release version" >&2
exit 1
fi
version=$1; shift
to=${to_a}@${to_d}
from=${from_a}@${from_d}
(
cat << eof
From: ${ml_name} <$from>
To: cdist mailing list <$to>
Subject: cdist $version released
Hello .*,
cdist $version has been released with the following changes:
eof
"$0" changelog-changes "$version"
cat << eof
Cheers,
${ml_sig_name}
--
Automatisation at its best level. With cdist.
eof
) | /usr/sbin/sendmail -f "$from" "$to"
;;
release-git-tag)
target_version=$($0 changelog-version)
if git rev-parse --verify refs/tags/$target_version 2>/dev/null; then
echo "Tag for $target_version exists, aborting"
exit 1
fi
printf "Enter tag description for ${target_version}: "
read tagmessage
# setup for signed tags:
# gpg --fulL-gen-key
# gpg --list-secret-keys --keyid-format LONG
# git config --local user.signingkey <id>
# for exporting pub key:
# gpg --armor --export <id> > pubkey.asc
# gpg --output pubkey.gpg --export <id>
# show tag with signature
# git show <tag>
# verify tag signature
# git tag -v <tag>
#
# gpg verify signature
# gpg --verify <asc-file> <file>
# gpg --no-default-keyring --keyring <pubkey.gpg> --verify <asc-file> <file>
# Ensure gpg-agent is running.
export GPG_TTY=$(tty)
gpg-agent
git tag -s "$target_version" -m "$tagmessage"
git push --tags
;;
sign-git-release)
if [ $# -lt 2 ]
then
printf "usage: $0 sign-git-release TAG TOKEN [ARCHIVE]\n"
printf " if ARCHIVE is not specified then it is created\n"
exit 1
fi
tag="$1"
if ! git rev-parse -q --verify "${tag}" >/dev/null 2>&1
then
printf "Tag \"${tag}\" not found.\n"
exit 1
fi
token="$2"
if [ $# -gt 2 ]
then
archivename="$3"
else
archivename="cdist-${tag}.tar.gz"
git archive --prefix="cdist-${tag}/" -o "${archivename}" "${tag}" \
|| exit 1
fi
gpg --armor --detach-sign "${archivename}" || exit 1
# make github release
curl -H "Authorization: token ${token}" \
--request POST \
--data "{ \"tag_name\":\"${tag}\", \
\"target_commitish\":\"master\", \
\"name\": \"${tag}\", \
\"body\":\"${tag}\", \
\"draft\":false, \
\"prerelease\": false}" \
"https://api.github.com/repos/ungleich/cdist/releases" || exit 1
# get release ID
repoid=$(curl "https://api.github.com/repos/ungleich/cdist/releases/tags/${tag}" \
| python3 -c 'import json; import sys; print(json.loads(sys.stdin.read())["id"])') \
|| exit 1
# upload archive and then signature
curl -H "Authorization: token ${token}" \
-H "Accept: application/vnd.github.manifold-preview" \
-H "Content-Type: application/x-gtar" \
--data-binary @${archivename} \
"https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}" \
|| exit 1
curl -H "Authorization: token ${token}" \
-H "Accept: application/vnd.github.manifold-preview" \
-H "Content-Type: application/pgp-signature" \
--data-binary @${archivename}.asc \
"https://uploads.github.com/repos/ungleich/cdist/releases/${repoid}/assets?name=${archivename}.asc" \
|| exit 1
# remove generated files (archive and asc)
if [ $# -eq 2]
then
rm -f "${archivename}"
fi
rm -f "${archivename}.asc"
;;
release)
set -e
target_version=$($0 changelog-version)
target_branch=$($0 version-branch)
echo "Beginning release process for $target_version"
# First check everything is sane
"$0" check-date
"$0" check-unittest
"$0" check-pycodestyle
"$0" shellcheck
# Generate version file to be included in packaging
"$0" target-version
# Ensure the git status is clean, else abort
if ! git diff-index --name-only --exit-code HEAD ; then
echo "Unclean tree, see files above, aborting"
exit 1
fi
# Ensure we are on the master branch
masterbranch=yes
if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ]; then
echo "Releases are happening from the master branch, aborting"
echo "Enter the magic word to release anyway"
read magicword
if [ "$magicword" = "iknowwhatido" ]; then
masterbranch=no
else
exit 1
fi
fi
if [ "$masterbranch" = yes ]; then
# Ensure version branch exists
if ! git rev-parse --verify refs/heads/$target_branch 2>/dev/null; then
git branch "$target_branch"
fi
# Merge master branch into version branch
git checkout "$target_branch"
git merge master
fi
# Verify that after the merge everything works
"$0" check-date
"$0" check-unittest
# Generate documentation (man and html)
# First, clean old generated docs
make helper=${helper} WEBDIR=${WEBDIR} docs-clean
make helper=${helper} WEBDIR=${WEBDIR} docs
# Generate speeches (indirect check if they build)
make helper=${helper} WEBDIR=${WEBDIR} speeches
#############################################################
# Everything green, let's do the release
# Tag the current commit
"$0" release-git-tag
# sign git tag
printf "Enter github authentication token: "
read token
"$0" sign-git-release "${target_version}" "${token}"
# Also merge back the version branch
if [ "$masterbranch" = yes ]; then
git checkout master
git merge "$target_branch"
fi
# Publish git changes
case "$run_as" in
freebsd)
# if we are not Nico :) then just push, no mirror
git push
# push also new branch and set up tracking
git push -u origin "${target_branch}"
;;
*)
make helper=${helper} WEBDIR=${WEBDIR} pub
;;
esac
# publish man, speeches, website
if [ "$masterbranch" = yes ]; then
make helper=${helper} WEBDIR=${WEBDIR} web-release-all
else
make helper=${helper} WEBDIR=${WEBDIR} web-release-all-no-latest
fi
# Ensure that pypi release has the right version
"$0" version
# Create and publish package for pypi
make helper=${helper} WEBDIR=${WEBDIR} pypi-release
case "$run_as" in
freebsd)
;;
*)
# Archlinux release is based on pypi
make archlinux-release
;;
esac
# Announce change on ML
make helper=${helper} WEBDIR=${WEBDIR} ml-release
cat << eof
Manual steps post release:
- linkedin
- hackernews
- reddit
- twitter
eof
case "$run_as" in
freebsd)
cat <<eof
Additional steps post release:
- archlinux release
eof
;;
*)
;;
esac
;;
test)
export PYTHONPATH="$(pwd -P)"
if [ $# -lt 1 ]; then
python3 -m cdist.test
else
python3 -m unittest "$@"
fi
;;
test-remote)
export PYTHONPATH="$(pwd -P)"
python3 -m cdist.test.exec.remote
;;
pycodestyle|pep8)
pycodestyle "${basedir}" "${basedir}/scripts/cdist" | less
;;
check-pycodestyle)
"$0" pycodestyle
printf "\\nPlease review pycodestyle report.\\n"
while true
do
echo "Continue (yes/no)?"
any=
read any
case "$any" in
yes)
break
;;
no)
exit 1
;;
*)
echo "Please answer with 'yes' or 'no' explicitly."
;;
esac
done
;;
shellcheck)
make helper=${helper} WEBDIR=${WEBDIR} shellcheck
printf "\\nPlease review shellcheck report.\\n"
while true
do
echo "Continue (yes/no)?"
any=
read any
case "$any" in
yes)
break
;;
no)
exit 1
;;
*)
echo "Please answer with 'yes' or 'no' explicitly."
;;
esac
done
;;
version-branch)
"$0" changelog-version | cut -d. -f '1,2'
;;
version)
echo "VERSION = \"$(git describe)\"" > cdist/version.py
;;
target-version)
target_version=$($0 changelog-version)
echo "VERSION = \"${target_version}\"" > cdist/version.py
;;
*)
echo "Unknown helper target $@ - aborting"
exit 1
;;
esac

View file

@ -181,17 +181,40 @@ class CdistObjectError(CdistEntityError):
params, stdout_paths, stderr_paths, subject)
class CdistObjectExplorerError(CdistEntityError):
"""
Something went wrong while working on a specific
cdist object explorer
"""
def __init__(self, cdist_object, explorer_name, explorer_path,
stderr_path, subject=''):
params = [
('object name', cdist_object.name, ),
('object path', cdist_object.absolute_path, ),
('object source', " ".join(cdist_object.source), ),
('object type', os.path.realpath(
cdist_object.cdist_type.absolute_path), ),
('explorer name', explorer_name, ),
('explorer path', explorer_path, ),
]
stdout_paths = []
stderr_paths = [
('remote', stderr_path, ),
]
super().__init__("explorer '{}' of object '{}'".format(
explorer_name, cdist_object.name), params, stdout_paths,
stderr_paths, subject)
class InitialManifestError(CdistEntityError):
"""Something went wrong while executing initial manifest"""
def __init__(self, initial_manifest, stdout_path, stderr_path, subject=''):
params = [
('path', initial_manifest, ),
]
stdout_paths = []
stdout_paths = [
('init', stdout_path, ),
]
stderr_paths = []
stderr_paths = [
('init', stderr_path, ),
]
@ -199,6 +222,20 @@ class InitialManifestError(CdistEntityError):
stderr_paths, subject)
class GlobalExplorerError(CdistEntityError):
"""Something went wrong while executing global explorer"""
def __init__(self, name, path, stderr_path, subject=''):
params = [
('name', name, ),
('path', path, ),
]
stderr_paths = [
('remote', stderr_path, ),
]
super().__init__("global explorer '{}'".format(name),
params, [], stderr_paths, subject)
def file_to_list(filename):
"""Return list from \n seperated file"""
if os.path.isfile(filename):

View file

@ -5,21 +5,23 @@ import logging
import collections
import functools
import cdist.configuration
import cdist.preos
# set of beta sub-commands
BETA_COMMANDS = set(('install', 'inventory', ))
# set of beta arguments for sub-commands
BETA_ARGS = {
'config': set(('jobs', 'tag', 'all_tagged_hosts', 'use_archiving', )),
'config': set(('tag', 'all_tagged_hosts', 'use_archiving', )),
}
EPILOG = "Get cdist at http://www.nico.schottelius.org/software/cdist/"
EPILOG = "Get cdist at https://code.ungleich.ch/ungleich-public/cdist"
# Parser others can reuse
parser = None
_verbosity_level_off = -2
_verbosity_level = {
None: logging.WARNING,
_verbosity_level_off: logging.OFF,
-1: logging.ERROR,
0: logging.WARNING,
@ -191,8 +193,7 @@ def get_parsers():
name="positive int"),
help=('Operate in parallel in specified maximum number of jobs. '
'Global explorers, object prepare and object run are '
'supported. Without argument CPU count is used by default. '
'Currently in beta.'),
'supported. Without argument CPU count is used by default. '),
action='store', dest='jobs',
const=multiprocessing.cpu_count())
parser['config_main'].add_argument(
@ -423,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,16 +1,27 @@
#!/bin/sh -e
#!/bin/sh
os=$("$__explorer/os")
case "$os" in
openbsd)
IFS=',' disks=$(sysctl -n hw.disknames)
for d in $disks; do
echo "${d%%:*}"
done | sed -n '/^[sw]d[0-9][0-9]*/p'
uname_s="$(uname -s)"
case "${uname_s}" in
FreeBSD)
sysctl -n kern.disks
;;
OpenBSD|NetBSD)
sysctl -n hw.disknames | grep -Eo '[lsw]d[0-9]+' | xargs
;;
Linux)
if command -v lsblk > /dev/null
then
# exclude ram disks, floppies and cdroms
# https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
lsblk -e 1,2,11 -dno name | xargs
else
printf "Don't know how to list disks for %s operating system without lsblk, if you can please submit a patch\n" "${uname_s}" >&2
fi
;;
*)
cd /dev || exit 0
echo sd? hd? vd?
printf "Don't know how to list disks for %s operating system, if you can please submit a patch\n" "${uname_s}" >&2
;;
esac
exit 0

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

@ -29,7 +29,7 @@ case "$uname_s" in
Linux)
(pgrep -P0 -l | awk '/^1[ \t]/ {print $2;}') || true
;;
FreeBSD)
FreeBSD|OpenBSD)
ps -o comm= -p 1 || true
;;
*)

View file

@ -1,6 +1,6 @@
#!/bin/sh
#!/bin/sh -e
#
# 2012 Sébastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>
# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
#
# This file is part of cdist.
#
@ -17,35 +17,12 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# List all network interfaces in explorer/ifaces. One interface per line.
#
# If your OS is not supported please provide a ifconfig output
#
# Use ip, if available
if command -v ip >/dev/null; then
ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p'
exit 0
fi
if ! command -v ifconfig >/dev/null; then
# no ifconfig, nothing we could do
exit 0
fi
uname_s="$(uname -s)"
REGEXP='s/^(.*)(:[[:space:]]*flags=|Link encap).*/\1/p'
case "$uname_s" in
Darwin)
ifconfig -a | sed -n -E "$REGEXP"
;;
Linux|*BSD)
ifconfig -a | sed -n -r "$REGEXP"
;;
*)
echo "Unsupported ifconfig output for $uname_s" >&2
exit 1
;;
esac
if command -v ip >/dev/null
then
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'
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,6 +18,14 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
if [ -e "/$__object_id" ]
then getfacl "/$__object_id" | grep -E '^((default:|)(user|group)):[a-z]' || true
[ ! -e "/$__object_id" ] && exit 0
if ! command -v getfacl > /dev/null
then
echo 'getfacl not available' >&2
exit 1
fi
getfacl "/$__object_id" 2>/dev/null \
| grep -Eo '^(default:)?(user|group|(mask|other):):[^:][[:graph:]]+' \
|| true

View file

@ -0,0 +1,39 @@
#!/bin/sh -e
#
# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
#
# 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/>.
#
# TODO check if filesystem has ACL turned on etc
if [ -f "$__object/parameter/acl" ]
then
grep -E '^(default:)?(user|group):' "$__object/parameter/acl" \
| while read -r acl
do
param="$( echo "$acl" | awk -F: '{print $(NF-2)}' )"
check="$( echo "$acl" | awk -F: '{print $(NF-1)}' )"
[ "$param" = 'user' ] && db=passwd || db="$param"
if ! getent "$db" "$check" > /dev/null
then
echo "missing $param '$check'" >&2
exit 1
fi
done
fi

View file

@ -1,6 +1,6 @@
#!/bin/sh
#!/bin/sh -e
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2018 Ander Punnar (ander-at-kvlt-dot-ee)
#
# This file is part of cdist.
#
@ -17,14 +17,15 @@
# 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
if [ -e "/$__object_id" ]
then
if [ -d "/$__object_id" ]
then echo directory
elif [ -f "/$__object_id" ]
then echo regular
else echo other
fi
else
echo missing
fi

View file

@ -18,32 +18,67 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
file_is="$( cat "$__object/explorer/file_is" )"
[ "$file_is" = 'missing' ] && [ -z "$__cdist_dry_run" ] && exit 0
os="$( cat "$__global/explorer/os" )"
acl_path="/$__object_id"
acl_is="$( cat "$__object/explorer/acl_is" )"
acl_should="$( for parameter in user group
do
if [ ! -f "$__object/parameter/$parameter" ]
then continue
fi
while read -r l
if [ -f "$__object/parameter/acl" ]
then
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
echo "$parameter:$l"
[ ! -f "$__object/parameter/$param" ] && continue
if [ -f "$__object/parameter/default" ]
then echo "default:$parameter:$l"
fi
done < "$__object/parameter/$parameter"
done )"
echo "$param" | grep -Eq 'mask|other' && sep=:: || sep=:
echo "$param$sep$( cat "$__object/parameter/$param" )"
done )"
else
echo 'no parameters set' >&2
exit 1
fi
if [ -f "$__object/parameter/default" ]
then
acl_should="$( echo "$acl_should" \
| sed 's/^default://' \
| sort -u \
| sed 's/\(.*\)/default:\1\n\1/' )"
fi
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
if echo "$acl_should" | awk -F: '{ print $NF }' | grep -Fq 'X'
then
[ "$file_is" = 'directory' ] && rep=x || rep=-
acl_should="$( echo "$acl_should" | sed "s/\\(.*\\)X/\\1$rep/" )"
fi
setfacl_exec='setfacl'
if [ -f "$__object/parameter/recursive" ]
then
if echo "$os" | grep -E 'macosx|netbsd|freebsd|openbsd'
if echo "$os" | grep -Fq 'freebsd'
then
echo "$os setfacl do not support recursive operations" >&2
else
@ -53,29 +88,39 @@ fi
if [ -f "$__object/parameter/remove" ]
then
if echo "$os" | grep '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
if echo "$acl_should" | grep -Fq "$acl"
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
no_bits="$( echo "$acl" | sed -r 's/:[rwx-]+$//' )"
if echo "$os" | grep -Fq 'freebsd'
then
remove="$acl"
else
remove="$( echo "$acl" | sed 's/:...$//' )"
fi
echo "$setfacl_exec -x \"$no_bits\" \"$acl_path\""
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 echo "$setfacl_exec -m \"$acl\" \"$acl_path\""
then
if echo "$os" | grep -Fq 'freebsd' \
&& echo "$acl" | grep -Eq '^default:'
then
echo "setting default ACL in $os is currently not supported" >&2
else
echo "$setfacl_exec -m \"$acl\" \"$acl_path\""
echo "added '$acl'" >> "$__messages_out"
fi
fi
done

View file

@ -3,35 +3,41 @@ cdist-type__acl(7)
NAME
----
cdist-type__acl - Basic wrapper around `setfacl`
cdist-type__acl - Set ACL entries
DESCRIPTION
-----------
ACL must be defined as 3-symbol combination, using `r`, `w`, `x` and `-`.
Fully supported and tested on Linux (ext4 filesystem), partial support for FreeBSD.
See setfacl(1) and acl(5) for more details.
See ``setfacl`` and ``acl`` manpages for more details.
OPTIONAL MULTIPLE PARAMETERS
REQUIRED MULTIPLE PARAMETERS
----------------------------
user
Add user ACL entry.
group
Add group ACL entry.
acl
Set ACL entry following ``getfacl`` output syntax.
BOOLEAN PARAMETERS
------------------
recursive
Operate recursively (Linux only).
default
Add default ACL entries.
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.
remove
Remove undefined ACL entries (Solaris not supported).
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
@ -40,13 +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
--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

@ -0,0 +1,2 @@
mask
other

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,84 @@ 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
tmp='/tmp/cdist_apt_key_tmp'
# 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
mkdir -m 700 -p "$tmp"
if timeout 30s \\
gpg --homedir "$tmp" \\
--keyserver "$keyserver" \\
--recv-keys "$keyid"
then
gpg --homedir "$tmp" \\
--export "$keyid" \\
> "$keyfile"
else
export GPG_GOT_STUCK=1
fi
GNUPGHOME="$tmp" gpgconf --kill dirmngr
rm -rf "$tmp"
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

@ -18,6 +18,11 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# quote function from http://www.etalabs.net/sh_tricks.html
quote() {
printf '%s\n' "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/"
}
file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")"
state_should=$(cat "$__object/parameter/state")
prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id")
@ -46,7 +51,7 @@ tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
if [ -f "$file" ]; then
cp -p "$file" "\$tmpfile"
fi
awk -v prefix="^$prefix\$" -v suffix="^$suffix\$" '
awk -v prefix=^$(quote "$prefix")\$ -v suffix=^$(quote "$suffix")\$ '
{
if (match(\$0,prefix)) {
triggered=1

View file

@ -30,7 +30,7 @@ username
source
Select the source from which to clone cdist from.
Defaults to "git://github.com/ungleich/cdist.git".
Defaults to "git@code.ungleich.ch:ungleich-public/cdist.git".
branch
@ -47,7 +47,7 @@ EXAMPLES
__cdist /home/cdist/cdist
# Use alternative source
__cdist --source "git://github.com/ungleich/cdist" /home/cdist/cdist
__cdist --source "git@code.ungleich.ch:ungleich-public/cdist.git" /home/cdist/cdist
AUTHORS

View file

@ -1 +1 @@
git://github.com/ungleich/cdist.git
git@code.ungleich.ch:ungleich-public/cdist.git

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

@ -25,23 +25,51 @@ destination="/$__object_id"
os=$("$__explorer/os")
case "$os" in
"freebsd"|"netbsd"|"openbsd")
# FIXME: should be something like this based on man page, but can not test
stat -f "type: %ST
"freebsd"|"netbsd"|"openbsd"|"macosx")
stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Op %Sp
mode: %Lp %Sp
" "$destination" | awk '/^type/ { print tolower($0); next; } { print; }'
;;
alpine)
stat -c "type: %F
owner: %u %U
group: %g %G
mode: %a %A
" "$destination"
;;
"macosx")
stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Lp %Sp
" "$destination"
;;
solaris)
ls1="$( ls -ld "$destination" )"
ls2="$( ls -ldn "$destination" )"
if [ -f "$__object/parameter/mode" ]
then mode_should="$( cat "$__object/parameter/mode" )"
fi
# yes, it is ugly hack, but if you know better way...
if [ -z "$( find "$destination" -perm "$mode_should" )" ]
then octets=888
else octets="$( echo "$mode_should" | sed 's/^0//' )"
fi
case "$( echo "$ls1" | cut -c1-1 )" in
-) echo 'type: regular file' ;;
d) echo 'type: directory' ;;
esac
echo "owner: $( echo "$ls2" \
| awk '{print $3}' ) $( echo "$ls1" \
| awk '{print $3}' )"
echo "group: $( echo "$ls2" \
| awk '{print $4}' ) $( echo "$ls1" \
| awk '{print $4}' )"
echo "mode: $octets $( echo "$ls1" | awk '{print $1}' )"
;;
*)
stat --printf="type: %F
stat --printf="type: %F
owner: %u %U
group: %g %G
mode: %a %A

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

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -25,25 +26,56 @@ destination="/$__object_id"
os=$("$__explorer/os")
case "$os" in
"freebsd"|"netbsd"|"openbsd")
# FIXME: should be something like this based on man page, but can not test
stat -f "type: %ST
owner: %Du %Su
group: %Dg %Sg
mode: %Op %Sp
size: %Dz
links: %Dl
" "$destination"
;;
"macosx")
stat -f "type: %HT
"freebsd"|"netbsd"|"openbsd"|"macosx")
stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Lp %Sp
size: %Dz
links: %Dl
" "$destination" | awk '/^type/ { print tolower($0); next; } { print; }'
;;
alpine)
# busybox stat
stat -c "type: %F
owner: %u %U
group: %g %G
mode: %a %A
size: %s
links: %h
" "$destination"
;;
;;
solaris)
ls1="$( ls -ld "$destination" )"
ls2="$( ls -ldn "$destination" )"
if [ -f "$__object/parameter/mode" ]
then mode_should="$( cat "$__object/parameter/mode" )"
fi
# yes, it is ugly hack, but if you know better way...
if [ -z "$( find "$destination" -perm "$mode_should" )" ]
then octets=888
else octets="$( echo "$mode_should" | sed 's/^0//' )"
fi
case "$( echo "$ls1" | cut -c1-1 )" in
-) echo 'type: regular file' ;;
d) echo 'type: directory' ;;
esac
echo "owner: $( echo "$ls2" \
| awk '{print $3}' ) $( echo "$ls1" \
| awk '{print $3}' )"
echo "group: $( echo "$ls2" \
| awk '{print $4}' ) $( echo "$ls1" \
| awk '{print $4}' )"
echo "mode: $octets $( echo "$ls1" | awk '{print $1}' )"
echo "size: $( echo "$ls1" | awk '{print $5}' )"
echo "links: $( echo "$ls1" | awk '{print $2}' )"
;;
*)
stat --printf="type: %F
owner: %u %U
@ -52,5 +84,5 @@ mode: %a %A
size: %s
links: %h
" "$destination"
;;
;;
esac

View file

@ -79,6 +79,10 @@ case "$state_should" in
fi
fi
done
if [ -f "$__object/files/set-attributes" ]; then
# set-attributes is created if file is created or uploaded in gencode-local
fire_onchange=1
fi
;;

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
--------
@ -44,7 +50,7 @@ EXAMPLES
__git /home/services/dokuwiki --source git://github.com/splitbrain/dokuwiki.git
# Checkout cdist, stay on branch 2.1
__git /home/nico/cdist --source git://github.com/ungleich/cdist.git --branch 2.1
__git /home/nico/cdist --source git@code.ungleich.ch:ungleich-public/cdist.git --branch 2.1
AUTHORS

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)
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)
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)
# __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

@ -48,21 +48,25 @@ case "$state_should" in
if [ "$file_type" = "directory" ]; then
# our destination is currently a directory, delete it
printf 'rm -rf "%s" &&\n' "$destination"
echo "removed '$destination' (directory)" >> "$__messages_out"
else
if [ "$state_is" = "wrongsource" ]; then
# our destination is a symlink but points to the wrong source,
# delete it
printf 'rm -f "%s" &&\n' "$destination"
echo "removed '$destination' (wrongsource)" >> "$__messages_out"
fi
fi
# create our link
printf 'ln %s -f "%s" "%s"\n' "$lnopt" "$source" "$destination"
echo "created '$destination'" >> "$__messages_out"
;;
absent)
# only delete if it is a sym/hard link
if [ "$file_type" = "symlink" ] || [ "$file_type" = "hardlink" ]; then
printf 'rm -f "%s"\n' "$destination"
echo "removed '$destination'" >> "$__messages_out"
fi
;;
*)

View file

@ -27,6 +27,22 @@ state
'present' or 'absent', defaults to 'present'
MESSAGES
--------
created <destination>
Link to destination was created.
removed <destination>
Link to destination was removed.
removed <destination> (directory)
Destination was removed because state is ``present`` and destination was directory.
removed <destination> (wrongsource)
Destination was removed because state is ``present`` and destination link source was wrong.
EXAMPLES
--------

View file

@ -1,6 +1,6 @@
#!/bin/sh -e
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2013-2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -37,6 +37,15 @@ locale_remove=$(echo "$locale" | sed 's/UTF-8/utf8/')
state=$(cat "$__object/parameter/state")
os=$(cat "$__global/explorer/os")
# Nothing to be done on alpine
case "$os" in
alpine)
exit 0
;;
esac
case "$state" in
present)
echo localedef -A "$alias" -f "$charmap" -i "$input" "$locale"

View file

@ -8,7 +8,8 @@ cdist-type__locale - Configure locales
DESCRIPTION
-----------
This cdist type allows you to setup locales.
This cdist type allows you to setup locales. On systems that don't
support locale setting like alpine/musl libc, it is a no-op.
OPTIONAL PARAMETERS
@ -44,6 +45,6 @@ Nico Schottelius <nico-cdist--@--schottelius.org>
COPYING
-------
Copyright \(C) 2013-2016 Nico Schottelius. Free use of this software is
Copyright \(C) 2013-2019 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 or
later (GPLv3+).

View file

@ -1,6 +1,6 @@
#!/bin/sh -e
#
# 2013-2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2013-2019 Nico Schottelius (nico-cdist at schottelius.org)
# 2015 David Hürlimann (david at ungleich.ch)
#
# This file is part of cdist.
@ -19,7 +19,7 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Install required packages
# Install required packages
#
os=$(cat "$__global/explorer/os")
@ -30,7 +30,7 @@ case "$os" in
# Debian needs a seperate package
__package locales --state present
;;
archlinux|suse|ubuntu|scientific|centos)
archlinux|suse|ubuntu|scientific|centos|alpine)
:
;;
*)

View file

@ -1,6 +1,7 @@
#!/bin/sh -e
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -44,6 +45,7 @@ else
suse) type="zypper" ;;
openwrt) type="opkg" ;;
openbsd) type="pkg_openbsd" ;;
alpine) type="apk" ;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1

View file

@ -0,0 +1,38 @@
#!/bin/sh
#
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# 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/>.
#
#
# Retrieve the status of a package - parsed apk output
#
if [ -f "$__object/parameter/name" ]; then
name="$(cat "$__object/parameter/name")"
else
name="$__object_id"
fi
# Remove the @.. repo tag for finding out whether it is installed
# f.i. pass@testing => pass
name="$(echo "$name" | sed 's/@.*//')"
if [ "$(apk list -I "$name")" ]; then
echo present
else
echo absent
fi

View file

@ -0,0 +1,49 @@
#!/bin/sh -e
#
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# 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/>.
#
#
# Manage packages on Debian and co.
#
if [ -f "$__object/parameter/name" ]; then
name="$(cat "$__object/parameter/name")"
else
name="$__object_id"
fi
state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/state")"
# Nothing to be done
[ "$state_is" = "$state_should" ] && exit 0
case "$state_should" in
present)
echo "apk add -q '$name'"
echo "installed" >> "$__messages_out"
;;
absent)
echo "apk del -q '$name'"
echo "removed" >> "$__messages_out"
;;
*)
echo "Unknown state: $state_should" >&2
exit 1
;;
esac

View file

@ -0,0 +1,55 @@
cdist-type__package_akp(7)
==========================
NAME
----
cdist-type__package_akp - Manage packages with akp
DESCRIPTION
-----------
apk is usually used on Alpine to manage packages.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
name
If supplied, use the name and not the object id as the package name.
state
Either "present" or "absent", defaults to "present"
EXAMPLES
--------
.. code-block:: sh
# Ensure zsh in installed
__package_apk zsh --state present
# Remove package
__package_apk apache2 --state absent
SEE ALSO
--------
:strong:`cdist-type__package`\ (7)
AUTHORS
-------
Nico Schottelius <nico-cdist--@--schottelius.org>
COPYING
-------
Copyright \(C) 2019 Nico Schottelius. 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 @@
present

View file

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

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,7 @@
#!/bin/sh -e
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -22,7 +23,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
ubuntu|debian|archlinux|suse|scientific|centos|devuan)
alpine|ubuntu|debian|archlinux|suse|scientific|centos|devuan)
__package postfix --state present
;;
*)

View file

@ -22,7 +22,7 @@
os=$("$__explorer/os")
case "$os" in
ubuntu|debian|archlinux|suse|scientific|centos|devuan)
alpine|ubuntu|debian|archlinux|suse|scientific|centos|devuan)
:
;;
*)

View file

@ -1,6 +1,7 @@
#!/bin/sh -e
#
# 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -21,7 +22,7 @@
os=$(cat "$__global/explorer/os")
case "$os" in
ubuntu|debian|archlinux|suse|scientific|centos|devuan)
alpine|archlinux|centos|debian|devuan|suse|scientific|ubuntu)
:
;;
*)

View file

@ -34,7 +34,7 @@ esac
name="$__object_id"
if test -n "$(su - "$postgres_user" -c "psql postgres -tAc \"SELECT 1 FROM pg_database WHERE datname='$name'\"")"
if test -n "$(su - "$postgres_user" -c "psql postgres -twAc \"SELECT 1 FROM pg_database WHERE datname='$name'\"")"
then
echo 'present'
else

View file

@ -34,7 +34,7 @@ esac
name="$__object_id"
if test -n "$(su - "$postgres_user" -c "psql postgres -tAc \"SELECT 1 FROM pg_roles WHERE rolname='$name'\"")"
if test -n "$(su - "$postgres_user" -c "psql postgres -twAc \"SELECT 1 FROM pg_roles WHERE rolname='$name'\"")"
then
echo 'present'
else

View file

@ -55,7 +55,7 @@ case "$state_should" in
[ -n "$password" ] && password="PASSWORD '$password'"
cmd="CREATE ROLE $name WITH $password $booleans"
echo "su - '$postgres_user' -c \"psql postgres -c \\\"$cmd\\\"\""
echo "su - '$postgres_user' -c \"psql postgres -wc \\\"$cmd\\\"\""
;;
absent)
echo "su - '$postgres_user' -c \"dropuser \\\"$name\\\"\""

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
@ -45,18 +51,6 @@ if [ ! -f "$__object/parameter/noparent" ] || [ ! -f "$__object/parameter/nofile
fi
fi
# Remove legacy blocks created by old versions of this type
# FIXME: remove me in 3.2+
__block "$__object_name" \
--file "$file" \
--prefix "#cdist:$__object_name" \
--suffix "#/cdist:$__object_name" \
--state 'absent' \
--text - << DONE
remove legacy block
DONE
export require="__block/$__object_name"
_cksum() {
echo "$1" | cksum | cut -d' ' -f 1
}
@ -69,7 +63,8 @@ while read -r key; do
set -- "$@" --key "$key"
set -- "$@" --state "$state"
if [ -f "$__object/parameter/option" ]; then
set -- "$@" --option "$(cat "$__object/parameter/option")"
# shellcheck disable=SC2046
set -- "$@" $(printf -- '--option %s ' $(cat "$__object/parameter/option"))
fi
if [ -f "$__object/parameter/comment" ]; then
set -- "$@" --comment "$(cat "$__object/parameter/comment")"

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

@ -1,6 +1,6 @@
#!/bin/sh
#
# 2012-2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2012-2019 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Daniel Heule (hda at sfs.biz)
#
# This file is part of cdist.
@ -75,9 +75,14 @@ else
state=$(chkconfig --check "$name" "$runlevel" || echo absent)
[ "$state" ] || state="present"
;;
gentoo)
state="present"
[ -f "/etc/runlevels/${target_runlevel}/${name}" ] || state="absent"
gentoo|alpine)
state="absent"
for d in /etc/runlevels/*; do
if [ -f "/etc/runlevels/${d}/${name}" ];then
state="present"
break
fi
done
;;
freebsd)
state="absent"
@ -88,6 +93,7 @@ else
# OpenBSD 5.7 and higher
rcctl ls on | grep "^${name}$" && state='present'
;;
*)
echo "Unsupported os: $os" >&2
exit 1

View file

@ -58,7 +58,7 @@ case "$state_should" in
echo "update-rc.d '$name' defaults >/dev/null"
;;
gentoo)
alpine|gentoo)
echo "rc-update add '$name' '$target_runlevel'"
;;
@ -106,7 +106,7 @@ case "$state_should" in
echo "update-rc.d -f '$name' remove"
;;
gentoo)
alpine|gentoo)
echo "rc-update del '$name' '$target_runlevel'"
;;

View file

@ -55,7 +55,7 @@ Nico Schottelius <nico-cdist--@--schottelius.org>
COPYING
-------
Copyright \(C) 2012 Nico Schottelius. You can redistribute it
Copyright \(C) 2012-2019 Nico Schottelius. 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

@ -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

@ -1,6 +1,7 @@
#!/bin/sh -e
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -29,7 +30,7 @@ if [ "$timezone_is" = "$timezone_should" ]; then
fi
case "$os" in
ubuntu|debian|devuan|coreos)
ubuntu|debian|devuan|coreos|alpine)
echo "echo \"$timezone_should\" > /etc/timezone"
;;
esac

View file

@ -2,7 +2,7 @@
#
# 2011 Ramon Salvadó (rsalvado at gnuine dot com)
# 2012-2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2012-2019 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
@ -26,7 +26,7 @@ timezone="$__object_id"
os=$(cat "$__global/explorer/os")
case "$os" in
archlinux|debian|ubuntu|devuan)
archlinux|debian|ubuntu|devuan|alpine)
__package tzdata
export require="__package/tzdata"
;;

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