diff --git a/bin/build-helper b/bin/build-helper index ed41e438..5dcc6989 100755 --- a/bin/build-helper +++ b/bin/build-helper @@ -370,7 +370,7 @@ eof cat << eof Manual steps post release: - cdist-web - - send generated mailinglist.tmp mail + - send mail body generated in mailinglist.tmp and inform Dmitry for deb - twitter eof ;; @@ -463,7 +463,7 @@ eof shellcheck-scripts) # shellcheck disable=SC2086 - ${SHELLCHECKCMD} scripts/cdist-dump scripts/cdist-new-type > "${SHELLCHECKTMP}" + ${SHELLCHECKCMD} cdist/conf/libexec/cdist-dump cdist/conf/libexec/cdist-new-type > "${SHELLCHECKTMP}" test ! -s "${SHELLCHECKTMP}" || { cat "${SHELLCHECKTMP}"; exit 1; } ;; diff --git a/cdist/argparse.py b/cdist/argparse.py index 611c484a..b1ee99da 100644 --- a/cdist/argparse.py +++ b/cdist/argparse.py @@ -6,7 +6,7 @@ import collections import functools import cdist.configuration import cdist.preos -import cdist.info +import cdist.libexec as libexec # set of beta sub-commands @@ -437,36 +437,8 @@ 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) + # Libexec + libexec.create_parsers(parser, parser['sub']) for p in parser: parser[p].epilog = EPILOG diff --git a/scripts/cdist-dump b/cdist/conf/libexec/cdist-dump similarity index 100% rename from scripts/cdist-dump rename to cdist/conf/libexec/cdist-dump diff --git a/cdist/conf/libexec/cdist-info b/cdist/conf/libexec/cdist-info new file mode 100755 index 00000000..19ec4cad --- /dev/null +++ b/cdist/conf/libexec/cdist-info @@ -0,0 +1,399 @@ +#!/bin/sh + +VERSION="0.0.1" +RELEASE="" + +set -u +# set -x + +verbose=0 +myname=${0##*/} +mydir=${0%/$myname} +dist_conf=${mydir%/libexec} + +print_version() +{ + printf "%s %s %s\n" "${myname}" "${VERSION}" "${RELEASE}" +} + +usage() +{ + cat << eof +${myname}: [options] +eof + + print_version + + cat << eof + +Display information for cdist types and explorers. + +Options + -C display only config types + -c CONF_DIR add configuration directory (can be repeated) + -D display only nondeprecated types + -d display only deprecated types + -E display only types without explorers + -e display only types with explorers + -G display global explorers (turns displaying types off, + unless -t is explicitly specified) + -g GLOB use GLOB as name pattern + -h display this help screen and exit + -i display only install types + -l display only types with gencode-local + -M display only types with man page + -m display only types with manifest + -P display only nonparallel types + -p display only parallel types + -R display type parameters + -r display only types with gencode-remote + -S display only nonsingleton types + -s display only singleton types + -t display types (by default, unless -G is specified) + -V display version and exit + -v increase verbosity (verbose output goes to stderr) + if verbosity is greater than 2 then 'set -x' is used + -x display type explorers + +Notes: + +By default, distribution and home dot cdist directories are used for +configuration directories list. + +This helper tool does not parse cdist configuration files. Configuration +directories should be specifed by command line options and/or CDIST_PATH +environment variable. +eof +} + +exit_err() +{ + printf "%s\n" "$1" + exit 1 +} + +print_verbose() +{ + if [ "${verbose}" -ge "$1" ] + then + printf "%s\n" "$2" >&2 + fi +} + +print_parameters() +{ + param_title=$1 + param_fname=$2 + + if test -f "${param_fname}" + then + printf " %s\n" "${param_title}" + sed "s/^\(.*\)$/ \1/" < "${param_fname}" + fi +} + +type_name_matches() +{ + if test "$2" == "*" + then + return 0 + else + case "$(basename "$1")" in + $2) + return 0 + ;; + *) + return 1 + ;; + esac + fi +} + +# $1 - do check flag. +# $2 - file path. +# Return false only if check flag is 1 and file does not exist. +type_file_exists() +{ + if test "$1" -eq "1" + then + test -f "$2" + else + return 0 + fi +} + +# $1 - do check flag. +# $2 - file path. +# Return false only if check flag is 1 and file does exist. +type_file_not_exists() +{ + if test "$1" -eq "1" + then + test ! -f "$2" + else + return 0 + fi +} + +type_dir_empty() +{ + if test "$1" -eq "1" + then + if test ! -d "$2" + then + return 1 + elif ! [ "$(ls -1 "${fname}/explorer")" ] + then + return 1 + else + return 0 + fi + else + return 0 + fi +} + +type_dir_not_empty() +{ + if test "$1" -eq "1" + then + if test -d "$2" + then + if [ "$(ls -1 "${fname}/explorer")" ] + then + return 1 + fi + else + return 0 + fi + else + return 0 + fi +} + +print_type_params() +{ + if test "$1" -eq "1" + then + print_parameters "required parameters:" "$2/parameter/required" + print_parameters "required multiple parameters:" "$2/parameter/required_multiple" + print_parameters "optional parameters:" "$2/parameter/optional" + print_parameters "optional multiple parameters:" "$2/parameter/optional_multiple" + print_parameters "boolean parameters:" "$2/parameter/boolean" + param_deprecated="$2/parameter/deprecated" + if test -d "${param_deprecated}" + then + printf " deprecated parameters:\n" + # shellcheck disable=SC2012 + ls -1 "${param_deprecated}" | sed "s/^\(.*\)$/ \1/" + fi + fi +} + +print_type_explorers() +{ + if test "$1" -eq "1" + then + find "$2" -path "*/explorer/*" -type f + fi +} + +print_type() +{ + if test "$1" -eq "1" + then + printf "%s\n" "$2" + print_type_params "${display_type_params}" "$2" + print_type_explorers "${display_type_explorers}" "$2" + fi +} + +print_global_explorers() +{ + find "$1" '(' -path "*/explorer/*" -a ! -path "*/type/*/explorer/*" -a ! -path "*/cache/*/explorer/*" ')' -type f -name "$2" +} + +conf_dirs="${dist_conf}:${HOME}/.cdist" +glob="*" +manifest_only=0 +gencode_local_only=0 +gencode_remote_only=0 +install_only=0 +config_only=0 +parallel_only=0 +nonparallel_only=0 +singleton_only=0 +nonsingleton_only=0 +man_only=0 +explorers_only=0 +nonexplorers_only=0 +deprecated_only=0 +nondeprecated_only=0 +display_global_explorers=0 +display_types=1 +display_type_params=0 +display_type_explorers=0 +# parse options +while [ "$#" -ge 1 ] +do + case "$1" in + -C) + config_only=1 + ;; + -c) + if [ "$#" -ge 2 ] + then + case "$2" in + -*) + exit_err "Missing configuration directory argument" + ;; + *) + conf_dirs="${conf_dirs}:$2" + shift + ;; + esac + else + exit_err "Missing configuration directory argument" + fi + ;; + -D) + nondeprecated_only=1 + ;; + -d) + deprecated_only=1 + ;; + -E) + nonexplorers_only=1 + ;; + -e) + explorers_only=1 + ;; + -G) + display_types=0 + display_global_explorers=1 + ;; + -g) + if [ "$#" -ge 2 ] + then + case "$2" in + -*) + exit_err "Missing glob argument" + ;; + *) + glob="$2" + shift + ;; + esac + else + exit_err "Missing glob argument" + fi + ;; + -h) + usage + exit 0 + ;; + -i) + install_only=1 + ;; + -l) + gencode_local_only=1 + ;; + -M) + man_only=1 + ;; + -m) + manifest_only=1 + ;; + -P) + nonparallel_only=1 + ;; + -p) + parallel_only=1 + ;; + -R) + display_type_params=1 + ;; + -r) + gencode_remote_only=1 + ;; + -S) + nonsingleton_only=1 + ;; + -s) + singleton_only=1 + ;; + -t) + display_types=1 + ;; + -V) + print_version + exit 0 + ;; + -v) + verbose=$((verbose + 1)) + ;; + -x) + display_type_explorers=1 + ;; + *) + exit_err "Unknown argument $1" + ;; + esac + shift +done + +if test "${verbose}" -gt "2" +then + set -x +fi + +if test "${CDIST_PATH:-}" +then + conf_dirs="${conf_dirs}:${CDIST_PATH}" +fi + +print_verbose 2 "conf_dirs=${conf_dirs}" + +OLD_IFS="${IFS}" +IFS=':' +for x in ${conf_dirs} +do + print_verbose 1 "Processing conf dir '${x}'" + + if test "${display_global_explorers}" -eq "1" + then + print_verbose 1 "Printing global explorers" + print_global_explorers "${x}" "${glob}" + fi + + if test "${display_types}" -eq "1" + then + print_verbose 1 "Printing types" + find "${x}" -path "*/type/*" -type d -prune | \ + while read -r fname + do + print_verbose 2 "Printing type '${fname}'" + + display_type=1 + + type_name_matches "${fname}" "${glob}" || display_type=0 + type_file_exists "${manifest_only}" "${fname}/manifest" || display_type=0 + type_file_exists "${gencode_local_only}" "${fname}/gencode-local" || display_type=0 + type_file_exists "${gencode_remote_only}" "${fname}/gencode-remote" || display_type=0 + type_file_not_exists "${config_only}" "${fname}/install" || display_type=0 + type_file_exists "${install_only}" "${fname}/install" || display_type=0 + type_file_not_exists "${parallel_only}" "${fname}/nonparallel" || display_type=0 + type_file_exists "${nonparallel_only}" "${fname}/nonparallel" || display_type=0 + type_file_exists "${singleton_only}" "${fname}/singleton" || display_type=0 + type_file_not_exists "${nonsingleton_only}" "${fname}/singleton" || display_type=0 + type_file_exists "${man_only}" "${fname}/man.rst" || display_type=0 + type_file_exists "${deprecated_only}" "${fname}/deprecated" || display_type=0 + type_file_not_exists "${nondeprecated_only}" "${fname}/deprecated" || display_type=0 + type_dir_empty "${explorers_only}" "${fname}/explorer" || display_type=0 + type_dir_not_empty "${nonexplorers_only}" "${fname}/explorer" || display_type=0 + + print_type "${display_type}" "${fname}" + done + fi +done +IFS="${OLD_IFS}" diff --git a/scripts/cdist-new-type b/cdist/conf/libexec/cdist-new-type similarity index 100% rename from scripts/cdist-new-type rename to cdist/conf/libexec/cdist-new-type diff --git a/cdist/conf/type/__acl/gencode-remote b/cdist/conf/type/__acl/gencode-remote index f4f0d1e2..6dab4d09 100755 --- a/cdist/conf/type/__acl/gencode-remote +++ b/cdist/conf/type/__acl/gencode-remote @@ -28,10 +28,7 @@ acl_path="/$__object_id" acl_is="$( cat "$__object/explorer/acl_is" )" -if [ -f "$__object/parameter/entry" ] -then - acl_should="$( cat "$__object/parameter/entry" )" -elif [ -f "$__object/parameter/acl" ] +if [ -f "$__object/parameter/acl" ] then acl_should="$( cat "$__object/parameter/acl" )" elif diff --git a/cdist/conf/type/__acl/man.rst b/cdist/conf/type/__acl/man.rst index c3493e49..85e946ce 100644 --- a/cdist/conf/type/__acl/man.rst +++ b/cdist/conf/type/__acl/man.rst @@ -15,7 +15,7 @@ See ``setfacl`` and ``acl`` manpages for more details. REQUIRED MULTIPLE PARAMETERS ---------------------------- -entry +acl Set ACL entry following ``getfacl`` output syntax. @@ -36,8 +36,8 @@ remove DEPRECATED PARAMETERS --------------------- -Parameters ``acl``, ``user``, ``group``, ``mask`` and ``other`` are deprecated and they -will be removed in future versions. Please use ``entry`` parameter instead. +Parameters ``user``, ``group``, ``mask`` and ``other`` are deprecated and they +will be removed in future versions. Please use ``acl`` parameter instead. EXAMPLES @@ -49,27 +49,27 @@ EXAMPLES --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 + --acl user:alice:rwx \ + --acl user:bob:r-x \ + --acl group:project-group:rwx \ + --acl group:some-other-group:r-x \ + --acl mask::r-x \ + --acl other::r-x # give Alice read-only access to subdir, # but don't allow her to see parent content. __acl /srv/project2 \ --remove \ - --entry default:group:secret-project:rwx \ - --entry group:secret-project:rwx \ - --entry user:alice:--x + --acl default:group:secret-project:rwx \ + --acl group:secret-project:rwx \ + --acl user:alice:--x __acl /srv/project2/subdir \ --default \ --remove \ - --entry group:secret-project:rwx \ - --entry user:alice:r-x + --acl group:secret-project:rwx \ + --acl user:alice:r-x AUTHORS diff --git a/cdist/conf/type/__acl/parameter/deprecated/acl b/cdist/conf/type/__acl/parameter/deprecated/acl deleted file mode 100644 index 94e14159..00000000 --- a/cdist/conf/type/__acl/parameter/deprecated/acl +++ /dev/null @@ -1 +0,0 @@ -see manual for details diff --git a/cdist/conf/type/__acl/parameter/optional_multiple b/cdist/conf/type/__acl/parameter/optional_multiple index c615d507..95c25d55 100644 --- a/cdist/conf/type/__acl/parameter/optional_multiple +++ b/cdist/conf/type/__acl/parameter/optional_multiple @@ -1,4 +1,3 @@ -entry acl user group diff --git a/cdist/conf/type/__consul_agent/manifest b/cdist/conf/type/__consul_agent/manifest index ee682d72..a88d26ed 100755 --- a/cdist/conf/type/__consul_agent/manifest +++ b/cdist/conf/type/__consul_agent/manifest @@ -181,7 +181,7 @@ init_upstart() # Install init script to start on boot case "$os" in - devuan) + alpine|devuan) init_sysvinit debian ;; centos|redhat) diff --git a/cdist/conf/type/__install_chroot_umount/manifest b/cdist/conf/type/__install_chroot_umount/manifest deleted file mode 120000 index f17af67a..00000000 --- a/cdist/conf/type/__install_chroot_umount/manifest +++ /dev/null @@ -1 +0,0 @@ -../__chroot_umount/manifest \ No newline at end of file diff --git a/cdist/conf/type/__mysql_database/explorer/state b/cdist/conf/type/__mysql_database/explorer/state deleted file mode 100755 index 79858695..00000000 --- a/cdist/conf/type/__mysql_database/explorer/state +++ /dev/null @@ -1,33 +0,0 @@ -#!/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 . -# - -if [ -f "$__object/parameter/name" ] -then - name="$( cat "$__object/parameter/name" )" -else - name="$__object_id" -fi - -if [ -n "$( mysql -B -N -e "show databases like '$name'" )" ] -then - echo 'present' -else - echo 'absent' -fi diff --git a/cdist/conf/type/__mysql_database/gencode-remote b/cdist/conf/type/__mysql_database/gencode-remote index 1bdb2b11..23e51b05 100755 --- a/cdist/conf/type/__mysql_database/gencode-remote +++ b/cdist/conf/type/__mysql_database/gencode-remote @@ -1,6 +1,6 @@ #!/bin/sh -e # -# 2020 Ander Punnar (ander-at-kvlt-dot-ee) +# 2012 Benedikt Koeppel (code@benediktkoeppel.ch) # # This file is part of cdist. # @@ -17,30 +17,38 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # +# -state_is="$( cat "$__object/explorer/state" )" - -state_should="$( cat "$__object/parameter/state" )" - -if [ "$state_is" = "$state_should" ] -then - exit 0 +# if --database was specified +if [ -f "$__object/parameter/name" ]; then + database="$(cat "$__object/parameter/name")" +else # otherwise use the object id as database name + database="$__object_id" fi -if [ -f "$__object/parameter/name" ] -then - name="$( cat "$__object/parameter/name" )" -else - name="$__object_id" -fi +cat <<-EOFF +mysql -u root <<-EOF + CREATE DATABASE IF NOT EXISTS $database +EOF +EOFF -case "$state_should" in - present) - echo "mysql -e 'create database \`$name\`'" - echo "create database $name" >> "$__messages_out" - ;; - absent) - echo "mysql -e 'drop database \`$name\`'" - echo "drop database $name" >> "$__messages_out" - ;; -esac +# if --user was specified +if [ -f "$__object/parameter/user" ]; then + user="$(cat "$__object/parameter/user")" + + # if --password was specified + if [ -f "$__object/parameter/password" ]; then + password="$(cat "$__object/parameter/password")" + cat <<-EOFF + mysql -u root <<-EOF + GRANT ALL PRIVILEGES ON $database.* to '$user'@'localhost' IDENTIFIED BY '$password'; +EOF +EOFF + else + cat <<-EOFF + mysql -u root <<-EOF + GRANT ALL PRIVILEGES ON $database.* to '$user'@'localhost'; +EOF +EOFF + fi +fi diff --git a/cdist/conf/type/__mysql_database/man.rst b/cdist/conf/type/__mysql_database/man.rst index b3b56b5f..1e245a08 100644 --- a/cdist/conf/type/__mysql_database/man.rst +++ b/cdist/conf/type/__mysql_database/man.rst @@ -8,24 +8,24 @@ cdist-type__mysql_database - Manage a MySQL database DESCRIPTION ----------- +This cdist type allows you to install a MySQL database. -Create MySQL database and optionally user with all privileges. +REQUIRED PARAMETERS +------------------- +None. OPTIONAL PARAMETERS ------------------- name - Name of database. Defaults to object id. + The name of the database to install + defaults to the object id user - Create user and give all privileges to database. + A user that should have access to the database password - Password for user. - -state - Defaults to present. - If absent and user is also set, both will be removed (with privileges). + The password for the user who manages the database EXAMPLES @@ -33,23 +33,17 @@ EXAMPLES .. code-block:: sh - # just create database - __mysql_database foo - - # create database with respective user with all privileges to database - __mysql_database bar \ - --user name \ - --password secret + __mysql_database "cdist" --name "cdist" --user "myuser" --password "mypwd" AUTHORS ------- -Ander Punnar +Benedikt Koeppel 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. +Copyright \(C) 2012 Benedikt Koeppel. 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. diff --git a/cdist/conf/type/__mysql_database/manifest b/cdist/conf/type/__mysql_database/manifest deleted file mode 100755 index a3c9ed5d..00000000 --- a/cdist/conf/type/__mysql_database/manifest +++ /dev/null @@ -1,52 +0,0 @@ -#!/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 . -# - -if [ -f "$__object/parameter/user" ] -then - user="$( cat "$__object/parameter/user" )" -fi - -if [ -f "$__object/parameter/password" ] -then - password="$( cat "$__object/parameter/password" )" -fi - -if [ -n "$user" ] && [ -n "$password" ] -then - if [ -f "$__object/parameter/name" ] - then - database="$( cat "$__object/parameter/name" )" - else - database="$__object_id" - fi - - state_should="$( cat "$__object/parameter/state" )" - - __mysql_user "$user" \ - --password "$password" \ - --state "$state_should" - - # removing user should remove all user's privileges - require="__mysql_user/$user" \ - __mysql_privileges "$database/$user" \ - --database "$database" \ - --user "$user" \ - --state "$state_should" -fi diff --git a/cdist/conf/type/__mysql_database/parameter/default/state b/cdist/conf/type/__mysql_database/parameter/default/state deleted file mode 100644 index e7f6134f..00000000 --- a/cdist/conf/type/__mysql_database/parameter/default/state +++ /dev/null @@ -1 +0,0 @@ -present diff --git a/cdist/conf/type/__mysql_database/parameter/optional b/cdist/conf/type/__mysql_database/parameter/optional index 6c0b1e85..756afee7 100644 --- a/cdist/conf/type/__mysql_database/parameter/optional +++ b/cdist/conf/type/__mysql_database/parameter/optional @@ -1,4 +1,3 @@ name user password -state diff --git a/cdist/conf/type/__mysql_privileges/explorer/state b/cdist/conf/type/__mysql_privileges/explorer/state deleted file mode 100755 index 0cfbaacd..00000000 --- a/cdist/conf/type/__mysql_privileges/explorer/state +++ /dev/null @@ -1,40 +0,0 @@ -#!/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 . -# - -privileges="$( cat "$__object/parameter/privileges" )" - -database="$( cat "$__object/parameter/database" )" - -table="$( cat "$__object/parameter/table" )" - -user="$( cat "$__object/parameter/user" )" - -host="$( cat "$__object/parameter/host" )" - -check_privileges="$( - mysql -B -N -e "show grants for '$user'@'$host'" \ - | grep -Ei "^grant $privileges on .$database.\..$table. to " || true )" - -if [ -n "$check_privileges" ] -then - echo 'present' -else - echo 'absent' -fi diff --git a/cdist/conf/type/__mysql_privileges/gencode-remote b/cdist/conf/type/__mysql_privileges/gencode-remote deleted file mode 100755 index bcd362e6..00000000 --- a/cdist/conf/type/__mysql_privileges/gencode-remote +++ /dev/null @@ -1,49 +0,0 @@ -#!/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 . -# - -state_is="$( cat "$__object/explorer/state" )" - -state_should="$( cat "$__object/parameter/state" )" - -if [ "$state_is" = "$state_should" ] -then - exit 0 -fi - -privileges="$( cat "$__object/parameter/privileges" )" - -database="$( cat "$__object/parameter/database" )" - -table="$( cat "$__object/parameter/table" )" - -user="$( cat "$__object/parameter/user" )" - -host="$( cat "$__object/parameter/host" )" - -case "$state_should" in - present) - echo "mysql -e 'grant $privileges on \`$database\`.\`$table\` to \`$user\`@\`$host\`'" - echo "grant $privileges on $database.$table to $user@$host" >> "$__messages_out" - ;; - absent) - echo "mysql -e 'revoke $privileges on \`$database\`.\`$table\` from \`$user\`@\`$host\`'" - echo "revoke $privileges on $database.$table from $user@$host" >> "$__messages_out" - ;; -esac diff --git a/cdist/conf/type/__mysql_privileges/man.rst b/cdist/conf/type/__mysql_privileges/man.rst deleted file mode 100644 index 8208d7d4..00000000 --- a/cdist/conf/type/__mysql_privileges/man.rst +++ /dev/null @@ -1,57 +0,0 @@ -cdist-type__mysql_privileges(7) -=============================== - -NAME ----- -cdist-type__mysql_privileges - Manage MySQL privileges - - -DESCRIPTION ------------ - -Grant and revoke privileges of MySQL user. - - -REQUIRED PARAMETERS -------------------- -database - Name of database. - -User - Name of user. - - -OPTIONAL PARAMETERS -------------------- -privileges - Defaults to "all". - -table - Defaults to "*". - -host - Defaults to localhost. - -state - "present" grants and "absent" revokes. Defaults to present. - - -EXAMPLES --------- - -.. code-block:: sh - - __mysql_privileges user-to-db --database db --user user - - -AUTHORS -------- -Ander Punnar - - -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. diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/host b/cdist/conf/type/__mysql_privileges/parameter/default/host deleted file mode 100644 index 2fbb50c4..00000000 --- a/cdist/conf/type/__mysql_privileges/parameter/default/host +++ /dev/null @@ -1 +0,0 @@ -localhost diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/privileges b/cdist/conf/type/__mysql_privileges/parameter/default/privileges deleted file mode 100644 index 5472efad..00000000 --- a/cdist/conf/type/__mysql_privileges/parameter/default/privileges +++ /dev/null @@ -1 +0,0 @@ -all privileges diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/state b/cdist/conf/type/__mysql_privileges/parameter/default/state deleted file mode 100644 index e7f6134f..00000000 --- a/cdist/conf/type/__mysql_privileges/parameter/default/state +++ /dev/null @@ -1 +0,0 @@ -present diff --git a/cdist/conf/type/__mysql_privileges/parameter/default/table b/cdist/conf/type/__mysql_privileges/parameter/default/table deleted file mode 100644 index 72e8ffc0..00000000 --- a/cdist/conf/type/__mysql_privileges/parameter/default/table +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/cdist/conf/type/__mysql_privileges/parameter/optional b/cdist/conf/type/__mysql_privileges/parameter/optional deleted file mode 100644 index d4ed5bc5..00000000 --- a/cdist/conf/type/__mysql_privileges/parameter/optional +++ /dev/null @@ -1,4 +0,0 @@ -privileges -table -host -state diff --git a/cdist/conf/type/__mysql_privileges/parameter/required b/cdist/conf/type/__mysql_privileges/parameter/required deleted file mode 100644 index 152b4a1e..00000000 --- a/cdist/conf/type/__mysql_privileges/parameter/required +++ /dev/null @@ -1,2 +0,0 @@ -database -user diff --git a/cdist/conf/type/__mysql_user/explorer/state b/cdist/conf/type/__mysql_user/explorer/state deleted file mode 100755 index 6817ee9d..00000000 --- a/cdist/conf/type/__mysql_user/explorer/state +++ /dev/null @@ -1,54 +0,0 @@ -#!/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 . -# - -if [ -f "$__object/parameter/name" ] -then - name="$( cat "$__object/parameter/name" )" -else - name="$__object_id" -fi - -if [ -f "$__object/parameter/password" ] -then - password="$( cat "$__object/parameter/password" )" -else - password='' -fi - -host="$( cat "$__object/parameter/host" )" - -check_user="$( mysql -B -N -e "select user from mysql.user where user = '$name' and host = '$host'" )" - -if [ -n "$check_user" ] -then - if [ -n "$password" ] - then - check_password="$( mysql -B -N -e "select user from mysql.user where user = '$name' and host = '$host' and password = password( '$password' )" )" - fi - - if [ -n "$password" ] && [ -z "$check_password" ] - then - echo 'change-password' - else - echo 'present' - fi -else - echo 'absent' -fi diff --git a/cdist/conf/type/__mysql_user/gencode-remote b/cdist/conf/type/__mysql_user/gencode-remote deleted file mode 100755 index 5f13bc87..00000000 --- a/cdist/conf/type/__mysql_user/gencode-remote +++ /dev/null @@ -1,68 +0,0 @@ -#!/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 . -# - -state_is="$( cat "$__object/explorer/state" )" - -state_should="$( cat "$__object/parameter/state" )" - -if [ "$state_is" = "$state_should" ] -then - exit 0 -fi - -if [ -f "$__object/parameter/name" ] -then - name="$( cat "$__object/parameter/name" )" -else - name="$__object_id" -fi - -host="$( cat "$__object/parameter/host" )" - -if [ -f "$__object/parameter/password" ] -then - password="$( cat "$__object/parameter/password" )" -else - if [ "$state_should" = 'present' ] - then - echo '--password needed' >&2 - exit 1 - else - password='' - fi -fi - -if [ "$state_is" = 'absent' ] && [ "$state_should" = 'present' ] -then - echo "mysql -e 'create user \`$name\`@\`$host\` identified by \"$password\"'" - echo "create user $name@$host" >> "$__messages_out" - -elif [ "$state_is" != 'absent' ] && [ "$state_should" = 'absent' ] -then - echo "mysql -e 'drop user \`$name\`@\`$host\`'" - echo "drop user $name@$host" >> "$__messages_out" - -elif [ "$state_is" = 'change-password' ] -then - # this only works with MySQL 5.7.6 and later or MariaDB 10.1.20 and later - echo "mysql -e 'alter user \`$name\`@\`$host\` identified by \"$password\"'" - echo "mysql -e 'flush privileges'" - echo "change password $name@$host" >> "$__messages_out" -fi diff --git a/cdist/conf/type/__mysql_user/man.rst b/cdist/conf/type/__mysql_user/man.rst deleted file mode 100644 index c2b222d5..00000000 --- a/cdist/conf/type/__mysql_user/man.rst +++ /dev/null @@ -1,48 +0,0 @@ -cdist-type__mysql_user(7) -========================= - -NAME ----- -cdist-type__mysql_user - Manage a MySQL user - - -DESCRIPTION ------------ - -Create MySQL user or change password for the user. - - -OPTIONAL PARAMETERS -------------------- -name - Name of user. Defaults to object id. - -host - Host of user. Defaults to localhost. - -password - Password of user. - -state - Defaults to present. - - -EXAMPLES --------- - -.. code-block:: sh - - __mysql_user user --password secret - - -AUTHORS -------- -Ander Punnar - - -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. diff --git a/cdist/conf/type/__mysql_user/parameter/default/host b/cdist/conf/type/__mysql_user/parameter/default/host deleted file mode 100644 index 2fbb50c4..00000000 --- a/cdist/conf/type/__mysql_user/parameter/default/host +++ /dev/null @@ -1 +0,0 @@ -localhost diff --git a/cdist/conf/type/__mysql_user/parameter/default/state b/cdist/conf/type/__mysql_user/parameter/default/state deleted file mode 100644 index e7f6134f..00000000 --- a/cdist/conf/type/__mysql_user/parameter/default/state +++ /dev/null @@ -1 +0,0 @@ -present diff --git a/cdist/conf/type/__mysql_user/parameter/optional b/cdist/conf/type/__mysql_user/parameter/optional deleted file mode 100644 index a286266c..00000000 --- a/cdist/conf/type/__mysql_user/parameter/optional +++ /dev/null @@ -1,4 +0,0 @@ -name -host -password -state diff --git a/cdist/conf/type/__postgres_database/gencode-remote b/cdist/conf/type/__postgres_database/gencode-remote index 47e6b97c..61cfa50d 100755 --- a/cdist/conf/type/__postgres_database/gencode-remote +++ b/cdist/conf/type/__postgres_database/gencode-remote @@ -41,16 +41,12 @@ if [ "$state_should" != "$state_is" ]; then present) owner="" if [ -f "$__object/parameter/owner" ]; then - owner="-O \"$(cat "$__object/parameter/owner")\"" + owner="-O '$(cat "$__object/parameter/owner")'" fi - cat << EOF -su - '$postgres_user' -c "createdb $owner \"$name\"" -EOF + echo "su - '$postgres_user' -c \"createdb $owner '$name'\"" ;; absent) - cat << EOF -su - '$postgres_user' -c "dropdb \"$name\"" -EOF + echo "su - '$postgres_user' -c \"dropdb '$name'\"" ;; esac fi diff --git a/cdist/conf/type/__postgres_role/gencode-remote b/cdist/conf/type/__postgres_role/gencode-remote index 977832c9..fd56e85d 100755 --- a/cdist/conf/type/__postgres_role/gencode-remote +++ b/cdist/conf/type/__postgres_role/gencode-remote @@ -53,13 +53,11 @@ case "$state_should" in done [ -n "$password" ] && password="PASSWORD '$password'" - cat << EOF -su - '$postgres_user' -c "psql postgres -wc 'CREATE ROLE \"$name\" WITH $password $booleans;'" -EOF + + cmd="CREATE ROLE $name WITH $password $booleans" + echo "su - '$postgres_user' -c \"psql postgres -wc \\\"$cmd\\\"\"" ;; absent) - cat << EOF -su - '$postgres_user' -c "dropuser \"$name\"" -EOF + echo "su - '$postgres_user' -c \"dropuser \\\"$name\\\"\"" ;; esac diff --git a/cdist/exec/local.py b/cdist/exec/local.py index ad6c6e36..f83c85df 100644 --- a/cdist/exec/local.py +++ b/cdist/exec/local.py @@ -69,6 +69,7 @@ class Local(object): self.exec_path = exec_path self.custom_initial_manifest = initial_manifest + self._add_conf_dirs = add_conf_dirs self.cache_path_pattern = cache_path_pattern self.quiet_mode = quiet_mode if configuration: @@ -83,7 +84,16 @@ class Local(object): self._init_cache_dir(None) self._init_paths() self._init_object_marker() - self._init_conf_dirs(add_conf_dirs) + self._init_conf_dirs() + + @property + def dist_conf_dir(self): + return os.path.abspath(os.path.join(os.path.dirname(cdist.__file__), + "conf")) + + @property + def home_dir(self): + return cdist.home_dir() def _init_log(self): self.log = logging.getLogger(self.target_host[0]) @@ -130,9 +140,28 @@ class Local(object): # Does not need to be secure - just randomly different from .cdist self.object_marker_name = tempfile.mktemp(prefix='.cdist-', dir='') - def _init_conf_dirs(self, add_conf_dirs): - self.conf_dirs = util.resolve_conf_dirs( - self.configuration, add_conf_dirs=add_conf_dirs) + def _init_conf_dirs(self): + self.conf_dirs = [] + + self.conf_dirs.append(self.dist_conf_dir) + + # Is the default place for user created explorer, type and manifest + if self.home_dir: + self.conf_dirs.append(self.home_dir) + + # Add directories defined in the CDIST_PATH environment variable + # if 'CDIST_PATH' in os.environ: + # cdist_path_dirs = re.split(r'(?. -# -# - -import cdist -import cdist.configuration -import cdist.core -import cdist.exec.util as util -import os -import glob -import fnmatch - - -class Info(object): - - def __init__(self, conf_dirs, args): - self.conf_dirs = conf_dirs - self.all = args.all - self.display_global_explorers = args.global_explorers - self.display_types = args.types - if not self.display_global_explorers and not self.display_types: - self.all = True - self.fixed_string = args.fixed_string - self._setup_glob_pattern(args.pattern) - self.full = args.full - - def _setup_glob_pattern(self, pattern): - if pattern is None: - self.glob_pattern = '*' - elif ('?' in pattern or '*' in pattern or '[' in pattern or - self.fixed_string): - self.glob_pattern = pattern - else: - self.glob_pattern = '*' + pattern + '*' - - @classmethod - def commandline(cls, args): - conf_dirs = util.resolve_conf_dirs_from_config_and_args(args) - c = cls(conf_dirs, args) - c.run() - - def _get_global_explorers(self, conf_path): - rv = [] - global_explorer_path = os.path.join(conf_path, "explorer", - self.glob_pattern) - if self.fixed_string: - if os.path.exists(global_explorer_path): - rv.append(global_explorer_path) - else: - for explorer in glob.glob(global_explorer_path): - rv.append(explorer) - return rv - - def _should_display_type(self, dir_entry): - if not dir_entry.is_dir(): - return False - if self.glob_pattern is None: - return True - if self.fixed_string: - return dir_entry.name == self.glob_pattern - else: - return fnmatch.fnmatch(dir_entry.name, self.glob_pattern) - - def _get_types(self, conf_path): - rv = [] - types_path = os.path.join(conf_path, "type") - if not os.path.exists(types_path): - return rv - with os.scandir(types_path) as it: - for entry in it: - if self._should_display_type(entry): - rv.append(entry.path) - return rv - - def _display_details(self, title, details, default_values=None, - deprecated=None): - if not details: - return - if isinstance(details, bool): - print("\t{}: {}".format(title, 'yes' if details else 'no')) - elif isinstance(details, str): - print("\t{}: {}".format(title, details)) - elif isinstance(details, list): - dv = dict(default_values) if default_values else {} - dp = dict(deprecated) if deprecated else {} - - print("\t{}:".format(title)) - for x in sorted(details): - print("\t\t{}".format(x), end='') - has_default = x in dv - is_deprecated = x in dp - need_comma = False - if has_default or is_deprecated: - print(" (", end='') - if has_default: - print("default: {}".format(dv[x]), end='') - need_comma = True - if is_deprecated: - print("{}deprecated".format(', ' if need_comma else ''), - end='') - if has_default or is_deprecated: - print(")", end='') - print() - - def _display_type_parameters(self, cdist_type): - self._display_details("required parameters", - cdist_type.required_parameters, - default_values=cdist_type.parameter_defaults, - deprecated=cdist_type.deprecated_parameters) - self._display_details("required multiple parameters", - cdist_type.required_multiple_parameters, - default_values=cdist_type.parameter_defaults, - deprecated=cdist_type.deprecated_parameters) - self._display_details("optional parameters", - cdist_type.optional_parameters, - default_values=cdist_type.parameter_defaults, - deprecated=cdist_type.deprecated_parameters) - self._display_details("optional multiple parameters", - cdist_type.optional_multiple_parameters, - default_values=cdist_type.parameter_defaults, - deprecated=cdist_type.deprecated_parameters) - self._display_details("boolean parameters", - cdist_type.boolean_parameters, - default_values=cdist_type.parameter_defaults, - deprecated=cdist_type.deprecated_parameters) - - def _display_type_characteristics(self, cdist_type): - characteristics = [] - if cdist_type.is_install: - characteristics.append('install') - else: - characteristics.append('config') - if cdist_type.is_singleton: - characteristics.append('singleton') - if cdist_type.is_nonparallel: - characteristics.append('nonparallel') - else: - characteristics.append('parallel') - if cdist_type.deprecated is not None: - characteristics.append('deprecated') - print("\t{}".format(', '.join(characteristics))) - - def _display_type_details(self, type_path): - dirname, basename = os.path.split(type_path) - cdist_type = cdist.core.CdistType(dirname, basename) - - self._display_type_characteristics(cdist_type) - self._display_type_parameters(cdist_type) - - def run(self): - rv = [] - for cp in self.conf_dirs: - conf_path = os.path.expanduser(cp) - if self.all or self.display_global_explorers: - rv.extend((x, 'E', ) for x in self._get_global_explorers( - conf_path)) - if self.all or self.display_types: - rv.extend((x, 'T', ) for x in self._get_types(conf_path)) - rv = sorted(rv, key=lambda x: x[0]) - for x, t in rv: - print(x) - if self.full and t == 'T': - self._display_type_details(x) diff --git a/cdist/libexec.py b/cdist/libexec.py new file mode 100644 index 00000000..bd22eb86 --- /dev/null +++ b/cdist/libexec.py @@ -0,0 +1,45 @@ +import os +import os.path +import cdist.argparse +import subprocess +import sys + + +libexec_delimiter = '-' +libexec_prefix = 'cdist' + libexec_delimiter +libexec_path = os.path.abspath( + os.path.join(os.path.dirname(cdist.__file__), 'conf', 'libexec')) + + +def scan(): + if os.path.isdir(libexec_path): + with os.scandir(libexec_path) as it: + for entry in it: + if (entry.name.startswith(libexec_prefix) and + entry.is_file() and + os.access(entry.path, os.X_OK)): + start = entry.name.find(libexec_delimiter) + 1 + yield entry.name[start:] + + +def is_libexec_command(name): + for x in scan(): + if name == x: + return True + return False + + +def create_parsers(parser, parent_parser): + for name in scan(): + parser[name] = parent_parser.add_parser(name, add_help=False) + + +def run(name, argv): + lib_name = libexec_prefix + name + lib_path = os.path.join(libexec_path, lib_name) + args = [lib_path, ] + args.extend(argv) + try: + subprocess.check_call(args) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) diff --git a/cdist/preos.py b/cdist/preos.py index bf2a8e60..378071db 100644 --- a/cdist/preos.py +++ b/cdist/preos.py @@ -5,9 +5,8 @@ import inspect import argparse import cdist import logging +import re import cdist.argparse -import cdist.configuration -import cdist.exec.util as util _PREOS_CALL = "commandline" @@ -25,6 +24,16 @@ def extend_plugins_path(dirs): _PLUGINS_PATH.append(preos_dir) +cdist_home = cdist.home_dir() +if cdist_home: + extend_plugins_path((cdist_home, )) +x = 'CDIST_PATH' +if x in os.environ: + vals = re.split(r'(?`_. +`cdist dump `_. For more info see: .. code-block:: sh - cdist-dump -h + cdist_dump -h Or from cdist git cloned directory: .. code-block:: sh - ./scripts/cdist-dump -h + ./bin/cdist dump -h diff --git a/docs/src/man1/cdist-dump.rst b/docs/src/man1/cdist-dump.rst index 907cd192..5a73b4a8 100644 --- a/docs/src/man1/cdist-dump.rst +++ b/docs/src/man1/cdist-dump.rst @@ -11,17 +11,17 @@ SYNOPSIS :: - cdist-dump [options] [host...] + cdist dump [options] [host...] DESCRIPTION ----------- -cdist-dump is a helper script that dumps data from local cdist cache for +cdist dump is a helper script that dumps data from local cdist cache for specified hosts. If host is not specified then all data from cache directory is dumped. Default cache directory is '~/.cdist/cache'. -cdist-dump can be used for debugging existing types, host configuration and +cdist dump can be used for debugging existing types, host configuration and new types. @@ -88,10 +88,10 @@ EXAMPLES .. code-block:: sh # Dump all - % cdist-dump -a + % cdist dump -a # Dump only code-* output - % cdist-dump -c + % cdist dump -c SEE ALSO diff --git a/docs/src/man1/cdist.rst b/docs/src/man1/cdist.rst index 38248821..55db82ed 100644 --- a/docs/src/man1/cdist.rst +++ b/docs/src/man1/cdist.rst @@ -11,7 +11,7 @@ SYNOPSIS :: - cdist [-h] [-V] {banner,config,install,inventory,preos,shell,info} ... + cdist [-h] [-V] {banner,config,install,inventory,preos,shell} ... cdist banner [-h] [-l LOGLEVEL] [-q] [-v] @@ -59,9 +59,7 @@ SYNOPSIS [-I INVENTORY_DIR] [-a] [-f HOSTFILE] [-H] [-t] [host [host ...]] - cdist preos [-h] [-l LOGLEVEL] [-q] [-v] [-c CONF_DIR] [-g CONFIG_FILE] - [-L] - [preos] ... + cdist preos [-h] [-l LOGLEVEL] [-q] [-v] [-c CONF_DIR] [-L] [preos] ... cdist preos [preos-options] debian [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B] [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC] @@ -86,8 +84,6 @@ SYNOPSIS cdist shell [-h] [-l LOGLEVEL] [-q] [-v] [-s SHELL] - cdist info [-h] [-a] [-c CONF_DIR] [-e] [-F] [-f] [-g CONFIG_FILE] [-t] [pattern] - DESCRIPTION ----------- @@ -466,9 +462,6 @@ Create PreOS. **-c CONF_DIR, --conf-dir CONF_DIR** Add configuration directory (one that contains "preos" subdirectory). -**-g CONFIG_FILE, --config-file CONFIG_FILE** - Use specified custom configuration file. - **-L, --list-preoses** List available PreOS-es. @@ -611,39 +604,6 @@ usage. Its primary use is for debugging type parameters. be POSIX compatible shell. -INFO ----- -Display information for cdist (global explorers, types). - -**pattern** - Glob pattern. If it contains special characters('?', '*', '[') then it is - used as specified, otherwise it is translated to `*pattern*`. - -**-h, --help** - Show help message and exit. - -**-a, --all** - Display all info. This is the default. - -**-c CONF_DIR, --conf-dir CONF_DIR** - Add configuration directory (can be repeated). - -**-e, --global-explorers** - Display info for global explorers. - -**-F, --fixed-string** - Interpret pattern as a fixed string. - -**-f, --full** - Display full details. - -**-g CONFIG_FILE, --config-file CONFIG_FILE** - Use specified custom configuration file. - -**-t, --types** - Display info for types. - - CONFIGURATION ------------- cdist obtains configuration data from the following sources in the following diff --git a/scripts/cdist b/scripts/cdist index 7bf12c01..4fc74fb3 100755 --- a/scripts/cdist +++ b/scripts/cdist @@ -30,14 +30,20 @@ import cdist.config import cdist.install import cdist.shell import cdist.inventory +import cdist.libexec as libexec def commandline(): """Parse command line""" - # preos subcommand hack - if len(sys.argv) > 1 and sys.argv[1] == 'preos': - return cdist.preos.PreOS.commandline(sys.argv[1:]) + if len(sys.argv) > 1: + # preos subcommand hack + if sys.argv[1] == 'preos': + return cdist.preos.PreOS.commandline(sys.argv[1:]) + # libexec subcommands hack + if libexec.is_libexec_command(sys.argv[1]): + return libexec.run(sys.argv[1], sys.argv[2:]) + parser, cfg = cdist.argparse.parse_and_configure(sys.argv[1:]) args = cfg.get_args() diff --git a/setup.py b/setup.py index 7b000041..95ce9574 100644 --- a/setup.py +++ b/setup.py @@ -56,7 +56,7 @@ setup( name="cdist", packages=["cdist", "cdist.core", "cdist.exec", "cdist.util", ], package_data={'cdist': package_data}, - scripts=["scripts/cdist", "scripts/cdist-dump", "scripts/cdist-new-type"], + scripts=["scripts/cdist", ], version=cdist.version.VERSION, description="A Usable Configuration Management System", author="Nico Schottelius",