From a3981f58fd04f4289046ee42b8125bab3d622cfe Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Fri, 15 Jun 2012 10:23:19 +0200 Subject: [PATCH] Initial support for SuSE, including zypper, including __start_on_boot Signed-off-by: Nico Schottelius --- conf/type/__package/manifest | 1 + conf/type/__package_yum/explorer/pkg_version | 4 +- .../__package_zypper/explorer/pkg_version | 30 +++++++++++ conf/type/__package_zypper/gencode-remote | 52 +++++++++++++++++++ conf/type/__package_zypper/man.text | 52 +++++++++++++++++++ conf/type/__package_zypper/parameter/optional | 1 + conf/type/__package_zypper/parameter/required | 1 + conf/type/__start_on_boot/explorer/state | 2 +- conf/type/__start_on_boot/gencode-remote | 4 +- 9 files changed, 142 insertions(+), 5 deletions(-) create mode 100755 conf/type/__package_zypper/explorer/pkg_version create mode 100755 conf/type/__package_zypper/gencode-remote create mode 100644 conf/type/__package_zypper/man.text create mode 100644 conf/type/__package_zypper/parameter/optional create mode 100644 conf/type/__package_zypper/parameter/required diff --git a/conf/type/__package/manifest b/conf/type/__package/manifest index 118525b1..6a84cb7f 100755 --- a/conf/type/__package/manifest +++ b/conf/type/__package/manifest @@ -35,6 +35,7 @@ else debian|ubuntu) type="apt" ;; freebsd) type="pkg_freebsd" ;; gentoo) type="emerge" ;; + suse) type="zypper" ;; openwrt) type="opkg" ;; *) echo "Don't know how to manage packages on: $os" >&2 diff --git a/conf/type/__package_yum/explorer/pkg_version b/conf/type/__package_yum/explorer/pkg_version index 0e078f68..fb3b7753 100755 --- a/conf/type/__package_yum/explorer/pkg_version +++ b/conf/type/__package_yum/explorer/pkg_version @@ -1,6 +1,6 @@ #!/bin/sh # -# 2011 Nico Schottelius (nico-cdist at schottelius.org) +# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org) # # This file is part of cdist. # @@ -18,7 +18,7 @@ # along with cdist. If not, see . # # -# Retrieve the status of a package - parsed dpkg output +# Retrieve the status of a package # if [ -f "$__object/parameter/name" ]; then diff --git a/conf/type/__package_zypper/explorer/pkg_version b/conf/type/__package_zypper/explorer/pkg_version new file mode 100755 index 00000000..fb3b7753 --- /dev/null +++ b/conf/type/__package_zypper/explorer/pkg_version @@ -0,0 +1,30 @@ +#!/bin/sh +# +# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Retrieve the status of a package +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +rpm -q --whatprovides "$name" 2>/dev/null || true diff --git a/conf/type/__package_zypper/gencode-remote b/conf/type/__package_zypper/gencode-remote new file mode 100755 index 00000000..3323d6b1 --- /dev/null +++ b/conf/type/__package_zypper/gencode-remote @@ -0,0 +1,52 @@ +#!/bin/sh +# +# 2012 Nico Schottelius (nico-cdist at schottelius.org) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Manage packages with Zypper (mostly suse) +# + +# Debug +# exec >&2 +# set -x + +globalopts="--quiet --non-interactive" + +if [ -f "$__object/parameter/name" ]; then + name="$__object/parameter/name" +else + name="$__object_id" +fi + +state_should="$(cat "$__object/parameter/state")" + +# Exit if nothing is needed to be done +[ "$state_is" = "$state_should" ] && exit 0 + +case "$state_should" in + present) + echo zypper "$globalopts" install --auto-agree-with-licenses \"$name\" + ;; + absent) + echo pacman "$globalopts" remove \"$name\" + ;; + *) + echo "Unknown state: $state_should" >&2 + exit 1 + ;; +esac diff --git a/conf/type/__package_zypper/man.text b/conf/type/__package_zypper/man.text new file mode 100644 index 00000000..9cff9706 --- /dev/null +++ b/conf/type/__package_zypper/man.text @@ -0,0 +1,52 @@ +cdist-type__package_zypper(7) +============================= +Nico Schottelius + + +NAME +---- +cdist-type__package_zypper - Manage packages with zypper + + +DESCRIPTION +----------- +Zypper is usually used on the SuSE distribution to manage packages. + + +REQUIRED PARAMETERS +------------------- +state:: + The state the package should be in, either "present" or "absent" + + +OPTIONAL PARAMETERS +------------------- +name:: + If supplied, use the name and not the object id as the package name. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Ensure zsh in installed +__package_zypper zsh --state present + +# If you don't want to follow pythonX packages, but always use python +__package_zypper python --state present --name python2 + +# Remove package +__package_zypper cfengine --state absent +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) +- cdist-type__package(7) + + +COPYING +------- +Copyright \(C) 2012 Nico Schottelius. 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_zypper/parameter/optional b/conf/type/__package_zypper/parameter/optional new file mode 100644 index 00000000..f121bdbf --- /dev/null +++ b/conf/type/__package_zypper/parameter/optional @@ -0,0 +1 @@ +name diff --git a/conf/type/__package_zypper/parameter/required b/conf/type/__package_zypper/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__package_zypper/parameter/required @@ -0,0 +1 @@ +state diff --git a/conf/type/__start_on_boot/explorer/state b/conf/type/__start_on_boot/explorer/state index bf24738a..6fd0ea92 100755 --- a/conf/type/__start_on_boot/explorer/state +++ b/conf/type/__start_on_boot/explorer/state @@ -49,7 +49,7 @@ case "$os" in [ -f "/etc/rc$runlevel.d/S"??"$name" ] || state="absent" ;; - amazon|centos|fedora|owl|redhat) + amazon|centos|fedora|owl|redhat|suse) state=$(chkconfig --level "$runlevel" "$name" || echo absent) [ "$state" ] || state="present" ;; diff --git a/conf/type/__start_on_boot/gencode-remote b/conf/type/__start_on_boot/gencode-remote index 7bb69ff5..7724e8c7 100755 --- a/conf/type/__start_on_boot/gencode-remote +++ b/conf/type/__start_on_boot/gencode-remote @@ -44,7 +44,7 @@ case "$state_should" in # echo rc-update add \"$name\" default # ;; - amazon|centos|fedora|owl|redhat) + amazon|centos|fedora|owl|redhat|suse) echo chkconfig \"$name\" on ;; @@ -79,7 +79,7 @@ case "$state_should" in # echo rc-update del \"$name\" # ;; - centos|fedora|owl|redhat) + centos|fedora|owl|redhat|suse) echo chkconfig \"$name\" off ;;