Compare commits

...

794 commits

Author SHA1 Message Date
3ee742f0ab Kamila's changes +iocage_cone + tinydns* ~ __daemontools_service
Consider at some point whether or not they are worth upstreaming.
(also __pf_rdr belongs to this batch)
2020-04-26 17:54:36 +02:00
47e1267097 Merge branch 'master' into local 2020-04-26 16:42:30 +02:00
Darko Poljak
04b7f240eb ++changelog 2020-04-26 10:01:18 +02:00
8074f02bb3 Merge branch 'evilham-pf' into 'master'
[__pf*] (~) __pf_ruleset (+)__pf_apply_anchor, deprecate __pf_apply

See merge request ungleich-public/cdist!867
2020-04-26 09:59:24 +02:00
71156258a4 Merge branch 'evilham-postfix' into 'master'
[__postfix] Automagically support more OSs by not checking too much.

See merge request ungleich-public/cdist!866
2020-04-26 09:52:08 +02:00
c13608fab5 Merge branch 'evilham-openldap_server' into 'master'
[__openldap_server] Support extra config parameter.

See merge request ungleich-public/cdist!865
2020-04-26 09:50:21 +02:00
b40b95d758 Merge branch 'evilham-motd' into 'master'
[__motd] Improve documentation and support for FreeBSD

See merge request ungleich-public/cdist!864
2020-04-26 09:47:54 +02:00
6ec3274598 Merge branch 'postgres-database-args' into 'master'
Add --template, --encoding, --lc-collate, --lc-support to __postgres_database type

See merge request ungleich-public/cdist!859
2020-04-26 09:41:30 +02:00
80d204368a Merge branch 'fix-configuration-file-location' into 'master'
Fix configuration file location

See merge request ungleich-public/cdist!863
2020-04-26 09:33:38 +02:00
2928795441 [__pf_ruleset] Fix shellcheck issue. 2020-04-25 14:54:29 +02:00
fefe90e9c9 [__pf*] (~) __pf_ruleset (+)__pf_apply_anchor, deprecate __pf_apply
__pf_apply the way it exists on cdist is not really useful and __pf_ruleset does
not take advantage of other types as it should, being instead overly complex and
not as reliable.

The new __pf_ruleset is compatible with the previous one, and __pf_apply_anchors
allows for a simple and powerful way of managing pf anchors.
The functionality previously provided by __pf_apply is still possible out of the
box in __pf_ruleset.

These patches were mostly contributed by Kamila Součková and made fit for
upstreaming by Evilham.
2020-04-25 12:23:27 +02:00
cd6c02d16c Add copyright notice and make consistent with other types 2020-04-25 01:29:17 +02:00
5981d0a5f1 [__postfix] Automagically support more OSs by not checking too much.
It is quite likely that the package is going to be called postfix, rather
than trying to have an exhaustive "allow list" for this package, we can
just add special cases for OSs where that is not the case (not aware of any
atm).
2020-04-25 00:22:28 +02:00
056c7c5400 [__openldap_server] Support extra config parameter.
This allows the user to, e.g. manually define ACLs, while this type does not
support that.
2020-04-25 00:12:24 +02:00
9e5c8a2524 Merge branch 'to-upstream' into local 2020-04-24 20:28:11 +02:00
de37b0ce45 [__motd] Improve documentation and support for FreeBSD
This makes it easier to use the type just by reading the man page and also
treats FreeBSD's MOTD better.
2020-04-24 20:26:44 +02:00
6cb0afdb9f Changes changes 2020-04-24 13:29:43 +02:00
Darko Poljak
41e59a748d Fix newly found shellcheck issues 2020-04-22 23:24:34 +02:00
Darko Poljak
38ccdfda32 Fix newly found shellcheck issues 2020-04-22 23:21:34 +02:00
e2b26aa233 Patch CI configuration to use cdist-ci image 2020-04-21 08:16:46 +02:00
7d57655470 Fix typo in cdist-ci image README 2020-04-21 08:15:51 +02:00
c9c1e7d790 Import CI image definition 2020-04-21 08:13:32 +02:00
742163e38c Fix configuration file location 2020-04-15 17:10:33 +02:00
c3f924d350 Add --template flag to __postgres_database type 2020-04-14 10:23:08 +02:00
Darko Poljak
0805fac7e9 Release 6.5.4 2020-04-11 20:35:29 +02:00
Darko Poljak
d1eecb93ee ++changelog 2020-04-11 20:30:56 +02:00
8af4f7993c Merge branch 'preserve-conf-dir-sort-order' into 'master'
remove duplicates from conf dirs while preserving order

See merge request ungleich-public/cdist!862
2020-04-11 20:30:11 +02:00
Darko Poljak
704e78322e Use OrderedDict to guarantee order
Note:
> Changed in version 3.7: Dictionary order is guaranteed to be
> insertion order. This behavior was an implementation detail of
> CPython from 3.6.
2020-04-11 20:26:20 +02:00
Darko Poljak
1ebcc219c2 ++changelog 2020-04-11 09:54:57 +02:00
Steven Armstrong
e19c1bb1e0 remove duplicates from conf dirs while preserving order
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
2020-04-10 21:50:39 +02:00
Steven Armstrong
76d978d3d8 explorer/init: do not grep on non-existent init
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
2020-04-10 10:51:17 +02:00
d53077f4e8 Add --encoding, --lc-collate, --lc-support to __postgres_database type 2020-04-06 09:30:01 +02:00
Darko Poljak
ceb6b597ef Release 6.5.3 2020-04-03 19:45:44 +02:00
Darko Poljak
890c73f6bd Fix shellcheck issues 2020-04-02 20:18:04 +02:00
Nico Schottelius
d034fe9369 [__pyvenv] use python3 -m venv on alpine
Until python4 comes, this will work
2020-04-02 18:24:13 +02:00
Nico Schottelius
0f639a9278 Make __cron nonparallel
It fails due to removal / edit of crontab at the same time

