Merge branch 'type-upgrade-packages' of https://github.com/jimenezrick/cdist

This commit is contained in:
Nico Schottelius 2014-10-01 15:27:09 +02:00
commit 1d67aef811
12 changed files with 247 additions and 10 deletions

View file

@ -5,7 +5,7 @@ Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME NAME
---- ----
cdist-type__apt_update_index - update apt's package index cdist-type__apt_update_index - Update apt's package index
DESCRIPTION DESCRIPTION

View file

@ -19,7 +19,7 @@
# #
# #
# __package is an abstract type which dispatches to the lower level # __package is an abstract type which dispatches to the lower level
# __package_$name types which do the actual interaction with the packaging # __package_$type types which do the actual interaction with the packaging
# system. # system.
# #

View file

@ -0,0 +1,49 @@
#!/bin/sh
#
# 2014 Ricardo Catalinas Jiménez (jimenezrick at gmail.com)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Update the package index with the appropriate package manager
#
type="$__object/parameter/type"
if [ -f "$type" ]; then
type="$(cat "$type")"
else
# By default determine package manager based on operating system
os="$(cat "$__global/explorer/os")"
case "$os" in
amazon|centos|fedora|redhat) type="yum" ;;
debian|ubuntu) type="apt" ;;
archlinux) type="pacman" ;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1
;;
esac
fi
case "$type" in
yum) ;;
apt) echo "apt-get update" ;;
pacman) echo "pacman --sync --refresh" ;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1
;;
esac

View file

@ -0,0 +1,52 @@
cdist-type__package_update_index(7)
===================================
Ricardo Catalinas Jiménez <jimenezrick--@--gmail.com>
NAME
----
cdist-type__package_update_index - Update the package index
DESCRIPTION
-----------
This cdist type allows you to update the package index on the target.
It will automatically use the appropriate package manager.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
type::
The package manager to use. Default is determined based on the $os
explorer variable.
e.g. apt for Debian
yum for Red Hat
pacman for Arch Linux
EXAMPLES
--------
--------------------------------------------------------------------------------
# Update the package index on the target
__package_update_index
# Force use of a specific package manager
__package_update_index --type apt
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
COPYING
-------
Copyright \(C) 2014 Ricardo Catalinas Jiménez. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1 @@
type

View file

@ -0,0 +1,59 @@
#!/bin/sh
#
# 2014 Ricardo Catalinas Jiménez (jimenezrick at gmail.com)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Upgrade all the already installed packages with the appropriate package
# manager
#
type="$__object/parameter/type"
if [ -f "$type" ]; then
type="$(cat "$type")"
else
# By default determine package manager based on operating system
os="$(cat "$__global/explorer/os")"
case "$os" in
amazon|centos|fedora|redhat) type="yum" ;;
debian|ubuntu) type="apt" ;;
archlinux) type="pacman" ;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1
;;
esac
fi
case "$type" in
yum)
echo "yum --assumeyes update"
echo "yum clean all"
;;
apt)
echo "apt-get --yes dist-upgrade"
echo "apt-get autoclean"
;;
pacman)
echo "pacman --noconfirm --sync --sysupgrade"
echo "pacman --noconfirm --sync --clean"
;;
*)
echo "Don't know how to manage packages on: $os" >&2
exit 1
;;
esac

View file

@ -0,0 +1,52 @@
cdist-type__package_upgrade_all(7)
==================================
Ricardo Catalinas Jiménez <jimenezrick--@--gmail.com>
NAME
----
cdist-type__package_upgrade_all - Upgrade all the installed packages
DESCRIPTION
-----------
This cdist type allows you to upgrade all the installed packages on the
target. It will automatically use the appropriate package manager.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
type::
The package manager to use. Default is determined based on the $os
explorer variable.
e.g. apt for Debian
yum for Red Hat
pacman for Arch Linux
EXAMPLES
--------
--------------------------------------------------------------------------------
# Upgrade all the installed packages on the target
__package_upgrade_all
# Force use of a specific package manager
__package_upgrade_all --type apt
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
COPYING
-------
Copyright \(C) 2014 Ricardo Catalinas Jiménez. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1 @@
type

View file

@ -110,6 +110,7 @@ setup the variable "require" to contain the requirements. Multiple
requirements can be added white space separated. requirements can be added white space separated.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
1 # No dependency 1 # No dependency
2 __file /etc/cdist-configured 2 __file /etc/cdist-configured
3 3
@ -121,21 +122,43 @@ requirements can be added white space separated.
9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \ 9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \
10 __file /tmp/cdist-another-testfile 10 __file /tmp/cdist-another-testfile
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Above the "require" variable is only set for the command that is Above the "require" variable is only set for the command that is
immediately following it. Dependencies should allways be declared that way. immediately following it. Dependencies should always be declared that way.
On line 4 you can see that the instantion of a type "__link" object needs On line 4 you can see that the instantion of a type "\__link" object needs
the object "__file/etc/cdist-configured" to be present, before it can proceed. the object "__file/etc/cdist-configured" to be present, before it can proceed.
This also means that the "__link" command must make sure, that either This also means that the "\__link" command must make sure, that either
"__file/etc/cdist-configured" allready is present, or, if it's not, it needs "\__file/etc/cdist-configured" allready is present, or, if it's not, it needs
to be created. The task of cdist is to make sure, that the dependency will be to be created. The task of cdist is to make sure, that the dependency will be
resolved appropriately and thus "__file/etc/cdist-configured" be created resolved appropriately and thus "\__file/etc/cdist-configured" be created
if necessary before "__link" proceeds (or to abort execution with an error). if necessary before "__link" proceeds (or to abort execution with an error).
If you really need to make all types depend on a common dependency, you can
export the "require" variable as well. But then, if you need to add extra
dependencies to a specific type, you have to make sure that you append these
to the globally already defined one.
--------------------------------------------------------------------------------
# First of all, update the package index
__package_update_index
# Upgrade all the installed packages afterwards
require="__package_update_index" __package_upgrade_all
# Create a common dependency for all the next types so that they get to
# be executed only after the package upgrade has finished
export require="__package_upgrade_all"
# Ensure that lighttpd is installed after we have upgraded all the packages
__package lighttpd --state present
# Ensure that munin is installed after lighttpd is present and after all
# the packages are upgraded
require="$require __package/lighttpd" __package munin --state present
--------------------------------------------------------------------------------
All objects that are created in a type manifest are automatically required All objects that are created in a type manifest are automatically required
from the type that is calling them. This is called "autorequirement" in from the type that is calling them. This is called "autorequirement" in
cdist jargon. cdist jargon.

View file

@ -100,7 +100,7 @@ echo use_ssl >> cdist/conf/type/__nginx_vhost/parameter/boolean
USING PARAMETERS USING PARAMETERS
---------------- ----------------
The parameters given to a type can be accessed and used in all type scripts The parameters given to a type can be accessed and used in all type scripts
(e.g manifest, gencode-*, explorer/*). Note that boolean parameters are (e.g manifest, gencode, explorer). Note that boolean parameters are
represented by file existence. File exists -> True, represented by file existence. File exists -> True,
file does not exist -> False file does not exist -> False
@ -281,7 +281,7 @@ on the target, there must be another type that provides this tool and the first
type should create an object of the specific type. type should create an object of the specific type.
If your type wants to save temporary data, that may be used by other types If your type wants to save temporary data, that may be used by other types
later on (for instance __file), you can save them in the subdirectory later on (for instance \__file), you can save them in the subdirectory
"files" below $__object (but you must create it yourself). "files" below $__object (but you must create it yourself).
cdist will not touch this directory. cdist will not touch this directory.