From fd6b90a7364a7f60bf30519bbb0cef1cb43f223b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Catalinas=20Jim=C3=A9nez?= Date: Sun, 21 Sep 2014 17:02:01 +0100 Subject: [PATCH 1/6] Cosmetic --- cdist/conf/type/__apt_update_index/man.text | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__apt_update_index/man.text b/cdist/conf/type/__apt_update_index/man.text index 778af508..628292dc 100644 --- a/cdist/conf/type/__apt_update_index/man.text +++ b/cdist/conf/type/__apt_update_index/man.text @@ -5,7 +5,7 @@ Steven Armstrong NAME ---- -cdist-type__apt_update_index - update apt's package index +cdist-type__apt_update_index - Update apt's package index DESCRIPTION From ff880b4287832da009aaf5648a7543e8df7374cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Catalinas=20Jim=C3=A9nez?= Date: Sun, 21 Sep 2014 17:02:26 +0100 Subject: [PATCH 2/6] Fix comment --- cdist/conf/type/__package/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__package/manifest b/cdist/conf/type/__package/manifest index 3e8928c0..25e43b30 100755 --- a/cdist/conf/type/__package/manifest +++ b/cdist/conf/type/__package/manifest @@ -19,7 +19,7 @@ # # # __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. # From e1c45e11fc7f1cafd4493b4bb540a50fca4e14b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Catalinas=20Jim=C3=A9nez?= Date: Sun, 21 Sep 2014 17:02:56 +0100 Subject: [PATCH 3/6] Fix style typos in type's doc --- docs/man/man7/cdist-type.text | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/man/man7/cdist-type.text b/docs/man/man7/cdist-type.text index 323fc130..71d04ab3 100644 --- a/docs/man/man7/cdist-type.text +++ b/docs/man/man7/cdist-type.text @@ -100,7 +100,7 @@ echo use_ssl >> cdist/conf/type/__nginx_vhost/parameter/boolean USING PARAMETERS ---------------- 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, 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. 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). cdist will not touch this directory. From 9184c310f21ff94c3f3ccac2e5876bc88e4946f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Catalinas=20Jim=C3=A9nez?= Date: Sun, 21 Sep 2014 17:26:31 +0100 Subject: [PATCH 4/6] Fix formatting of manifest doc --- docs/man/man7/cdist-manifest.text | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/man/man7/cdist-manifest.text b/docs/man/man7/cdist-manifest.text index 96346c08..73e480ea 100644 --- a/docs/man/man7/cdist-manifest.text +++ b/docs/man/man7/cdist-manifest.text @@ -110,6 +110,7 @@ setup the variable "require" to contain the requirements. Multiple requirements can be added white space separated. -------------------------------------------------------------------------------- + 1 # No dependency 2 __file /etc/cdist-configured 3 @@ -121,19 +122,18 @@ requirements can be added white space separated. 9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \ 10 __file /tmp/cdist-another-testfile - -------------------------------------------------------------------------------- Above the "require" variable is only set for the command that is immediately following it. Dependencies should allways 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. -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 +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 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). All objects that are created in a type manifest are automatically required From 3e7c804fe5c755285046b40ce9d3965bbf095e79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Catalinas=20Jim=C3=A9nez?= Date: Sun, 21 Sep 2014 17:59:38 +0100 Subject: [PATCH 5/6] Explain in the doc how to create a global dependency --- docs/man/man7/cdist-manifest.text | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/man/man7/cdist-manifest.text b/docs/man/man7/cdist-manifest.text index 73e480ea..80df5410 100644 --- a/docs/man/man7/cdist-manifest.text +++ b/docs/man/man7/cdist-manifest.text @@ -125,7 +125,7 @@ requirements can be added white space separated. -------------------------------------------------------------------------------- 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 the object "__file/etc/cdist-configured" to be present, before it can proceed. @@ -136,6 +136,29 @@ 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 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 from the type that is calling them. This is called "autorequirement" in cdist jargon. From 81bd4c33380b7ce63df05614098e44ffeacbcfb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Catalinas=20Jim=C3=A9nez?= Date: Sun, 21 Sep 2014 17:01:15 +0100 Subject: [PATCH 6/6] Add types __package_{update_index,upgrade_all} --- .../__package_update_index/gencode-remote | 49 +++++++++++++++ .../conf/type/__package_update_index/man.text | 52 ++++++++++++++++ .../__package_update_index/parameter/optional | 1 + .../type/__package_update_index/singleton | 0 .../type/__package_upgrade_all/gencode-remote | 59 +++++++++++++++++++ .../conf/type/__package_upgrade_all/man.text | 52 ++++++++++++++++ .../__package_upgrade_all/parameter/optional | 1 + .../conf/type/__package_upgrade_all/singleton | 0 8 files changed, 214 insertions(+) create mode 100755 cdist/conf/type/__package_update_index/gencode-remote create mode 100644 cdist/conf/type/__package_update_index/man.text create mode 100644 cdist/conf/type/__package_update_index/parameter/optional create mode 100644 cdist/conf/type/__package_update_index/singleton create mode 100755 cdist/conf/type/__package_upgrade_all/gencode-remote create mode 100644 cdist/conf/type/__package_upgrade_all/man.text create mode 100644 cdist/conf/type/__package_upgrade_all/parameter/optional create mode 100644 cdist/conf/type/__package_upgrade_all/singleton diff --git a/cdist/conf/type/__package_update_index/gencode-remote b/cdist/conf/type/__package_update_index/gencode-remote new file mode 100755 index 00000000..a120121d --- /dev/null +++ b/cdist/conf/type/__package_update_index/gencode-remote @@ -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 . +# +# +# 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 diff --git a/cdist/conf/type/__package_update_index/man.text b/cdist/conf/type/__package_update_index/man.text new file mode 100644 index 00000000..6435e51d --- /dev/null +++ b/cdist/conf/type/__package_update_index/man.text @@ -0,0 +1,52 @@ +cdist-type__package_update_index(7) +=================================== +Ricardo Catalinas Jiménez + + +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). diff --git a/cdist/conf/type/__package_update_index/parameter/optional b/cdist/conf/type/__package_update_index/parameter/optional new file mode 100644 index 00000000..aa80e646 --- /dev/null +++ b/cdist/conf/type/__package_update_index/parameter/optional @@ -0,0 +1 @@ +type diff --git a/cdist/conf/type/__package_update_index/singleton b/cdist/conf/type/__package_update_index/singleton new file mode 100644 index 00000000..e69de29b diff --git a/cdist/conf/type/__package_upgrade_all/gencode-remote b/cdist/conf/type/__package_upgrade_all/gencode-remote new file mode 100755 index 00000000..09404af9 --- /dev/null +++ b/cdist/conf/type/__package_upgrade_all/gencode-remote @@ -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 . +# +# +# 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 diff --git a/cdist/conf/type/__package_upgrade_all/man.text b/cdist/conf/type/__package_upgrade_all/man.text new file mode 100644 index 00000000..6d3e1338 --- /dev/null +++ b/cdist/conf/type/__package_upgrade_all/man.text @@ -0,0 +1,52 @@ +cdist-type__package_upgrade_all(7) +================================== +Ricardo Catalinas Jiménez + + +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). diff --git a/cdist/conf/type/__package_upgrade_all/parameter/optional b/cdist/conf/type/__package_upgrade_all/parameter/optional new file mode 100644 index 00000000..aa80e646 --- /dev/null +++ b/cdist/conf/type/__package_upgrade_all/parameter/optional @@ -0,0 +1 @@ +type diff --git a/cdist/conf/type/__package_upgrade_all/singleton b/cdist/conf/type/__package_upgrade_all/singleton new file mode 100644 index 00000000..e69de29b