VERBOSE: [18331]: uncloud.ungleich.ch: Running object __cron/pg_dump_cleanup
VERBOSE: [18332]: uncloud.ungleich.ch: Running object __ungleich_packages/server
VERBOSE: [18335]: uncloud.ungleich.ch: Running object __postgres_role/app
INFO: [18335]: uncloud.ungleich.ch: Processing __postgres_role/app
INFO: [18331]: uncloud.ungleich.ch: Processing __cron/pg_dump_cleanup
ERROR: [16451]: uncloud.ungleich.ch: ssh -o User=root -o ControlPath=/tmp/tmp_8eu4oep/s -o ControlMaster=auto -o ControlPersist=2h uncloud.ungleich.ch /bin/sh -c ' export __object=/var/lib/cdist/object/__cron/pg_dumpall_under_day/.cdist-mfd00npk;  export __object_id=pg_dumpall_under_day;/bin/sh -e /var/lib/cdist/object/__cron/pg_dumpall_under_day/.cdist-mfd00npk/code-remote': ['ssh', '-o', 'User=root', '-o', 'ControlPath=/tmp/tmp_8eu4oep/s', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=2h', 'uncloud.ungleich.ch', "/bin/sh -c ' export __object=/var/lib/cdist/object/__cron/pg_dumpall_under_day/.cdist-mfd00npk;  export __object_id=pg_dumpall_under_day;/bin/sh -e /var/lib/cdist/object/__cron/pg_dumpall_under_day/.cdist-mfd00npk/code-remote'"]

Error processing object '__cron/pg_dumpall_under_day'
=====================================================
name: __cron/pg_dumpall_under_day
path: /tmp/tmplaq9cwdh/6318c251013a449595327745daacf3ee/data/object/__cron/pg_dumpall_under_day/.cdist-mfd00npk
source: /tmp/tmplaq9cwdh/6318c251013a449595327745daacf3ee/data/conf/type/__ungleich_postgresql/manifest
type: /home/nico/vcs/cdist/cdist/conf/type/__cron

code-remote:stderr
------------------
crontab: can't move 'postgres.new' to 'postgres': No such file or directory

VERBOSE: [16451]: config: Total processing time for 1 host(s): 13.98031210899353
[18:09] line:~%
2020-04-02 18:14:09 +02:00
Darko Poljak
da30afe791 ++changelog 2020-03-29 12:54:02 +02:00
1eb02f908b Merge branch 'fix/__package_update_index' into 'master'
[__package_update_index] Fix maxage false-positives on brand-new installations

See merge request ungleich-public/cdist!858
2020-03-29 13:53:55 +02:00
Darko Poljak
b25939cdd6 Fix shellcheck 2020-03-27 13:30:52 +01:00
Darko Poljak
df63cfe088 ++changelog 2020-03-27 08:50:27 +01:00
11148995d1 Merge branch 'master' into 'master'
fix typo

See merge request ungleich-public/cdist!857
2020-03-27 08:50:29 +01:00
Nico Schottelius
ec11f04ab8 ++changes 2020-03-26 21:49:43 +01:00
Nico Schottelius
66d9905029 [__consul_agent] make conf_dir depent on the OS 2020-03-26 21:48:17 +01:00
f00e4af5f0 fix typo 2020-03-26 21:17:32 +08:00
9fdc9082f4 [__letsencrypt_acmetiny] fix spellcheck warnings (bugs!) 2020-03-23 12:35:54 +01:00
1bd19d6dee [__letsencrypt_acmetiny] Simpler alternative to certbot.
This is inspired heavily by `debops.pki` in the https://debops.org project.
However there are several simplifications to their way of doing it.
2020-03-23 12:26:59 +01:00
358e04b2af Handle specially if no time about the last index update found.
The explorer 'currage' now returns -1 if he can not find any value about
this. The gencode-remote script handle this value special to not exit if
-1 given as value.

This fixes the bug
  ungleich-public/cdist#803
2020-03-14 09:58:38 +01:00
Darko Poljak
f7d5f5bc97 ++changelog 2020-03-09 08:02:18 +01:00
4481052184 Merge branch 'alpinefix' into 'master'
Fix for alpine "getent shadow" missing functionality in __user type

See merge request ungleich-public/cdist!855
2020-03-09 08:03:34 +01:00
fb32d6ed3f alpine uses a different getent lib which doesnt support: getent shadow 2020-03-08 16:04:02 +01:00
Darko Poljak
213f1b049c Release 6.5.2 2020-02-27 20:23:04 +01:00
Darko Poljak
da6ccf808e ++changelog 2020-02-26 21:48:08 +01:00
4b24d886eb Merge branch 'file/better-errors' into 'master'
[__file] Better errors analogous to __directory

See merge request ungleich-public/cdist!854
2020-02-26 21:50:01 +01:00
Dennis Camera
9eacba06bb [__file] Treat pre-exists as a special case in gencode-remote as it should never get there 2020-02-26 16:48:14 +01:00
Dennis Camera
46d2487f08 [__file] Give more precise error message when --state pre-exists 2020-02-26 16:40:53 +01:00
Darko Poljak
046f7d0663 ++changelog 2020-02-26 16:32:03 +01:00
dd6b07d924 Merge branch 'directory-exists' into 'master'
[__directory] Add --state exists and --state pre-exists

See merge request ungleich-public/cdist!832
2020-02-26 16:33:37 +01:00
Dennis Camera
6b4b6534a1 [__directory] Give more precise error message when --state pre-exists 2020-02-26 16:15:23 +01:00
Darko Poljak
b2db864eaf ++changelog 2020-02-26 13:01:29 +01:00
aa49afd61a Merge branch 'fix/explorer/disks' into 'master'
explorer/disks: Fix on NetBSD and support Linux w/o lsblk

See merge request ungleich-public/cdist!852
2020-02-26 12:53:26 +01:00
Dennis Camera
6db6dc4ac0 [explorer/disks] Add license header 2020-02-25 20:24:14 +01:00
Dennis Camera
1ef126e16f [explorer/disks] Move xargs call to the bottom 2020-02-25 20:21:35 +01:00
Dennis Camera
d3bd2669ec [explorer/disks] Support Linux without lsblk (fallback to sysfs) 2020-02-25 20:21:14 +01:00
0c49a0afda Merge branch 'consul-alpine' into 'master'
Add support for alpine (edge) package to __consul_agent

See merge request ungleich-public/cdist!851
2020-02-24 09:54:56 +01:00
e6f683b886 Add support for alpine (edge) package to __consul_agent 2020-02-24 09:20:49 +01:00
Dennis Camera
c6aba8d189 [explorer/disks] Fix for NetBSD
When connecting over SSH and running /bin/sh, the PATH is missing sbin locations.
sysctl is located at /sbin/sysctl on NetBSD.
2020-02-23 22:59:41 +01:00
Darko Poljak
49fc21ec47 ++changelog 2020-02-23 09:32:03 +01:00
47ec9ada10 Merge branch 'consul_agent' into 'master'
Refactor __consul_* for use with distribution packages

See merge request ungleich-public/cdist!837
2020-02-23 09:28:24 +01:00
e1b80f7222 Merge branch 'service' into 'master'
Add simple __service type

See merge request ungleich-public/cdist!847
2020-02-23 09:21:29 +01:00
2a5309b413 Merge branch 'fix/init-explorer/busybox' into 'master'
[explorer/init] Support more init systems

See merge request ungleich-public/cdist!850
2020-02-23 09:18:51 +01:00
Dennis Camera
0d6bc8e8f8 [explorer/init] Make shellcheck happy 2020-02-20 23:34:19 +01:00
Dennis Camera
0d84c91b40 [explorer/init] Fix unique() for Solaris 2020-02-20 23:34:19 +01:00
Dennis Camera
364340c8d5 [explorer/init] Refactor and testing 2020-02-20 23:34:19 +01:00
Dennis Camera
d895bb0e87 [explorer/init] Clean up 2020-02-20 23:34:19 +01:00
Dennis Camera
21c9e3db18 [explorer/init] Support more init systems 2020-02-20 23:34:11 +01:00
Nico Schottelius
ceddbd15a0 ++changes 2020-02-20 10:15:34 +01:00
2135381038 Merge branch 'master' into 'master'
[cdist]Update os_version for alpine

See merge request ungleich-public/cdist!849
2020-02-20 10:13:40 +01:00
28d3760e29 [cdist]Update os_version for alpine 2020-02-20 09:40:55 +01:00
Darko Poljak
1b0caeda13 ++changelog 2020-02-19 14:49:35 +01:00
44700424ba Merge branch '__update_alternatives_with_explorer' into 'master'
__update_alternatives: add state explorer

See merge request ungleich-public/cdist!848
2020-02-19 14:51:48 +01:00
a3bc8f9407 __update_alternatives: remove expired comment 2020-02-19 12:59:14 +02:00
b891bb05d5 __update_alternatives: add state explorer 2020-02-19 12:58:22 +02:00
09540dc6bd Add simple __service type 2020-02-17 21:38:03 +01:00
31ad1bdaad Fix various typos and styling errors in __consul_agent, conf-dir
explorer
2020-02-17 13:43:18 +01:00
f595664924 Patch __consul_* to discover remote consul configuration dir 2020-02-17 13:42:19 +01:00
70200cd28f Refactor __consul_agent type to support distribution packages 2020-02-17 13:42:19 +01:00
Darko Poljak
c09165d122 Fix spelling 2020-02-15 21:05:24 +01:00
Darko Poljak
0640b02f90 Fix too short title underline 2020-02-15 14:59:12 +01:00
Darko Poljak
9f3747cf3f Release 6.5.1 2020-02-15 14:36:26 +01:00
Darko Poljak
cda77e5e8a ++changelog 2020-02-15 14:35:29 +01:00
7acbc8709b Merge branch 'postgres-role-password' into 'master'
Fix password command synthax in __postgres_role

See merge request ungleich-public/cdist!845
2020-02-15 14:36:54 +01:00
a1536933ab Fix password command synthax in __postgres_role 2020-02-15 14:16:00 +01:00
Darko Poljak
58841fc4bf ++changelog 2020-02-15 12:20:41 +01:00
221c3820ca Merge branch 'type/__systemd_service' into 'master'
[__systemd_service] new type to manage the state of systemd services

See merge request ungleich-public/cdist!844
2020-02-15 12:22:04 +01:00
b898412faf Merge branch 'fix/__cron' into 'master'
[__cron] Fix cronjob removal if `is` and `should` don't match

See merge request ungleich-public/cdist!841
2020-02-15 12:16:58 +01:00
ef089d1c61 [__systemd_service] new type to manage the state of systemd services 2020-02-15 11:42:01 +01:00
5e6e17b3e5 Moved default parameter values from scripts to cdist parameter handling.
For more generalisation, the default parameter values are now handled by
cdist instead of trying to get a value and use a default if parameter is
not given.

It handles the default values in a more general way, instead of write
one default in (possibly) multiple places.
Problem occurred when checking the 'state' parameter, which required to
set a default value in two places.
2020-02-15 09:46:23 +01:00
a761d4842c Add check for the state parameter in manifest.
This only allow following cases:
  - present
  - absent
else, it will abort with an error message.
2020-02-15 08:21:24 +01:00
Darko Poljak
48bff66563 ++changelog 2020-02-14 21:55:35 +01:00
c8dbd0718e Merge branch '__package_apt_updates_index' into 'master'
__package_apt: update index cache, on installation, when it is older than one day

See merge request ungleich-public/cdist!842
2020-02-14 21:57:04 +01:00
869a38676f __package_apt: add comment about package index update 2020-02-14 19:22:06 +02:00
1be5a9d316 __package_apt: add note about updating index 2020-02-14 19:19:12 +02:00
Darko Poljak
e5f9d32004 ++changelog 2020-02-14 16:07:06 +01:00
c4f085e739 Merge branch '__mysql_privileges_fix' into 'master'
__mysql_privileges: fix quoting

See merge request ungleich-public/cdist!843
2020-02-14 16:07:30 +01:00
f771840178 __mysql_privileges: fix typo 2020-02-13 17:38:34 +02:00
b7483d73eb __mysql_privileges: fix shellcheck 2020-02-13 17:38:19 +02:00
710e99f240 __mysql_privileges: fix quoting 2020-02-13 17:29:44 +02:00
Nico Schottelius
bcefeb240c add note about IPv6, because people ask 2020-02-10 15:51:15 +01:00
b3bad9468d __package_apt: pkgcache.bin may not exist 2020-02-09 20:43:09 +02:00
08d5814e2c __package_apt: update index cache, on installation, when it is older than one day 2020-02-09 20:37:06 +02:00
Darko Poljak
7a5d6d5a7d ++changelog 2020-02-04 07:45:04 +01:00
0edda3b528 Merge branch 'no-stat-patch' into 'master'
__file/__directory: Patch for systems without stat(1)

See merge request ungleich-public/cdist!839
2020-02-04 07:46:28 +01:00
6291352136 Merge branch 'os-release-fallbacks' into 'master'
explorer/os_release: Add fallbacks

See merge request ungleich-public/cdist!840
2020-02-04 07:37:14 +01:00
Dennis Camera
984e0dc8c4 [explorer/os_release] Add fallbacks to /usr/lib/os-release and /var/run/os-release 2020-02-03 19:29:04 +01:00
Dennis Camera
3b5433d63a [__directory] stat explorer patch for systems without stat(1)
Some embedded systems (like OpenWrt) do not ship a stat(1) binary.
This workaround parses the output of ls(1) and /etc/passwd, /etc/group to
gather the information needed.
2020-02-03 18:36:59 +01:00
Dennis Camera
e82dd35869 [__file] stat explorer patch for systems without stat(1)
Some embedded systems (like OpenWrt) do not ship a stat(1) binary.
This workaround parses the output of ls(1) and /etc/passwd, /etc/group to
gather the information needed.
2020-02-03 18:36:59 +01:00
Nico Schottelius
0f420993e1 ++ changelog update 2020-02-03 17:45:34 +01:00
Nico Schottelius
2d8afe0d16 Merge branch 'master' of code.ungleich.ch:ungleich-public/cdist 2020-02-03 17:44:55 +01:00
Nico Schottelius
f3237e5d76 [consul agent] add support for Debian 10 2020-02-03 17:44:47 +01:00
e5d86ffc93 Fix to remove cronjobs when the cronjob expression did not match. 2020-02-01 17:08:25 +01:00
Dennis Camera
4fe2dcba89 [explorer/init] Linux is a mess... 2020-01-30 18:35:50 +01:00
Dennis Camera
de1a421b68 [explorer/init] Support for Darwin and more BusyBox combinations 2020-01-30 18:04:00 +01:00
Darko Poljak
87f30b6053 Update sphinx docs copyright year 2020-01-23 14:40:07 +01:00
Darko Poljak
8f12a4c505 Release 6.5.0 2020-01-23 07:11:55 +01:00
Darko Poljak
4e8ccd9b78 ++changelog 2020-01-20 09:08:55 +01:00
f7a5ac5f7a Merge branch '__acl_file_directory_params' into 'master'
__acl: add --file and --directory for convenience

See merge request ungleich-public/cdist!836
2020-01-20 09:10:07 +01:00
1fbd2fc2bd __acl: add --file and --directory for convenience 2020-01-19 22:51:40 +02:00
Darko Poljak
5089f9055e ++changelog 2020-01-19 19:41:26 +01:00
138a449008 Merge branch '__acl_source_parameter' into 'master'
__acl: add --source

See merge request ungleich-public/cdist!835
2020-01-19 19:36:33 +01:00
e1ac97b6a5 __acl: add --source 2020-01-19 14:02:00 +02:00
Darko Poljak
45890cc7e4 ++changelog 2020-01-17 18:14:49 +01:00
Darko Poljak
ffb3c003ca Merge branch 'ssrq/cdist-line-patches' 2020-01-17 18:07:14 +01:00
Darko Poljak
e292c9f124 ++changelog 2020-01-17 15:48:59 +01:00
efdeab61f3 Merge branch '__apt_unattended_upgrades' into 'master'
__apt_unattended_upgrades

See merge request ungleich-public/cdist!828
2020-01-17 15:50:07 +01:00
a518134bfa Merge branch 'master' into 'master'
__postgres_*: fix forgotten edge cases in delimited identifier escape

See merge request ungleich-public/cdist!833
2020-01-17 15:48:00 +01:00
65c5b592a5 __apt_unattended_upgrades: update manual 2020-01-17 14:48:54 +02:00
6097cd9e90 __apt_unattended_upgrades: use word expansions 2020-01-17 14:41:00 +02:00
ef2f4b9a00 __postgres_*: fix forgotten edge cases in delimited identifier escape 2020-01-17 11:24:24 +01:00
6fa0d687f7 __apt_unattended_upgrades: alternative approach 2020-01-16 01:13:27 +02:00
f5f70671cb __apt_unattended_upgrades: make parameters more speaking 2020-01-16 00:59:03 +02:00
Dennis Camera
5a9a1ba57f [__line] Produce error when file does not exist 2020-01-15 22:00:56 +01:00
b3f36dbe5b __apt_unattended_upgrades: fix typo 2020-01-15 20:51:47 +02:00
cd24a806e7 __apt_unattended_upgrades: rewrite manifest, add more parameters 2020-01-15 20:48:32 +02:00
Dennis Camera
2cf44c66d4 [__directory] Add --state exists and --state pre-exists 2020-01-15 19:00:30 +01:00
68e5502fce __apt_unattended_upgrades: move debian wiki link to manual 2020-01-15 19:27:02 +02:00
cd2d5b3f79 __apt_unattended_upgrades: all objects depend on package 2020-01-15 19:24:21 +02:00
Dennis Camera
51b1b11cc2 [__line/state] Logic fixes in explorer
This commit fixes the incorrectly reported state "wrongposition" if position is
"after" and anchor is present in the file but the line missing.
2020-01-15 17:57:45 +01:00
Dennis Camera
4cdb8aaa03 [__line/state] Make sure the index match is at the beginning
Without the == 1 all lines which contain --line as a substring match.  e.g. if
--line is "line" and the file contains the line "wrong line" this was considered
a match.
2020-01-15 17:50:43 +01:00
Dennis Camera
629d0795c8 [__line] Always add line to end if anchor is not found 2020-01-15 17:27:25 +01:00
Dennis Camera
93ec4b46aa [__line] Ensure the line is only added once 2020-01-15 17:27:25 +01:00
Darko Poljak
3258fc98e1 Fix typo 2020-01-12 12:19:49 +01:00
Darko Poljak
3f133dbc17 Info command: support tilde expansion 2020-01-11 15:26:46 +01:00
Darko Poljak
11f569959d Fix missing configuration file usage, support -g
PreOS code did not use configuration support. This fix adds support
for using cdist configuration, which takes into account cdist
configuration file, environment variables and command line options,
especially conf_dir.

It also adds support for -g, --config-file option, for specifying
custom configuration file.
2020-01-11 14:16:33 +01:00
Darko Poljak
51ba4a49d8 ++changelog 2020-01-04 18:21:23 +01:00
b1e24881ce Merge branch '__acl_rename_param' into 'master'
__acl: rename --acl to --entry for the sake of consistency, add compatibility

See merge request ungleich-public/cdist!829
2020-01-04 18:20:56 +01:00
d4bd49bbb5 __acl: rename --acl to --entry for the sake of consistency, add compatibility 2020-01-04 17:43:57 +02:00
ec8d9571f9 __apt_unattended_upgrades: add manual 2020-01-04 17:07:46 +02:00
a9d491f998 __apt_unattended_upgrades: add license header 2020-01-04 16:59:42 +02:00
94e32dcd78 __apt_unattended_upgrades: initial commit 2020-01-04 16:36:44 +02:00
Darko Poljak
d1a64596fe Update build-helper 2020-01-04 14:56:05 +01:00
Darko Poljak
7c9dd3b03e Release 6.4.0 2020-01-04 14:36:14 +01:00
Darko Poljak
bc1990c7c8 ++changelog 2020-01-04 13:44:04 +01:00
1fc845480e Merge branch '__mysql' into 'master'
rewrite __mysql_database, add types __mysql_user and __mysql_privileges

See merge request ungleich-public/cdist!827
2020-01-04 13:45:15 +01:00
Darko Poljak
e201536792 ++changelog 2020-01-04 13:18:13 +01:00
Darko Poljak
7b1192257d Fix incomplete cdist info synopsis 2020-01-04 13:17:54 +01:00
9b2e273bd1 Merge branch 'feature/info-command' into 'master'
Add cdist info command

See merge request ungleich-public/cdist!825
2020-01-04 13:16:49 +01:00
Darko Poljak
e4596593c0 Add cdist info command 2020-01-04 12:50:12 +01:00
Darko Poljak
72935e0a79 ++changelog 2020-01-04 11:08:48 +01:00
Darko Poljak
6369bc1ae5 ++changelog 2020-01-04 10:07:53 +01:00
c51571b47f Merge branch 'master' into 'master'
__postgres_*: use delimited identifiers (double quoted) in generated SQL

See merge request ungleich-public/cdist!826
2020-01-04 10:09:07 +01:00
4329cced82 __mysql_privileges: add manual 2020-01-03 18:55:55 +02:00
5e8dc7122d __mysql_user: add manual 2020-01-03 18:48:11 +02:00
fcc774cb7b __mysql_database: add manual 2020-01-03 18:33:23 +02:00
24862e0208 __mysql_database: carry over state 2020-01-03 18:26:11 +02:00
9a693537f4 __mysql_*: add license headers 2020-01-01 12:38:12 +02:00
c32e4040b1 __mysql_*: initial rewrite 2019-12-31 19:16:49 +02:00
beb930c0dc __postgres_*: use delimited identifiers (double quoted) in generated SQL 2019-12-31 11:34:51 +01:00
Steven Armstrong
df05abd15b bugfix: __install_chroot_umount was not using __chroot_umount/manifest
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
2019-12-19 12:33:47 +01:00
Nico Schottelius
f407e8825f [consul/alpine] no init script required to be deployed anymore 2019-12-15 22:56:16 +01:00
Darko Poljak
9859080217 Release 6.3.0 2019-12-12 07:43:07 +01:00
Darko Poljak
8562871da9 Fix shellcheck exit status
shellcheck* targets were always reporting exit status 0.
With this fix, if shellcheck fails, then build-helper script
exits with 1.
2019-12-12 07:37:32 +01:00
Darko Poljak
bd4eee7925 Fix shellcheck reported issues 2019-12-12 07:37:32 +01:00
Darko Poljak
2c7b4ddc55 Update cdist man page 2019-12-12 06:18:04 +01:00
Darko Poljak
3c62a88ca7 ++changelog 2019-12-10 19:33:29 +01:00
c58c4b8309 Merge branch 'evilham-openldap' into 'master'
[new-type] __openldap_server

See merge request ungleich-public/cdist!822
2019-12-10 19:33:33 +01:00
3bdc731e4f Merge branch 'master' into 'master'
[type-docs] __start_on_boot: remove unspported *BSD claim.

See merge request ungleich-public/cdist!823
2019-12-10 19:32:21 +01:00
3ba230c10d [type-docs] __start_on_boot: remove unspported *BSD claim.
The type appears to support {Open,Free}BSD properly.
2019-12-10 13:12:54 +01:00
35f0d4dbfa [new-type] __openldap_server: another documentation typo. 2019-12-10 13:10:19 +01:00
79d58f0813 [new-type] __openldap_server: fix docs / dependency.
It's nicer to have slapd_flags after slapd_enable in rc.conf on freebsd.
2019-12-10 13:04:24 +01:00
22c5cd550b [new-type] __openldap_server: first public version.
This already takes care of setting up the base DN and managing it as well as
allowing for settings for the listener URLS.

The type was also made a singleton as it doesn't make much sense to setup
multiple LDAP servers on the same machine.
2019-12-10 12:49:07 +01:00
42914d26c5 [new-type] __openldap_server: sudo make nico.happy. 2019-12-09 19:59:15 +01:00
1ad605a509 [new-type] __openldap_server: Add admin-email parameter. 2019-12-09 19:49:05 +01:00
fd430eab62 [new-type] __openldap_server: Add a "schema" optional parameter. 2019-12-09 19:39:43 +01:00
bee95efa43 [new-type] __openldap_server
Originally developed at ungleich and improved for Open Sourcing by Evilham.
2019-12-09 19:13:10 +01:00
Darko Poljak
553cfc28e7 ++changelog 2019-12-09 09:57:54 +01:00
27b682bfe9 Merge branch 'preos-plugins-dir-opt' into 'master'
Add conf-dir preos option

Closes #794

See merge request ungleich-public/cdist!821
2019-12-09 09:56:10 +01:00
Darko Poljak
4735df1bed Add plugins-dir preos option 2019-12-09 09:48:12 +01:00
Darko Poljak
d5ac9ea348 Docs: install from source, verify signature
Add chapter for installing from source with signature verification.
Resolves #795.
2019-12-08 16:35:41 +01:00
Darko Poljak
839e7a408e ++changelog 2019-12-06 19:46:17 +01:00
fb97574592 Merge branch 'master' into 'master'
[docs] PreOS: English nitpicking

See merge request ungleich-public/cdist!820
2019-12-06 19:46:29 +01:00
Darko Poljak
f2cbc01e3f ++changelog 2019-12-06 10:04:06 +01:00
Darko Poljak
71b6646b38 Rm cdist-type prefix and man page ref from docs
E.g.

16.10. __block
16.11. __ccollect_source
16.12. __cdist
16.13. __cdistmarker
16.14. __check_messages

insted of

16.10. cdist-type__block(7)
16.11. cdist-type__ccollect_source(7)
16.12. cdist-type__cdist(7)
16.13. cdist-type__cdistmarker(7)
16.14. cdist-type__check_messages(7)
2019-12-06 10:00:32 +01:00
Darko Poljak
90e85d8128 Embed config skeleton instead of rewriting it
Resolves #796.
2019-12-06 09:37:21 +01:00
Darko Poljak
f22349ce8a Fix documentation for install types
Fixes gitlab #790.
2019-12-06 09:00:16 +01:00
58cbe53e61 Merge branch 'master' of https://code.ungleich.ch/ungleich-public/cdist 2019-12-05 23:15:11 +01:00
4f21bf534d [docs] PreOS: English nitpicking. 2019-12-05 23:14:27 +01:00
Darko Poljak
320f962e1d ++changelog 2019-12-04 22:27:58 +01:00
05221e2159 Merge branch 'b/alpine-package-update-index' into 'master'
[PACKAGE-UPDATE-INDEX]: Bugfix of the alpine part of the __package_update_index type

See merge request ungleich-public/cdist!818
2019-12-04 22:28:42 +01:00
Dominique Roux
d25c72e678 [PACKAGE-UPDATE-INDEX]: Bugfix of the alpine part of the __package_update_index type 2019-12-03 10:13:46 +01:00
Darko Poljak
8c0ee28b99 gitlab CI runner should have necessary tools 2019-12-02 12:35:43 +01:00
648cdf8e29 Add LICENSE 2019-12-01 14:23:02 +01:00
Darko Poljak
a1f33ca8eb Release 6.2.0 2019-11-30 23:11:36 +01:00
Darko Poljak
b3012b9911 ++changelog 2019-11-29 13:56:32 +01:00
131c736d22 Merge branch 'order-dep-fix' into 'master'
Redefine/reimplement CDIST_ORDER_DEPENDENCY

See merge request ungleich-public/cdist!815
2019-11-29 13:55:43 +01:00
Darko Poljak
332f5dcff9 Redefine/reimplement CDIST_ORDER_DEPENDENCY
Update documentation.
2019-11-29 13:50:08 +01:00
Darko Poljak
da274e5ef3 Redefine/reimplement CDIST_ORDER_DEPENDENCY
CDIST_ORDER_DEPENDENCY now defines type order dependency context.
cdist (emulator) maintains global state variables, as files,
order_dep_state and typeorder_dep, and per object state variable,
as file, typeorder_dep.

If order_dep_state exists then this defines that order dependency is
turned on.
If order_dep_state does not exist then order dependency is turned off.

If order dependency is on then objects created after it is turned on are
recorded into:
    * global typeorder_dep, in case of init manifest
    * object's typeorder_dep, in case of type's manifest.

If order dependency is on then requirement is injected, where object
created before current, is read from:
    * global typeorder_dep, in case of init manifest
    * object's typeorder_dep, in case of type's manifest.

Every time order dependency is turned off, typeorder_dep files are
removed, which means that type order list is cleared, context is
cleaned.

In the end cdist cleans after itself, i.e. mentioned files are removed.

When running type manifest is finished typeorder_dep file is removed.
When running config finishes global typeorder_dep and order_dep_state
files are removed.

Global type order recording is untouched.
Furthermore, for completeness, type order is now recorded for each object
too.
2019-11-27 15:04:47 +01:00
Darko Poljak
f3bd439c43 Add gitlab CI 2019-11-27 15:03:49 +01:00
Darko Poljak
3d3b59ab87 Add pycodestyle ignores 2019-11-27 14:59:25 +01:00
Darko Poljak
c01aa576de Add/keep empty directories 2019-11-27 14:51:28 +01:00
Darko Poljak
3b5aa8654d Release 6.1.1 2019-11-26 19:24:15 +01:00
Darko Poljak
d1c3264cce Revert "Merge branch '__clean_path_use_types' into 'master'"
This reverts commit 073523be38, reversing
changes made to 56435492a0.
2019-11-26 17:58:25 +01:00
Darko Poljak
8236de763f Revert "++changelog"
This reverts commit e44219903a.
2019-11-26 17:57:19 +01:00
Darko Poljak
e44219903a ++changelog 2019-11-25 21:01:20 +01:00
073523be38 Merge branch '__clean_path_use_types' into 'master'
__clean_path: use __directory and __file types for better clarity

See merge request ungleich-public/cdist!816
2019-11-25 21:00:23 +01:00
2848a6a0f4 __clean_path: use __directory and __file types for better clarity 2019-11-25 21:52:00 +02:00
Darko Poljak
56435492a0 ++changelog 2019-11-24 17:18:02 +01:00
ed16270d94 Merge branch 'patch-1' into 'master'
give error msg to stderr

See merge request ungleich-public/cdist!813
2019-11-24 17:18:34 +01:00
64b07af4ab give error msg to stderr 2019-11-24 17:18:34 +01:00
Darko Poljak
b876ebb16e ++changelog 2019-11-22 19:59:52 +01:00
cd8ffd9046 Merge branch '__hostname_fix' into 'master'
__hostname: silence grep exit 1, when os_version is not numeric

See merge request ungleich-public/cdist!814
2019-11-22 19:49:10 +01:00
4ed18e3446 __hostname: silence grep exit 1, when os_version is not numeric
on Debian Sid os_version returns 'bullseye/sid'
2019-11-22 18:56:34 +02:00
Darko Poljak
b8c6f8c8f5 ++changelog 2019-11-21 17:01:27 +01:00
8efd2681db Merge branch '__apt_key_mktemp_gpghome' into 'master'
__apt_key: use mktemp for unique temporary gpg home

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

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

See merge request ungleich-public/cdist!810
2019-11-20 20:57:31 +01:00
552860b9cd add parameters for ownership and generic rsync-options (__xymon_config) 2019-11-20 15:49:25 +01:00
34bd96db4b add --msgcache-parameter to support passive clients (__xymon_client)
Fix a typo along the way, too.
2019-11-20 15:47:25 +01:00
Darko Poljak
0bc00477ae Release 6.1.0 2019-11-19 21:54:56 +01:00
Darko Poljak
6c67d7194a ++changelog 2019-11-19 21:53:40 +01:00
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
Darko Poljak
0583cdff09 Release 4.10.8 2019-04-06 10:52:32 +02:00
Darko Poljak
b47c6e3fe4 Fix shellcheck SC2002 2019-04-06 10:52:32 +02:00
Darko Poljak
a5e66bc3f6 ++changelog 2019-04-06 10:43:11 +02:00
Darko Poljak
6e56de4580
Merge pull request #747 from 4nd3r/__check_messages
new type: __check_messages
2019-04-04 06:19:59 +02:00
decd80bf5d be more explicit 2019-04-04 00:20:46 +03:00
da6a22c71a new type: __check_messages 2019-04-03 01:11:03 +03:00
Darko Poljak
033e0611b5 ++changelog 2019-04-02 18:39:05 +02:00
Darko Poljak
cfe2afc225
Merge pull request #745 from 4nd3r/__clean_path_fix
__clean_path: do not exit with non-zero if path does not exist or not directory
2019-04-02 18:38:48 +02:00
668dc83632 do not exit with non-zero if path does not exist or not directory 2019-04-02 17:52:00 +03:00
Darko Poljak
001f9023a2 Release 4.10.7 2019-03-30 19:11:13 +01:00
Darko Poljak
cbaf1b6d8e ++ 2019-03-30 12:37:25 +01:00
Darko Poljak
a60ce2fcfb
Merge pull request #744 from 4nd3r/__rm
new type: __clean_path
2019-03-30 12:36:38 +01:00
5f76bd5655 new type: __clean_path 2019-03-30 13:21:13 +02:00
Darko Poljak
6440faf176 ++ 2019-03-29 22:57:52 +01:00
Darko Poljak
6eb0aa4aeb
Merge pull request #743 from 4nd3r/__file_onchange
add --onchange to __file
2019-03-29 22:57:16 +01:00
c6fd43da81 add --onchange to __file, because having to use __config_file just for that feels redundant 2019-03-29 23:43:09 +02:00
Darko Poljak
d656058ff4 ++changelog 2019-03-29 22:15:05 +01:00
Darko Poljak
2332b52d95
Merge pull request #742 from 4nd3r/__line_onchange
add --onchange to __line
2019-03-29 22:14:31 +01:00
0f6fe4764b add --onchange to __line 2019-03-28 23:31:38 +02:00
Darko Poljak
59bff81735 ++changelog 2019-03-26 19:01:26 +01:00
Darko Poljak
996bbd084f
Merge pull request #740 from silasdb/master
Use portable -p instead of --tmpdir for mktemp
2019-03-26 19:00:06 +01:00
Silas
28e2b058a4 Use portable -p instead of --tmpdir for mktemp
-p is equivalent to --tmpdir, but more portable, since it works across
GNU/Linux and *BSDs
2019-03-25 18:36:55 -03:00
Darko Poljak
825a47b3d9 ++changelog 2019-03-19 23:30:34 +01:00
Darko Poljak
66377d2c04
Merge pull request #739 from dne/openbsd-explorers
Support OpenBSD in "cpu_cores" and "disks" global explorers
2019-03-19 23:29:45 +01:00
Daniel Néri
dbcf7d5543 explorer/disks: Add support for OpenBSD 2019-03-19 23:13:24 +01:00
Daniel Néri
0fc64a951c explorer/cpu_cores: Add support for OpenBSD 2019-03-19 23:09:01 +01:00
Darko Poljak
73784b04df ++changelog 2019-03-16 19:00:20 +01:00
Darko Poljak
2155ab7ea2
Merge pull request #738 from dne/openbsd-start-on-boot-absent
Implement "__start_on_boot --state absent" for OpenBSD
2019-03-16 18:58:42 +01:00
Daniel Néri
15ab7c0810 Implement "__start_on_boot --state absent" for OpenBSD 2019-03-16 17:23:19 +01:00
Darko Poljak
689f37acf6 Migrate from pep8 to pycodestyle 2019-02-15 21:05:26 +01:00
Darko Poljak
afc7ca88b8 Release 4.10.6 2019-02-15 20:44:03 +01:00
Darko Poljak
a40a81d36f To keep original echo intentionally disable SC2046 too 2019-02-15 20:44:03 +01:00
Darko Poljak
867b9cb102 shellcheck: SC2236: use -n instead of ! -z 2019-02-15 20:44:03 +01:00
Darko Poljak
51fa8af6b7 pycodestyle 2019-02-15 20:35:32 +01:00
Darko Poljak
ef9d5494cd ++changelog 2019-02-13 18:16:59 +01:00
Darko Poljak
a3a7219ad6
Merge pull request #734 from dheule/fix_zypper_types_echo
readd the use of echo in my explorers
2019-02-13 18:14:49 +01:00
Daniel Heule
df693b9f47 added # shellcheck disable=SC2005 where we need the echo in __zypper explorers 2019-02-13 11:30:55 +01:00
Darko Poljak
82cfea0f3c ++changelog 2019-01-28 19:14:28 +01:00
Darko Poljak
7be3482549
Merge pull request #735 from greendeath/master
Added a startup flag for prometheus alertmanager
2019-01-28 19:13:23 +01:00
Darko Poljak
a77983aead Reorganize parsers right 2019-01-28 19:09:36 +01:00
Dominique Roux
67c3c8ca12 Added a startup flag for prometheus alertmanager
aded the flag --cluster.advertise-address since it is needed for startup on a machine
which does not provide a private v4
2019-01-28 09:32:02 +01:00
Daniel Heule
0bdd590344 readd the use of echo in my explorers
this is nessessary for
 remove blanks in output (strip)
 catch exit codes of zypper (for example if no repo is defined at all)
2019-01-22 13:30:06 +01:00
Darko Poljak
5d3598b96e Release 4.10.5 2018-12-21 22:24:02 +01:00
Darko Poljak
0cb3cbae1b Remove unused explorer 2018-12-21 22:23:41 +01:00
Darko Poljak
794f20007f ++changelog 2018-12-19 17:14:37 +01:00
Darko Poljak
585221db28
Merge pull request #733 from sideeffect42/refactor-openbsd-pkg-type
Refactor __package_pkg_openbsd type
2018-12-19 17:13:10 +01:00
sideeffect42
7d50ba01da
Merge branch 'master' into refactor-openbsd-pkg-type 2018-12-15 09:46:50 +01:00
Takashi Yoshi
ede076e7c5 [type/__package_pkg_openbsd] Send messages local instead of remote 2018-12-15 09:06:09 +01:00
sideeffect42
57a3257a26
Merge branch 'master' into refactor-openbsd-pkg-type 2018-12-14 21:33:42 +01:00
Darko Poljak
93b0727c3b ++changelog 2018-12-14 16:19:30 +01:00
Darko Poljak
fccbcb2eb8
Merge pull request #732 from sideeffect42/package-messages
All package types send messages upon installation/removal
2018-12-14 16:18:20 +01:00
Takashi Yoshi
a7f1eda328 [type/__package_emerge] Send error messages to stderr 2018-12-14 15:54:54 +01:00
Takashi Yoshi
aa456ab6c1 [type/__package_pkg_openbsd] Clean up code 2018-12-14 15:51:47 +01:00
Takashi Yoshi
498628d16a [type/__package_pkg_openbsd] Misc. fixes and improvements 2018-12-14 15:49:23 +01:00
Takashi Yoshi
827081f8a2 [type/__package_pkg_openbsd/explorer/pkg_version] Fix version extraction
The earlier code stripped away all non-numeric parts of the version number.

E.g. "5.6.38p0" would be trimmed to "5.6.38"
2018-12-14 15:49:06 +01:00
Takashi Yoshi
c492c53a98 [type/__package_pkg_openbsd] Send error messages to stderr 2018-12-14 15:46:31 +01:00
Darko Poljak
e3b0cbe8ac ++changelog 2018-12-14 15:20:17 +01:00
Darko Poljak
77d69c987d
Merge pull request #731 from sideeffect42/sysctl-more-oses
Better OS support for __sysctl type
2018-12-14 15:19:17 +01:00
Takashi Yoshi
9acb9d1f3a [type/__sysctl] Group entries 2018-12-14 14:12:33 +01:00
Takashi Yoshi
92610fe76c [type/__sysctl] Add support for Alpine Linux, Gentoo and OpenWrt 2018-12-14 13:51:44 +01:00
Takashi Yoshi
45ff67c0f5 [type/__sysctl] Add Mac OS X support 2018-12-14 13:51:44 +01:00
Takashi Yoshi
566feba5b1 [type/__sysctl] Add NetBSD support 2018-12-14 13:51:44 +01:00
Takashi Yoshi
b36716ef36 [type/__sysctl] Add OpenBSD support 2018-12-14 13:51:44 +01:00
Takashi Yoshi
183d57d6d2 [type/__sysctl] Fix spelling of FreeBSD 2018-12-14 12:43:57 +01:00
Darko Poljak
75afdd4d69 ++changelog 2018-12-13 20:14:54 +01:00
Darko Poljak
a9427f6b2d
Merge pull request #729 from thriqon/allow-docker-ce-version-number
Allow docker ce version number as parameter to type
2018-12-13 20:13:32 +01:00
Jonas Weber
d4bb114468 Remove usage of CDIST_ORDER_DEPENDENCY 2018-12-13 13:26:40 +01:00
Jonas Weber
a7f4c8d773 Allow installing specific Docker-CE version 2018-12-13 13:23:49 +01:00
Darko Poljak
f2ef1ef0d6 ++changelog 2018-12-13 12:32:57 +01:00
Darko Poljak
4a4287e02a
Merge pull request #728 from oxr463/patch-1
Fix broken links.
2018-12-13 12:31:51 +01:00
Rage OxR463
96a0eaabf1
Fix broken links. 2018-12-12 12:12:36 -05:00
Nico Schottelius
49f2d3bf91 ++ changelog 2018-12-11 18:48:23 +01:00
Nico Schottelius
3b921b5dcf
Merge pull request #727 from jgug/develop
update for debian version 9
2018-12-11 18:44:23 +01:00
8ad93a29c9 update for debian version 9 2018-12-12 01:40:39 +09:00
Takashi Yoshi
ccdbf1a31c [type/__package_emerge_dependendencies] Send messages when a dependency is installed 2018-12-07 16:55:49 +01:00
Takashi Yoshi
7e9dce0ceb [type/__package_*] Print installed/removed messages
Up-/downgraded packages will send an "installed" message.
2018-12-07 16:53:21 +01:00
Darko Poljak
5014fd2388 ++changelog 2018-12-05 16:54:39 +01:00
Darko Poljak
45d1037491 [__postgres_role] Revert parts of a34060d703
Broken syntax fixed
2018-12-05 16:51:37 +01:00
Darko Poljak
0491b5b8db Revert "[__postgres_role] Revert parts of a34060d7035e84ff8f70d1e8d5bded7a1bfd71b3"
This reverts commit c85dfbdb10.
2018-12-05 16:41:22 +01:00
Nico Schottelius
c85dfbdb10 [__postgres_role] Revert parts of a34060d703
Broken syntax fixed
2018-12-05 13:14:19 +01:00
Darko Poljak
a85f2ebdb6 ++changelog 2018-11-27 10:41:02 +01:00
Darko Poljak
3a96c21f09
Merge pull request #723 from oliv3r/__ping
type: Add new type __ping
2018-11-27 10:40:03 +01:00
Darko Poljak
0e4ff14633
Merge pull request #725 from oliv3r/update_gitignore
Update .gitignore to more broadly ignore vim
2018-11-27 08:04:48 +01:00
Olliver Schinagl
6b95db8fc7
Update .gitignore to more broadly ignore vim
As per https://github.com/github/gitignore/blob/master/Global/Vim.gitignore

Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2018-11-26 20:39:20 +01:00
Olliver Schinagl
71ceba4ac5
type: Add new type __ping
When starting with cdist, the documentation and examples can be
overwheliming. Further more, sometimes one would only want to do a
simple test to see if the basics are working. One such example currently
is to create a simple remote file. While this is a nice and simple
example, an even simpler example would be to just see if we can 'ping'
the host.

Other configuration management tools also seem to have this as a basic
starting command.

This thus allows to do:
echo __ping | cdist config --initial-manifest - <host>

as the most basic, most simple command to 'test' things with, without
having lingering files to boot.

Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
2018-11-26 20:37:43 +01:00
Darko Poljak
308be1b6fa ++changelog 2018-11-18 16:04:24 +01:00
Darko Poljak
74d222079b
Merge pull request #721 from jimis/master
Fix __group type failing with --gid
2018-11-18 16:04:26 +01:00
Dimitrios Apostolou
2cae33f6d6 Fix __group type failing with --gid
The command `echo -- -g` prints `-- -g` so the generated `groupadd` command
was syntactically incorrect and failing. Solution was to remove `--` since
echo command does not understand it, and add instead an extra space before
`-g` to avoid echo interpreting it as a flag.
2018-11-18 01:30:40 +01:00
Darko Poljak
f8fbcdf2a7 Release 4.10.4 2018-11-03 19:22:59 +01:00
Darko Poljak
d11174f2b7 Add missing ;; in case item. 2018-11-03 19:21:20 +01:00
Darko Poljak
0882a0beec ++changelog 2018-11-03 19:17:24 +01:00
sideeffect42
a34060d703 Improve OpenBSD support (#720)
* [type/__timezone] Whitelist OpenBSD

OpenBSD ships /etc/localtime and /usr/share/zoneinfo by default.

* [type/__postgres_{database,role}] Add explorer support for OpenBSD

On OpenBSD the "postgres" user is called "_postgresql".
The "postgres" database must me specifically specified as it differs from the
user name.

* [type/__postgres_{database,role}] Add gencode support for OpenBSD

On OpenBSD the "postgres" user is called "_postgresql".
The "postgres" database must me specifically specified when using psql as it
differs from the user name.

* [type/__postgres_role] Query DB if role exists instead of screen scaping

* [type/__postgres_database] Query DB if database exists instead

* [type/__postgres_{database,role}] Add user for NetBSD

* [type/__postgres_extension] Add support for OpenBSD and NetBSD

* [__ssh_authorized_key] Add OpenBSD support to entry explorer

Make sure to adhere to re_format(7) for OpenBSD compatibility.

https://man.openbsd.org/re_format.7

* [type/__start_on_boot] Add support for OpenBSD
2018-11-03 19:17:56 +01:00
Darko Poljak
6d70205319 ++changelog 2018-11-02 15:25:13 +01:00
Darko Poljak
14b1952edf
Merge pull request #719 from tom-ee/docs-patches
Docs patches
2018-11-02 15:24:37 +01:00
Darko Poljak
e860f1c792 Determine source_is only if destination is symlink. 2018-11-02 14:35:06 +01:00
a3a0023b2a man-pages are no longer in asciidoc but in ReSTructured text instead 2018-10-31 20:24:07 +01:00
1bae2be406 Synchronize notes on ssh-connection multipexing with current state. 2018-10-31 20:22:41 +01:00
Darko Poljak
6895ad0207 Fix post-shellcheck bug. 2018-10-24 18:26:33 +02:00
Darko Poljak
8c03518962 Fix spelling. 2018-10-17 07:09:59 +02:00
Darko Poljak
3d56aa83ac ++changelog 2018-10-14 10:32:30 +02:00
Darko Poljak
72a0da5537
Merge pull request #718 from darko-poljak/bugfix/716-conflicting-object-parameters
Fix DirectoryDict getitem.
2018-10-14 10:32:15 +02:00
Darko Poljak
5480c22020 Adapt object_parameters before checking conflicting parameters. 2018-10-13 16:11:51 +02:00
Darko Poljak
151edc6398 Fix DirectoryDict getitem. 2018-10-12 19:08:36 +02:00
Darko Poljak
3b7f39cab7 ++changelog 2018-10-12 15:14:30 +02:00
Darko Poljak
09bd321c5c
Merge pull request #715 from tom-ee/improve__user-type
* explicitly check for `absent` to handle state-typos gracefully
* add messaging
* redirect stdout+stderr of `userdel`
If no mail-spoolfile exists for the user the error reporting was
visible in the cdist-run.
* add new messages to man.rst
* quote "remote user", ensuring `user` is handled as one parameter
* fix [SC1117] (explicitly excaping `\n`)
2018-10-12 15:14:21 +02:00
c5098dfcc5 fix [SC1117] (explicitly excaping \n) 2018-10-12 14:05:38 +02:00
c950dd1e90 quote "remote user", ensuring user is handled as one parameter 2018-10-12 14:05:38 +02:00
5761939fa9 add new messages to man.rst 2018-10-12 14:05:38 +02:00
c995d08ce2 redirect stdout+stderr of userdel
If no mail-spoolfile exists for the user the error reporting was
visible in the cdist-run.
2018-10-12 14:05:38 +02:00
a1bf381370 add messaging 2018-10-12 14:05:38 +02:00
409d736339 explicitly check for absent to handle state-typos gracefully 2018-10-12 14:05:38 +02:00
Darko Poljak
09870ece59 ++changelog 2018-10-12 13:57:02 +02:00
Darko Poljak
e4a7fb50fb
Merge pull request #717 from greendeath/master
[CONSUL] add newest versions
2018-10-12 13:43:16 +02:00
Dominique Roux
dd5a45a809 [CONSUL] add newest versions 2018-10-12 11:42:42 +02:00
Darko Poljak
5e99219ea5
Merge pull request #713 from darko-poljak/shellcheck-files-scripts
shellcheck on /files/ scripts.
2018-10-11 09:16:24 +02:00
Darko Poljak
faed292a4e Rule should be split. 2018-10-10 15:01:03 +02:00
Darko Poljak
7a9dea9754 Improve quoting. 2018-10-10 12:56:48 +02:00
Darko Poljak
610deba454 Improve quoting. 2018-10-10 12:52:50 +02:00
Darko Poljak
8669ccb9c1 Improve shell code. 2018-10-10 12:43:39 +02:00
Darko Poljak
53300b1004 Fix after shellcheck. 2018-10-10 12:43:39 +02:00
Darko Poljak
dcb4395909 Resolve custom remote copy/exec shellcheck (non-)issues. 2018-10-10 12:43:39 +02:00
Darko Poljak
0f31a550cc Fix SC2012. 2018-10-10 12:43:39 +02:00
Darko Poljak
c58e12a4b9 shellcheck on /files/ scripts. 2018-10-10 12:43:39 +02:00
Darko Poljak
0b58ab8c83 Bypass Configuration singleton from other tests if any. 2018-10-10 12:34:31 +02:00
Darko Poljak
9afc17f3f8 Make cdist.test return exit code. 2018-10-10 10:37:29 +02:00
Nico Schottelius
256c8324a0 Merge branch 'master' of github.com:ungleich/cdist
Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
2018-10-09 19:43:41 +02:00
Darko Poljak
52b45d4add
Merge pull request #712 from darko-poljak/shellcheck-type-explorers
Fix problems found by sellcheck in type explorers.
2018-10-08 18:01:03 +02:00
Darko Poljak
69790ec138 Fix typing error. 2018-10-08 15:43:42 +02:00
Darko Poljak
0458f66c96 Resolve SC2012. 2018-10-08 15:35:29 +02:00
Darko Poljak
ec186673bf Add TODO markers for SC2012. 2018-10-07 19:48:31 +02:00
Darko Poljak
638ddd95d6 Fix problems found by sellcheck in type explorers. 2018-10-07 19:41:44 +02:00
Darko Poljak
ab8f87864e Add shellcheck-ing for type explorers and auxiliary files. 2018-10-07 19:09:14 +02:00
Darko Poljak
cb826ad570 ++changelog 2018-10-07 18:47:38 +02:00
Darko Poljak
791473cc2e
Merge pull request #711 from darko-poljak/shellcheck-rest
Shellcheck rest
2018-10-07 18:43:20 +02:00
Darko Poljak
334201b945 Fix remaining shellcheck problems. 2018-10-07 10:22:11 +02:00
Darko Poljak
e9b823bc39 Better fixes. 2018-10-07 10:22:11 +02:00
Darko Poljak
a78baccc82 Fix SC2154. Note: ignoring __<name> vars. 2018-10-07 10:22:11 +02:00
Darko Poljak
a9f27beb98 Fix SC1117. 2018-10-07 10:22:11 +02:00
Darko Poljak
83806e767a Disable SC1091 where appropriate. 2018-10-07 10:22:11 +02:00
Darko Poljak
3be1c4ad6f If nothing found shellcheck targets should succeed. 2018-10-07 10:21:08 +02:00
Darko Poljak
edaf4b46a5 ++changelog 2018-10-06 22:53:07 +02:00
Darko Poljak
cdfa2dc628
Merge pull request #710 from darko-poljak/shellcheck-makefile-target
Shellcheck makefile target
2018-10-06 22:52:59 +02:00
Darko Poljak
140518f1b0 Add comment for SHELLCHECK_SKIP. 2018-10-06 15:56:55 +02:00
Darko Poljak
8436f872a9 Add shellcheck makefile target. shellcheck when doing release. 2018-10-06 15:56:55 +02:00
Darko Poljak
877b4d2748 ++changelog 2018-10-06 15:15:53 +02:00
Darko Poljak
a46016242b
Merge pull request #708 from darko-poljak/shellcheck-various
Fix for various problems (shellcheck)
2018-10-06 15:15:38 +02:00
Darko Poljak
f039b0e6e5 Fix SC2030,SC2031. 2018-10-06 08:36:06 +02:00
Darko Poljak
68fad03a6b Fix SC2120, SC2119. 2018-10-05 15:18:59 +02:00
Darko Poljak
b284bafbee grep directly on the explorer file 2018-10-05 15:14:03 +02:00
Darko Poljak
02f39bcf6f Fix SC2028. 2018-10-05 15:08:25 +02:00
Darko Poljak
0d80b4473b Disable SC2031 for the single incident. 2018-10-05 15:04:22 +02:00
Darko Poljak
9a61aab631 ++ 2018-10-05 14:59:35 +02:00
Darko Poljak
88d4c8a059
Merge pull request #709 from darko-poljak/SC2044
Fix SC2044.
2018-10-05 14:58:50 +02:00
Darko Poljak
bf270b6f9c Fix SC2044. 2018-10-05 13:05:01 +02:00
Darko Poljak
a369acea72 Fix SC2021. 2018-10-05 12:52:44 +02:00
Darko Poljak
644ec85d80 Fix SC2162. 2018-10-05 12:50:01 +02:00
Darko Poljak
16159d8fca Fix SC2145. 2018-10-05 12:32:56 +02:00
Darko Poljak
596f3cf227 Disable SC2119,SC2120 where appropriate. 2018-10-05 12:31:05 +02:00
Darko Poljak
9b567ed8f7 Fix SC2230. 2018-10-05 12:27:43 +02:00
Darko Poljak
8cea8e67aa Disable SC2031 where appropriate. 2018-10-05 12:25:40 +02:00
Darko Poljak
b120a813a2 Disable SC2030 where appropriate. 2018-10-05 12:24:03 +02:00
Darko Poljak
7b17ad4733 Fix SC2143. 2018-10-05 12:21:59 +02:00
Darko Poljak
e46420e7f5 Fix SC1090. 2018-10-05 12:19:16 +02:00
Darko Poljak
2f7b8e6db9 Fix SC2153. 2018-10-05 12:16:27 +02:00
Darko Poljak
73d0a5bbbe Fix SC2235. 2018-10-05 12:14:51 +02:00
Darko Poljak
73acb35a8a Fix SC2196. 2018-10-05 12:04:45 +02:00
Darko Poljak
28889ef38a Disable SC2028 where intended. 2018-10-05 12:02:10 +02:00
Darko Poljak
ed542cc7cb Fix SC2046. 2018-10-05 11:57:31 +02:00
Darko Poljak
b25aff17c6 Disable SC2039 where appropriate. 2018-10-05 11:49:28 +02:00
Darko Poljak
a601fa91d9 Fix SC2116. 2018-10-05 11:34:10 +02:00
Darko Poljak
5f8c631e34 ++changelog 2018-10-05 11:26:47 +02:00
Darko Poljak
678ce2bfaa
Merge pull request #707 from darko-poljak/SC2016
Disable SC2016 check.
2018-10-05 11:26:01 +02:00
Darko Poljak
3b6d759660 Disable SC2016 check. 2018-10-05 10:32:38 +02:00
Darko Poljak
d2f1d6185d ++changelog 2018-10-05 10:29:47 +02:00
Darko Poljak
0cb127822f
Merge pull request #706 from darko-poljak/SC2164
Fix SC2164
2018-10-05 10:28:04 +02:00
Darko Poljak
49bb041330
Merge pull request #696 from thriqon/shellcheck-party-SC2086
Fix SC2086 on all scripts
2018-10-05 10:26:53 +02:00
Darko Poljak
c01cf38660 Fix SC2164 2018-10-04 23:10:42 +02:00
Darko Poljak
738f053877 ++changelog 2018-10-04 22:39:06 +02:00
Darko Poljak
68b6477fe3
Merge pull request #705 from thriqon/shellcheck-party-various
Fix various shellcheck issues (SC2215, SC2059, SC2155, SC2091)
2018-10-04 22:39:05 +02:00
Darko Poljak
f0fb5215e8
Merge pull request #700 from thriqon/shellcheck-party-SC2034
Remove unused variables (SC2034)
2018-10-04 22:35:08 +02:00
Darko Poljak
3ead8b266a
Merge pull request #704 from thriqon/shellcheck-party-SC2069
Fix SC2069 (wrong stdout/stderr redirect order)
2018-10-04 22:33:11 +02:00
Jonas Weber
34b571b7d9 Fix SC2091 (execute result of condition)
For some reason, the echo|grep pattern was enclosed four times in a $()
operation. Nothing happened, since grep is always invoked with -q
(quiet, nothing printed to stdout).
2018-10-04 22:23:48 +02:00
Jonas Weber
bcd7fbbcc4 Fix SC2155 (directly export computed variables) 2018-10-04 22:23:48 +02:00
Jonas Weber
a0db375f91 Disable SC2059 (printf injection) for staged_file
We're explicitly allowing for 'printf injection' here, so it's ok to
just disable the corresponding shellcheck check.
2018-10-04 22:23:38 +02:00
Jonas Weber
a6fdf4255a Fix SC2069 (wrong stdout/stderr redirect order)
In the original order, stderr was connected to the old stdout
(terminal). This was _probably_ not intended. The new order fixes this
by first connecting stdout to /dev/null and then attaching stderr to
that as well.
2018-10-04 22:04:24 +02:00
Jonas Weber
e2593c0dcb Fix SC2215 (missing brackets on if)
This might have never worked as intended, but how would you know?
2018-10-04 22:03:52 +02:00
Jonas Weber
fff656d1ac Unquote $recursive to support empty-case
This is safe to do, as the value of $recursive is not dependent on
user-supplied code.
2018-10-04 19:45:26 +02:00
Jonas Weber
53728a7ff0 Change backslash-dquote to single quote
Slightly breaking change, but improves security and readability.
2018-10-04 19:45:26 +02:00
Jonas Weber
ae7ccc5995 Fix SC2086 on all scripts
Relevant documentation: https://github.com/koalaman/shellcheck/wiki/SC2086

relates to: #540

This commit addresses 241 separate cases of missing quotes around
variables.
2018-10-04 19:45:22 +02:00
Jonas Weber
23debd5b6f Use cur_ip in jail for freebsd 2018-10-04 19:22:28 +02:00
Jonas Weber
352679386d Drop unused options parameter in __install_reboot 2018-10-04 19:22:28 +02:00
Jonas Weber
b3f4d3849a Fix __install_umount target parameter 2018-10-04 19:22:28 +02:00
Jonas Weber
6b0f8fba22 Remove unused variables (almost, found bugs?)
Solves SC2034

references #540.
2018-10-04 19:22:28 +02:00
Darko Poljak
ef8ec8641e ++ 2018-10-04 18:47:28 +02:00
Darko Poljak
a2ed14b6d0
Merge pull request #701 from tom-ee/fix-SC2148
fix SC2148 (missing shebang) and make executable
2018-10-04 18:46:38 +02:00
085b2a2b10 remove set -e on explorers (they should be able to fail gracefully) 2018-10-04 17:38:39 +02:00
a46da35bbc fix SC2148 (missing shebang) and make executable 2018-10-04 17:38:38 +02:00
Darko Poljak
d49d38481f ++changelog 2018-10-04 17:31:37 +02:00
Darko Poljak
66ca2fcb70
Merge pull request #703 from tom-ee/fix-SC2045
fix SC2045 (use globs instead of `ls`)
2018-10-04 17:31:34 +02:00
d950ddada3 fix SC2045 (use globs instead of ls) 2018-10-04 16:01:45 +02:00
Darko Poljak
31bf6ab230 ++changelog 2018-10-04 12:38:40 +02:00
Darko Poljak
b62b41b263
Merge pull request #702 from tom-ee/fix-SC2166-global-explorer
fix another SC2166 (test `[ .. -a.. ]` replaced by `[ .. ] && ]`)
2018-10-04 12:38:09 +02:00
134c84607f fix another SC2166 (test [ .. -a.. ] replaced by [ .. ] && ]) 2018-10-04 12:28:59 +02:00
Darko Poljak
ab9e2264df ++changelog 2018-10-04 09:10:31 +02:00
Darko Poljak
e1b62ec560
Merge pull request #699 from darko-poljak/SC2039
Fix SC2039
2018-10-04 09:08:23 +02:00
Darko Poljak
383af6736f ++changelog 2018-10-03 14:52:17 +02:00
Darko Poljak
4403392869
Merge pull request #698 from darko-poljak/SC2002
Fix SC2002
2018-10-03 14:51:12 +02:00
Darko Poljak
8ef2773c0d Fix SC2039 2018-10-03 14:32:39 +02:00
Darko Poljak
44acfcdd12 Fix SC2002 2018-10-03 14:12:07 +02:00
Darko Poljak
3757e8c2c5 ++changelog 2018-10-02 21:50:17 +02:00
Darko Poljak
e69be05f70
Merge pull request #694 from darko-poljak/SC2005
Fix SC2005
2018-10-02 21:49:45 +02:00
Darko Poljak
d29534861b
Merge pull request #695 from darko-poljak/SC2004
Fix SC2004
2018-10-02 21:49:01 +02:00
Darko Poljak
0928708d19 Fix SC2004 2018-10-02 20:34:54 +02:00
Darko Poljak
5ed95ce93b Fix SC2005 2018-10-02 20:22:44 +02:00
Darko Poljak
aef14ad39e ++changelog 2018-10-02 17:21:24 +02:00
Darko Poljak
f1369820d0
Merge pull request #693 from thriqon/shellcheck-party-SC2166
Fix SC2166 (and/or operators in test) on all manfest/gencode/explorers
2018-10-02 17:19:21 +02:00
Jonas Weber
6326eae1bb Fix SC2166 on all manfest/gencode/explorers 2018-10-01 22:13:24 +02:00
Nico Schottelius
54ca7b40c7 Update consul agent init script so that it works again on Devuan
Error before:

---- BEGIN code-remote:stderr ----
insserv: warning: script 'consul' missing LSB tags and overrides
insserv: There is a loop between service monit and consul if stopped
insserv:  loop involving service consul at depth 2
insserv:  loop involving service monit at depth 1
insserv: Stopping consul depends on monit and therefore on system facility `$all' which can not be true!
insserv: exiting now without changing boot order!
update-rc.d: error: insserv rejected the script header
2018-03-06 22:33:10 +01:00
608 changed files with 20801 additions and 3057 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

24
.gitignore vendored
View file

@ -1,5 +1,22 @@
# -vim
.*.swp
# Swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
# Temporary
.netrwhist
*~
*.tmp
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
# Ignore generated manpages
docs/src/.marker
@ -7,6 +24,8 @@ docs/src/man1/*.1
docs/src/man7/*.7
docs/src/man7/cdist-type__*.rst
docs/src/cdist-reference.rst
docs/src/cdist-types.rst
docs/src/cdist.cfg.skeleton
# Ignore cdist cache for version control
/cache/
@ -17,7 +36,7 @@ cdist/inventory/
# Python: cache, distutils, distribution in general
__pycache__/
*.pyc
MANIFEST
/MANIFEST
dist/
cdist/version.py
cdist.egg-info/
@ -27,6 +46,7 @@ _build/
docs/dist
# Ignore temp files used for signing
cdist-*.tar
cdist-*.tar.gz
cdist-*.tar.gz.asc

20
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,20 @@
stages:
- test
image: code.ungleich.ch:5050/ungleich-public/cdist/cdist-ci:latest
unit_tests:
stage: test
script:
- ./bin/build-helper version
- ./bin/build-helper test
pycodestyle:
stage: test
script:
- ./bin/build-helper pycodestyle
shellcheck:
stage: test
script:
- ./bin/build-helper shellcheck

674
LICENSE Normal file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
cdist
Copyright (C) 2019 ungleich-public
This program 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.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
cdist Copyright (C) 2019 ungleich-public
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

201
Makefile
View file

@ -18,31 +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
################################################################################
# Manpages
#
MAN1DSTDIR=$(DOCS_SRC_DIR)/man1
MAN7DSTDIR=$(DOCS_SRC_DIR)/man7
# Manpages #1: Types
@ -64,11 +63,28 @@ DOCSREFSH=$(DOCS_SRC_DIR)/cdist-reference.rst.sh
$(DOCSREF): $(DOCSREFSH)
$(DOCSREFSH)
# Html types list with references
DOCSTYPESREF=$(MAN7DSTDIR)/cdist-types.rst
DOCSTYPESREFSH=$(DOCS_SRC_DIR)/cdist-types.rst.sh
$(DOCSTYPESREF): $(DOCSTYPESREFSH)
$(DOCSTYPESREFSH)
DOCSCFGSKEL=./configuration/cdist.cfg.skeleton
configskel: $(DOCSCFGSKEL)
cp -f "$(DOCSCFGSKEL)" "$(DOCS_SRC_DIR)/"
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 configskel $(MANTYPES) $(DOCSREF) $(DOCSTYPESREF)
$(SPHINXH)
docs: man html
@ -76,24 +92,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)
@ -106,8 +104,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)
################################################################################
@ -115,7 +112,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
@ -125,131 +121,28 @@ $(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
rm -f $(DOCS_SRC_DIR)/cdist-types.rst
rm -f $(DOCS_SRC_DIR)/cdist.cfg.skeleton
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) $@
pep8:
$(helper) $@
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,67 @@
# 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\]'
SHELLCHECKTMP=".shellcheck.tmp"
# Change to checkout directory
basedir="${0%/*}/../"
cd "$basedir"
case "$option" in
changelog-changes)
if [ "$#" -eq 1 ]; then
@ -66,8 +117,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 +127,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 +148,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 +200,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 +211,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 +226,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,29 +284,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-pep8
"$0" check-pycodestyle
"$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
@ -277,7 +318,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
@ -295,20 +336,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
@ -316,41 +349,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 generated mailinglist.tmp mail
- 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
@ -360,22 +393,30 @@ 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
;;
pep8)
pep8 "${basedir}" "${basedir}/scripts/cdist" | less
pycodestyle|pep8)
pycodestyle "${basedir}" "${basedir}/scripts/cdist"
;;
check-pep8)
"$0" pep8
echo "Please review pep8 report."
check-pycodestyle)
"$0" pycodestyle
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
@ -384,7 +425,97 @@ 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)
# shellcheck disable=SC2086
find cdist/conf/explorer -type f -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-type-explorers)
# shellcheck disable=SC2086
find cdist/conf/type -type f -path "*/explorer/*" -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-manifests)
# shellcheck disable=SC2086
find cdist/conf/type -type f -name manifest -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-local-gencodes)
# shellcheck disable=SC2086
find cdist/conf/type -type f -name gencode-local -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-remote-gencodes)
# shellcheck disable=SC2086
find cdist/conf/type -type f -name gencode-remote -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-scripts)
# shellcheck disable=SC2086
${SHELLCHECKCMD} scripts/cdist-dump scripts/cdist-new-type > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-gencodes)
"$0" shellcheck-local-gencodes || exit 1
"$0" shellcheck-remote-gencodes || exit 1
;;
shellcheck-types)
"$0" shellcheck-type-explorers || exit 1
"$0" shellcheck-manifests || exit 1
"$0" shellcheck-gencodes || exit 1
;;
shellcheck)
"$0" shellcheck-global-explorers || exit 1
"$0" shellcheck-types || exit 1
"$0" shellcheck-scripts || exit 1
;;
shellcheck-type-files)
# shellcheck disable=SC2086
find cdist/conf/type -type f -path "*/files/*" -exec ${SHELLCHECKCMD} {} + | grep -v "${SHELLCHECK_SKIP}" > "${SHELLCHECKTMP}"
test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; }
;;
shellcheck-with-files)
"$0" shellcheck || exit 1
"$0" shellcheck-type-files || exit 1
;;
shellcheck-build-helper)
${SHELLCHECKCMD} ./bin/build-helper
;;
check-shellcheck)
"$0" shellcheck
printf "\\nPlease review shellcheck report.\\n"
while true
do
printf "Continue (yes/no)?\n"
any=
read -r any
case "$any" in
yes)
break
;;
no)
exit 1
;;
*)
printf "Please answer with 'yes' or 'no' explicitly.\n"
;;
esac
done
@ -395,16 +526,40 @@ 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
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,473 +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-pep8
# 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
;;
pep8)
pep8 "${basedir}" "${basedir}/scripts/cdist" | less
;;
check-pep8)
"$0" pep8
echo "Please review pep8 report."
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,24 @@ import logging
import collections
import functools
import cdist.configuration
import cdist.preos
import cdist.info
# 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,
@ -101,7 +104,7 @@ def get_parsers():
name="log level"),
help=('Set the specified verbosity level. '
'The levels, in order from the lowest to the highest, are: '
'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3) '
'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3), '
'TRACE (4 or higher). If used along with -v then -v '
'increases last set value and -l overwrites last set '
'value.'),
@ -161,6 +164,16 @@ def get_parsers():
# Config
parser['config_main'] = argparse.ArgumentParser(add_help=False)
parser['config_main'].add_argument(
'-4', '--force-ipv4',
help=('Force to use IPv4 addresses only. No influence for custom'
' remote commands.'),
action='store_const', dest='force_ipv', const=4)
parser['config_main'].add_argument(
'-6', '--force-ipv6',
help=('Force to use IPv6 addresses only. No influence for custom'
' remote commands.'),
action='store_const', dest='force_ipv', const=6)
parser['config_main'].add_argument(
'-C', '--cache-path-pattern',
help=('Specify custom cache path pattern. If '
@ -181,8 +194,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(
@ -191,6 +203,11 @@ def get_parsers():
parser['config_main'].add_argument(
'-o', '--out-dir',
help='Directory to save cdist output in.', dest="out_path")
parser['config_main'].add_argument(
'-P', '--timestamp',
help=('Timestamp log messages with the current local date and time '
'in the format: YYYYMMDDHHMMSS.us.'),
action='store_true', dest='timestamp')
parser['config_main'].add_argument(
'-R', '--use-archiving', nargs='?',
choices=('tar', 'tgz', 'tbz2', 'txz',),
@ -220,19 +237,13 @@ def get_parsers():
'(should behave like ssh).'),
action='store', dest='remote_exec',
default=None)
parser['config_main'].add_argument(
'-S', '--disable-saving-output-streams',
help='Disable saving output streams.',
action='store_false', dest='save_output_streams', default=True)
# Config
parser['config_args'] = argparse.ArgumentParser(add_help=False)
parser['config_args'].add_argument(
'-4', '--force-ipv4',
help=('Force to use IPv4 addresses only. No influence for custom'
' remote commands.'),
action='store_const', dest='force_ipv', const=4)
parser['config_args'].add_argument(
'-6', '--force-ipv6',
help=('Force to use IPv6 addresses only. No influence for custom'
' remote commands.'),
action='store_const', dest='force_ipv', const=6)
parser['config_args'].add_argument(
'-A', '--all-tagged',
help=('Use all hosts present in tags db. Currently in beta.'),
@ -242,8 +253,6 @@ def get_parsers():
help=('List hosts that have all specified tags, '
'if -t/--tag is specified.'),
action="store_true", dest="has_all_tags", default=False)
parser['config_args'].add_argument(
'host', nargs='*', help='Host(s) to operate on.')
parser['config_args'].add_argument(
'-f', '--file',
help=('Read specified file for a list of additional hosts to '
@ -251,11 +260,6 @@ def get_parsers():
'line). If no host or host file is specified then, by '
'default, read hosts from stdin.'),
dest='hostfile', required=False)
parser['config_args'].add_argument(
'-P', '--timestamp',
help=('Timestamp log messages with the current local date and time '
'in the format: YYYYMMDDHHMMSS.us.'),
action='store_true', dest='timestamp')
parser['config_args'].add_argument(
'-p', '--parallel', nargs='?', metavar='HOST_MAX',
type=functools.partial(check_lower_bounded_int, lower_bound=1,
@ -265,10 +269,6 @@ def get_parsers():
'default.'),
action='store', dest='parallel',
const=multiprocessing.cpu_count())
parser['config_args'].add_argument(
'-S', '--disable-saving-output-streams',
help='Disable saving output streams.',
action='store_false', dest='save_output_streams', default=True)
parser['config_args'].add_argument(
'-s', '--sequential',
help='Operate on multiple hosts sequentially (default).',
@ -279,6 +279,8 @@ def get_parsers():
'list all hosts that contain any of specified tags. '
'Currently in beta.'),
dest='tag', required=False, action="store_true", default=False)
parser['config_args'].add_argument(
'host', nargs='*', help='Host(s) to operate on.')
parser['config'] = parser['sub'].add_parser(
'config', parents=[parser['loglevel'], parser['beta'],
parser['common'],
@ -423,6 +425,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']])
@ -432,6 +437,37 @@ def get_parsers():
' should be POSIX compatible shell.'))
parser['shell'].set_defaults(func=cdist.shell.Shell.commandline)
# Info
parser['info'] = parser['sub'].add_parser('info')
parser['info'].add_argument(
'-a', '--all', help='Display all info. This is the default.',
action='store_true', default=False)
parser['info'].add_argument(
'-c', '--conf-dir',
help='Add configuration directory (can be repeated).',
action='append')
parser['info'].add_argument(
'-e', '--global-explorers',
help='Display info for global explorers.', action='store_true',
default=False)
parser['info'].add_argument(
'-F', '--fixed-string',
help='Interpret pattern as a fixed string.', action='store_true',
default=False)
parser['info'].add_argument(
'-f', '--full', help='Display full details.',
action='store_true', default=False)
parser['info'].add_argument(
'-g', '--config-file',
help='Use specified custom configuration file.',
dest="config_file", required=False)
parser['info'].add_argument(
'-t', '--types', help='Display info for types.',
action='store_true', default=False)
parser['info'].add_argument(
'pattern', nargs='?', help='Glob pattern.')
parser['info'].set_defaults(func=cdist.info.Info.commandline)
for p in parser:
parser[p].epilog = EPILOG

View file

@ -25,13 +25,17 @@
os=$("$__explorer/os")
case "$os" in
"macosx")
echo "$(sysctl -n hw.physicalcpu)"
sysctl -n hw.physicalcpu
;;
"openbsd")
sysctl -n hw.ncpuonline
;;
*)
if [ -r /proc/cpuinfo ]; then
cores="$(grep "core id" /proc/cpuinfo | sort | uniq | wc -l)"
if [ ${cores} -eq 0 ]; then
if [ "${cores}" -eq 0 ]; then
cores="1"
fi
echo "$cores"

View file

@ -25,14 +25,14 @@
os=$("$__explorer/os")
case "$os" in
"macosx")
echo "$(system_profiler SPHardwareDataType | grep "Number of Processors" | awk -F': ' '{print $2}')"
system_profiler SPHardwareDataType | grep "Number of Processors" | awk -F': ' '{print $2}'
;;
*)
if [ -r /proc/cpuinfo ]; then
sockets="$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)"
if [ ${sockets} -eq 0 ]; then
sockets="$(cat /proc/cpuinfo | grep "processor" | wc -l)"
sockets="$(grep "physical id" /proc/cpuinfo | sort -u | wc -l)"
if [ "${sockets}" -eq 0 ]; then
sockets="$(grep -c "processor" /proc/cpuinfo)"
fi
echo "${sockets}"
fi

69
cdist/conf/explorer/disks Normal file → Executable file
View file

@ -1,2 +1,67 @@
cd /dev
echo sd? hd? vd?
#!/bin/sh -e
#
# based on previous work by other people, modified by:
# 2020 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/>.
#
# Finds disks of the system (excl. ram disks, floppy, cdrom)
uname_s="$(uname -s)"
case $uname_s in
FreeBSD)
sysctl -n kern.disks
;;
OpenBSD)
sysctl -n hw.disknames | grep -Eo '[lsw]d[0-9]+'
;;
NetBSD)
PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
sysctl -n hw.disknames \
| awk 'BEGIN { RS = " " } /^[lsw]d[0-9]+/'
;;
Linux)
# list of major device numbers toexclude:
# ram disks, floppies, cdroms
# https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
ign_majors='1 2 11'
if command -v lsblk >/dev/null 2>&1
then
lsblk -e "$(echo "$ign_majors" | tr ' ' ',')" -dno name
elif test -d /sys/block/
then
# shellcheck disable=SC2012
ls -1 /sys/block/ \
| awk -v ign_majors="$(echo "$ign_majors" | tr ' ' '|')" '
{
devfile = "/sys/block/" $0 "/dev"
getline devno < devfile
close(devfile)
if (devno !~ "^(" ign_majors "):") print
}'
else
echo "Don't know how to list disks on Linux without lsblk and sysfs." >&2
echo 'If you can, please submit a patch.'>&2
fi
;;
*)
printf "Don't know how to list disks for %s operating system.\n" "${uname_s}" >&2
printf 'If you can please submit a patch\n' >&2
;;
esac \
| xargs

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

@ -1,7 +1,8 @@
#!/bin/sh
#!/bin/sh -e
#
# 2016 Daniel Heule (hda at sfs.biz)
# Copyright 2017, Philippe Gregoire <pg@pgregoire.xyz>
# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -19,21 +20,423 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Returns the process name of pid 1 ( normaly the init system )
# for example at linux this value is "init" or "systemd" in most cases
# Returns the name of the init system (PID 1)
# Expected values:
# Linux:
# Adélie Linux:
# sysvinit+openrc
# Alpine Linux:
# busybox-init+openrc
# ArchLinux:
# systemd, sysvinit
# CRUX:
# sysvinit
# Debian:
# systemd, upstart, sysvinit, openrc, ???
# Devuan:
# sysvinit, sysvinit+openrc
# Gentoo:
# sysvinit+openrc, openrc-init, systemd
# OpenBMC:
# systemd
# OpenWrt:
# procd, init???
# RedHat (RHEL, CentOS, Fedora, RedHat Linux, ...):
# systemd, upstart, upstart-legacy, sysvinit
# Slackware:
# sysvinit
# SuSE:
# systemd, sysvinit
# Ubuntu:
# systemd, upstart, upstart-legacy, sysvinit
# VoidLinux:
# runit
#
# GNU:
# Debian:
# sysvinit, hurd-init
#
# BSD:
# {Free,Open,Net}BSD:
# init
#
# Mac OS X:
# launchd, init+SystemStarter
#
# Solaris/Illumos:
# smf, init???
uname_s="$(uname -s)"
# NOTE: init systems can be stacked. This is popular to run OpenRC on top of
# sysvinit (Gentoo) or busybox-init (Alpine), but can also be used to run runit
# as a systemd service. This makes init system detection very complicated
# (which result is expected?) This script tries to untangle some combinations,
# OpenRC on top of sysv or busybox (X+openrc), but will ignore others (runit as
# a systemd service)
case "$uname_s" in
Linux)
(pgrep -P0 -l | awk '/^1[ \t]/ {print $2;}') || true
;;
FreeBSD)
ps -o comm= -p 1 || true
;;
*)
# return a empty string as unknown value
echo ""
;;
esac
# NOTE: When we have no idea, nothing will be printed!
# NOTE:
# When trying to gather information about the init system make sure to do so
# without calling the binary! On some systems this triggers a reinitialisation
# of the system which we don't want (e.g. embedded systems).
set -e
KERNEL_NAME=$(uname -s)
KNOWN_INIT_SYSTEMS=$(cat <<EOF
systemd
sysvinit
upstart
runit
procd
smf
launchd
init
hurd_init
systemstarter
EOF
)
common_candidates_by_kernel() {
case $KERNEL_NAME
in
FreeBSD|NetBSD|OpenBSD)
echo init
;;
Linux)
echo systemd
echo sysvinit
echo upstart
;;
GNU)
echo sysvinit
echo hurd-init
;;
Darwin)
echo launchd
echo systemstarter
;;
SunOS)
echo smf
;;
esac
}
## Helpers
trim() {
sed -e 's/^[[:blank:]]*//' -e 's/[[:blank:]]*$//' -e '/^[[:blank:]]*$/d'
}
unique() {
# Delete duplicate lines (keeping input order)
# NOTE: Solaris AWK breaks without if/print construct.
awk '{ if (!x[$0]++) print }'
}
## Check functions
# These functions are used to verify if a guess is correct by checking some
# common property of a running system (presence of a directory in /run etc.)
check_busybox_init() (
busybox_path=${1:-/bin/busybox}
test -x "${busybox_path}" || return 1
grep -q 'BusyBox v[0-9]' "${busybox_path}" || return 1
# It is quite common to use Busybox init to stack other init systemd
# (like OpenRC) on top of it. So we check for that, too.
if stacked=$(check_openrc)
then
echo "busybox-init+${stacked}"
else
echo busybox-init
fi
)
check_hurd_init() (
init_exe=${1:-/hurd/init}
test -x "${init_exe}" || return 1
grep -q 'GNU Hurd' "${init_exe}" || return 1
echo hurd-init
)
check_init() {
# Checks for various BSD inits...
test -x /sbin/init || return 1
if grep -q -E '(Free|Net|Open)BSD' /sbin/init
then
echo init
return 0
fi
}
check_launchd() {
command -v launchctl >/dev/null 2>&1 || return 1
launchctl getenv PATH >/dev/null || return 1
echo launchd
}
check_openrc() {
test -f /run/openrc/softlevel || return 1
echo openrc
}
check_procd() (
procd_path=${1:-/sbin/procd}
test -x "${procd_path}" || return 1
grep -q 'procd' "${procd_path}" || return 1
echo procd
)
check_runit() {
test -d /run/runit || return 1
echo runit
}
check_smf() {
# XXX: Is this the correct way??
test -f /etc/svc/volatile/svc_nonpersist.db || return 1
echo smf
}
check_systemd() {
# NOTE: sd_booted(3)
test -d /run/systemd/system/ || return 1
# systemctl --version | sed -e '/^systemd/!d;s/^systemd //'
echo systemd
}
check_systemstarter() {
test -d /System/Library/StartupItems/ || return 1
test -f /System/Library/StartupItems/LoginWindow/StartupParameters.plist || return 1
echo init+SystemStarter
}
check_sysvinit() (
init_path=${1:-/sbin/init}
test -x "${init_path}" || return 1
grep -q 'INIT_VERSION=sysvinit-[0-9.]*' "${init_path}" || return 1
# It is quite common to use SysVinit to stack other init systemd
# (like OpenRC) on top of it. So we check for that, too.
if stacked=$(check_openrc)
then
echo "sysvinit+${stacked}"
else
echo sysvinit
fi
unset stacked
)
check_upstart() {
test -x "$(command -v initctl)" || return 1
case $(initctl version)
in
*'(upstart '*')')
if test -d /etc/init
then
# modern (DBus-based?) upstart >= 0.5
echo upstart
elif test -d /etc/event.d
then
# ancient upstart
echo upstart-legacy
else
# whatever...
echo upstart
fi
;;
*)
return 1
;;
esac
}
find_init_procfs() (
# First, check if the required file in procfs exists...
test -h /proc/1/exe || return 1
# Find init executable
init_exe=$(ls -l /proc/1/exe 2>/dev/null) || return 1
init_exe=${init_exe#* -> }
if ! test -x "$init_exe"
then
# On some rare occasions it can happen that the
# running init's binary has been replaced. In this
# case Linux adjusts the symlink to "X (deleted)"
# [root@fedora-12 ~]# readlink /proc/1/exe
# /sbin/init (deleted)
# [root@fedora-12 ~]# ls -l /proc/1/exe
# lrwxrwxrwx. 1 root root 0 2020-01-30 23:00 /proc/1/exe -> /sbin/init (deleted)
init_exe=${init_exe% (deleted)}
test -x "$init_exe" || return 1
fi
echo "${init_exe}"
)
guess_by_path() {
case $1
in
/bin/busybox)
check_busybox_init "$1" && return
;;
/lib/systemd/systemd)
check_systemd "$1" && return
;;
/hurd/init)
check_hurd_init "$1" && return
;;
/sbin/launchd)
check_launchd "$1" && return
;;
/usr/bin/runit|/sbin/runit)
check_runit "$1" && return
;;
/sbin/openrc-init)
if check_openrc "$1" >/dev/null
then
echo openrc-init
return
fi
;;
/sbin/procd)
check_procd "$1" && return
;;
/sbin/init|*/init)
# init: it could be anything -> (explicit) no match
return 1
;;
esac
# No match
return 1
}
guess_by_comm_name() {
case $1
in
busybox)
check_busybox_init && return
;;
openrc-init)
if check_openrc >/dev/null
then
echo openrc-init
return 0
fi
;;
init)
# init could be anything -> no match
return 1
;;
*)
# Run check function by comm name if available.
# Fall back to comm name if either it does not exist or
# returns non-zero.
if type "check_$1" >/dev/null
then
"check_$1" && return
else
echo "$1" ; return 0
fi
esac
return 1
}
check_list() (
# List must be a multi-line input on stdin (one name per line)
while read -r init
do
"check_${init}" || continue
return 0
done
return 1
)
# BusyBox's versions of ps and pgrep do not support some options
# depending on which compile-time options have been used.
find_init_pgrep() {
pgrep -P0 -fl 2>/dev/null | awk -F '[[:blank:]]' '$1 == 1 { print $2 }'
}
find_init_ps() {
case $KERNEL_NAME
in
Darwin)
ps -o command -p 1 2>/dev/null | tail -n +2
;;
FreeBSD)
ps -o args= -p 1 2>/dev/null | cut -d ' ' -f 1
;;
Linux)
ps -o comm= -p 1 2>/dev/null
;;
NetBSD)
ps -o comm= -p 1 2>/dev/null
;;
OpenBSD)
ps -o args -p 1 2>/dev/null | tail -n +2 | cut -d ' ' -f 1
;;
*)
ps -o args= -p 1 2>/dev/null
;;
esac | trim # trim trailing whitespace (some ps like Darwin add it)
}
find_init() {
case $KERNEL_NAME
in
Linux|GNU|NetBSD)
find_init_procfs || find_init_pgrep || find_init_ps
;;
FreeBSD)
find_init_procfs || find_init_ps
;;
OpenBSD)
find_init_pgrep || find_init_ps
;;
Darwin|SunOS)
find_init_ps
;;
*)
echo "Don't know how to determine init." >&2
echo 'Please send a patch.' >&2
exit 1
esac
}
# -----
init=$(find_init)
# If we got a path, guess by the path first (fall back to file name if no match)
# else guess by file name directly.
# shellcheck disable=SC2015
{
test -x "${init}" \
&& guess_by_path "${init}" \
|| guess_by_comm_name "$(basename "${init}")"
} && exit 0 || true
# Guessing based on the file path and name didnt lead to a definitive result.
#
# We go through all of the checks until we find a match. To speed up the
# process, common cases will be checked first based on the underlying kernel.
{ common_candidates_by_kernel; echo "${KNOWN_INIT_SYSTEMS}"; } \
| unique | check_list

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

1
cdist/conf/explorer/is-freebsd-jail Normal file → Executable file
View file

@ -1 +1,2 @@
#!/bin/sh
sysctl -n security.jail.jailed 2>/dev/null | grep "1" || true

1
cdist/conf/explorer/kernel_name Normal file → Executable file
View file

@ -1 +1,2 @@
#!/bin/sh
uname -s

View file

@ -20,8 +20,9 @@
#
set +e
case "$($__explorer/os)" in
case "$("$__explorer/os")" in
openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_CODENAME")
;;
*)

View file

@ -20,8 +20,9 @@
#
set +e
case "$($__explorer/os)" in
case "$("$__explorer/os")" in
openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_DESCRIPTION")
;;
*)

View file

@ -20,8 +20,9 @@
#
set +e
case "$($__explorer/os)" in
case "$("$__explorer/os")" in
openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_ID")
;;
*)

View file

@ -20,8 +20,9 @@
#
set +e
case "$($__explorer/os)" in
case "$("$__explorer/os")" in
openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_RELEASE")
;;
*)

View file

@ -22,6 +22,6 @@
#
#
if command -v uname 2>&1 >/dev/null; then
if command -v uname >/dev/null 2>&1 ; then
uname -m
fi

View file

@ -22,13 +22,13 @@
# FIXME: other system types (not linux ...)
if [ -d "/proc/vz" -a ! -d "/proc/bc" ]; then
if [ -d "/proc/vz" ] && [ ! -d "/proc/bc" ]; then
echo openvz
exit
fi
if [ -e "/proc/1/environ" ] &&
cat "/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container='; then
tr '\000' '\n' < "/proc/1/environ" | grep -Eiq '^container='; then
echo lxc
exit
fi

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

@ -1,6 +1,7 @@
#!/bin/sh
#
# 2018 Adam Dej (dejko.a at gmail.com)
# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@ -21,6 +22,17 @@
# See os-release(5) and http://0pointer.de/blog/projects/os-release
set +e
if test -f /etc/os-release
then
# Linux and FreeBSD (usually a symlink)
cat /etc/os-release
elif test -f /usr/lib/os-release
then
# systemd
cat /usr/lib/os-release
elif test -f /var/run/os-release
then
# FreeBSD (created by os-release service)
cat /var/run/os-release
fi
cat /etc/os-release || cat /usr/lib/os-release || true

View file

@ -22,7 +22,7 @@
#
#
case "$($__explorer/os)" in
case "$("$__explorer/os")" in
amazon)
cat /etc/system-release
;;
@ -70,4 +70,7 @@ case "$($__explorer/os)" in
ubuntu)
lsb_release -sr
;;
esac
alpine)
cat /etc/alpine-release
;;
esac

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,86 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
file_is="$( cat "$__object/explorer/file_is" )"
if [ "$file_is" = 'missing' ] \
&& [ -z "$__cdist_dry_run" ] \
&& \( [ ! -f "$__object/parameter/file" ] \
|| [ ! -f "$__object/parameter/directory" ] \)
then
exit 0
fi
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
do
echo "$parameter:$l"
if [ -f "$__object/parameter/source" ]
then
acl_source="$( cat "$__object/parameter/source" )"
if [ -f "$__object/parameter/default" ]
then echo "default:$parameter:$l"
fi
done < "$__object/parameter/$parameter"
done )"
if [ "$acl_source" = '-' ]
then
acl_should="$( cat "$__object/stdin" )"
else
acl_should="$( grep -Ev '^#|^$' "$acl_source" )"
fi
elif [ -f "$__object/parameter/entry" ]
then
acl_should="$( cat "$__object/parameter/entry" )"
elif [ -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
[ ! -f "$__object/parameter/$param" ] && continue
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 +107,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,55 @@ 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.
entry
Set ACL entry following ``getfacl`` output syntax.
group
Add group ACL entry.
OPTIONAL PARAMETERS
-------------------
source
Read ACL entries from stdin or file.
Ordering of entries is not important.
When reading from file, comments and empty lines are ignored.
file
Create/change file with ``__file`` using ``user:group:mode`` pattern.
directory
Create/change directory with ``__directory`` using ``user:group:mode`` pattern.
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 ``acl``, ``user``, ``group``, ``mask`` and ``other`` are deprecated and they
will be removed in future versions. Please use ``entry`` parameter instead.
EXAMPLES
@ -40,13 +60,41 @@ EXAMPLES
.. code-block:: sh
__acl /srv/project \
--default \
--recursive \
--remove \
--entry user:alice:rwx \
--entry user:bob:r-x \
--entry group:project-group:rwx \
--entry group:some-other-group:r-x \
--entry mask::r-x \
--entry other::r-x
# give Alice read-only access to subdir,
# but don't allow her to see parent content.
__acl /srv/project2 \
--remove \
--entry default:group:secret-project:rwx \
--entry group:secret-project:rwx \
--entry 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
--entry group:secret-project:rwx \
--entry user:alice:r-x
# read acl from stdin
echo 'user:alice:rwx' \
| __acl /path/to/directory --source -
# create/change directory too
__acl /path/to/directory \
--default \
--remove \
--directory root:root:770 \
--entry user:nobody:rwx
AUTHORS

11
cdist/conf/type/__acl/manifest Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh -e
for p in file directory
do
[ ! -f "$__object/parameter/$p" ] && continue
"__$p" "/$__object_id" \
--owner "$( awk -F: '{print $1}' "$__object/parameter/$p" )" \
--group "$( awk -F: '{print $2}' "$__object/parameter/$p" )" \
--mode "$( awk -F: '{print $3}' "$__object/parameter/$p" )"
done

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 @@
see manual for details

View file

@ -0,0 +1,5 @@
mask
other
source
file
directory

View file

@ -1,2 +1,4 @@
entry
acl
user
group

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -23,10 +23,11 @@
name="$__object_id"
# shellcheck disable=SC1091
. /etc/lsb-release
repo_name="${name#ppa:}"
repo_file_name="$(echo "$repo_name" | sed -e "s|[/:]|-|" -e "s|\.|_|")-${DISTRIB_CODENAME}.list"
repo_file_name="$(echo "$repo_name" | sed -e 's|[/:]|-|' -e 's|\.|_|')-${DISTRIB_CODENAME}.list"
[ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \
&& echo present || echo absent

View file

@ -29,9 +29,9 @@ fi
case "$state_should" in
present)
echo add-apt-repository \"$name\"
echo "add-apt-repository '$name'"
;;
absent)
echo remove-apt-repository \"$name\"
echo "remove-apt-repository '$name'"
;;
esac

View file

@ -18,8 +18,6 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
name="$__object_id"
__package software-properties-common
require="__package/software-properties-common" \

View file

@ -0,0 +1,68 @@
cdist-type__apt_unattended_upgrades(7)
======================================
NAME
----
cdist-type__apt_unattended_upgrades - automatic installation of updates
DESCRIPTION
-----------
Install and configure unattended-upgrades package.
For more information see https://wiki.debian.org/UnattendedUpgrades.
OPTIONAL MULTIPLE PARAMETERS
----------------------------
option
Set options for unattended-upgrades. See examples.
Supported options with default values (as of 2020-01-17) are:
- AutoFixInterruptedDpkg, default is "true"
- MinimalSteps, default is "true"
- InstallOnShutdown, default is "false"
- Mail, default is "" (empty)
- MailOnlyOnError, default is "false"
- Remove-Unused-Kernel-Packages, default is "true"
- Remove-New-Unused-Dependencies, default is "true"
- Remove-Unused-Dependencies, default is "false"
- Automatic-Reboot, default is "false"
- Automatic-Reboot-WithUsers, default is "true"
- Automatic-Reboot-Time, default is "02:00"
- SyslogEnable, default is "false"
- SyslogFacility, default is "daemon"
- OnlyOnACPower, default is "true"
- Skip-Updates-On-Metered-Connections, default is "true"
- Verbose, default is "false"
- Debug, default is "false"
blacklist
Python regular expressions, matching packages to exclude from upgrading.
EXAMPLES
--------
.. code-block:: sh
__apt_unattended_upgrades \
--option Mail=root \
--option MailOnlyOnError=true \
--blacklist multipath-tools \
--blacklist open-iscsi
AUTHORS
-------
Ander Punnar <ander-at-kvlt-dot-ee>
COPYING
-------
Copyright \(C) 2020 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,80 @@
#!/bin/sh -e
#
# 2020 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/>.
#
__package unattended-upgrades
export require='__package/unattended-upgrades'
# in normal circumstances 20auto-upgrades is managed
# by debconf and it can only contain these lines
__file /etc/apt/apt.conf.d/20auto-upgrades \
--owner root \
--group root \
--mode 644 \
--source - << EOF
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF
# lets not write into upstream 50unattended-upgrades file,
# but use our own config file to avoid clashes
conf_file='/etc/apt/apt.conf.d/51unattended-upgrades-cdist'
conf='# this file is managed by cdist'
if [ -f "$__object/parameter/option" ]
then
o=''
while read -r l
do
o="$( printf '%s\nUnattended-Upgrade::%s "%s";\n' "$o" "${l%%=*}" "${l#*=}" )"
done \
< "$__object/parameter/option"
conf="$( printf '%s\n%s\n' "$conf" "$o" )"
fi
if [ -f "$__object/parameter/blacklist" ]
then
b='Unattended-Upgrade::Package-Blacklist {'
while read -r l
do
b="$( printf '%s\n"%s";\n' "$b" "$l" )"
done \
< "$__object/parameter/blacklist"
conf="$( printf '%s\n%s\n}\n' "$conf" "$b" )"
fi
if [ "$( echo "$conf" | wc -l )" -gt 1 ]
then
echo "$conf" \
| __file "$conf_file" \
--owner root \
--group root \
--mode 644 \
--source -
else
__file "$conf_file" --state absent
fi

View file

@ -0,0 +1,2 @@
option
blacklist

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

@ -18,8 +18,6 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")"
prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id")
suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id")
text=$(cat "$__object/parameter/text")

View file

@ -42,21 +42,20 @@ get_current_value() {
}
set_group() {
echo chgrp \"$1\" \"$destination\"
echo chgrp $1 >> "$__messages_out"
echo "chgrp '$1' '$destination'"
echo "chgrp '$1'" >> "$__messages_out"
}
set_owner() {
echo chown \"$1\" \"$destination\"
echo chown $1 >> "$__messages_out"
echo "chown '$1' '$destination'"
echo "chown '$1'" >> "$__messages_out"
}
set_mode() {
echo chmod \"$1\" \"$destination\"
echo chmod $1 >> "$__messages_out"
echo "chmod '$1' '$destination'"
echo "chmod '$1'" >> "$__messages_out"
}
set_attributes=
case "$state_should" in
present|exists)
# Note: Mode - needs to happen last as a chown/chgrp can alter mode by
@ -67,11 +66,11 @@ case "$state_should" in
# change 0xxx format to xxx format => same as stat returns
if [ "$attribute" = mode ]; then
value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')"
value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
fi
value_is="$(get_current_value "$attribute" "$value_should")"
if [ -f "$__object/files/set-attributes" -o "$value_should" != "$value_is" ]; then
if [ -f "$__object/files/set-attributes" ] || [ "$value_should" != "$value_is" ]; then
"set_$attribute" "$value_should"
fi
fi
@ -81,7 +80,7 @@ case "$state_should" in
absent)
if [ "$type" = "file" ]; then
echo rm -f \"$destination\"
echo "rm -f '$destination'"
echo remove >> "$__messages_out"
fi
;;

View file

@ -22,7 +22,7 @@ name="$__object_id"
state="$(cat "$__object/parameter/state")"
source="$(cat "$__object/parameter/source")"
destination="$(cat "$__object/parameter/destination")"
ccollectconf="$(cat "$__object/parameter/ccollectconf" | sed 's,/$,,')"
ccollectconf="$(sed 's,/$,,' "$__object/parameter/ccollectconf")"
sourcedir="$ccollectconf/sources"
basedir="$sourcedir/$name"
@ -55,5 +55,5 @@ if [ -f "$__object/parameter/exclude" ]; then
fi
if [ -f "$__object/parameter/create-destination" ]; then
__directory "${destination}" --parents --state ${state}
__directory "${destination}" --parents --state "${state}"
fi

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

@ -37,6 +37,7 @@ source="$(cat "$__object/parameter/source")"
# out of it
home=/home/$username
# shellcheck disable=SC2086
__user "$username" --home "$home" $shell
require="__user/$username" __directory "$home" \

View file

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

View file

@ -1,6 +1,6 @@
#!/bin/sh -e
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
#
# This file is part of cdist.
#
@ -18,6 +18,9 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# set defaults
target="$(cat "$__object/parameter/target" 2>/dev/null \
|| echo "/target" | tee "$__object/parameter/target")"
if grep -Eq \
"$( cat "$__object/parameter/pattern" )" \
"$__messages_in"
then
tee "$__messages_out" < "$__object/parameter/execute"
fi

View file

@ -0,0 +1,52 @@
cdist-type__check_messages(7)
=============================
NAME
----
cdist-type__check_messages - Check messages for pattern and execute command on match.
DESCRIPTION
-----------
Check messages for pattern and execute command on match.
This type is useful if you chain together multiple related types using
dependencies and want to restart service if at least one type changes
something.
For more information about messages see `cdist messaging <cdist-messaging.html>`_.
For more information about dependencies and execution order see
`cdist manifest <cdist-manifest.html#dependencies>`_ documentation.
REQUIRED PARAMETERS
-------------------
pattern
Extended regular expression pattern for search (passed to ``grep -E``).
execute
Command to execute on pattern match.
EXAMPLES
--------
.. code-block:: sh
__check_messages munin \
--pattern '^__(file|link|line)/etc/munin/' \
--execute 'service munin-node restart'
AUTHORS
-------
Ander Punnar <ander-at-kvlt-dot-ee>
COPYING
-------
Copyright \(C) 2019 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,2 @@
pattern
execute

View file

@ -0,0 +1,35 @@
#!/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/>.
#
path="/$__object_id"
[ ! -d "$path" ] && exit 0
pattern="$( cat "$__object/parameter/pattern" )"
if [ -f "$__object/parameter/exclude" ]
then
exclude="$( cat "$__object/parameter/exclude" )"
find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern" \
-and -not -regex "$exclude"
else
find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern"
fi

View file

@ -0,0 +1,48 @@
#!/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/>.
#
[ ! -s "$__object/explorer/list" ] && exit 0
path="/$__object_id"
pattern="$( cat "$__object/parameter/pattern" )"
if [ -f "$__object/parameter/exclude" ]
then
exclude="$( cat "$__object/parameter/exclude" )"
echo "find '$path' -mindepth 1 -maxdepth 1 -regex '$pattern'" \
"-and -not -regex '$exclude'" \
'-exec rm -rf {} \;'
else
echo "find '$path' -mindepth 1 -maxdepth 1 -regex '$pattern'" \
'-exec rm -rf {} \;'
fi
while read -r f
do
echo "removed '$f'" >> "$__messages_out"
done \
< "$__object/explorer/list"
if [ -f "$__object/parameter/onchange" ]
then
cat "$__object/parameter/onchange"
fi

View file

@ -0,0 +1,60 @@
cdist-type__clean_path(7)
=========================
NAME
----
cdist-type__clean_path - Remove files and directories which match the pattern.
DESCRIPTION
-----------
Remove files and directories which match the pattern.
Provided path (as __object_id) must be a directory.
Patterns are passed to ``find``'s ``-regex`` - see ``find(1)`` for more details.
Look up of files and directories is non-recursive (``-maxdepth 1``).
Parent directory is excluded (``-mindepth 1``).
This type is not POSIX compatible (sorry, Solaris users).
REQUIRED PARAMETERS
-------------------
pattern
Pattern of files which are removed from path.
OPTIONAL PARAMETERS
-------------------
exclude
Pattern of files which are excluded from removal.
onchange
The code to run if files or directories were removed.
EXAMPLES
--------
.. code-block:: sh
__clean_path /etc/apache2/conf-enabled \
--pattern '.+' \
--exclude '.+\(charset\.conf\|security\.conf\)' \
--onchange 'service apache2 restart'
AUTHORS
-------
Ander Punnar <ander-at-kvlt-dot-ee>
COPYING
-------
Copyright \(C) 2019 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,2 @@
exclude
onchange

View file

@ -0,0 +1 @@
pattern

View file

@ -19,7 +19,8 @@
#
set -- "/${__object_id}"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
source)
source="$(cat "$__object/parameter/source")"

