From 6a97cf8f26214424d877a474a4ffe85a41233179 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Wed, 15 Feb 2012 14:27:30 -0500 Subject: [PATCH 1/7] Initial commit. Includes a few types in development and __package_pkg_freebsd. --- conf/type/__build/man.text | 56 ++++++++ conf/type/__build/manifest | 46 ++++++ conf/type/__build/parameter/optional | 2 + conf/type/__build_port_freebsd/gencode-remote | 69 +++++++++ conf/type/__build_port_freebsd/man.text | 61 ++++++++ .../__build_port_freebsd/parameter/optional | 1 + conf/type/__package/manifest | 1 + .../explorer/pkg_version | 35 +++++ .../type/__package_pkg_freebsd/gencode-remote | 135 ++++++++++++++++++ conf/type/__package_pkg_freebsd/man.text | 64 +++++++++ .../__package_pkg_freebsd/parameter/optional | 4 + .../__package_pkg_freebsd/parameter/required | 1 + conf/type/__rsyncer/gencode-local | 71 +++++++++ conf/type/__rsyncer/man.text | 72 ++++++++++ conf/type/__rsyncer/manifest | 31 ++++ conf/type/__rsyncer/parameter/optional | 3 + conf/type/__rsyncer/parameter/required | 1 + conf/type/__service/gencode-remote | 98 +++++++++++++ conf/type/__service/man.text | 48 +++++++ conf/type/__service/parameter/required | 1 + 20 files changed, 800 insertions(+) create mode 100644 conf/type/__build/man.text create mode 100755 conf/type/__build/manifest create mode 100644 conf/type/__build/parameter/optional create mode 100755 conf/type/__build_port_freebsd/gencode-remote create mode 100644 conf/type/__build_port_freebsd/man.text create mode 100644 conf/type/__build_port_freebsd/parameter/optional create mode 100755 conf/type/__package_pkg_freebsd/explorer/pkg_version create mode 100755 conf/type/__package_pkg_freebsd/gencode-remote create mode 100644 conf/type/__package_pkg_freebsd/man.text create mode 100644 conf/type/__package_pkg_freebsd/parameter/optional create mode 100644 conf/type/__package_pkg_freebsd/parameter/required create mode 100755 conf/type/__rsyncer/gencode-local create mode 100644 conf/type/__rsyncer/man.text create mode 100755 conf/type/__rsyncer/manifest create mode 100644 conf/type/__rsyncer/parameter/optional create mode 100644 conf/type/__rsyncer/parameter/required create mode 100755 conf/type/__service/gencode-remote create mode 100644 conf/type/__service/man.text create mode 100644 conf/type/__service/parameter/required diff --git a/conf/type/__build/man.text b/conf/type/__build/man.text new file mode 100644 index 00000000..1a297ec2 --- /dev/null +++ b/conf/type/__build/man.text @@ -0,0 +1,56 @@ +cdist-type__build(7) +=================== +Jake Guffey + + +NAME +---- +cdist-type__build - Manage software build operations + + +DESCRIPTION +----------- +This cdist type allows you to build software on the target. +It dispatches the actual work to the build-dependant types. + + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +name:: + The name of the software to build. Default is to use the object_id. +type:: + The build type to use. Default is to build a port for direct installation + on the target host. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Build and install a port +__build vim + +# Build and install a port explicitly defining to use ports +__build vim --type port_freebsd + +# Build a package to install via __package on another machine +__build vim --type pkg_freebsd + +# Force use of a specific package type +__build nanobsd --name nanobsd-internaluse-9.0 --type nanobsd +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2012 Jake Guffey. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__build/manifest b/conf/type/__build/manifest new file mode 100755 index 00000000..c8392d35 --- /dev/null +++ b/conf/type/__build/manifest @@ -0,0 +1,46 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# +# __build is an abstract type which dispatches to the lower level +# __build_$name types which do the actual interaction with the software +# build system. +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +if [ -f "$__object/parameter/type" ]; then + type="$(cat "$__object/parameter/type")" +else + type="port_freebsd" +fi + +set -- "$@" "$__object_id" +cd "$__object/parameter" +for property in $(ls .); do + if [ "$property" != "type" ]; then + set -- "$@" "--$property" "$(cat "$property")" + fi +done + +__build_$type "$@" diff --git a/conf/type/__build/parameter/optional b/conf/type/__build/parameter/optional new file mode 100644 index 00000000..d3598a51 --- /dev/null +++ b/conf/type/__build/parameter/optional @@ -0,0 +1,2 @@ +name +type diff --git a/conf/type/__build_port_freebsd/gencode-remote b/conf/type/__build_port_freebsd/gencode-remote new file mode 100755 index 00000000..ff0432ba --- /dev/null +++ b/conf/type/__build_port_freebsd/gencode-remote @@ -0,0 +1,69 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# +# Build ports on FreeBSD +# + +assert () # If condition false, +{ #+ exit from script with error message. + E_PARAM_ERR=98 + E_ASSERT_FAILED=99 + + if [ -z "$2" ] # Not enough parameters passed. + then + return $E_PARAM_ERR # No damage done. + fi + + lineno=$2 + + if [ ! $1 ] + then + echo "Assertion failed: \"$1\"" + echo "File \"$0\", line $lineno, called by $(caller 0)" + exit $E_ASSERT_FAILED + fi +} + +# Debug +#exec >&2 +#set -x + +if [ -f "$__object/parameter/name" ]; then + name="$__object/parameter/name" +else + name="$__object_id" +fi + +# Get list of installed ports +installed="$(cat "$__object/explorer/installed")" + +# Is port already built/installed? Check /var/db/ports +for PORT in $installed; do + if [ "$(eval "$PORT" : "$name")" != 0 ]; then # already installed + exit 0; + fi +done + +# If not, build +echo "cd /usr/ports && " + +# Debug +#set +x + diff --git a/conf/type/__build_port_freebsd/man.text b/conf/type/__build_port_freebsd/man.text new file mode 100644 index 00000000..7ce6042b --- /dev/null +++ b/conf/type/__build_port_freebsd/man.text @@ -0,0 +1,61 @@ +cdist-type__package_pkg_freebsd(7) +================================== +Jake Guffey + + +NAME +---- +cdist-type__package_pkg_freebsd - Manage FreeBSD packages + + +DESCRIPTION +----------- +This type is usually used on FreeBSD to manage packages. + + +REQUIRED PARAMETERS +------------------- +state:: + Either "installed" or "removed". + + +OPTIONAL PARAMETERS +------------------- +name:: + If supplied, use the name and not the object id as the package name. + +flavor:: + If supplied, use to avoid ambiguity. + +version:: + If supplied, use to install a specific version of the package named. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Ensure zsh is installed +__package_pkg_freebsd zsh --state installed + +# Ensure vim is installed, use flavor no_x11 +__package_pkg_freebsd vim --state installed --flavor no_x11 + +# If you don't want to follow pythonX packages, but always use python +__package_pkg_freebsd python --state installed --name python2 + +# Remove obsolete package +__package_pkg_freebsd puppet --state removed +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) +- cdist-type__package(7) + + +COPYING +------- +Copyright \(C) 2012 Jake Guffey. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__build_port_freebsd/parameter/optional b/conf/type/__build_port_freebsd/parameter/optional new file mode 100644 index 00000000..f121bdbf --- /dev/null +++ b/conf/type/__build_port_freebsd/parameter/optional @@ -0,0 +1 @@ +name diff --git a/conf/type/__package/manifest b/conf/type/__package/manifest index 181da077..7e0d7080 100755 --- a/conf/type/__package/manifest +++ b/conf/type/__package/manifest @@ -34,6 +34,7 @@ else debian|ubuntu) type="apt" ;; gentoo) type="emerge" ;; amazon|centos|fedora|redhat) type="yum" ;; + freebsd) type="pkg_freebsd" ;; *) echo "Don't know how to manage packages on: $os" >&2 exit 1 diff --git a/conf/type/__package_pkg_freebsd/explorer/pkg_version b/conf/type/__package_pkg_freebsd/explorer/pkg_version new file mode 100755 index 00000000..4bca24b6 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/explorer/pkg_version @@ -0,0 +1,35 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# +# Retrieve the status of a package - parsed dpkg output +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +# Don't produce "no pkgs installed" output -- breaks things +PKG_OUTPUT=$(pkg_info 2>&1) +if [ ! "$PKG_OUTPUT" = "pkg_info: no packages installed" ]; then + echo "$(echo "$PKG_OUTPUT" | grep "^$name-" | cut '-d ' -f1 | sed "s/$name-//g")" +fi + diff --git a/conf/type/__package_pkg_freebsd/gencode-remote b/conf/type/__package_pkg_freebsd/gencode-remote new file mode 100755 index 00000000..4d3c9844 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/gencode-remote @@ -0,0 +1,135 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# +# Manage packages with pkg on FreeBSD +# + +assert () # If condition false, +{ #+ exit from script with error message. + E_PARAM_ERR=98 + E_ASSERT_FAILED=99 + + if [ -z "$2" ] # Not enough parameters passed. + then + return $E_PARAM_ERR # No damage done. + fi + + lineno=$2 + + if [ ! $1 ] + then + echo "Assertion failed: \"$1\"" + echo "File \"$0\", line $lineno, called by $(caller 0)" + exit $E_ASSERT_FAILED + fi +} + +# Debug +#exec >&2 +#set -x + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +if [ -f "$__object/parameter/flavor" ]; then + flavor="$(cat "$__object/parameter/flavor")" +fi + +if [ -f "$__object/parameter/version" ]; then + version="$(cat "$__object/parameter/version")" +fi + +if [ -f "$__object/parameter/pkgsite" ]; then + pkgsite="$(cat "$__object/parameter/pkgsite")" +fi + +state="$(cat "$__object/parameter/state")" +curr_version="$(cat "$__object/explorer/pkg_version")" +add_cmd="pkg_add" +rm_cmd="pkg_delete" +cmd="" + +# Print the command to be executed +# Parms: $1 -- mode, "remove" or "add" +# $2 -- the command to be echoed +# FIXME: This is ugly. +execcmd(){ + # Set the PACKAGESITE if we're ADDing a new package + if [ "$1" = "add" -a -n "$pkgsite" ]; then + # Use http.../All/ if we know the exact version we want, use .../Latest/ otherwise + [ -n "$version" ] && pkgsite="${pkgsite}/All/" || pkgsite="${pkgsite}/Latest/" + echo "${pkgsite}" + fi + echo "${2} 2>&- >&-" # Silence the output of the command + echo "status=\$?" + echo "if [ \"\$status\" -ne \"0\" ]; then" + echo " echo \"Error: ${cmd} exited nonzero with \$status\"'!' >&2" + echo " exit 1" + echo "fi" +} + +if [ -n "$curr_version" ]; then # PKG *is* installed + if [ "$state" = "removed" ]; then # Shouldn't be installed + if [ -n "$flavor" ]; then + cmd="${rm_cmd} ${name}-${flavor}-${curr_version}" + else + cmd="${rm_cmd} ${name}-${curr_version}" + fi + execcmd "remove" "${cmd}" + exit 0 + else # Should be installed + if [ -n "$version" ]; then # Want a specific version + if [ "$version" = "$curr_version" ]; then # Current version is correct + exit 0 + else # Current version is wrong, fix + #updatepkg "$name" "$version" + assert "! ${version} = ${curr_version}" $LINENO + cmd="${rm_cmd} ${name}-${curr_version}" + execcmd "remove" "${cmd}" + cmd="${add_cmd} ${name}-${version}" + execcmd "add" "${cmd}" + fi + else # Don't care what version to use + exit 0 + fi + fi +else # PKG *isn't* installed + if [ "$state" = "removed" ]; then # Shouldn't be installed + exit 0 + elif [ "$state" = "installed" ]; then # Is not currently installed, should be + if [ -n "$flavor" ]; then + cmd="${add_cmd} -r ${name}-${flavor}" + else + cmd="${add_cmd} -r ${name}" + fi + if [ -n "$version" ]; then + cmd="${cmd}-${version}" + fi + execcmd "add" "${cmd}" + exit 0 + fi +fi + +# Debug +#set +x + diff --git a/conf/type/__package_pkg_freebsd/man.text b/conf/type/__package_pkg_freebsd/man.text new file mode 100644 index 00000000..882bece9 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/man.text @@ -0,0 +1,64 @@ +cdist-type__package_pkg_freebsd(7) +================================== +Jake Guffey + + +NAME +---- +cdist-type__package_pkg_freebsd - Manage FreeBSD packages + + +DESCRIPTION +----------- +This type is usually used on FreeBSD to manage packages. + + +REQUIRED PARAMETERS +------------------- +state:: + Either "installed" or "removed". + + +OPTIONAL PARAMETERS +------------------- +name:: + If supplied, use the name and not the object id as the package name. + +flavor:: + If supplied, use to avoid ambiguity. + +version:: + If supplied, use to install a specific version of the package named. + +pkgsite:: + If supplied, use to install from a specific package repository. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Ensure zsh is installed +__package_pkg_freebsd zsh --state installed + +# Ensure vim is installed, use flavor no_x11 +__package_pkg_freebsd vim --state installed --flavor no_x11 + +# If you don't want to follow pythonX packages, but always use python +__package_pkg_freebsd python --state installed --name python2 + +# Remove obsolete package +__package_pkg_freebsd puppet --state removed +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) +- cdist-type__package(7) + + +COPYING +------- +Copyright \(C) 2012 Jake Guffey. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__package_pkg_freebsd/parameter/optional b/conf/type/__package_pkg_freebsd/parameter/optional new file mode 100644 index 00000000..3fb2f29e --- /dev/null +++ b/conf/type/__package_pkg_freebsd/parameter/optional @@ -0,0 +1,4 @@ +name +flavor +version +pkgsite diff --git a/conf/type/__package_pkg_freebsd/parameter/required b/conf/type/__package_pkg_freebsd/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/parameter/required @@ -0,0 +1 @@ +state diff --git a/conf/type/__rsyncer/gencode-local b/conf/type/__rsyncer/gencode-local new file mode 100755 index 00000000..515ab71b --- /dev/null +++ b/conf/type/__rsyncer/gencode-local @@ -0,0 +1,71 @@ +#!/bin/sh +# +# Copyright (C) 2011 Daniel Maher (phrawzty+cdist at gmail.com) +# Parts copyright (C) 2012 Jake Guffey (jake.guffey at eprotex.com) +# +# This file is part of cdist (https://github.com/telmich/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 . +# + +# Debug +#exec >&2 +#set -x + +source="$(cat "$__object/parameter/source")" + +if [ -f "$__object/parameter/destination" ]; then + destination="$(cat "$__object/parameter/destination")" +else + destination="/$__object_id" +fi + +# The system binary is probably ok, but if not... +if [ -f "$__object/parameter/rsyncbin" ]; then + rsyncbin="$(cat "$__object/parameter/rsyncbin")" +else + rsyncbin=`which rsync` +fi + +# Turned this into an array so that we can use the "-e" argument to get the +# "root@" stuff fixed and so that "ssh -l root" is a single arg (as rsync +# wants it to be). +args=('-a' '-e' '"ssh -l root"') + +# If the --delete argument should be passed to rsync. +if [ -f "$__object/parameter/delete" ]; then +# This is from having args defined as an array previously. ${#args[@]} +# is the number of indices in args, and args[${#args[@]}]=... creates a +# new index of args, which is then filled with "--delete." + args[${#args[@]}]="--delete" +fi + +cmd="${rsyncbin} ${args[@]} \"${source}\"" + +# If the --chroot argument was given +if [ -f "$__object/parameter/chroot" ]; then + chroot=$(cat $__object/parameter/chroot) + cmd="${cmd} \"$chroot/$destination\"" +else + cmd="${cmd} \"$__target_host:$destination\"" +fi + +# FIXME: +# - align with __remote_{exec,copy} variables? -- done + +# Run rsync (locally). +echo "${cmd}" + +#set +x + diff --git a/conf/type/__rsyncer/man.text b/conf/type/__rsyncer/man.text new file mode 100644 index 00000000..18218181 --- /dev/null +++ b/conf/type/__rsyncer/man.text @@ -0,0 +1,72 @@ +cdist-type__rsyncer(7) +====================== +Daniel Maher +Jake Guffey + + +NAME +---- +cdist-type__rsyncer - Use rsync to copy files. + + +DESCRIPTION +----------- +This type is used to trigger rsync to copy files from the machine running cdist +(source) to the target machine in question (destination). The likely usage is +the rapid deployment of full directory trees, the cohorency of which can be +guarunteed with the optional --delete argument, which will remove any files +from the destination which are not present on the source. + + +REQUIRED PARAMETERS +------------------- +source:: + The full path of the source from which to copy. This is passed directly + to rsync. + + +OPTIONAL PARAMETERS +------------------- +destination:: + The full path of the destination. This is passed directly to rsync. + Default: object_id + +delete:: + If true, remove files from destination which are not in source. This is + effectively the --delete argument of rsync. + Default: false + +rsyncbin:: + Specify the full path to the rsync binary. + Default: `which rsync` + +chroot:: + Specify the use of a chroot environment. If given, rsync copies the source + to $chroot/$destination. + Default: none + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Basic example +__rsyncer '/home/foo' --source '/opt/dist/foo' + +# Fancier example +__rsyncer FOO --source '/opt/dist/foo' --destination '/home/foo/' --delete true + +# Chroot example +__rsyncer '/home/foo' --source '/opt/dist/foo' --chroot '/usr/chroot/home' +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2011-2012 Daniel Maher, Jake Guffey. Free use of this software +is granted under the terms of the GNU General Public License version 3 (GPLv3). + diff --git a/conf/type/__rsyncer/manifest b/conf/type/__rsyncer/manifest new file mode 100755 index 00000000..fb884bc1 --- /dev/null +++ b/conf/type/__rsyncer/manifest @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Copyright (C) 2012 Jake Guffey (jake.guffey at eprotex.com) +# +# This file is part of cdist (https://github.com/telmich/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 . +# + +# Debug +#exec >&2 +#set -x + +# This type has a dependency of the rsync package on the "other" side. +# Ensure that it's installed. +__package rsync --state installed + +# Debug +#set +x + diff --git a/conf/type/__rsyncer/parameter/optional b/conf/type/__rsyncer/parameter/optional new file mode 100644 index 00000000..3bcb4dc7 --- /dev/null +++ b/conf/type/__rsyncer/parameter/optional @@ -0,0 +1,3 @@ +destination +delete +rsyncbin diff --git a/conf/type/__rsyncer/parameter/required b/conf/type/__rsyncer/parameter/required new file mode 100644 index 00000000..5a18cd2f --- /dev/null +++ b/conf/type/__rsyncer/parameter/required @@ -0,0 +1 @@ +source diff --git a/conf/type/__service/gencode-remote b/conf/type/__service/gencode-remote new file mode 100755 index 00000000..85bd981c --- /dev/null +++ b/conf/type/__service/gencode-remote @@ -0,0 +1,98 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# + +# Debug +#exec >&2 +#set -x + +state="$(cat "$__object/parameter/status")" + +### Begin forming $cmd +cmd="" +cmd="$(cat <&2 + exit -1 +fi + +status="\$("\$exists" status || true)" +if [ "\$(expr "\$status" : "Cannot 'status' \$name. Set \${name}_enable to YES")" != "0" ]; then + echo "Can't status \$name. Set \${name}_enable to YES first in rc.conf on \$__target_host." >&2 + exit -1 +fi + +EOF)" +### End forming $cmd + +### Begin forming $running +running="$(cat <&- >&- +elif [ \$(expr "\$status" : ".*not running.*") != "0" ]; then + "\$exists" start 2>&- >&- +elif [ \$(expr "\$status" : ".*dead.*") != "0" ]; then + "\$exists" restart 2>&- >&- +fi +EOF)" +### End forming $running + +### Begin forming $stopped +stopped="$(cat <&- >&- + fi +EOF)" +### End forming $stopped + +case "$state" in + running) + cmd="$(echo "${cmd}\n${running}")" + ;; + stopped) + cmd="$(echo "${cmd}\n${stopped}")" + ;; + *) + echo "Unknown state: ${state}" >&2 + exit 1 + ;; +esac + +echo "${cmd}" + +# Debug +#set +x + diff --git a/conf/type/__service/man.text b/conf/type/__service/man.text new file mode 100644 index 00000000..9b55a18f --- /dev/null +++ b/conf/type/__service/man.text @@ -0,0 +1,48 @@ +cdist-type__service(7) +====================== +Jake Guffey + + +NAME +---- +cdist-type__service - Control a system service (daemon) state + + +DESCRIPTION +----------- +This cdist type allows you to control the state of a service (daemon). + + +REQUIRED PARAMETERS +------------------- +state:: + State of the service: Either stopped or running. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Start if not running +__service syslog-ng --state running + +# Stop the process if it is running +__service sshd --state stopped + +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2012 Jake Guffey. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__service/parameter/required b/conf/type/__service/parameter/required new file mode 100644 index 00000000..8be5547d --- /dev/null +++ b/conf/type/__service/parameter/required @@ -0,0 +1 @@ +status From ff5d0fd7fc621e9f2478aec1648808df118554e2 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Fri, 17 Feb 2012 11:29:12 -0500 Subject: [PATCH 2/7] Removed newly-developed types for inclusion in separate branches. --- conf/type/__build/man.text | 56 -------- conf/type/__build/manifest | 46 ------ conf/type/__build/parameter/optional | 2 - conf/type/__build_port_freebsd/gencode-remote | 69 --------- conf/type/__build_port_freebsd/man.text | 61 -------- .../__build_port_freebsd/parameter/optional | 1 - .../explorer/pkg_version | 35 ----- .../type/__package_pkg_freebsd/gencode-remote | 135 ------------------ conf/type/__package_pkg_freebsd/man.text | 64 --------- .../__package_pkg_freebsd/parameter/optional | 4 - .../__package_pkg_freebsd/parameter/required | 1 - conf/type/__rsyncer/gencode-local | 71 --------- conf/type/__rsyncer/man.text | 72 ---------- conf/type/__rsyncer/manifest | 31 ---- conf/type/__rsyncer/parameter/optional | 3 - conf/type/__rsyncer/parameter/required | 1 - conf/type/__service/gencode-remote | 98 ------------- conf/type/__service/man.text | 48 ------- conf/type/__service/parameter/required | 1 - 19 files changed, 799 deletions(-) delete mode 100644 conf/type/__build/man.text delete mode 100755 conf/type/__build/manifest delete mode 100644 conf/type/__build/parameter/optional delete mode 100755 conf/type/__build_port_freebsd/gencode-remote delete mode 100644 conf/type/__build_port_freebsd/man.text delete mode 100644 conf/type/__build_port_freebsd/parameter/optional delete mode 100755 conf/type/__package_pkg_freebsd/explorer/pkg_version delete mode 100755 conf/type/__package_pkg_freebsd/gencode-remote delete mode 100644 conf/type/__package_pkg_freebsd/man.text delete mode 100644 conf/type/__package_pkg_freebsd/parameter/optional delete mode 100644 conf/type/__package_pkg_freebsd/parameter/required delete mode 100755 conf/type/__rsyncer/gencode-local delete mode 100644 conf/type/__rsyncer/man.text delete mode 100755 conf/type/__rsyncer/manifest delete mode 100644 conf/type/__rsyncer/parameter/optional delete mode 100644 conf/type/__rsyncer/parameter/required delete mode 100755 conf/type/__service/gencode-remote delete mode 100644 conf/type/__service/man.text delete mode 100644 conf/type/__service/parameter/required diff --git a/conf/type/__build/man.text b/conf/type/__build/man.text deleted file mode 100644 index 1a297ec2..00000000 --- a/conf/type/__build/man.text +++ /dev/null @@ -1,56 +0,0 @@ -cdist-type__build(7) -=================== -Jake Guffey - - -NAME ----- -cdist-type__build - Manage software build operations - - -DESCRIPTION ------------ -This cdist type allows you to build software on the target. -It dispatches the actual work to the build-dependant types. - - -REQUIRED PARAMETERS -------------------- -None. - -OPTIONAL PARAMETERS -------------------- -name:: - The name of the software to build. Default is to use the object_id. -type:: - The build type to use. Default is to build a port for direct installation - on the target host. - - -EXAMPLES --------- - --------------------------------------------------------------------------------- -# Build and install a port -__build vim - -# Build and install a port explicitly defining to use ports -__build vim --type port_freebsd - -# Build a package to install via __package on another machine -__build vim --type pkg_freebsd - -# Force use of a specific package type -__build nanobsd --name nanobsd-internaluse-9.0 --type nanobsd --------------------------------------------------------------------------------- - - -SEE ALSO --------- -- cdist-type(7) - - -COPYING -------- -Copyright \(C) 2012 Jake Guffey. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__build/manifest b/conf/type/__build/manifest deleted file mode 100755 index c8392d35..00000000 --- a/conf/type/__build/manifest +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh -# -# 2012 Jake Guffey (jake.guffey at eprotex.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 . -# -# -# __build is an abstract type which dispatches to the lower level -# __build_$name types which do the actual interaction with the software -# build system. -# - -if [ -f "$__object/parameter/name" ]; then - name="$(cat "$__object/parameter/name")" -else - name="$__object_id" -fi - -if [ -f "$__object/parameter/type" ]; then - type="$(cat "$__object/parameter/type")" -else - type="port_freebsd" -fi - -set -- "$@" "$__object_id" -cd "$__object/parameter" -for property in $(ls .); do - if [ "$property" != "type" ]; then - set -- "$@" "--$property" "$(cat "$property")" - fi -done - -__build_$type "$@" diff --git a/conf/type/__build/parameter/optional b/conf/type/__build/parameter/optional deleted file mode 100644 index d3598a51..00000000 --- a/conf/type/__build/parameter/optional +++ /dev/null @@ -1,2 +0,0 @@ -name -type diff --git a/conf/type/__build_port_freebsd/gencode-remote b/conf/type/__build_port_freebsd/gencode-remote deleted file mode 100755 index ff0432ba..00000000 --- a/conf/type/__build_port_freebsd/gencode-remote +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -# -# 2012 Jake Guffey (jake.guffey at eprotex.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 . -# -# -# Build ports on FreeBSD -# - -assert () # If condition false, -{ #+ exit from script with error message. - E_PARAM_ERR=98 - E_ASSERT_FAILED=99 - - if [ -z "$2" ] # Not enough parameters passed. - then - return $E_PARAM_ERR # No damage done. - fi - - lineno=$2 - - if [ ! $1 ] - then - echo "Assertion failed: \"$1\"" - echo "File \"$0\", line $lineno, called by $(caller 0)" - exit $E_ASSERT_FAILED - fi -} - -# Debug -#exec >&2 -#set -x - -if [ -f "$__object/parameter/name" ]; then - name="$__object/parameter/name" -else - name="$__object_id" -fi - -# Get list of installed ports -installed="$(cat "$__object/explorer/installed")" - -# Is port already built/installed? Check /var/db/ports -for PORT in $installed; do - if [ "$(eval "$PORT" : "$name")" != 0 ]; then # already installed - exit 0; - fi -done - -# If not, build -echo "cd /usr/ports && " - -# Debug -#set +x - diff --git a/conf/type/__build_port_freebsd/man.text b/conf/type/__build_port_freebsd/man.text deleted file mode 100644 index 7ce6042b..00000000 --- a/conf/type/__build_port_freebsd/man.text +++ /dev/null @@ -1,61 +0,0 @@ -cdist-type__package_pkg_freebsd(7) -================================== -Jake Guffey - - -NAME ----- -cdist-type__package_pkg_freebsd - Manage FreeBSD packages - - -DESCRIPTION ------------ -This type is usually used on FreeBSD to manage packages. - - -REQUIRED PARAMETERS -------------------- -state:: - Either "installed" or "removed". - - -OPTIONAL PARAMETERS -------------------- -name:: - If supplied, use the name and not the object id as the package name. - -flavor:: - If supplied, use to avoid ambiguity. - -version:: - If supplied, use to install a specific version of the package named. - - -EXAMPLES --------- - --------------------------------------------------------------------------------- -# Ensure zsh is installed -__package_pkg_freebsd zsh --state installed - -# Ensure vim is installed, use flavor no_x11 -__package_pkg_freebsd vim --state installed --flavor no_x11 - -# If you don't want to follow pythonX packages, but always use python -__package_pkg_freebsd python --state installed --name python2 - -# Remove obsolete package -__package_pkg_freebsd puppet --state removed --------------------------------------------------------------------------------- - - -SEE ALSO --------- -- cdist-type(7) -- cdist-type__package(7) - - -COPYING -------- -Copyright \(C) 2012 Jake Guffey. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__build_port_freebsd/parameter/optional b/conf/type/__build_port_freebsd/parameter/optional deleted file mode 100644 index f121bdbf..00000000 --- a/conf/type/__build_port_freebsd/parameter/optional +++ /dev/null @@ -1 +0,0 @@ -name diff --git a/conf/type/__package_pkg_freebsd/explorer/pkg_version b/conf/type/__package_pkg_freebsd/explorer/pkg_version deleted file mode 100755 index 4bca24b6..00000000 --- a/conf/type/__package_pkg_freebsd/explorer/pkg_version +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# -# 2012 Jake Guffey (jake.guffey at eprotex.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 . -# -# -# Retrieve the status of a package - parsed dpkg output -# - -if [ -f "$__object/parameter/name" ]; then - name="$(cat "$__object/parameter/name")" -else - name="$__object_id" -fi - -# Don't produce "no pkgs installed" output -- breaks things -PKG_OUTPUT=$(pkg_info 2>&1) -if [ ! "$PKG_OUTPUT" = "pkg_info: no packages installed" ]; then - echo "$(echo "$PKG_OUTPUT" | grep "^$name-" | cut '-d ' -f1 | sed "s/$name-//g")" -fi - diff --git a/conf/type/__package_pkg_freebsd/gencode-remote b/conf/type/__package_pkg_freebsd/gencode-remote deleted file mode 100755 index 4d3c9844..00000000 --- a/conf/type/__package_pkg_freebsd/gencode-remote +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/sh -# -# 2012 Jake Guffey (jake.guffey at eprotex.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 . -# -# -# Manage packages with pkg on FreeBSD -# - -assert () # If condition false, -{ #+ exit from script with error message. - E_PARAM_ERR=98 - E_ASSERT_FAILED=99 - - if [ -z "$2" ] # Not enough parameters passed. - then - return $E_PARAM_ERR # No damage done. - fi - - lineno=$2 - - if [ ! $1 ] - then - echo "Assertion failed: \"$1\"" - echo "File \"$0\", line $lineno, called by $(caller 0)" - exit $E_ASSERT_FAILED - fi -} - -# Debug -#exec >&2 -#set -x - -if [ -f "$__object/parameter/name" ]; then - name="$(cat "$__object/parameter/name")" -else - name="$__object_id" -fi - -if [ -f "$__object/parameter/flavor" ]; then - flavor="$(cat "$__object/parameter/flavor")" -fi - -if [ -f "$__object/parameter/version" ]; then - version="$(cat "$__object/parameter/version")" -fi - -if [ -f "$__object/parameter/pkgsite" ]; then - pkgsite="$(cat "$__object/parameter/pkgsite")" -fi - -state="$(cat "$__object/parameter/state")" -curr_version="$(cat "$__object/explorer/pkg_version")" -add_cmd="pkg_add" -rm_cmd="pkg_delete" -cmd="" - -# Print the command to be executed -# Parms: $1 -- mode, "remove" or "add" -# $2 -- the command to be echoed -# FIXME: This is ugly. -execcmd(){ - # Set the PACKAGESITE if we're ADDing a new package - if [ "$1" = "add" -a -n "$pkgsite" ]; then - # Use http.../All/ if we know the exact version we want, use .../Latest/ otherwise - [ -n "$version" ] && pkgsite="${pkgsite}/All/" || pkgsite="${pkgsite}/Latest/" - echo "${pkgsite}" - fi - echo "${2} 2>&- >&-" # Silence the output of the command - echo "status=\$?" - echo "if [ \"\$status\" -ne \"0\" ]; then" - echo " echo \"Error: ${cmd} exited nonzero with \$status\"'!' >&2" - echo " exit 1" - echo "fi" -} - -if [ -n "$curr_version" ]; then # PKG *is* installed - if [ "$state" = "removed" ]; then # Shouldn't be installed - if [ -n "$flavor" ]; then - cmd="${rm_cmd} ${name}-${flavor}-${curr_version}" - else - cmd="${rm_cmd} ${name}-${curr_version}" - fi - execcmd "remove" "${cmd}" - exit 0 - else # Should be installed - if [ -n "$version" ]; then # Want a specific version - if [ "$version" = "$curr_version" ]; then # Current version is correct - exit 0 - else # Current version is wrong, fix - #updatepkg "$name" "$version" - assert "! ${version} = ${curr_version}" $LINENO - cmd="${rm_cmd} ${name}-${curr_version}" - execcmd "remove" "${cmd}" - cmd="${add_cmd} ${name}-${version}" - execcmd "add" "${cmd}" - fi - else # Don't care what version to use - exit 0 - fi - fi -else # PKG *isn't* installed - if [ "$state" = "removed" ]; then # Shouldn't be installed - exit 0 - elif [ "$state" = "installed" ]; then # Is not currently installed, should be - if [ -n "$flavor" ]; then - cmd="${add_cmd} -r ${name}-${flavor}" - else - cmd="${add_cmd} -r ${name}" - fi - if [ -n "$version" ]; then - cmd="${cmd}-${version}" - fi - execcmd "add" "${cmd}" - exit 0 - fi -fi - -# Debug -#set +x - diff --git a/conf/type/__package_pkg_freebsd/man.text b/conf/type/__package_pkg_freebsd/man.text deleted file mode 100644 index 882bece9..00000000 --- a/conf/type/__package_pkg_freebsd/man.text +++ /dev/null @@ -1,64 +0,0 @@ -cdist-type__package_pkg_freebsd(7) -================================== -Jake Guffey - - -NAME ----- -cdist-type__package_pkg_freebsd - Manage FreeBSD packages - - -DESCRIPTION ------------ -This type is usually used on FreeBSD to manage packages. - - -REQUIRED PARAMETERS -------------------- -state:: - Either "installed" or "removed". - - -OPTIONAL PARAMETERS -------------------- -name:: - If supplied, use the name and not the object id as the package name. - -flavor:: - If supplied, use to avoid ambiguity. - -version:: - If supplied, use to install a specific version of the package named. - -pkgsite:: - If supplied, use to install from a specific package repository. - - -EXAMPLES --------- - --------------------------------------------------------------------------------- -# Ensure zsh is installed -__package_pkg_freebsd zsh --state installed - -# Ensure vim is installed, use flavor no_x11 -__package_pkg_freebsd vim --state installed --flavor no_x11 - -# If you don't want to follow pythonX packages, but always use python -__package_pkg_freebsd python --state installed --name python2 - -# Remove obsolete package -__package_pkg_freebsd puppet --state removed --------------------------------------------------------------------------------- - - -SEE ALSO --------- -- cdist-type(7) -- cdist-type__package(7) - - -COPYING -------- -Copyright \(C) 2012 Jake Guffey. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__package_pkg_freebsd/parameter/optional b/conf/type/__package_pkg_freebsd/parameter/optional deleted file mode 100644 index 3fb2f29e..00000000 --- a/conf/type/__package_pkg_freebsd/parameter/optional +++ /dev/null @@ -1,4 +0,0 @@ -name -flavor -version -pkgsite diff --git a/conf/type/__package_pkg_freebsd/parameter/required b/conf/type/__package_pkg_freebsd/parameter/required deleted file mode 100644 index ff72b5c7..00000000 --- a/conf/type/__package_pkg_freebsd/parameter/required +++ /dev/null @@ -1 +0,0 @@ -state diff --git a/conf/type/__rsyncer/gencode-local b/conf/type/__rsyncer/gencode-local deleted file mode 100755 index 515ab71b..00000000 --- a/conf/type/__rsyncer/gencode-local +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2011 Daniel Maher (phrawzty+cdist at gmail.com) -# Parts copyright (C) 2012 Jake Guffey (jake.guffey at eprotex.com) -# -# This file is part of cdist (https://github.com/telmich/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 . -# - -# Debug -#exec >&2 -#set -x - -source="$(cat "$__object/parameter/source")" - -if [ -f "$__object/parameter/destination" ]; then - destination="$(cat "$__object/parameter/destination")" -else - destination="/$__object_id" -fi - -# The system binary is probably ok, but if not... -if [ -f "$__object/parameter/rsyncbin" ]; then - rsyncbin="$(cat "$__object/parameter/rsyncbin")" -else - rsyncbin=`which rsync` -fi - -# Turned this into an array so that we can use the "-e" argument to get the -# "root@" stuff fixed and so that "ssh -l root" is a single arg (as rsync -# wants it to be). -args=('-a' '-e' '"ssh -l root"') - -# If the --delete argument should be passed to rsync. -if [ -f "$__object/parameter/delete" ]; then -# This is from having args defined as an array previously. ${#args[@]} -# is the number of indices in args, and args[${#args[@]}]=... creates a -# new index of args, which is then filled with "--delete." - args[${#args[@]}]="--delete" -fi - -cmd="${rsyncbin} ${args[@]} \"${source}\"" - -# If the --chroot argument was given -if [ -f "$__object/parameter/chroot" ]; then - chroot=$(cat $__object/parameter/chroot) - cmd="${cmd} \"$chroot/$destination\"" -else - cmd="${cmd} \"$__target_host:$destination\"" -fi - -# FIXME: -# - align with __remote_{exec,copy} variables? -- done - -# Run rsync (locally). -echo "${cmd}" - -#set +x - diff --git a/conf/type/__rsyncer/man.text b/conf/type/__rsyncer/man.text deleted file mode 100644 index 18218181..00000000 --- a/conf/type/__rsyncer/man.text +++ /dev/null @@ -1,72 +0,0 @@ -cdist-type__rsyncer(7) -====================== -Daniel Maher -Jake Guffey - - -NAME ----- -cdist-type__rsyncer - Use rsync to copy files. - - -DESCRIPTION ------------ -This type is used to trigger rsync to copy files from the machine running cdist -(source) to the target machine in question (destination). The likely usage is -the rapid deployment of full directory trees, the cohorency of which can be -guarunteed with the optional --delete argument, which will remove any files -from the destination which are not present on the source. - - -REQUIRED PARAMETERS -------------------- -source:: - The full path of the source from which to copy. This is passed directly - to rsync. - - -OPTIONAL PARAMETERS -------------------- -destination:: - The full path of the destination. This is passed directly to rsync. - Default: object_id - -delete:: - If true, remove files from destination which are not in source. This is - effectively the --delete argument of rsync. - Default: false - -rsyncbin:: - Specify the full path to the rsync binary. - Default: `which rsync` - -chroot:: - Specify the use of a chroot environment. If given, rsync copies the source - to $chroot/$destination. - Default: none - -EXAMPLES --------- - --------------------------------------------------------------------------------- -# Basic example -__rsyncer '/home/foo' --source '/opt/dist/foo' - -# Fancier example -__rsyncer FOO --source '/opt/dist/foo' --destination '/home/foo/' --delete true - -# Chroot example -__rsyncer '/home/foo' --source '/opt/dist/foo' --chroot '/usr/chroot/home' --------------------------------------------------------------------------------- - - -SEE ALSO --------- -- cdist-type(7) - - -COPYING -------- -Copyright \(C) 2011-2012 Daniel Maher, Jake Guffey. Free use of this software -is granted under the terms of the GNU General Public License version 3 (GPLv3). - diff --git a/conf/type/__rsyncer/manifest b/conf/type/__rsyncer/manifest deleted file mode 100755 index fb884bc1..00000000 --- a/conf/type/__rsyncer/manifest +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2012 Jake Guffey (jake.guffey at eprotex.com) -# -# This file is part of cdist (https://github.com/telmich/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 . -# - -# Debug -#exec >&2 -#set -x - -# This type has a dependency of the rsync package on the "other" side. -# Ensure that it's installed. -__package rsync --state installed - -# Debug -#set +x - diff --git a/conf/type/__rsyncer/parameter/optional b/conf/type/__rsyncer/parameter/optional deleted file mode 100644 index 3bcb4dc7..00000000 --- a/conf/type/__rsyncer/parameter/optional +++ /dev/null @@ -1,3 +0,0 @@ -destination -delete -rsyncbin diff --git a/conf/type/__rsyncer/parameter/required b/conf/type/__rsyncer/parameter/required deleted file mode 100644 index 5a18cd2f..00000000 --- a/conf/type/__rsyncer/parameter/required +++ /dev/null @@ -1 +0,0 @@ -source diff --git a/conf/type/__service/gencode-remote b/conf/type/__service/gencode-remote deleted file mode 100755 index 85bd981c..00000000 --- a/conf/type/__service/gencode-remote +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -# -# 2012 Jake Guffey (jake.guffey at eprotex.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 . -# -# - -# Debug -#exec >&2 -#set -x - -state="$(cat "$__object/parameter/status")" - -### Begin forming $cmd -cmd="" -cmd="$(cat <&2 - exit -1 -fi - -status="\$("\$exists" status || true)" -if [ "\$(expr "\$status" : "Cannot 'status' \$name. Set \${name}_enable to YES")" != "0" ]; then - echo "Can't status \$name. Set \${name}_enable to YES first in rc.conf on \$__target_host." >&2 - exit -1 -fi - -EOF)" -### End forming $cmd - -### Begin forming $running -running="$(cat <&- >&- -elif [ \$(expr "\$status" : ".*not running.*") != "0" ]; then - "\$exists" start 2>&- >&- -elif [ \$(expr "\$status" : ".*dead.*") != "0" ]; then - "\$exists" restart 2>&- >&- -fi -EOF)" -### End forming $running - -### Begin forming $stopped -stopped="$(cat <&- >&- - fi -EOF)" -### End forming $stopped - -case "$state" in - running) - cmd="$(echo "${cmd}\n${running}")" - ;; - stopped) - cmd="$(echo "${cmd}\n${stopped}")" - ;; - *) - echo "Unknown state: ${state}" >&2 - exit 1 - ;; -esac - -echo "${cmd}" - -# Debug -#set +x - diff --git a/conf/type/__service/man.text b/conf/type/__service/man.text deleted file mode 100644 index 9b55a18f..00000000 --- a/conf/type/__service/man.text +++ /dev/null @@ -1,48 +0,0 @@ -cdist-type__service(7) -====================== -Jake Guffey - - -NAME ----- -cdist-type__service - Control a system service (daemon) state - - -DESCRIPTION ------------ -This cdist type allows you to control the state of a service (daemon). - - -REQUIRED PARAMETERS -------------------- -state:: - State of the service: Either stopped or running. - - -OPTIONAL PARAMETERS -------------------- -None. - - -EXAMPLES --------- - --------------------------------------------------------------------------------- -# Start if not running -__service syslog-ng --state running - -# Stop the process if it is running -__service sshd --state stopped - --------------------------------------------------------------------------------- - - -SEE ALSO --------- -- cdist-type(7) - - -COPYING -------- -Copyright \(C) 2012 Jake Guffey. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__service/parameter/required b/conf/type/__service/parameter/required deleted file mode 100644 index 8be5547d..00000000 --- a/conf/type/__service/parameter/required +++ /dev/null @@ -1 +0,0 @@ -status From ffec26d462ac4f3acb3ebcf449b48396978d81a9 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Fri, 17 Feb 2012 11:30:21 -0500 Subject: [PATCH 3/7] Removed __package_pkg_freebsd customization from __package type for inclusion in a separate branch. --- conf/type/__package/manifest | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/type/__package/manifest b/conf/type/__package/manifest index 7e0d7080..181da077 100755 --- a/conf/type/__package/manifest +++ b/conf/type/__package/manifest @@ -34,7 +34,6 @@ else debian|ubuntu) type="apt" ;; gentoo) type="emerge" ;; amazon|centos|fedora|redhat) type="yum" ;; - freebsd) type="pkg_freebsd" ;; *) echo "Don't know how to manage packages on: $os" >&2 exit 1 From 1d5b7cef9c5ec0179bae5b52268ddd3f8b1fcf02 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Fri, 17 Feb 2012 11:35:31 -0500 Subject: [PATCH 4/7] Moved __package_pkg_freebsd to separate branch --- .../explorer/pkg_version | 35 +++++ .../type/__package_pkg_freebsd/gencode-remote | 135 ++++++++++++++++++ conf/type/__package_pkg_freebsd/man.text | 64 +++++++++ .../__package_pkg_freebsd/parameter/optional | 4 + .../__package_pkg_freebsd/parameter/required | 1 + 5 files changed, 239 insertions(+) create mode 100755 conf/type/__package_pkg_freebsd/explorer/pkg_version create mode 100755 conf/type/__package_pkg_freebsd/gencode-remote create mode 100644 conf/type/__package_pkg_freebsd/man.text create mode 100644 conf/type/__package_pkg_freebsd/parameter/optional create mode 100644 conf/type/__package_pkg_freebsd/parameter/required diff --git a/conf/type/__package_pkg_freebsd/explorer/pkg_version b/conf/type/__package_pkg_freebsd/explorer/pkg_version new file mode 100755 index 00000000..4bca24b6 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/explorer/pkg_version @@ -0,0 +1,35 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# +# Retrieve the status of a package - parsed dpkg output +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +# Don't produce "no pkgs installed" output -- breaks things +PKG_OUTPUT=$(pkg_info 2>&1) +if [ ! "$PKG_OUTPUT" = "pkg_info: no packages installed" ]; then + echo "$(echo "$PKG_OUTPUT" | grep "^$name-" | cut '-d ' -f1 | sed "s/$name-//g")" +fi + diff --git a/conf/type/__package_pkg_freebsd/gencode-remote b/conf/type/__package_pkg_freebsd/gencode-remote new file mode 100755 index 00000000..4d3c9844 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/gencode-remote @@ -0,0 +1,135 @@ +#!/bin/sh +# +# 2012 Jake Guffey (jake.guffey at eprotex.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 . +# +# +# Manage packages with pkg on FreeBSD +# + +assert () # If condition false, +{ #+ exit from script with error message. + E_PARAM_ERR=98 + E_ASSERT_FAILED=99 + + if [ -z "$2" ] # Not enough parameters passed. + then + return $E_PARAM_ERR # No damage done. + fi + + lineno=$2 + + if [ ! $1 ] + then + echo "Assertion failed: \"$1\"" + echo "File \"$0\", line $lineno, called by $(caller 0)" + exit $E_ASSERT_FAILED + fi +} + +# Debug +#exec >&2 +#set -x + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +if [ -f "$__object/parameter/flavor" ]; then + flavor="$(cat "$__object/parameter/flavor")" +fi + +if [ -f "$__object/parameter/version" ]; then + version="$(cat "$__object/parameter/version")" +fi + +if [ -f "$__object/parameter/pkgsite" ]; then + pkgsite="$(cat "$__object/parameter/pkgsite")" +fi + +state="$(cat "$__object/parameter/state")" +curr_version="$(cat "$__object/explorer/pkg_version")" +add_cmd="pkg_add" +rm_cmd="pkg_delete" +cmd="" + +# Print the command to be executed +# Parms: $1 -- mode, "remove" or "add" +# $2 -- the command to be echoed +# FIXME: This is ugly. +execcmd(){ + # Set the PACKAGESITE if we're ADDing a new package + if [ "$1" = "add" -a -n "$pkgsite" ]; then + # Use http.../All/ if we know the exact version we want, use .../Latest/ otherwise + [ -n "$version" ] && pkgsite="${pkgsite}/All/" || pkgsite="${pkgsite}/Latest/" + echo "${pkgsite}" + fi + echo "${2} 2>&- >&-" # Silence the output of the command + echo "status=\$?" + echo "if [ \"\$status\" -ne \"0\" ]; then" + echo " echo \"Error: ${cmd} exited nonzero with \$status\"'!' >&2" + echo " exit 1" + echo "fi" +} + +if [ -n "$curr_version" ]; then # PKG *is* installed + if [ "$state" = "removed" ]; then # Shouldn't be installed + if [ -n "$flavor" ]; then + cmd="${rm_cmd} ${name}-${flavor}-${curr_version}" + else + cmd="${rm_cmd} ${name}-${curr_version}" + fi + execcmd "remove" "${cmd}" + exit 0 + else # Should be installed + if [ -n "$version" ]; then # Want a specific version + if [ "$version" = "$curr_version" ]; then # Current version is correct + exit 0 + else # Current version is wrong, fix + #updatepkg "$name" "$version" + assert "! ${version} = ${curr_version}" $LINENO + cmd="${rm_cmd} ${name}-${curr_version}" + execcmd "remove" "${cmd}" + cmd="${add_cmd} ${name}-${version}" + execcmd "add" "${cmd}" + fi + else # Don't care what version to use + exit 0 + fi + fi +else # PKG *isn't* installed + if [ "$state" = "removed" ]; then # Shouldn't be installed + exit 0 + elif [ "$state" = "installed" ]; then # Is not currently installed, should be + if [ -n "$flavor" ]; then + cmd="${add_cmd} -r ${name}-${flavor}" + else + cmd="${add_cmd} -r ${name}" + fi + if [ -n "$version" ]; then + cmd="${cmd}-${version}" + fi + execcmd "add" "${cmd}" + exit 0 + fi +fi + +# Debug +#set +x + diff --git a/conf/type/__package_pkg_freebsd/man.text b/conf/type/__package_pkg_freebsd/man.text new file mode 100644 index 00000000..882bece9 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/man.text @@ -0,0 +1,64 @@ +cdist-type__package_pkg_freebsd(7) +================================== +Jake Guffey + + +NAME +---- +cdist-type__package_pkg_freebsd - Manage FreeBSD packages + + +DESCRIPTION +----------- +This type is usually used on FreeBSD to manage packages. + + +REQUIRED PARAMETERS +------------------- +state:: + Either "installed" or "removed". + + +OPTIONAL PARAMETERS +------------------- +name:: + If supplied, use the name and not the object id as the package name. + +flavor:: + If supplied, use to avoid ambiguity. + +version:: + If supplied, use to install a specific version of the package named. + +pkgsite:: + If supplied, use to install from a specific package repository. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Ensure zsh is installed +__package_pkg_freebsd zsh --state installed + +# Ensure vim is installed, use flavor no_x11 +__package_pkg_freebsd vim --state installed --flavor no_x11 + +# If you don't want to follow pythonX packages, but always use python +__package_pkg_freebsd python --state installed --name python2 + +# Remove obsolete package +__package_pkg_freebsd puppet --state removed +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) +- cdist-type__package(7) + + +COPYING +------- +Copyright \(C) 2012 Jake Guffey. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__package_pkg_freebsd/parameter/optional b/conf/type/__package_pkg_freebsd/parameter/optional new file mode 100644 index 00000000..3fb2f29e --- /dev/null +++ b/conf/type/__package_pkg_freebsd/parameter/optional @@ -0,0 +1,4 @@ +name +flavor +version +pkgsite diff --git a/conf/type/__package_pkg_freebsd/parameter/required b/conf/type/__package_pkg_freebsd/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__package_pkg_freebsd/parameter/required @@ -0,0 +1 @@ +state From 5443d1a64a6cf75e76c69ed3293c7f7c3fae9859 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Fri, 17 Feb 2012 11:35:59 -0500 Subject: [PATCH 5/7] Modified __package to utilize __package_pkg_freebsd --- conf/type/__package/manifest | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/type/__package/manifest b/conf/type/__package/manifest index 181da077..7e0d7080 100755 --- a/conf/type/__package/manifest +++ b/conf/type/__package/manifest @@ -34,6 +34,7 @@ else debian|ubuntu) type="apt" ;; gentoo) type="emerge" ;; amazon|centos|fedora|redhat) type="yum" ;; + freebsd) type="pkg_freebsd" ;; *) echo "Don't know how to manage packages on: $os" >&2 exit 1 From b7e33782623f68a3cd83b6c5d96a79f09fab28d6 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Fri, 17 Feb 2012 12:18:06 -0500 Subject: [PATCH 6/7] Modified __package to allow pkgsite param, bugfix in __package_pkg_freebsd where it wasn't setting the PACKAGESITE variable on remote side. --- conf/type/__package/parameter/optional | 1 + conf/type/__package_pkg_freebsd/gencode-remote | 1 + 2 files changed, 2 insertions(+) diff --git a/conf/type/__package/parameter/optional b/conf/type/__package/parameter/optional index 712ea892..6f793411 100644 --- a/conf/type/__package/parameter/optional +++ b/conf/type/__package/parameter/optional @@ -1,3 +1,4 @@ name version type +pkgsite diff --git a/conf/type/__package_pkg_freebsd/gencode-remote b/conf/type/__package_pkg_freebsd/gencode-remote index 4d3c9844..022c727a 100755 --- a/conf/type/__package_pkg_freebsd/gencode-remote +++ b/conf/type/__package_pkg_freebsd/gencode-remote @@ -77,6 +77,7 @@ execcmd(){ # Set the PACKAGESITE if we're ADDing a new package if [ "$1" = "add" -a -n "$pkgsite" ]; then # Use http.../All/ if we know the exact version we want, use .../Latest/ otherwise + pkgsite="export PACKAGESITE=${pkgsite}" [ -n "$version" ] && pkgsite="${pkgsite}/All/" || pkgsite="${pkgsite}/Latest/" echo "${pkgsite}" fi From 377afe8b1c2e19b820f499e7c84951b9450c2c26 Mon Sep 17 00:00:00 2001 From: Jake Guffey Date: Mon, 20 Feb 2012 10:51:18 -0500 Subject: [PATCH 7/7] Migrated to using present/absent for --state param. --- conf/type/__package_pkg_freebsd/gencode-remote | 6 +++--- conf/type/__package_pkg_freebsd/man.text | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/type/__package_pkg_freebsd/gencode-remote b/conf/type/__package_pkg_freebsd/gencode-remote index 022c727a..fa962970 100755 --- a/conf/type/__package_pkg_freebsd/gencode-remote +++ b/conf/type/__package_pkg_freebsd/gencode-remote @@ -90,7 +90,7 @@ execcmd(){ } if [ -n "$curr_version" ]; then # PKG *is* installed - if [ "$state" = "removed" ]; then # Shouldn't be installed + if [ "$state" = "absent" ]; then # Shouldn't be installed if [ -n "$flavor" ]; then cmd="${rm_cmd} ${name}-${flavor}-${curr_version}" else @@ -115,9 +115,9 @@ if [ -n "$curr_version" ]; then # PKG *is* installed fi fi else # PKG *isn't* installed - if [ "$state" = "removed" ]; then # Shouldn't be installed + if [ "$state" = "absent" ]; then # Shouldn't be installed exit 0 - elif [ "$state" = "installed" ]; then # Is not currently installed, should be + elif [ "$state" = "present" ]; then # Is not currently installed, should be if [ -n "$flavor" ]; then cmd="${add_cmd} -r ${name}-${flavor}" else diff --git a/conf/type/__package_pkg_freebsd/man.text b/conf/type/__package_pkg_freebsd/man.text index 882bece9..f41ac47a 100644 --- a/conf/type/__package_pkg_freebsd/man.text +++ b/conf/type/__package_pkg_freebsd/man.text @@ -16,7 +16,7 @@ This type is usually used on FreeBSD to manage packages. REQUIRED PARAMETERS ------------------- state:: - Either "installed" or "removed". + Either "present" or "absent". OPTIONAL PARAMETERS