View file

@ -0,0 +1 @@
191982 110369685

View file

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

View file

@ -0,0 +1 @@
1714523667 98363467 consul

View file

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

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

@ -39,10 +39,10 @@ version_dir="$versions_dir/$version"
source=$(cat "$version_dir/source")
source_file_name="${source##*/}"
cksum_should=$(cat "$version_dir/cksum" | cut -d' ' -f1,2)
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,6 +1,6 @@
#!/bin/sh
#
# 2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2015-2018 Nico Schottelius (nico-cdist at schottelius.org)
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
@ -24,15 +24,18 @@
# Required-Stop: $local_fs
# Should-Start:
# Should-Stop:
# Short-Description: consul
# Description: consul agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: libvirt management daemon
### END INIT INFO
if [ -f "/etc/default/consul" ]; then
# shellcheck disable=SC1091
. /etc/default/consul
fi
# shellcheck disable=SC1091
. /lib/lsb/init-functions
NAME=consul

View file

@ -11,49 +11,52 @@
# pidfile: /var/run/consul/pidfile
# Source function library.
# shellcheck disable=SC1091
. /etc/init.d/functions
NAME=consul
CONSUL=/usr/local/bin/consul
CONFIG=/etc/$NAME/conf.d
PID_FILE=/var/run/$NAME/pidfile
LOG_FILE=/var/log/$NAME
CONFIG="/etc/$NAME/conf.d"
PID_FILE="/var/run/$NAME/pidfile"
LOG_FILE="/var/log/$NAME"
[ -e /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME
export GOMAXPROCS=${GOMAXPROCS:-2}
# shellcheck disable=SC1090
[ -e "/etc/sysconfig/$NAME" ] && . "/etc/sysconfig/$NAME"
export GOMAXPROCS="${GOMAXPROCS:-2}"
mkdir -p /var/run/$NAME
chown consul:consul /var/run/$NAME
chmod 2770 /var/run/$NAME
mkdir -p "/var/run/$NAME"
chown consul:consul "/var/run/$NAME"
chmod 2770 "/var/run/$NAME"
start() {
echo -n "Starting $NAME: "
printf "Starting %s: " "$NAME"
daemon --user=consul \
--pidfile="$PID_FILE" \
"$CONSUL" agent -pid-file="$PID_FILE" -config-dir "$CONFIG" >> "$LOG_FILE" &
retcode=$?
touch /var/lock/subsys/$NAME
return $retcode
touch "/var/lock/subsys/$NAME"
return "$retcode"
}
stop() {
echo -n "Shutting down $NAME: "
killproc -p "$PID_FILE" $NAME
printf "Shutting down %s: " "$NAME"
killproc -p "$PID_FILE" "$NAME"
retcode=$?
rm -f /var/lock/subsys/$NAME
return $retcode
rm -f "/var/lock/subsys/$NAME"
return "$retcode"
}
case "$1" in
start)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
echo "$NAME already running"
else
start
fi
;;
stop)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
stop
else
echo "$NAME not running"
@ -63,25 +66,25 @@ case "$1" in
"$CONSUL" info
;;
status)
status -p "$PID_FILE" $NAME
status -p "$PID_FILE" "$NAME"
exit $?
;;
restart)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
stop
fi
start
;;
reload)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
kill -HUP `cat $PID_FILE`
if status -p "$PID_FILE" "$NAME" >/dev/null; then
kill -HUP "$(cat "$PID_FILE")"
else
echo "$NAME not running"
fi
;;
condrestart)
if [ -f /var/lock/subsys/$NAME ]; then
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if [ -f "/var/lock/subsys/$NAME" ]; then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
stop
fi
start

View file

@ -116,6 +116,9 @@ verify-incoming
verify-outgoing
enforce the use of TLS and verify the peers authenticity on outgoing connections
use-distribution-package
uses distribution package instead of upstream binary
EXAMPLES
--------

View file

@ -1,7 +1,8 @@
#!/bin/sh -e
#
# 2015 Steven Armstrong (steven-cdist at armstrong.cc)
# 2015 Nico Schottelius (nico-cdist at schottelius.org)
# 2015-2020 Nico Schottelius (nico-cdist at schottelius.org)
# 2019 Timothée Floure (timothee.floure at ungleich.ch)
#
# This file is part of cdist.
#
@ -19,132 +20,87 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
os=$(cat "$__global/explorer/os")
case "$os" in
scientific|centos|debian|devuan|redhat|ubuntu)
# whitelist safeguard
:
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
###
# Type parameters.
state="$(cat "$__object/parameter/state")"
user="$(cat "$__object/parameter/user")"
group="$(cat "$__object/parameter/group")"
data_dir="/var/lib/consul"
conf_dir="/etc/consul/conf.d"
conf_file="config.json"
release=$(cat "$__global/explorer/lsb_release")
if [ -f "$__object/parameter/use-distribution-package" ]; then
use_distribution_package=1
fi
# FIXME: there has got to be a better way to handle the dependencies in this case
case "$state" in
present)
__group "$group" --system --state "$state"
require="__group/$group" \
__user "$user" --system --gid "$group" \
--home "$data_dir" --state "$state"
export require="__user/consul"
;;
absent)
echo "Sorry, state=absent currently not supported :-(" >&2
exit 1
require="$__object_name" \
__user "$user" --system --gid "$group" --state "$state"
require="__user/$user" \
__group "$group" --system --state "$state"
;;
###
# Those are default that might be overriden by os-specific logic.
data_dir="/var/lib/consul"
tls_dir="$conf_dir/tls"
case "$os" in
alpine)
conf_dir="/etc/consul"
conf_file="server.json"
;;
*)
conf_dir="/etc/consul/conf.d"
conf_file="config.json"
;;
esac
__directory /etc/consul \
--owner root --group "$group" --mode 750 --state "$state"
require="__directory/etc/consul" \
__directory "$conf_dir" \
--owner root --group "$group" --mode 750 --state "$state"
###
# Sane deployment, based on distribution package when available.
if [ -f "$__object/parameter/ca-file-source" -o -f "$__object/parameter/cert-file-source" -o -f "$__object/parameter/key-file-source" ]; then
# create directory for ssl certs
require="__directory/etc/consul" \
__directory /etc/consul/ssl \
--owner root --group "$group" --mode 750 --state "$state"
fi
distribution_setup () {
case "$os" in
debian)
# consul is only available starting Debian 10 (buster).
# See https://packages.debian.org/buster/consul
if [ "$release" -lt 10 ]; then
echo "Consul is not available for your debian release." >&2
echo "Please use the 'manual' (i.e. non-package) installation or \
upgrade the target system." >&2
exit 1
fi
__directory "$data_dir" \
--owner "$user" --group "$group" --mode 770 --state "$state"
# Override previously defined environment to match debian packaging.
conf_dir='/etc/consul.d'
user='consul'
group='consul'
;;
alpine)
# consul is only available starting Alpine 3.12 (= edge during the 3.11 cycle).
# See https://pkgs.alpinelinux.org/packages?name=consul&branch=edge
# Override previously defined environment to match alpine packaging.
conf_dir='/etc/consul'
conf_file='server.json'
data_dir='/var/consul'
user='consul'
group='consul'
;;
*)
echo "Your operating system ($os) is currently not supported with the \
--use-distribution-package flag (${__type##*/})." >&2
echo "Please use non-package installation or contribute an \
implementation for if you can." >&2
exit 1
;;
esac
# Generate json config file
(
echo "{"
# Install consul package.
__package consul --state "$state"
# parameters we define ourself
printf ' "data_dir": "%s"\n' "$data_dir"
export config_deployment_requires="__package/consul"
}
for param in $(ls "$__object/parameter/"); do
case "$param" in
state|user|group|json-config) continue ;;
ca-file-source|cert-file-source|key-file-source)
source="$(cat "$__object/parameter/$param")"
destination="/etc/consul/ssl/${source##*/}"
require="__directory/etc/consul/ssl" \
__file "$destination" \
--owner root --group consul --mode 640 \
--source "$source" \
--state "$state"
key="$(echo "${param%-*}" | tr '-' '_')"
printf ' ,"%s": "%s"\n' "$key" "$destination"
;;
disable-remote-exec|disable-update-check|leave-on-terminate|rejoin-after-leave|server|enable-syslog|verify-incoming|verify-outgoing)
# handle boolean parameters
key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": true\n' "$key"
;;
retry-join)
# join multiple parameters into json array
retry_join="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join")"
# remove trailing ,
printf ' ,"retry_join": [%s]\n' "${retry_join%*,}"
;;
retry-join-wan)
# join multiple parameters into json array over wan
retry_join_wan="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join-wan")"
# remove trailing ,
printf ' ,"retry_join_wan": [%s]\n' "${retry_join_wan%*,}"
;;
bootstrap-expect)
# integer key=value parameters
key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": %s\n' "$key" "$(cat "$__object/parameter/$param")"
;;
*)
# string key=value parameters
key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": "%s"\n' "$key" "$(cat "$__object/parameter/$param")"
;;
esac
done
if [ -f "$__object/parameter/json-config" ]; then
json_config="$(cat "$__object/parameter/json-config")"
if [ "$json_config" = "-" ]; then
json_config="$__object/stdin"
fi
# remove leading and trailing whitespace and commas from first and last line
# indent each line with 3 spaces for consistency
json=$(sed -e 's/^[ \t]*/ /' -e '1s/^[ \t,]*//' -e '$s/[ \t,]*$//' "$json_config")
printf ' ,%s\n' "$json"
fi
echo "}"
) | \
require="__directory${conf_dir}" \
__config_file "${conf_dir}/${conf_file}" \
--owner root --group "$group" --mode 640 \
--state "$state" \
--onchange 'service consul status >/dev/null && service consul reload || true' \
--source -
###
# LEGACY manual deployment, kept for compatibility reasons.
init_sysvinit()
{
@ -178,48 +134,186 @@ init_upstart()
require="__file/etc/init/consul.conf" __start_on_boot consul
}
# 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
;;
manual_setup () {
case "$os" in
alpine|scientific|centos|debian|devuan|redhat|ubuntu)
# whitelist safeguard
:
;;
*)
echo "Your operating system ($os) is currently not supported by this \
type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac
debian)
os_version=$(cat "$__global/explorer/os_version")
major_version="${os_version%%.*}"
# FIXME: there has got to be a better way to handle the dependencies in this case
case "$state" in
present)
__group "$group" --system --state "$state"
require="__group/$group" __user "$user" \
--system --gid "$group" --home "$data_dir" --state "$state"
;;
*)
echo "The $state state is not (yet?) supported by this type." >&2
exit 1
;;
esac
case "$major_version" in
[567])
init_sysvinit debian
;;
8)
init_systemd
;;
*)
echo "Unsupported Debian version $os_version" >&2
exit 1
;;
esac
;;
# Create data directory.
require="__user/consul" __directory "$data_dir" \
--owner "$user" --group "$group" --mode 770 --state "$state"
devuan)
init_sysvinit debian
;;
# Create config directory.
require="__user/consul" __directory "$conf_dir" \
--parents --owner root --group "$group" --mode 750 --state "$state"
ubuntu)
init_upstart
;;
esac
# Install init script to start on boot
case "$os" in
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")
major_version="${os_version%%.*}"
case "$major_version" in
[567])
init_sysvinit debian
;;
[89]|10)
init_systemd
;;
*)
echo "Unsupported Debian version $os_version" >&2
exit 1
;;
esac
;;
ubuntu)
init_upstart
;;
esac
config_deployment_requires="__user/consul __directory/$conf_dir"
}
###
# Trigger requested installation method.
if [ $use_distribution_package ]; then
distribution_setup
else
manual_setup
fi
###
# Install TLS certificates.
if [ -f "$__object/parameter/ca-file-source" ] || \
[ -f "$__object/parameter/cert-file-source" ] || \
[ -f "$__object/parameter/key-file-source" ]; then
requires="$config_deployment_requires" __directory "$tls_dir" \
--owner root --group "$group" --mode 750 --state "$state"
# Append to service restart requirements.
restart_requires="$restart_requires __directory/$conf_dir/tls"
fi
###
# Generate and deploy configuration.
json_configuration=$(
echo "{"
# parameters we define ourself
printf ' "data_dir": "%s"\n' "$data_dir"
cd "$__object/parameter/"
for param in *; do
case "$param" in
state|user|group|json-config|use-distribution-package) continue ;;
ca-file-source|cert-file-source|key-file-source)
source="$(cat "$__object/parameter/$param")"
destination="$tls_dir/${source##*/}"
require="__directory/$tls_dir" \
__file "$destination" \
--owner root --group consul --mode 640 \
--source "$source" \
--state "$state"
key="$(echo "${param%-*}" | tr '-' '_')"
printf ' ,"%s": "%s"\n' "$key" "$destination"
;;
disable-remote-exec|disable-update-check|leave-on-terminate\
|rejoin-after-leave|server|enable-syslog|verify-incoming|verify-outgoing)
# handle boolean parameters
key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": true\n' "$key"
;;
retry-join)
# join multiple parameters into json array
retry_join="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join")"
# remove trailing ,
printf ' ,"retry_join": [%s]\n' "${retry_join%*,}"
;;
retry-join-wan)
# join multiple parameters into json array over wan
retry_join_wan="$(awk '{printf "\""$1"\","}' "$__object/parameter/retry-join-wan")"
# remove trailing ,
printf ' ,"retry_join_wan": [%s]\n' "${retry_join_wan%*,}"
;;
bootstrap-expect)
# integer key=value parameters
key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": %s\n' "$key" "$(cat "$__object/parameter/$param")"
;;
*)
# string key=value parameters
key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": "%s"\n' "$key" "$(cat "$__object/parameter/$param")"
;;
esac
done
if [ -f "$__object/parameter/json-config" ]; then
json_config="$(cat "$__object/parameter/json-config")"
if [ "$json_config" = "-" ]; then
json_config="$__object/stdin"
fi
# remove leading and trailing whitespace and commas from first and last line
# indent each line with 3 spaces for consistency
json=$(sed -e 's/^[ \t]*/ /' -e '1s/^[ \t,]*//' -e '$s/[ \t,]*$//' "$json_config")
printf ' ,%s\n' "$json"
fi
echo "}"
)
echo "$json_configuration" | require="$config_deployment_requires" \
__file "$conf_dir/$conf_file" \
--owner root --group "$group" --mode 640 \
--state "$state" \
--source -
# Set configuration deployment as requirement for service restart.
restart_requires="__file/$conf_dir/$conf_file"
###
# Restart consul agent after everything else.
require="$restart_requires" __service consul --action restart

View file

@ -6,3 +6,4 @@ server
enable-syslog
verify-incoming
verify-outgoing
use-distribution-package

View file

@ -0,0 +1 @@
../../__consul_service/explorer/conf-dir

View file

@ -19,7 +19,7 @@
#
name="$(cat "$__object/parameter/name" 2>/dev/null || echo "$__object_id")"
conf_dir="/etc/consul/conf.d"
conf_dir=$(cat "$__object/explorer/conf-dir")
conf_file="check_${name}.json"
state="$(cat "$__object/parameter/state")"
@ -40,7 +40,7 @@ if [ ! -f "$__object/parameter/interval" ]; then
fi
done
fi
if [ -f "$__object/parameter/docker-container-id" -a ! -f "$__object/parameter/script" ]; then
if [ -f "$__object/parameter/docker-container-id" ] && [ ! -f "$__object/parameter/script" ]; then
echo "When using --docker-container-id you must also define --script." >&2
exit 1
fi
@ -50,7 +50,8 @@ fi
echo "{"
printf ' "check": {\n'
printf ' "name": "%s"\n' "$name"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
state|name) continue ;;
*)

View file

@ -0,0 +1,15 @@
# Determine the configuration directory used by consul.
check_dir () {
if [ -d "$1" ]; then
printf '%s' "$1"
exit
fi
}
check_dir '/etc/consul/conf.d'
check_dir '/etc/consul.d'
check_dir '/etc/consul'
echo 'Could not determine consul configuration dir. Exiting.' >&2
exit 1

View file

@ -19,20 +19,20 @@
#
name="$(cat "$__object/parameter/name" 2>/dev/null || echo "$__object_id")"
conf_dir="/etc/consul/conf.d"
conf_dir=$(cat "$__object/explorer/conf-dir")
conf_file="service_${name}.json"
state="$(cat "$__object/parameter/state")"
# Sanity checks
if [ -f "$__object/parameter/check-script" -a -f "$__object/parameter/check-ttl" ]; then
if [ -f "$__object/parameter/check-script" ] && [ -f "$__object/parameter/check-ttl" ]; then
echo "Use either --check-script together with --check-interval OR --check-ttl, but not both" >&2
exit 1
fi
if [ -f "$__object/parameter/check-script" -a ! -f "$__object/parameter/check-interval" ]; then
if [ -f "$__object/parameter/check-script" ] && [ ! -f "$__object/parameter/check-interval" ]; then
echo "When using --check-script you must also define --check-interval" >&2
exit 1
fi
if [ -f "$__object/parameter/check-http" -a ! -f "$__object/parameter/check-interval" ]; then
if [ -f "$__object/parameter/check-http" ] && [ ! -f "$__object/parameter/check-interval" ]; then
echo "When using --check-http you must also define --check-interval" >&2
exit 1
fi
@ -42,9 +42,10 @@ fi
echo "{"
printf ' "service": {\n'
printf ' "name": "%s"\n' "$name"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
state|name|check-interval) continue ;;
state|name|check-interval|conf-dir) continue ;;
check-script)
printf ' ,"check": {\n'
printf ' "script": "%s"\n' "$(cat "$__object/parameter/check-script")"
@ -85,7 +86,6 @@ echo " }"
# end json file
echo "}"
) | \
require="__directory${conf_dir}" \
__config_file "${conf_dir}/${conf_file}" \
--owner root --group consul --mode 640 \
--state "$state" \

View file

@ -10,72 +10,75 @@
# pidfile: /var/run/consul-template/pidfile
# Source function library.
# shellcheck disable=SC1091
. /etc/init.d/functions
NAME=consul-template
CONSUL_TEMPLATE=/usr/local/bin/consul-template
CONFIG=/etc/$NAME/conf.d
PID_FILE=/var/run/$NAME/pidfile
LOG_FILE=/var/log/$NAME
CONFIG="/etc/$NAME/conf.d"
PID_FILE="/var/run/$NAME/pidfile"
LOG_FILE="/var/log/$NAME"
[ -e /etc/sysconfig/$NAME ] && . /etc/sysconfig/$NAME
export CONSUL_TEMPLATE_LOG=${CONSUL_TEMPLATE_LOG:-info}
export GOMAXPROCS=${GOMAXPROCS:-2}
# shellcheck disable=SC1090
[ -e "/etc/sysconfig/$NAME" ] && . "/etc/sysconfig/$NAME"
export CONSUL_TEMPLATE_LOG="${CONSUL_TEMPLATE_LOG:-info}"
export GOMAXPROCS="${GOMAXPROCS:-2}"
mkdir -p /var/run/$NAME
mkdir -p "/var/run/$NAME"
start() {
echo -n "Starting $NAME: "
printf "Starting %s: " "$NAME"
daemon --pidfile="$PID_FILE" \
"$CONSUL_TEMPLATE" -config "$CONFIG" >> "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "$!" > "$PID_FILE"
retcode=$?
touch /var/lock/subsys/$NAME
return $retcode
touch "/var/lock/subsys/$NAME"
return "$retcode"
}
stop() {
echo -n "Shutting down $NAME: "
killproc -p $PID_FILE $CONSUL_TEMPLATE
printf "Shutting down %s: " "$NAME"
killproc -p "$PID_FILE" "$CONSUL_TEMPLATE"
retcode=$?
rm -f /var/lock/subsys/$NAME
return $retcode
rm -f "/var/lock/subsys/$NAME"
return "$retcode"
}
case "$1" in
start)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
echo "$NAME already running"
else
start
fi
;;
stop)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
stop
else
echo "$NAME not running"
fi
;;
status)
status -p "$PID_FILE" $NAME
status -p "$PID_FILE" "$NAME"
exit $?
;;
restart)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
stop
fi
start
;;
reload)
if $(status -p "$PID_FILE" $NAME >/dev/null); then
kill -HUP `cat $PID_FILE`
if status -p "$PID_FILE" "$NAME" >/dev/null; then
kill -HUP "$(cat "$PID_FILE")"
else
echo "$NAME not running"
fi
;;
condrestart)
if [ -f /var/lock/subsys/$NAME ]; then
if $(status -p "$PID_FILE" $NAME >/dev/null); then
if [ -f "/var/lock/subsys/$NAME" ]; then
if status -p "$PID_FILE" "$NAME" >/dev/null; then
stop
fi
start

View file

@ -75,7 +75,8 @@ require="__directory/etc/consul-template" \
# Generate hcl config file
(
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
auth-password|state|ssl-*|syslog-*|version|vault-token|vault-ssl*) continue ;;
auth-username)

View file

@ -26,32 +26,36 @@ template_dir="/etc/consul-template/template"
require=""
# Sanity checks
if [ -f "$__object/parameter/source" -a -f "$__object/parameter/source-file" ]; then
if [ -f "$__object/parameter/source" ] && [ -f "$__object/parameter/source-file" ]; then
echo "Use either --source OR --source-file, but not both." >&2
exit 1
fi
if [ ! -f "$__object/parameter/source" -a ! -f "$__object/parameter/source-file" ]; then
if [ ! -f "$__object/parameter/source" ] && [ ! -f "$__object/parameter/source-file" ]; then
echo "Either --source OR --source-file must be given." >&2
exit 1
fi
if [ -f "$__object/parameter/source-file" ]; then
destination="${template_dir}/${name}"
require="__file${destination}"
fi
# Generate hcl config file
(
{
printf 'template {\n'
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
source-file)
source="$(cat "$__object/parameter/$param")"
if [ "$source" = "-" ]; then
source="$__object/stdin"
fi
destination="${template_dir}/${name}"
require="__directory${template_dir}" \
__file "$destination" \
--owner root --group root --mode 640 \
--source "$source" \
--state "$state"
export require="__file${destination}"
printf ' source = "%s"\n' "$destination"
;;
@ -65,7 +69,7 @@ for param in $(ls "$__object/parameter/"); do
esac
done
printf '}\n'
) | \
} | \
require="$require __directory${conf_dir}" \
__config_file "${conf_dir}/${conf_file}" \
--owner root --group root --mode 640 \

View file

@ -0,0 +1 @@
../../__consul_service/explorer/conf-dir

View file

@ -20,12 +20,12 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
conf_dir="/etc/consul/conf.d"
conf_dir=$(cat "$__object/explorer/conf-dir")
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
# Sanity checks
if [ -f "$__object/parameter/filter-service" -a -f "$__object/parameter/filter-state" ]; then
if [ -f "$__object/parameter/filter-service" ] && [ -f "$__object/parameter/filter-state" ]; then
echo "Use either --filter-service or --filter-state but not both." >&2
exit 1
fi
@ -35,7 +35,8 @@ fi
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
state) continue ;;
filter-*)

View file

@ -0,0 +1 @@
../../__consul_service/explorer/conf-dir

View file

@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
conf_dir="/etc/consul/conf.d"
conf_dir=$(cat "$__object/explorer/conf-dir")
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
state) continue ;;
*)

View file

@ -0,0 +1 @@
../../__consul_service/explorer/conf-dir

View file

@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
conf_dir="/etc/consul/conf.d"
conf_dir=$(cat "$__object/explorer/conf-dir")
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
state) continue ;;
*)

View file

@ -0,0 +1 @@
../../__consul_service/explorer/conf-dir

View file

@ -20,7 +20,7 @@
cdist_type="${__type##*/}"
watch_type="${cdist_type##*_}"
conf_dir="/etc/consul/conf.d"
conf_dir=$(cat "$__object/explorer/conf-dir")
conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")"
@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{"
printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do
cd "$__object/parameter/"
for param in *; do
case "$param" in
state) continue ;;
*)

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