From b29a52db1a954249cae052ff80c1df6cf3d56f80 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 09:37:01 +0100
Subject: [PATCH 01/93] Initial add vom type __zypper_repo

---
 .../type/__zypper_repo/explorer/all_repo_ids  |  3 +
 .../__zypper_repo/explorer/enabled_repo_ids   |  3 +
 .../conf/type/__zypper_repo/explorer/repo_id  |  8 ++
 cdist/conf/type/__zypper_repo/gencode-remote  | 94 +++++++++++++++++++
 cdist/conf/type/__zypper_repo/man.text        | 68 ++++++++++++++
 .../__zypper_repo/parameter/default/state     |  1 +
 .../type/__zypper_repo/parameter/optional     |  4 +
 docs/man/man7/.directory                      |  4 +
 8 files changed, 185 insertions(+)
 create mode 100644 cdist/conf/type/__zypper_repo/explorer/all_repo_ids
 create mode 100644 cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
 create mode 100644 cdist/conf/type/__zypper_repo/explorer/repo_id
 create mode 100644 cdist/conf/type/__zypper_repo/gencode-remote
 create mode 100644 cdist/conf/type/__zypper_repo/man.text
 create mode 100644 cdist/conf/type/__zypper_repo/parameter/default/state
 create mode 100644 cdist/conf/type/__zypper_repo/parameter/optional
 create mode 100644 docs/man/man7/.directory

diff --git a/cdist/conf/type/__zypper_repo/explorer/all_repo_ids b/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
new file mode 100644
index 00000000..e1772956
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
@@ -0,0 +1,3 @@
+#!/bin/sh
+#
+echo $(zypper lr -u  | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
new file mode 100644
index 00000000..6ece6e05
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
@@ -0,0 +1,3 @@
+#!/bin/sh
+#
+echo $(zypper lr -E | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_repo/explorer/repo_id b/cdist/conf/type/__zypper_repo/explorer/repo_id
new file mode 100644
index 00000000..aa1e5f99
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/explorer/repo_id
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+if [ -f "$__object/parameter/repo_uri" ]; then
+   uri="$(cat "$__object/parameter/repo_uri")"
+else
+   uri="/$__object_id"
+fi
+echo $(zypper lr -u | grep -E "\<$uri\>" | cut -d'|' -f 1 | grep -E '^[0-9]' )
diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
new file mode 100644
index 00000000..b56518c9
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage repo services with Zypper (mostly suse)
+#
+
+# Debug
+#exec >&2
+#set -x
+
+zypper_def_opts=" -q "
+
+if [ -f "$__object/parameter/repo_desc" ]; then
+   desc="$(cat "$__object/parameter/repo_desc")"
+else
+   desc="$__object_id"
+fi
+
+if [ -f "$__object/parameter/repo_uri" ]; then
+   uri="$(cat "$__object/parameter/repo_uri")"
+else
+   uri="$__object_id"
+fi
+
+if [ -f "$__object/parameter/repo_id" ]; then
+   id="$(cat "$__object/parameter/repo_id")"
+else
+   id="$__object_id"
+fi
+
+if [ -f "$__object/parameter/state" ]; then
+   state="$(cat "$__object/parameter/state")"
+else
+   state="present"
+fi
+
+all_repo_ids="$(cat "$__object/explorer/all_repo_ids")"
+enabled_repo_ids="$(cat "$__object/explorer/enabled_repo_ids")"
+repo_id="$(cat "$__object/explorer/repo_id")"
+
+act_id=""
+if grep -q $id $__object/explorer/all_repo_ids; then
+    act_id="$id"
+elif grep -q $repo_id $__object/explorer/all_repo_ids; then
+    act_id="$repo_id" 
+fi
+
+case "$state" in
+   present)
+         if [ -z "$desc" ] || [ -z "$uri" ]; then
+	    echo "parameter repo_desc and repo_uri for $state needed" >&2
+	    exit 4
+	 fi
+         if [ -z "$repo_id" ]; then
+	     echo zypper $zypper_def_opts addrepo "'$uri'" "'$desc'"
+	 fi
+   ;;
+   absent)
+         if [ ! -z "$act_id" ]; then
+             echo zypper $zypper_def_opts removerepo $act_id
+	 fi
+   ;;
+   enabled)
+         if [ ! -z "$act_id" ]; then
+             echo zypper $zypper_def_opts modifyrepo -e $act_id
+	 fi
+   ;;
+   disabled)
+         if [ ! -z "$act_id" ]; then
+             echo zypper $zypper_def_opts modifyrepo -d $act_id
+	 fi
+   ;;
+   *)
+      echo "Unknown state: $state" >&2
+      exit 1
+   ;;
+esac
diff --git a/cdist/conf/type/__zypper_repo/man.text b/cdist/conf/type/__zypper_repo/man.text
new file mode 100644
index 00000000..c5d23713
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/man.text
@@ -0,0 +1,68 @@
+cdist-type__zypper_repo(7)
+==========================
+Daniel Heule <hda--@--sfs.biz>
+
+
+NAME
+----
+cdist-type__zypper_repo - repository management with zypper
+
+
+DESCRIPTION
+-----------
+Zypper is usually used on the SuSE distribution to manage repositorys.
+
+
+REQUIRED PARAMETERS
+-------------------
+None
+
+
+OPTIONAL PARAMETERS
+-------------------
+state::
+    Either "present" or "absent" or "enabled" or "disabled", defaults to "present"
+
+repo_uri::
+    If supplied, use the uri and not the object id as the repo uri.
+
+repo_desc::
+    If supplied, use the description and not the object id as the repo description, only used for state present if the repo must created
+
+repo_id::
+    If supplied, use the id and not the object id as the repo id, can be used for with states absent,enabled,disabled
+
+
+EXAMPLES
+--------
+
+--------------------------------------------------------------------------------
+# Ensure testrepo in installed
+__zypper_repo testrepo --state present --repo_uri http://url.to.your.repo/with/path
+
+# Drop repo by repo uri
+__zypper_repo testrepo --state absent --repo_uri http://url.to.your.repo/with/path
+
+# Drop repo by id nummber, attention: on every call to absent, repos are new numbered from 1 to max 
+__zypper_repo testrepo --state absent --repo_id 1
+
+# enable repo by id
+__zypper_repo testrepo2 --state enabled --repo_id 2
+
+# enable repo by uri
+__zypper_repo testrepo3 --state enabled --repo_uri http://url.to.your.repo/with/path
+
+# disable a repo works like enabling
+__zypper_repo testrepo4 --state disabled --repo_id 4
+--------------------------------------------------------------------------------
+
+
+SEE ALSO
+--------
+- cdist-type(7)
+
+
+COPYING
+-------
+Copyright \(C) 2013 Daniel Heule. 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/__zypper_repo/parameter/default/state b/cdist/conf/type/__zypper_repo/parameter/default/state
new file mode 100644
index 00000000..e7f6134f
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/parameter/default/state
@@ -0,0 +1 @@
+present
diff --git a/cdist/conf/type/__zypper_repo/parameter/optional b/cdist/conf/type/__zypper_repo/parameter/optional
new file mode 100644
index 00000000..6f5a8325
--- /dev/null
+++ b/cdist/conf/type/__zypper_repo/parameter/optional
@@ -0,0 +1,4 @@
+state
+repo_uri
+repo_desc
+repo_id
diff --git a/docs/man/man7/.directory b/docs/man/man7/.directory
new file mode 100644
index 00000000..e2ac7573
--- /dev/null
+++ b/docs/man/man7/.directory
@@ -0,0 +1,4 @@
+[Dolphin]
+Timestamp=2013,12,4,9,33,47
+Version=3
+ViewMode=2

From 19219fe1f96b30ed5c8a38f40d3a2e63b7c4466a Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 09:44:45 +0100
Subject: [PATCH 02/93] An allen orten correcte gpl headers eingesetzt ...

---
 .../type/__zypper_repo/explorer/all_repo_ids  | 23 ++++++++++++++++++-
 .../__zypper_repo/explorer/enabled_repo_ids   | 21 +++++++++++++++++
 .../conf/type/__zypper_repo/explorer/repo_id  | 21 +++++++++++++++++
 3 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/cdist/conf/type/__zypper_repo/explorer/all_repo_ids b/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
index e1772956..b37d8ac5 100644
--- a/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
+++ b/cdist/conf/type/__zypper_repo/explorer/all_repo_ids
@@ -1,3 +1,24 @@
 #!/bin/sh
 #
-echo $(zypper lr -u  | cut -d'|' -f 1 | grep -E '^[0-9]')
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Retrieve all repo id nummbers - parsed zypper output
+#
+#
+echo $(zypper lr | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
index 6ece6e05..a0d092b1 100644
--- a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
+++ b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
@@ -1,3 +1,24 @@
 #!/bin/sh
 #
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Retrieve all repo id nummbers from enabled repos - parsed zypper output
+#
+#
 echo $(zypper lr -E | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_repo/explorer/repo_id b/cdist/conf/type/__zypper_repo/explorer/repo_id
index aa1e5f99..8184860d 100644
--- a/cdist/conf/type/__zypper_repo/explorer/repo_id
+++ b/cdist/conf/type/__zypper_repo/explorer/repo_id
@@ -1,5 +1,26 @@
 #!/bin/sh
 #
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Retrieve the id from the repo with the uri from parameter repo_uri  - parsed zypper output
+#
+#
 if [ -f "$__object/parameter/repo_uri" ]; then
    uri="$(cat "$__object/parameter/repo_uri")"
 else

From b5a0c52684eb82d12c31ab8d5887695cb640b78e Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 10:15:24 +0100
Subject: [PATCH 03/93] =?UTF-8?q?aus=20versehen=20eine=20.direcotry=20date?=
 =?UTF-8?q?i=20vom=20dolphin=20eingecheckt,=20nun=20wieder=20gel=C3=B6scht?=
 =?UTF-8?q?=20...?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 docs/man/man7/.directory | 4 ----
 1 file changed, 4 deletions(-)
 delete mode 100644 docs/man/man7/.directory

diff --git a/docs/man/man7/.directory b/docs/man/man7/.directory
deleted file mode 100644
index e2ac7573..00000000
--- a/docs/man/man7/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2013,12,4,9,33,47
-Version=3
-ViewMode=2

From 6a68c14a7632db061e7fe18d80e78ce9e0e531da Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 10:56:45 +0100
Subject: [PATCH 04/93] letzter feinschliff bei der man page ...

---
 cdist/conf/type/__zypper_repo/man.text | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/man.text b/cdist/conf/type/__zypper_repo/man.text
index c5d23713..4f2de508 100644
--- a/cdist/conf/type/__zypper_repo/man.text
+++ b/cdist/conf/type/__zypper_repo/man.text
@@ -10,7 +10,7 @@ cdist-type__zypper_repo - repository management with zypper
 
 DESCRIPTION
 -----------
-Zypper is usually used on the SuSE distribution to manage repositorys.
+zypper is usually used on the SuSE distribution to manage repositories.
 
 
 REQUIRED PARAMETERS
@@ -24,13 +24,13 @@ state::
     Either "present" or "absent" or "enabled" or "disabled", defaults to "present"
 
 repo_uri::
-    If supplied, use the uri and not the object id as the repo uri.
+    If supplied, use the uri and not the object id as repo uri.
 
 repo_desc::
-    If supplied, use the description and not the object id as the repo description, only used for state present if the repo must created
+    If supplied, use the description and not the object id as repo description, only used if the state is present and the repo has to be created
 
 repo_id::
-    If supplied, use the id and not the object id as the repo id, can be used for with states absent,enabled,disabled
+    If supplied, use the id and not the object id as repo id, can be used with state absent, enabled and disabled
 
 
 EXAMPLES
@@ -43,7 +43,7 @@ __zypper_repo testrepo --state present --repo_uri http://url.to.your.repo/with/p
 # Drop repo by repo uri
 __zypper_repo testrepo --state absent --repo_uri http://url.to.your.repo/with/path
 
-# Drop repo by id nummber, attention: on every call to absent, repos are new numbered from 1 to max 
+# Drop repo by id number (attention: repos are always numbered from 1 to max)
 __zypper_repo testrepo --state absent --repo_id 1
 
 # enable repo by id
@@ -52,7 +52,7 @@ __zypper_repo testrepo2 --state enabled --repo_id 2
 # enable repo by uri
 __zypper_repo testrepo3 --state enabled --repo_uri http://url.to.your.repo/with/path
 
-# disable a repo works like enabling
+# disable a repo works like enabling it
 __zypper_repo testrepo4 --state disabled --repo_id 4
 --------------------------------------------------------------------------------
 

From 808ea306347ae98f122dc453e9d4e416b166ad12 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 14:50:11 +0100
Subject: [PATCH 05/93] Korrektur der intention, vim hat mich verschaukelt ...

---
 cdist/conf/type/__zypper_repo/gencode-remote | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index b56518c9..c2302662 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -65,27 +65,27 @@ fi
 case "$state" in
    present)
          if [ -z "$desc" ] || [ -z "$uri" ]; then
-	    echo "parameter repo_desc and repo_uri for $state needed" >&2
-	    exit 4
-	 fi
+             echo "parameter repo_desc and repo_uri for $state needed" >&2
+             exit 4
+         fi
          if [ -z "$repo_id" ]; then
-	     echo zypper $zypper_def_opts addrepo "'$uri'" "'$desc'"
-	 fi
+             echo zypper $zypper_def_opts addrepo "'$uri'" "'$desc'"
+         fi
    ;;
    absent)
          if [ ! -z "$act_id" ]; then
              echo zypper $zypper_def_opts removerepo $act_id
-	 fi
+         fi
    ;;
    enabled)
          if [ ! -z "$act_id" ]; then
              echo zypper $zypper_def_opts modifyrepo -e $act_id
-	 fi
+         fi
    ;;
    disabled)
          if [ ! -z "$act_id" ]; then
              echo zypper $zypper_def_opts modifyrepo -d $act_id
-	 fi
+         fi
    ;;
    *)
       echo "Unknown state: $state" >&2

From ea33b093f0e4c9f2c97a76d7e628937afe71012f Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 14:58:15 +0100
Subject: [PATCH 06/93] cleanup of variable quoting

---
 cdist/conf/type/__zypper_repo/gencode-remote | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index c2302662..83b05dd0 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -56,9 +56,9 @@ enabled_repo_ids="$(cat "$__object/explorer/enabled_repo_ids")"
 repo_id="$(cat "$__object/explorer/repo_id")"
 
 act_id=""
-if grep -q $id $__object/explorer/all_repo_ids; then
+if grep -q "$id" "$__object/explorer/all_repo_ids"; then
     act_id="$id"
-elif grep -q $repo_id $__object/explorer/all_repo_ids; then
+elif grep -q "$repo_id" "$__object/explorer/all_repo_ids"; then
     act_id="$repo_id" 
 fi
 
@@ -74,17 +74,17 @@ case "$state" in
    ;;
    absent)
          if [ ! -z "$act_id" ]; then
-             echo zypper $zypper_def_opts removerepo $act_id
+             echo zypper $zypper_def_opts removerepo "'$act_id'"
          fi
    ;;
    enabled)
          if [ ! -z "$act_id" ]; then
-             echo zypper $zypper_def_opts modifyrepo -e $act_id
+             echo zypper $zypper_def_opts modifyrepo -e "'$act_id'"
          fi
    ;;
    disabled)
          if [ ! -z "$act_id" ]; then
-             echo zypper $zypper_def_opts modifyrepo -d $act_id
+             echo zypper $zypper_def_opts modifyrepo -d "'$act_id'"
          fi
    ;;
    *)

From 71f5709fca00b4e0844ca200e3454c79017c8cb3 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 4 Dec 2013 15:15:21 +0100
Subject: [PATCH 07/93] add old workflow example

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/dev/logs/2011-11-17.workflow-example.dia | Bin 0 -> 1343 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 docs/dev/logs/2011-11-17.workflow-example.dia

diff --git a/docs/dev/logs/2011-11-17.workflow-example.dia b/docs/dev/logs/2011-11-17.workflow-example.dia
new file mode 100644
index 0000000000000000000000000000000000000000..7a9cd0f7078452472ccfa26b0dc3f6a66b8d8d84
GIT binary patch
literal 1343
zcmV-F1;F|riwFP!000021MON_kJ~m7e&1gqXn~+DytFRr$i^F_DT+QMNPsra1})Jt
z8%i=L%DaB)Z!dLtZCySj%V-K2*abw5<{OUY_{Q|R_b&mJHkidE3TLtk6j{Qd8+j!3
zXY#kdet)p#_fL24Jc8beKcAsM5>JG2dNq?*oUh+br_ayNfNo>NBL*l*K#ZsVAWG3x
z2u<auJ4rfJ;31CEwPF=<&d4I+SPD^qXYvBM-+dM(p(p23g`6AFh)EknXY&0r`^eKm
z&9tQFi0(D=@q%IWy<N2;K918x^%}FP+F%{UM2PV1x+c=1C;fjQQ%J=^DD<E1KN$D9
zNyWlmSCgTwAUr_KCt)2&_=e_=(15LJns5emY)7#SOWpb8a=689;plDQ*lpoRJYPqQ
zGemeDauG!oqcBJ1EWzDzVi!>nV#l`CV;4)pd33`5C8F^;8_1Vmv+dH%^%?PwCvHii
zMawhs_-g(#kh^m2+kv!iNK6(KH(5_Yel_*m>!`23oveEAAMY6rxwh8!;Mo{rczJv9
z6XN0cM3|LjS~RT+vFRzVSLM!iOukfU))@pvTg(dezwX<#RJ`D#;z-ElWV5?E@JY1z
z8@s&N?6=RKqzCDPD>#F^Cm@1;5N{@bQOcgG?oDVCMX=_ob@Uof7H}peP+)cY_2SW{
zf3c{lXTo|E`V{97CeWa&!HEv^M+ZQ|w&27Db~nTTb0nV#bdR{an|4fbFn1#s*7?VQ
z&rD!uyMaAGvO-mN+`bX^QNF^&U-5SB5a>?n(-BPcJ$z~>3Q(2uN9_TYmY9Uq1E9=H
z6{Q=*l2CdEM444z2Ep+QKNY_fnKs^$G24<{g#`bGH<(6(OSf?0BMqd@K~cz?5Yu&O
zi2_2m!Y~xZvJ~@eTIocg${+m$(+%dtMTZ6Xatmsq-57FqCFG2Lpyd+URz_`6+h9MS
za#KAs!n*(o%Ib#!Zho6MOo9fsag1*?wam7*Ki&7Zwx;)|=pP<pp6Gm^MA|nrKDBS-
zOFNNeI}-??2{moN{^tP0hPIY<4AXd2O#m&$6u_ot>D_SMC=BN~^s@bQ+GSl-*kzcy
zF3g0wVs|u5M2@?z+S5c{FY0NbH%E*`&sD|yK<)YhUsca34*lbO4EBXM*(uLNNZ-B)
zF_8~(t&{BTNGp*+MFHkf#uTOf-I;9HLZRVVwRl!*eRh}l6@$*n@toLx$(9-tT<e?Q
zDg*|csKB&UXb+g)DNYKb3z$bu2acVkP-oEp0>iz6@6KVlwy2D4efsL8SFN%F{Rbeu
zDHR-;^p3pxQeORw^ijNOj;9|*q4aTD8<)f%N%qhrTXlfxOf+CwCbUPQeTrze#y4g-
zN;9IGFT40|jO2^z@k`7_ehj8RzrIzvkBL2WVk;Bn|CP?l?b4aV^Za|{YC0S{BD$zv
zti<S&FUCV*1PSG2P5bZR3WJB<d+-ngK7<ofOacQ>9s)?ofU?;`Pg$oXXuAqDT{VB;
z>Ej9xJZJn+bznG_aqvC(fa8Y&v~pF|#_?kuKe~+{Uz2!MOdS%BB%knAvbamvDLq(s
zJrZ+86*uBkKE0Ci%fu`0?xY_!(i_SjIbuHM^Hmh{pW>h2`22AsKSPrrO$WN7+Y=io
z<6JY&HRD_}&Nbs)GtM<b9GV)}I5f3YO;B^)GIVp`LsQ2{fmCS1^w88a3~geGnZVR;
zaA?}N%jQu<H=wXf%n`aV9-5Aarn^H^z3-uEex3c6@aeAfW5cJre*su7_@$6A002!6
Bp3(pS

literal 0
HcmV?d00001


From 54bed4d254c4d99aa2b7b598d2721ab61dda852e Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 4 Dec 2013 15:16:31 +0100
Subject: [PATCH 08/93] add more old workflow examples

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/dev/logs/2011-11-16.workflow-example.dia | Bin 0 -> 1950 bytes
 docs/dev/logs/2011-11-16.workflow-example.png | Bin 0 -> 20490 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 docs/dev/logs/2011-11-16.workflow-example.dia
 create mode 100644 docs/dev/logs/2011-11-16.workflow-example.png

diff --git a/docs/dev/logs/2011-11-16.workflow-example.dia b/docs/dev/logs/2011-11-16.workflow-example.dia
new file mode 100644
index 0000000000000000000000000000000000000000..8dab4a2cc30425f34ba78ef02cff47ee00a89143
GIT binary patch
literal 1950
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

literal 0
HcmV?d00001

diff --git a/docs/dev/logs/2011-11-16.workflow-example.png b/docs/dev/logs/2011-11-16.workflow-example.png
new file mode 100644
index 0000000000000000000000000000000000000000..07a0f12645a58531abd96335cc572aeea49d62ae
GIT binary patch
literal 20490
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

literal 0
HcmV?d00001


From 33a4f07bb40a2406fddeb41e81c734bc3424d45f Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 15:22:48 +0100
Subject: [PATCH 09/93] in der manpage state parameter besser erlaeutert ...
 TODO: howto line breaks in html ?

---
 cdist/conf/type/__zypper_repo/man.text | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/cdist/conf/type/__zypper_repo/man.text b/cdist/conf/type/__zypper_repo/man.text
index 4f2de508..6ea88f16 100644
--- a/cdist/conf/type/__zypper_repo/man.text
+++ b/cdist/conf/type/__zypper_repo/man.text
@@ -21,7 +21,12 @@ None
 OPTIONAL PARAMETERS
 -------------------
 state::
-    Either "present" or "absent" or "enabled" or "disabled", defaults to "present"
+    Either "present" or "absent" or "enabled" or "disabled", defaults to "present" + 
+    #present#  - make sure that the repo is aviable, needs repo_uri and repo_desc + 
+         for all following states, the repo can be searched via repo_id or repo_uri + 
+    #absent#   - drop the repo if found + 
+    #enabled#  - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo + 
+    #disabled# - instead of absent (drop), a repo can also set to disabled, wich makes it inaccessible + 
 
 repo_uri::
     If supplied, use the uri and not the object id as repo uri.

From a37c48ed439ba90c2bc59dcd3c4b9cf37f4e3433 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 15:24:18 +0100
Subject: [PATCH 10/93] bei dem repo_id eine kleine verschoenerung

---
 cdist/conf/type/__zypper_repo/explorer/repo_id | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cdist/conf/type/__zypper_repo/explorer/repo_id b/cdist/conf/type/__zypper_repo/explorer/repo_id
index 8184860d..83a698b7 100644
--- a/cdist/conf/type/__zypper_repo/explorer/repo_id
+++ b/cdist/conf/type/__zypper_repo/explorer/repo_id
@@ -24,6 +24,6 @@
 if [ -f "$__object/parameter/repo_uri" ]; then
    uri="$(cat "$__object/parameter/repo_uri")"
 else
-   uri="/$__object_id"
+   uri="$__object_id"
 fi
 echo $(zypper lr -u | grep -E "\<$uri\>" | cut -d'|' -f 1 | grep -E '^[0-9]' )

From 72bbf932826a94077287cbbdd6cd9985cddddc18 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 4 Dec 2013 15:32:31 +0100
Subject: [PATCH 11/93] korrekte ids, hier werden von zypper keine quotes
 erwartet, da nur zahlen moeglich sind

---
 cdist/conf/type/__zypper_repo/gencode-remote | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index 83b05dd0..efe0a8f5 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -74,17 +74,17 @@ case "$state" in
    ;;
    absent)
          if [ ! -z "$act_id" ]; then
-             echo zypper $zypper_def_opts removerepo "'$act_id'"
+             echo zypper $zypper_def_opts removerepo "$act_id"
          fi
    ;;
    enabled)
          if [ ! -z "$act_id" ]; then
-             echo zypper $zypper_def_opts modifyrepo -e "'$act_id'"
+             echo zypper $zypper_def_opts modifyrepo -e "$act_id"
          fi
    ;;
    disabled)
          if [ ! -z "$act_id" ]; then
-             echo zypper $zypper_def_opts modifyrepo -d "'$act_id'"
+             echo zypper $zypper_def_opts modifyrepo -d "$act_id"
          fi
    ;;
    *)

From 4947b154eecbb5a47add911db0ed35534b327c12 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 4 Dec 2013 21:22:18 +0100
Subject: [PATCH 12/93] update cdist hacker with git workflow

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/man/man7/cdist-hacker.text | 66 ++++++++++++++++++++++++++++++++-
 1 file changed, 64 insertions(+), 2 deletions(-)

diff --git a/docs/man/man7/cdist-hacker.text b/docs/man/man7/cdist-hacker.text
index 9dd52d35..b147808e 100644
--- a/docs/man/man7/cdist-hacker.text
+++ b/docs/man/man7/cdist-hacker.text
@@ -33,7 +33,6 @@ nearby, so grepping for FIXME gives all positions that need to be fixed.
 
 Indention is 4 spaces (welcome to the python world).
 
-
 HOW TO SUBMIT STUFF FOR INCLUSION INTO UPSTREAM CDIST
 -----------------------------------------------------
 If you did some cool changes to cdist, which you value as a benefit for
@@ -75,14 +74,77 @@ code and thus such a type introduces redundant functionality that is given by
 core cdist already.
 
 
+EXAMPLE GIT WORKFLOW
+---------------------
+The following workflow works fine for most developers:
+
+--------------------------------------------------------------------------------
+# get latest upstream master branch
+git clone https://github.com/telmich/cdist.git
+
+# update if already existing
+cd cdist; git fetch -v; git merge origin/master
+
+# create a new branch for your feature/bugfix
+cd cdist # if you haven't done before
+git checkout -b documentation_cleanup
+
+# *hack*
+*hack*
+
+# clone the cdist repository on github if you haven't done so
+
+# configure your repo to know about your clone (only once)
+git remote add github git@github.com:YOURUSERNAME/cdist.git
+
+# push the new branch to github 
+git push github documentation_cleanup
+
+# (or everything)
+git push --mirror github
+
+# create a pull request at github (use a browser)
+# *fixthingsbecausequalityassurancefoundissuesinourpatch*
+*hack*
+
+# push code to github again
+git push ... # like above
+
+# add comment that everything should be green now (use a browser)
+
+# go back to master branch
+git checkout master
+
+# update master branch that includes your changes now
+git fetch -v origin
+git diff master..origin/master
+git merge origin/master
+--------------------------------------------------------------------------------
+
+If at any point you want to go back to the original master branch, you can
+use **git stash** to stash your changes away:
+
+--------------------------------------------------------------------------------
+# assume you are on documentation_cleanup
+git stash
+
+# change to master and update to most recent upstream version
+git checkout master
+git fetch -v origin
+git merge origin/master
+--------------------------------------------------------------------------------
+
 
 
 SEE ALSO
 --------
 - cdist(7)
+- git(1)
+- git-checkout(1)
+- git-stash(1)
 
 
 COPYING
 -------
-Copyright \(C) 2011-2012 Nico Schottelius. Free use of this software is
+Copyright \(C) 2011-2013 Nico Schottelius. Free use of this software is
 granted under the terms of the GNU General Public License version 3 (GPLv3).

From 5f5b9f8cc4a79d9296b234d2c1d66f589c11474f Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 4 Dec 2013 21:25:10 +0100
Subject: [PATCH 13/93] describe how to develop multiple features at the same
 time

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/man/man7/cdist-hacker.text | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/docs/man/man7/cdist-hacker.text b/docs/man/man7/cdist-hacker.text
index b147808e..2cbf5a8b 100644
--- a/docs/man/man7/cdist-hacker.text
+++ b/docs/man/man7/cdist-hacker.text
@@ -134,6 +134,20 @@ git fetch -v origin
 git merge origin/master
 --------------------------------------------------------------------------------
 
+Similar when you want to develop another new feature, you go back
+to the master branch and create another branch based on it:
+
+--------------------------------------------------------------------------------
+# change to master and update to most recent upstream version
+git checkout master
+git fetch -v origin
+git merge origin/master
+
+git checkout -b another_feature
+--------------------------------------------------------------------------------
+
+(you can repeat the code above for as many features as you want to develop
+in parallel)
 
 
 SEE ALSO

From a5fc3f5002bd63f9cd9d8ef3323ff1b86dbcff8b Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 4 Dec 2013 21:29:56 +0100
Subject: [PATCH 14/93] remove changed attribute of an object - was never used
 and will never be used

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 cdist/core/cdist_object.py          | 1 -
 cdist/test/cdist_object/__init__.py | 8 --------
 2 files changed, 9 deletions(-)

diff --git a/cdist/core/cdist_object.py b/cdist/core/cdist_object.py
index e3c1c532..45b5e3ff 100644
--- a/cdist/core/cdist_object.py
+++ b/cdist/core/cdist_object.py
@@ -201,7 +201,6 @@ class CdistObject(object):
     autorequire = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, 'autorequire'))
     parameters = fsproperty.DirectoryDictProperty(lambda obj: os.path.join(obj.base_path, obj.parameter_path))
     explorers = fsproperty.DirectoryDictProperty(lambda obj: os.path.join(obj.base_path, obj.explorer_path))
-    changed = fsproperty.FileBooleanProperty(lambda obj: os.path.join(obj.absolute_path, "changed"))
     state = fsproperty.FileStringProperty(lambda obj: os.path.join(obj.absolute_path, "state"))
     source = fsproperty.FileListProperty(lambda obj: os.path.join(obj.absolute_path, "source"))
     code_local = fsproperty.FileStringProperty(lambda obj: os.path.join(obj.base_path, obj.code_local_path))
diff --git a/cdist/test/cdist_object/__init__.py b/cdist/test/cdist_object/__init__.py
index ffb2ba79..54ecf637 100644
--- a/cdist/test/cdist_object/__init__.py
+++ b/cdist/test/cdist_object/__init__.py
@@ -102,7 +102,6 @@ class ObjectTestCase(test.CdistTestCase):
         self.cdist_object = core.CdistObject(self.cdist_type, object_base_path, 'moon') 
 
     def tearDown(self):
-        self.cdist_object.changed = False
         self.cdist_object.prepared = False
         self.cdist_object.ran = False
         self.cdist_object.source = []
@@ -172,13 +171,6 @@ class ObjectTestCase(test.CdistTestCase):
         expected = []
         self.assertEqual(list(self.cdist_object.requirements), expected)
 
-    def test_changed(self):
-        self.assertFalse(self.cdist_object.changed)
-
-    def test_changed_after_changing(self):
-        self.cdist_object.changed = True
-        self.assertTrue(self.cdist_object.changed)
-
     def test_state(self):
         self.assertEqual(self.cdist_object.state, '')
 

From 87dcc6ed52ff7e1322e22f0887c35aa762e0de77 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 4 Dec 2013 21:30:34 +0100
Subject: [PATCH 15/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 577194bf..87b32175 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -7,6 +7,7 @@ Changelog
 
 3.0.0:
 	* Core: Messaging support added
+	* Core: Removed unused "changed" attribute of objects 
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
 

From e1a2ebab5c4d6727cae37fb829c671c1cd0e7f56 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 5 Dec 2013 08:45:12 +0100
Subject: [PATCH 16/93] gencode-remote gibt nur noch befehle aus wenn was zu
 tun ist ...

---
 cdist/conf/type/__zypper_repo/gencode-remote | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index efe0a8f5..c93ca229 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -51,8 +51,6 @@ else
    state="present"
 fi
 
-all_repo_ids="$(cat "$__object/explorer/all_repo_ids")"
-enabled_repo_ids="$(cat "$__object/explorer/enabled_repo_ids")"
 repo_id="$(cat "$__object/explorer/repo_id")"
 
 act_id=""
@@ -62,6 +60,13 @@ elif grep -q "$repo_id" "$__object/explorer/all_repo_ids"; then
     act_id="$repo_id" 
 fi
 
+if grep -q "$act_id" "$__object/explorer/enabled_repo_ids"; then
+    state="enabled"
+else
+    state="disabled"
+fi
+
+
 case "$state" in
    present)
          if [ -z "$desc" ] || [ -z "$uri" ]; then
@@ -78,12 +83,12 @@ case "$state" in
          fi
    ;;
    enabled)
-         if [ ! -z "$act_id" ]; then
+         if [ ! -z "$act_id" ] && [ "$state" = "disabled" ]; then
              echo zypper $zypper_def_opts modifyrepo -e "$act_id"
          fi
    ;;
    disabled)
-         if [ ! -z "$act_id" ]; then
+         if [ ! -z "$act_id" ] && [ "$state" = "disabled" ]; then
              echo zypper $zypper_def_opts modifyrepo -d "$act_id"
          fi
    ;;

From 512b4100123c649ee4958ba54272e5c3ca055856 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 5 Dec 2013 08:47:57 +0100
Subject: [PATCH 17/93] korrektur eines typos ...

---
 cdist/conf/type/__zypper_repo/gencode-remote | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index c93ca229..e2cc25e5 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -60,10 +60,9 @@ elif grep -q "$repo_id" "$__object/explorer/all_repo_ids"; then
     act_id="$repo_id" 
 fi
 
+state="disabled"
 if grep -q "$act_id" "$__object/explorer/enabled_repo_ids"; then
     state="enabled"
-else
-    state="disabled"
 fi
 
 
@@ -88,7 +87,7 @@ case "$state" in
          fi
    ;;
    disabled)
-         if [ ! -z "$act_id" ] && [ "$state" = "disabled" ]; then
+         if [ ! -z "$act_id" ] && [ "$state" = "enabled" ]; then
              echo zypper $zypper_def_opts modifyrepo -d "$act_id"
          fi
    ;;

From 59de2afdaaa7b122744dac5c5eab27d36fa07ed4 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 5 Dec 2013 13:14:15 +0100
Subject: [PATCH 18/93] ups, was a variable collision

---
 cdist/conf/type/__zypper_repo/gencode-remote | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index e2cc25e5..4698582e 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -60,9 +60,9 @@ elif grep -q "$repo_id" "$__object/explorer/all_repo_ids"; then
     act_id="$repo_id" 
 fi
 
-state="disabled"
+repostate="disabled"
 if grep -q "$act_id" "$__object/explorer/enabled_repo_ids"; then
-    state="enabled"
+    repostate="enabled"
 fi
 
 
@@ -82,12 +82,12 @@ case "$state" in
          fi
    ;;
    enabled)
-         if [ ! -z "$act_id" ] && [ "$state" = "disabled" ]; then
+         if [ ! -z "$act_id" ] && [ "$repostate" = "disabled" ]; then
              echo zypper $zypper_def_opts modifyrepo -e "$act_id"
          fi
    ;;
    disabled)
-         if [ ! -z "$act_id" ] && [ "$state" = "enabled" ]; then
+         if [ ! -z "$act_id" ] && [ "$repostate" = "enabled" ]; then
              echo zypper $zypper_def_opts modifyrepo -d "$act_id"
          fi
    ;;

From 367ef21bd8bcf761789db470e8cbd85f1ab01c97 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Fri, 6 Dec 2013 13:49:45 +0100
Subject: [PATCH 19/93] make __postfix_* types depend on __postfix

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/conf/type/__postfix_master/manifest   |  3 ++-
 cdist/conf/type/__postfix_postconf/manifest | 21 +++++++++++++++++++++
 cdist/conf/type/__postfix_postmap/manifest  | 21 +++++++++++++++++++++
 cdist/conf/type/__postfix_reload/manifest   | 21 +++++++++++++++++++++
 4 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100755 cdist/conf/type/__postfix_postconf/manifest
 create mode 100755 cdist/conf/type/__postfix_postmap/manifest
 create mode 100755 cdist/conf/type/__postfix_reload/manifest

diff --git a/cdist/conf/type/__postfix_master/manifest b/cdist/conf/type/__postfix_master/manifest
index 1642e91b..87e2329b 100755
--- a/cdist/conf/type/__postfix_master/manifest
+++ b/cdist/conf/type/__postfix_master/manifest
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2012 - 2013 Steven Armstrong (steven-cdist at armstrong.cc)
 #
 # This file is part of cdist.
 #
@@ -32,6 +32,7 @@ case "$os" in
    ;;
 esac
 
+__postfix
 
 # Default to object_id
 service="$(cat "$__object/parameter/service" 2>/dev/null || echo "$__object_id")"
diff --git a/cdist/conf/type/__postfix_postconf/manifest b/cdist/conf/type/__postfix_postconf/manifest
new file mode 100755
index 00000000..0dde64e9
--- /dev/null
+++ b/cdist/conf/type/__postfix_postconf/manifest
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# 2012 - 2013 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# 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/>.
+#
+
+__postfix
diff --git a/cdist/conf/type/__postfix_postmap/manifest b/cdist/conf/type/__postfix_postmap/manifest
new file mode 100755
index 00000000..0dde64e9
--- /dev/null
+++ b/cdist/conf/type/__postfix_postmap/manifest
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# 2012 - 2013 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# 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/>.
+#
+
+__postfix
diff --git a/cdist/conf/type/__postfix_reload/manifest b/cdist/conf/type/__postfix_reload/manifest
new file mode 100755
index 00000000..0dde64e9
--- /dev/null
+++ b/cdist/conf/type/__postfix_reload/manifest
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# 2012 - 2013 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# 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/>.
+#
+
+__postfix

From 2ea2e640c93d5bec4a4c4422c63ac098ec8d2737 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 6 Dec 2013 14:19:36 +0100
Subject: [PATCH 20/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 87b32175..dd0e7dce 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -10,6 +10,7 @@ Changelog
 	* Core: Removed unused "changed" attribute of objects 
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
+	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From a271244cfb77aa7a70ac2af836fcdc7aa4fa41c4 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Fri, 6 Dec 2013 15:23:09 +0100
Subject: [PATCH 21/93] Die 4 codepaths mit comments erklaert ...

---
 cdist/conf/type/__zypper_repo/gencode-remote | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/cdist/conf/type/__zypper_repo/gencode-remote b/cdist/conf/type/__zypper_repo/gencode-remote
index 4698582e..4d834c47 100644
--- a/cdist/conf/type/__zypper_repo/gencode-remote
+++ b/cdist/conf/type/__zypper_repo/gencode-remote
@@ -73,21 +73,25 @@ case "$state" in
              exit 4
          fi
          if [ -z "$repo_id" ]; then
+             # Repo not present, so we need to create it 
              echo zypper $zypper_def_opts addrepo "'$uri'" "'$desc'"
          fi
    ;;
    absent)
          if [ ! -z "$act_id" ]; then
+             # Repo present (act_id not ""), so we ned to delete it
              echo zypper $zypper_def_opts removerepo "$act_id"
          fi
    ;;
    enabled)
          if [ ! -z "$act_id" ] && [ "$repostate" = "disabled" ]; then
+             # Repo present (act_id not "") and repostate not enabled, so a enable call is needed
              echo zypper $zypper_def_opts modifyrepo -e "$act_id"
          fi
    ;;
    disabled)
          if [ ! -z "$act_id" ] && [ "$repostate" = "enabled" ]; then
+             # Repo present (act_id not "") and repostate enabled, so a disable call is needed
              echo zypper $zypper_def_opts modifyrepo -d "$act_id"
          fi
    ;;

From a420ee105d485cb94e9457dbb897816e60aff72e Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 6 Dec 2013 23:55:53 +0100
Subject: [PATCH 22/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index dd0e7dce..67ea7e42 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -8,6 +8,7 @@ Changelog
 3.0.0:
 	* Core: Messaging support added
 	* Core: Removed unused "changed" attribute of objects 
+	* New Type: __zypper_repo (Daniel Heule)
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)

From fe20da65949f5eed385eba7998ffe5ac6c442bf2 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Sat, 7 Dec 2013 00:13:28 +0100
Subject: [PATCH 23/93] note hint from Axel Beckert for debian prios

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 cdist/conf/type/__package_apt/gencode-remote | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/cdist/conf/type/__package_apt/gencode-remote b/cdist/conf/type/__package_apt/gencode-remote
index 7aba76d5..57339db3 100755
--- a/cdist/conf/type/__package_apt/gencode-remote
+++ b/cdist/conf/type/__package_apt/gencode-remote
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
+# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
 #
 # This file is part of cdist.
 #
@@ -42,6 +42,8 @@ case "$state_is" in
     ;;
 esac
 
+# Hint if we need to avoid questions at some point:
+# DEBIAN_PRIORITY=critical can reduce the number of questions
 aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes --no-install-recommends -o DPkg::Options::=\"--force-confold\""
 
 [ "$state_is" = "$state_should" ] && exit 0

From c0da6fcc897c38efe1514be65218200aaaeba87a Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Mon, 9 Dec 2013 09:44:40 +0100
Subject: [PATCH 24/93] =?UTF-8?q?Verbesserungen=20am=20=5F=5Fcron=20type?=
 =?UTF-8?q?=201.=20Filter=20messages=20from=20crontab=20-l=20welche=20das?=
 =?UTF-8?q?=20ganze=20file=20f=C3=BCllen=202.=20neuer=20parameter=20raw=5F?=
 =?UTF-8?q?command,=20um=20globale=20variablen=20zu=20setzen=20...?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cdist/conf/type/__cron/explorer/entry    | 0
 cdist/conf/type/__cron/gencode-remote    | 9 ++++++---
 cdist/conf/type/__cron/man.text          | 8 ++++++++
 cdist/conf/type/__cron/parameter/boolean | 1 +
 4 files changed, 15 insertions(+), 3 deletions(-)
 mode change 100755 => 100644 cdist/conf/type/__cron/explorer/entry
 mode change 100755 => 100644 cdist/conf/type/__cron/gencode-remote
 create mode 100644 cdist/conf/type/__cron/parameter/boolean

diff --git a/cdist/conf/type/__cron/explorer/entry b/cdist/conf/type/__cron/explorer/entry
old mode 100755
new mode 100644
diff --git a/cdist/conf/type/__cron/gencode-remote b/cdist/conf/type/__cron/gencode-remote
old mode 100755
new mode 100644
index c04a7245..6f1feb90
--- a/cdist/conf/type/__cron/gencode-remote
+++ b/cdist/conf/type/__cron/gencode-remote
@@ -26,6 +26,8 @@ command="$(cat "$__object/parameter/command")"
 if [ -f "$__object/parameter/raw" ]; then
    raw="$(cat "$__object/parameter/raw")"
    entry="$raw $command"
+elif [ -f "$__object/parameter/raw_command" ]; then
+   entry="$command"
 else
    minute="$(cat "$__object/parameter/minute" 2>/dev/null || echo "*")"
    hour="$(cat "$__object/parameter/hour" 2>/dev/null || echo "*")"
@@ -55,8 +57,9 @@ state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo "present")"
 # These are the old markers
 prefix="#cdist:__cron/$__object_id"
 suffix="#/cdist:__cron/$__object_id"
+filter="^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V"
 cat << DONE
-crontab -u $user -l | awk -v prefix="$prefix" -v suffix="$suffix" '
+crontab -u $user -l | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" '
 {
    if (index(\$0,prefix)) {
       triggered=1
@@ -75,12 +78,12 @@ DONE
 case "$state_should" in
     present)
         echo "("
-        echo "crontab -u $user -l 2>/dev/null || true"
+        echo "crontab -u $user -l | grep -v -E "$filter" 2>/dev/null || true"
         echo "echo '$entry'"
         echo ") | crontab -u $user -"
     ;;
     absent)
-        echo "( crontab -u $user -l 2>/dev/null || true ) | \\"
+        echo "( crontab -u $user -l | grep -v -E "$filter" 2>/dev/null || true ) | \\"
         echo "grep -v \"# $name\\$\" | crontab -u $user -"
     ;;
 esac
diff --git a/cdist/conf/type/__cron/man.text b/cdist/conf/type/__cron/man.text
index 22627234..f4e80a08 100644
--- a/cdist/conf/type/__cron/man.text
+++ b/cdist/conf/type/__cron/man.text
@@ -41,6 +41,10 @@ raw::
    Can for example be used to specify cron EXTENSIONS like reboot, yearly etc.
    See crontab(5) for the extensions if any that your cron implementation
    implements.
+raw_command::
+   Take whatever the user has given in the commmand and ignore everything else.
+   If given, the command will be added to crontab.
+   Can for example be used to define variables like SHELL or MAILTO.
 
 
 EXAMPLES
@@ -57,6 +61,10 @@ __cron some-id --user root --command "/path/to/script" \
 
 # remove cronjob
 __cron some-id --user root --command "/path/to/script" --state absent
+
+# define default shell
+__cron some-id --user root --raw_command --command "SHELL=/bin/bash" \
+   --state present
 --------------------------------------------------------------------------------
 
 
diff --git a/cdist/conf/type/__cron/parameter/boolean b/cdist/conf/type/__cron/parameter/boolean
new file mode 100644
index 00000000..54cfb0b3
--- /dev/null
+++ b/cdist/conf/type/__cron/parameter/boolean
@@ -0,0 +1 @@
+raw_command

From 02aad6f4ccd114378ae770e125c781c10eca18d2 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Mon, 9 Dec 2013 09:57:31 +0100
Subject: [PATCH 25/93] =?UTF-8?q?revert=20vom=20chmod=20der=20aus=20verseh?=
 =?UTF-8?q?en=20ge=C3=A4ndert=20wurde=20...?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cdist/conf/type/__cron/explorer/entry | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 cdist/conf/type/__cron/explorer/entry

diff --git a/cdist/conf/type/__cron/explorer/entry b/cdist/conf/type/__cron/explorer/entry
old mode 100644
new mode 100755

From e6420a49e88295ae50f265512d6af79389a23c74 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Mon, 9 Dec 2013 11:39:44 +0100
Subject: [PATCH 26/93] verhindern dass raw and raw_command zusammen angegeben
 werden

---
 cdist/conf/type/__cron/gencode-remote |  1 +
 cdist/conf/type/__cron/manifest       | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)
 create mode 100644 cdist/conf/type/__cron/manifest

diff --git a/cdist/conf/type/__cron/gencode-remote b/cdist/conf/type/__cron/gencode-remote
index 6f1feb90..e84cf66a 100644
--- a/cdist/conf/type/__cron/gencode-remote
+++ b/cdist/conf/type/__cron/gencode-remote
@@ -2,6 +2,7 @@
 #
 # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 # 2013      Nico Schottelius (nico-cdist at schottelius.org)
+# 2013      Thomas Oettli (otho at sfs.biz)
 #
 # This file is part of cdist.
 #
diff --git a/cdist/conf/type/__cron/manifest b/cdist/conf/type/__cron/manifest
new file mode 100644
index 00000000..9992df25
--- /dev/null
+++ b/cdist/conf/type/__cron/manifest
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# 2013 Thomas Oettli (otho at sfs.biz)
+#
+# 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/>.
+#
+
+if [ -f "$__object/parameter/raw" ] && [ -f "$__object/parameter/raw_command" ]; then
+    echo "ERROR: both raw and raw_command specified" >&2
+    exit 1
+fi

From 6bf235c698ce9f4be0288c7410d7b3fe68f8c073 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Mon, 9 Dec 2013 23:17:06 +0100
Subject: [PATCH 27/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 67ea7e42..e4c09e7b 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -12,6 +12,7 @@ Changelog
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)
+	* Type __cron: Add support for raw lines (Daniel Heule)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From d068dfd6218956a9bf07652327dc4e04209d3e95 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Tue, 10 Dec 2013 11:02:10 +0100
Subject: [PATCH 28/93] escape and thereby preserve quotes in values

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/conf/type/__key_value/gencode-remote | 27 ++++++++++++++--------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/cdist/conf/type/__key_value/gencode-remote b/cdist/conf/type/__key_value/gencode-remote
index c1a6bca8..ec91894f 100755
--- a/cdist/conf/type/__key_value/gencode-remote
+++ b/cdist/conf/type/__key_value/gencode-remote
@@ -26,8 +26,8 @@ state_should=present
 
 file="$(cat "$__object/parameter/file")"
 delimiter="$(cat "$__object/parameter/delimiter")"
-value="$(cat "$__object/parameter/value")"
-
+# escape double quotes, as that is what we use ourself below
+value_escaped="$(cat "$__object/parameter/value" | sed -e "s/\([\"]\)/\\\\\1/g")"
 state_is="$(cat "$__object/explorer/state")"
 
 [ "$state_is" = "$state_should" ] && exit 0
@@ -35,20 +35,29 @@ state_is="$(cat "$__object/explorer/state")"
 case "$state_should" in
     absent)
         # remove lines starting with key
-        echo "sed '/^$key\($delimiter\+\)/d' \"$file\" > \"$file.cdist-tmp\""
-        echo "mv \"$file.cdist-tmp\" \"$file\""
+        cat << DONE
+tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
+# preserve ownership and permissions by copying existing file over tmpfile
+cp -p "$file" "\$tmpfile"
+sed '/^$key\($delimiter\+\)/d' "$file" > "\$tmpfile"
+mv -f "\$tmpfile" "$file"
+DONE
     ;;
     present)
         case "$state_is" in
             absent)
                 # add new key and value
-                echo "echo \"${key}${delimiter}${value}\" >> \"$file\""
+                printf 'echo "%s%s%s" >> "%s"' "$key" "$delimiter" "$value_escaped" "$file"
             ;;
             wrongvalue)
                 # change exisiting value
-                printf 'sed "s|^%s\(%s\+\).*|%s\\1%s|" "%s" > "%s.cdist-tmp"\n' \
-                    "$key" "$delimiter" "$key" "$value" "$file" "$file"
-                echo "mv \"$file.cdist-tmp\" \"$file\""
+                cat << DONE
+tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
+# preserve ownership and permissions by copying existing file over tmpfile
+cp -p "$file" "\$tmpfile"
+sed "s|^$key\($delimiter\+\).*|$key\\1$value_escaped|" "$file" > "\$tmpfile"
+mv -f "\$tmpfile" "$file"
+DONE
             ;;
             *)
                 echo "Unknown explorer state: $state_is" >&2
@@ -58,4 +67,4 @@ case "$state_should" in
     *)
        echo "Unknown state: $state_should" >&2
        exit 1
-esac 
+esac

From 0f1dabb08028b79e7ee373da468291ccc7efb3df Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 10 Dec 2013 11:50:18 +0100
Subject: [PATCH 29/93] inital commit of __zypper_service

---
 .../type/__zypper_service/explorer/repo_ids   | 24 +++++
 .../type/__zypper_service/explorer/service_id | 28 ++++++
 .../__zypper_service/explorer/service_ids     | 23 +++++
 .../__zypper_service/explorer/service_uri     | 28 ++++++
 .../conf/type/__zypper_service/gencode-remote | 94 +++++++++++++++++++
 cdist/conf/type/__zypper_service/man.text     | 67 +++++++++++++
 cdist/conf/type/__zypper_service/manifest     | 63 +++++++++++++
 .../type/__zypper_service/parameter/boolean   |  2 +
 .../__zypper_service/parameter/default/state  |  1 +
 .../__zypper_service/parameter/default/type   |  1 +
 .../type/__zypper_service/parameter/optional  |  3 +
 .../type/__zypper_service/parameter/required  |  1 +
 12 files changed, 335 insertions(+)
 create mode 100644 cdist/conf/type/__zypper_service/explorer/repo_ids
 create mode 100644 cdist/conf/type/__zypper_service/explorer/service_id
 create mode 100644 cdist/conf/type/__zypper_service/explorer/service_ids
 create mode 100644 cdist/conf/type/__zypper_service/explorer/service_uri
 create mode 100644 cdist/conf/type/__zypper_service/gencode-remote
 create mode 100644 cdist/conf/type/__zypper_service/man.text
 create mode 100644 cdist/conf/type/__zypper_service/manifest
 create mode 100644 cdist/conf/type/__zypper_service/parameter/boolean
 create mode 100644 cdist/conf/type/__zypper_service/parameter/default/state
 create mode 100644 cdist/conf/type/__zypper_service/parameter/default/type
 create mode 100644 cdist/conf/type/__zypper_service/parameter/optional
 create mode 100644 cdist/conf/type/__zypper_service/parameter/required

diff --git a/cdist/conf/type/__zypper_service/explorer/repo_ids b/cdist/conf/type/__zypper_service/explorer/repo_ids
new file mode 100644
index 00000000..8c32b40b
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/explorer/repo_ids
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage services with Zypper (mostly suse)
+#
+#
+echo $(zypper lr -u -E  | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_service/explorer/service_id b/cdist/conf/type/__zypper_service/explorer/service_id
new file mode 100644
index 00000000..b473340c
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/explorer/service_id
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage services with Zypper (mostly suse)
+#
+if [ -f "$__object/parameter/service_uri" ]; then
+   uri="$(cat "$__object/parameter/service_uri")"
+else
+   uri="/$__object_id"
+fi
+echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 1 )
diff --git a/cdist/conf/type/__zypper_service/explorer/service_ids b/cdist/conf/type/__zypper_service/explorer/service_ids
new file mode 100644
index 00000000..460b2006
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/explorer/service_ids
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage services with Zypper (mostly suse)
+#
+echo $(zypper ls -u -E  | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_service/explorer/service_uri b/cdist/conf/type/__zypper_service/explorer/service_uri
new file mode 100644
index 00000000..aec93cb2
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/explorer/service_uri
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage services with Zypper (mostly suse)
+#
+if [ -f "$__object/parameter/service_uri" ]; then
+   uri="$(cat "$__object/parameter/service_uri")"
+else
+   uri="/$__object_id"
+fi
+echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 7 )
diff --git a/cdist/conf/type/__zypper_service/gencode-remote b/cdist/conf/type/__zypper_service/gencode-remote
new file mode 100644
index 00000000..d11749ae
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/gencode-remote
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage services with Zypper (mostly suse)
+#
+
+# Debug
+#exec >&2
+#set -x
+
+zypper_def_opts=" -q "
+
+if [ -f "$__object/parameter/service_desc" ]; then
+   desc="$(cat "$__object/parameter/service_desc")"
+else
+   desc="$__object_id"
+fi
+
+if [ -f "$__object/parameter/service_uri" ]; then
+   uri="$(cat "$__object/parameter/service_uri")"
+else
+   uri="$__object_id"
+fi
+
+if [ -f "$__object/parameter/state" ]; then
+   state_should="$(cat "$__object/parameter/state")"
+else
+   state_should="present"
+fi
+
+if [ -f "$__object/parameter/type" ]; then
+   stype="$(cat "$__object/parameter/type")"
+else
+   stype="ris"
+fi
+
+exp_uri="$(cat "$__object/explorer/service_uri")"
+exp_id="$(cat "$__object/explorer/service_id")"
+
+# we need this list to remove ids, but we must do this in reverse order
+exp_ids="$(cat "$__object/explorer/service_ids" | rev)"
+
+if [ "$uri" = "$exp_uri" ] ; then
+    state_is="present"
+else
+    state_is="absent"
+fi
+
+# remove all other services if needed ...
+if [ -f "$__object/parameter/remove-all-other-services" ]; then
+   # file exists -> True
+   for i in $exp_ids; do
+     if [ "$i" != "$exp_id" ] ; then
+       echo zypper $zypper_def_opts  removeservice "$i" "&>/dev/null"
+     fi
+   done 
+   echo zypper $zypper_def_opts refs "&>/dev/null"
+fi
+
+
+# Exit if nothing is needed to be done
+[ "$state_is" = "$state_should" ] && exit 0
+
+case "$state_should" in
+   present)
+         echo zypper $zypper_def_opts addservice -t "$stype" "$uri" \"$desc\"
+         echo zypper $zypper_def_opts refs
+   ;;
+   absent)
+         echo zypper $zypper_def_opts removeservice "$service_id"
+         echo zypper $zypper_def_opts refs
+   ;;
+   *)
+      echo "Unknown state: $state_should" >&2
+      exit 1
+   ;;
+esac
diff --git a/cdist/conf/type/__zypper_service/man.text b/cdist/conf/type/__zypper_service/man.text
new file mode 100644
index 00000000..3345be60
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/man.text
@@ -0,0 +1,67 @@
+cdist-type__zypper_service(7)
+=============================
+Daniel Heule <hda--@--sfs.biz>
+
+
+NAME
+----
+cdist-type__zypper_service - service management with zypper
+
+
+DESCRIPTION
+-----------
+zypper is usually used on SuSE systems to manage services.
+
+
+REQUIRED PARAMETERS
+-------------------
+service_uri::
+    Uri of the service
+
+
+OPTIONAL PARAMETERS
+-------------------
+service_desc::
+    If supplied, use the service_desc and not the object id as descritpion for the service.
+
+state::
+    Either "present" or "absent", defaults to "present"  
+
+type::
+    Defaults to "ris", the standard type of services at SLES11. For other values, see manpage of zypper.
+
+
+BOOLEAN PARAMETERS
+------------------
+remove-all-other-service::
+   Drop all other services found on the target host before adding the new one.
+
+remove-all-repos::
+   If supplied, remove all existing repos prior to setup the new service.
+
+
+EXAMPLES
+--------
+
+--------------------------------------------------------------------------------
+# Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded
+__zypper_service SFS_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-service --remove-all-repos
+
+# Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos
+__zypper_service SFS_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir"
+
+# Drop service by uri, no changes to ohter services or repos
+__zypper_service SFS_SLES11_SP3 --state absent --service_uri "http://path/to/your/ris/dir"
+
+--------------------------------------------------------------------------------
+
+
+SEE ALSO
+--------
+- cdist-type(7)
+
+
+COPYING
+-------
+Copyright \(C) 2013 Daniel Heule. 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/__zypper_service/manifest b/cdist/conf/type/__zypper_service/manifest
new file mode 100644
index 00000000..d8773605
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/manifest
@@ -0,0 +1,63 @@
+#!/bin/sh
+#
+# 2013 Daniel Heule (hda at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage services with Zypper (mostly suse)
+#
+
+# Debug
+#exec >&2
+#set -x
+
+zypper_def_opts=" -q "
+
+if [ -f "$__object/parameter/service_uri" ]; then
+   uri="$(cat "$__object/parameter/service_uri")"
+else
+   uri="$__object_id"
+fi
+
+if [ -f "$__object/parameter/state" ]; then
+   state_should="$(cat "$__object/parameter/state")"
+else
+   state_should="present"
+fi
+
+exp_uri="$(cat "$__object/explorer/service_uri")"
+
+if [ "$uri" = "$exp_uri" ] ; then
+    state_is="present"
+else
+    state_is="absent"
+fi
+
+
+# Exit if nothing is needed to be done
+[ "$state_is" = "$state_should" ] && exit 0
+
+# we need this list to remove ids, but we must do this in reverse order
+exp_repos="$(cat "$__object/explorer/repo_ids" | rev)"
+
+# boolean parameter
+if [ -f "$__object/parameter/remove-all-repos" ]; then
+   # file exists -> True
+   for i in $exp_repos; do
+     __zypper_repo "droprepo${i}" --state absent --repo_id "${i}"
+   done 
+fi
diff --git a/cdist/conf/type/__zypper_service/parameter/boolean b/cdist/conf/type/__zypper_service/parameter/boolean
new file mode 100644
index 00000000..bc6a5629
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/parameter/boolean
@@ -0,0 +1,2 @@
+remove-all-other-service
+remove-all-repos
diff --git a/cdist/conf/type/__zypper_service/parameter/default/state b/cdist/conf/type/__zypper_service/parameter/default/state
new file mode 100644
index 00000000..e7f6134f
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/parameter/default/state
@@ -0,0 +1 @@
+present
diff --git a/cdist/conf/type/__zypper_service/parameter/default/type b/cdist/conf/type/__zypper_service/parameter/default/type
new file mode 100644
index 00000000..b928830f
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/parameter/default/type
@@ -0,0 +1 @@
+ris
diff --git a/cdist/conf/type/__zypper_service/parameter/optional b/cdist/conf/type/__zypper_service/parameter/optional
new file mode 100644
index 00000000..b26c78d8
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/parameter/optional
@@ -0,0 +1,3 @@
+service_desc
+state
+type
diff --git a/cdist/conf/type/__zypper_service/parameter/required b/cdist/conf/type/__zypper_service/parameter/required
new file mode 100644
index 00000000..2b4645ee
--- /dev/null
+++ b/cdist/conf/type/__zypper_service/parameter/required
@@ -0,0 +1 @@
+service_uri

From f7f63aa7a2c44a23f7a2ac22f11285069d2117a2 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 10 Dec 2013 11:54:42 +0100
Subject: [PATCH 30/93] remove SFS from man page text ...

---
 cdist/conf/type/__zypper_service/man.text | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cdist/conf/type/__zypper_service/man.text b/cdist/conf/type/__zypper_service/man.text
index 3345be60..b1717c96 100644
--- a/cdist/conf/type/__zypper_service/man.text
+++ b/cdist/conf/type/__zypper_service/man.text
@@ -45,13 +45,13 @@ EXAMPLES
 
 --------------------------------------------------------------------------------
 # Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded
-__zypper_service SFS_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-service --remove-all-repos
+__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-service --remove-all-repos
 
 # Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos
-__zypper_service SFS_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir"
+__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir"
 
 # Drop service by uri, no changes to ohter services or repos
-__zypper_service SFS_SLES11_SP3 --state absent --service_uri "http://path/to/your/ris/dir"
+__zypper_service INTERNAL_SLES11_SP3 --state absent --service_uri "http://path/to/your/ris/dir"
 
 --------------------------------------------------------------------------------
 

From a2106f655265e016f679c2d199a5ec2e918dbd1c Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 10 Dec 2013 15:39:27 +0100
Subject: [PATCH 31/93] ++changes (3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index e4c09e7b..cdbcc593 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -13,6 +13,7 @@ Changelog
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)
 	* Type __cron: Add support for raw lines (Daniel Heule)
+	* Type __key_value: Fix quoting issue (Steven Armstrong)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From a5d2cdecf474e0276b7b3cb37bd2727e67c8b49b Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 10 Dec 2013 15:48:04 +0100
Subject: [PATCH 32/93] ++changes (3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index cdbcc593..023d0749 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -9,6 +9,7 @@ Changelog
 	* Core: Messaging support added
 	* Core: Removed unused "changed" attribute of objects 
 	* New Type: __zypper_repo (Daniel Heule)
+	* New Type: __zypper_service (Daniel Heule)
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)

From e1eae5604ef816114b51c0ad695c44e0a24a0433 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 10 Dec 2013 16:57:02 +0100
Subject: [PATCH 33/93] unlock the whole power of zypper added the ptype
 parameter (package type of zypper install)

---
 .../__package_zypper/explorer/pkg_version     | 19 +++++++++++++++++--
 .../conf/type/__package_zypper/gencode-remote | 11 +++++++++--
 cdist/conf/type/__package_zypper/man.text     |  6 ++++++
 .../__package_zypper/parameter/default/ptype  |  1 +
 .../type/__package_zypper/parameter/optional  |  1 +
 5 files changed, 34 insertions(+), 4 deletions(-)
 create mode 100644 cdist/conf/type/__package_zypper/parameter/default/ptype

diff --git a/cdist/conf/type/__package_zypper/explorer/pkg_version b/cdist/conf/type/__package_zypper/explorer/pkg_version
index 655b464d..64fd64c0 100644
--- a/cdist/conf/type/__package_zypper/explorer/pkg_version
+++ b/cdist/conf/type/__package_zypper/explorer/pkg_version
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013 Daniel Heule (hda at sfs.biz)
 #
 # This file is part of cdist.
 #
@@ -18,7 +19,7 @@
 # along with cdist. If not, see <http://www.gnu.org/licenses/>.
 #
 #
-# Retrieve the status of a package
+# Retrieve the status of a package off different types
 #
 
 if [ -f "$__object/parameter/name" ]; then
@@ -27,4 +28,18 @@ else
    name="$__object_id"
 fi
 
-rpm -q --whatprovides "$name"  | grep -v 'no package provides' || true
+if [ -f "$__object/parameter/ptype" ]; then
+   ptype="$(cat "$__object/parameter/ptype")"
+else
+   ptype="package"
+fi
+
+case "$ptype" in
+    package|patch|pattern|product|srcpackage)
+        zypper se --match-exact -i -t "$ptype" "$name" | grep -E '^i' | cut -d " " -f 3 || true
+    ;;
+    *)
+        echo "unknown type in __package_zypper explorer" &>2
+        exit 1
+    ;;
+esac
diff --git a/cdist/conf/type/__package_zypper/gencode-remote b/cdist/conf/type/__package_zypper/gencode-remote
index d1766126..ef3bf029 100644
--- a/cdist/conf/type/__package_zypper/gencode-remote
+++ b/cdist/conf/type/__package_zypper/gencode-remote
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # 2012 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013 Daniel Heule (hda at sfs.biz)
 #
 # This file is part of cdist.
 #
@@ -39,6 +40,12 @@ else
    state_should="present"
 fi
 
+if [ -f "$__object/parameter/ptype" ]; then
+   ptype="$(cat "$__object/parameter/ptype")"
+else
+   ptype="package"
+fi
+
 pkg_version="$(cat "$__object/explorer/pkg_version")"
 if [ -z "$pkg_version" ]; then
     state_is="absent"
@@ -51,10 +58,10 @@ fi
 
 case "$state_should" in
    present)
-         echo zypper $globalopts install --auto-agree-with-licenses \"$name\" ">/dev/null"
+         echo zypper $globalopts install --type \"$ptype\" --auto-agree-with-licenses \"$name\" ">/dev/null"
    ;;
    absent)
-         echo zypper $globalopts remove \"$name\" ">/dev/null"
+         echo zypper $globalopts remove --type \"$ptype\" \"$name\" ">/dev/null"
    ;;
    *)
       echo "Unknown state: $state_should" >&2
diff --git a/cdist/conf/type/__package_zypper/man.text b/cdist/conf/type/__package_zypper/man.text
index e2261d33..465b21be 100644
--- a/cdist/conf/type/__package_zypper/man.text
+++ b/cdist/conf/type/__package_zypper/man.text
@@ -26,6 +26,9 @@ name::
 state::
     Either "present" or "absent", defaults to "present"
 
+ptype::
+    Either "package", "patch", "pattern", "product" or "srcpackage", defaults to "package". For a description see man zypper.
+
 
 EXAMPLES
 --------
@@ -39,6 +42,9 @@ __package_zypper python --state present --name python2
 
 # Remove package
 __package_zypper cfengine --state absent
+
+# install all packages which belongs to pattern x11
+__package_zypper x11 --ptype pattern --state present
 --------------------------------------------------------------------------------
 
 
diff --git a/cdist/conf/type/__package_zypper/parameter/default/ptype b/cdist/conf/type/__package_zypper/parameter/default/ptype
new file mode 100644
index 00000000..ba3bd787
--- /dev/null
+++ b/cdist/conf/type/__package_zypper/parameter/default/ptype
@@ -0,0 +1 @@
+package
diff --git a/cdist/conf/type/__package_zypper/parameter/optional b/cdist/conf/type/__package_zypper/parameter/optional
index 1b423dc4..b484bf07 100644
--- a/cdist/conf/type/__package_zypper/parameter/optional
+++ b/cdist/conf/type/__package_zypper/parameter/optional
@@ -1,2 +1,3 @@
 name
 state
+ptype

From 0acf3c0118080369d73b7c0992fa68508df2619d Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 10 Dec 2013 17:25:03 +0100
Subject: [PATCH 34/93] type __postfix_postconf is tested and aproved to work
 on suse (SLES11)

---
 cdist/conf/type/__postfix_postconf/explorer/value | 2 +-
 cdist/conf/type/__postfix_postconf/gencode-remote | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cdist/conf/type/__postfix_postconf/explorer/value b/cdist/conf/type/__postfix_postconf/explorer/value
index edf48b48..e08c6da6 100755
--- a/cdist/conf/type/__postfix_postconf/explorer/value
+++ b/cdist/conf/type/__postfix_postconf/explorer/value
@@ -22,7 +22,7 @@
 os=$("$__explorer/os")
 
 case "$os" in
-   ubuntu|debian|archlinux)
+   ubuntu|debian|archlinux|suse)
       :
    ;;
    *)
diff --git a/cdist/conf/type/__postfix_postconf/gencode-remote b/cdist/conf/type/__postfix_postconf/gencode-remote
index 60143590..43c0482e 100755
--- a/cdist/conf/type/__postfix_postconf/gencode-remote
+++ b/cdist/conf/type/__postfix_postconf/gencode-remote
@@ -21,7 +21,7 @@
 os=$(cat "$__global/explorer/os")
 
 case "$os" in
-   ubuntu|debian|archlinux)
+   ubuntu|debian|archlinux|suse)
       :
    ;;
    *)

From b2e39e3dc19f54320f72675ce0103cf31b2d1dda Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 10 Dec 2013 17:51:48 +0100
Subject: [PATCH 35/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 023d0749..06f70c84 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -13,6 +13,7 @@ Changelog
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)
+	* Type __postfix_postconf: Enable support for SuSE (Daniel Heule)
 	* Type __cron: Add support for raw lines (Daniel Heule)
 	* Type __key_value: Fix quoting issue (Steven Armstrong)
 

From 01dc23b00c5a4814c5023ff9aa9d6441e54c89e9 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 11 Dec 2013 13:07:40 +0100
Subject: [PATCH 36/93] postfix install works also on suse (SLES11)

---
 cdist/conf/type/__postfix/manifest | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cdist/conf/type/__postfix/manifest b/cdist/conf/type/__postfix/manifest
index 2dc70ce2..52a13919 100755
--- a/cdist/conf/type/__postfix/manifest
+++ b/cdist/conf/type/__postfix/manifest
@@ -22,7 +22,7 @@
 os=$(cat "$__global/explorer/os")
 
 case "$os" in
-   ubuntu|debian|archlinux)
+   ubuntu|debian|archlinux|suse)
       __package postfix --state present
    ;;
    *)

From 05262ffe390ede87d5b80fd36ea571866918692c Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 11 Dec 2013 13:42:12 +0100
Subject: [PATCH 37/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 06f70c84..75182f5f 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -14,6 +14,7 @@ Changelog
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)
 	* Type __postfix_postconf: Enable support for SuSE (Daniel Heule)
+	* Type __postfix: Enable support for SuSE (Daniel Heule)
 	* Type __cron: Add support for raw lines (Daniel Heule)
 	* Type __key_value: Fix quoting issue (Steven Armstrong)
 

From 785e54b3112e96f34ac026cec15385d22574bcc2 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 11 Dec 2013 13:44:01 +0100
Subject: [PATCH 38/93] =?UTF-8?q?vorbereitung=20um=20mit=20zypper=20auch?=
 =?UTF-8?q?=20spezifische=20versionen=20zu=20unterst=C3=BCtzen=20parameter?=
 =?UTF-8?q?=20ptype=20auch=20beim=20package=20type=20zulassen,=20analog=20?=
 =?UTF-8?q?anderer=20parameter=20von=20subtypes=20...?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cdist/conf/type/__package/parameter/optional          | 1 +
 cdist/conf/type/__package_zypper/explorer/pkg_version | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/cdist/conf/type/__package/parameter/optional b/cdist/conf/type/__package/parameter/optional
index 9982507e..5a89ffc6 100644
--- a/cdist/conf/type/__package/parameter/optional
+++ b/cdist/conf/type/__package/parameter/optional
@@ -3,3 +3,4 @@ version
 type
 pkgsite
 state
+pstate
diff --git a/cdist/conf/type/__package_zypper/explorer/pkg_version b/cdist/conf/type/__package_zypper/explorer/pkg_version
index 64fd64c0..aaa1da89 100644
--- a/cdist/conf/type/__package_zypper/explorer/pkg_version
+++ b/cdist/conf/type/__package_zypper/explorer/pkg_version
@@ -35,11 +35,14 @@ else
 fi
 
 case "$ptype" in
-    package|patch|pattern|product|srcpackage)
-        zypper se --match-exact -i -t "$ptype" "$name" | grep -E '^i' | cut -d " " -f 3 || true
+    package)
+        zypper search --details --match-exact --installed-only --type "$ptype" "$name" | grep -E '^i' | cut -d " " -f 3,7 || true
+    ;;
+    patch|pattern|product|srcpackage)
+        zypper search --match-exact --installed-only --type "$ptype" "$name" | grep -E '^i' | cut -d " " -f 3 || true
     ;;
     *)
-        echo "unknown type in __package_zypper explorer" &>2
+        echo "unknown ptype in __package_zypper explorer" &>2
         exit 1
     ;;
 esac

From 5d5b1fdc05411283098874651fceaa7fb7295ee8 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 11 Dec 2013 14:43:05 +0100
Subject: [PATCH 39/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 75182f5f..ff480a93 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -17,6 +17,7 @@ Changelog
 	* Type __postfix: Enable support for SuSE (Daniel Heule)
 	* Type __cron: Add support for raw lines (Daniel Heule)
 	* Type __key_value: Fix quoting issue (Steven Armstrong)
+	* Type __package_zypper: Support non packages as well (Daniel Heule)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From 4bb8dc2f5385ff86b12f4f6af60b09eb5ea78e9d Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 11 Dec 2013 14:43:35 +0100
Subject: [PATCH 40/93] 2012 -> 2013

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 cdist/conf/type/__package_zypper/man.text | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cdist/conf/type/__package_zypper/man.text b/cdist/conf/type/__package_zypper/man.text
index 465b21be..b7cb5582 100644
--- a/cdist/conf/type/__package_zypper/man.text
+++ b/cdist/conf/type/__package_zypper/man.text
@@ -56,5 +56,5 @@ SEE ALSO
 
 COPYING
 -------
-Copyright \(C) 2012 Nico Schottelius. Free use of this software is
+Copyright \(C) 2013 Nico Schottelius. Free use of this software is
 granted under the terms of the GNU General Public License version 3 (GPLv3).

From aaa142d76b1e577be629e9ad669b7aa7cbde148b Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 11 Dec 2013 17:11:22 +0100
Subject: [PATCH 41/93] __package_zypper can now handle the version parameter

---
 .../__package_zypper/explorer/pkg_version     |  2 +-
 .../conf/type/__package_zypper/gencode-remote | 53 ++++++++++++-------
 cdist/conf/type/__package_zypper/man.text     | 17 ++++--
 .../type/__package_zypper/parameter/optional  |  1 +
 4 files changed, 50 insertions(+), 23 deletions(-)

diff --git a/cdist/conf/type/__package_zypper/explorer/pkg_version b/cdist/conf/type/__package_zypper/explorer/pkg_version
index aaa1da89..7f203067 100644
--- a/cdist/conf/type/__package_zypper/explorer/pkg_version
+++ b/cdist/conf/type/__package_zypper/explorer/pkg_version
@@ -19,7 +19,7 @@
 # along with cdist. If not, see <http://www.gnu.org/licenses/>.
 #
 #
-# Retrieve the status of a package off different types
+# Retrieve the status of a package of different types
 #
 
 if [ -f "$__object/parameter/name" ]; then
diff --git a/cdist/conf/type/__package_zypper/gencode-remote b/cdist/conf/type/__package_zypper/gencode-remote
index ef3bf029..51713590 100644
--- a/cdist/conf/type/__package_zypper/gencode-remote
+++ b/cdist/conf/type/__package_zypper/gencode-remote
@@ -29,42 +29,59 @@
 globalopts="--quiet --non-interactive"
 
 if [ -f "$__object/parameter/name" ]; then
-   name="$__object/parameter/name"
+    name="$__object/parameter/name"
 else
-   name="$__object_id"
+    name="$__object_id"
 fi
 
 if [ -f "$__object/parameter/state" ]; then
-   state_should="$(cat "$__object/parameter/state")"
+    state_should="$(cat "$__object/parameter/state")"
 else
-   state_should="present"
+    state_should="present"
 fi
 
 if [ -f "$__object/parameter/ptype" ]; then
-   ptype="$(cat "$__object/parameter/ptype")"
+    ptype="$(cat "$__object/parameter/ptype")"
 else
-   ptype="package"
+    ptype="package"
+fi
+
+if [ -f "$__object/parameter/version" ]; then
+    version_should="$(cat "$__object/parameter/version")"
+    if [ "$ptype" != "package" ]; then
+        echo "version support only for type package implemented" >&2
+        exit 2
+    fi
+else
+    version_should=""
 fi
 
 pkg_version="$(cat "$__object/explorer/pkg_version")"
 if [ -z "$pkg_version" ]; then
     state_is="absent"
+    version_is=""
 else
     state_is="present"
+    version_is=${pkg_version##* }
 fi
 
-# Exit if nothing is needed to be done
-[ "$state_is" = "$state_should" ] && exit 0
 
 case "$state_should" in
-   present)
-         echo zypper $globalopts install --type \"$ptype\" --auto-agree-with-licenses \"$name\" ">/dev/null"
-   ;;
-   absent)
-         echo zypper $globalopts remove --type \"$ptype\" \"$name\" ">/dev/null"
-   ;;
-   *)
-      echo "Unknown state: $state_should" >&2
-      exit 1
-   ;;
+    present)
+        if [ -z "$version_should" ]; then
+            [ "$state_is" = "present" ] && exit 0 # if state is present, we dont need to do anything
+            echo zypper $globalopts install --type \"$ptype\" --auto-agree-with-licenses \"$name\" ">/dev/null"
+        else
+            [ "$state_is" = "present" ] && [ "$version_should" = "$version_is" ] && exit 0 # if state is present and version is correct, we dont need to do anything
+            echo zypper $globalopts install --oldpackage --type \"$ptype\" --auto-agree-with-licenses \"$name\" = \"$version_should\" ">/dev/null"
+        fi
+    ;;
+    absent)
+        [ "$state_is" = "absent" ] && exit 0 # if state is absent, we dont need to do anything
+        echo zypper $globalopts remove --type \"$ptype\" \"$name\" ">/dev/null"
+    ;;
+    *)
+        echo "Unknown state: $state_should" >&2
+        exit 1
+    ;;
 esac
diff --git a/cdist/conf/type/__package_zypper/man.text b/cdist/conf/type/__package_zypper/man.text
index 465b21be..21c5c5bb 100644
--- a/cdist/conf/type/__package_zypper/man.text
+++ b/cdist/conf/type/__package_zypper/man.text
@@ -1,6 +1,6 @@
 cdist-type__package_zypper(7)
 =============================
-Nico Schottelius <nico-cdist--@--schottelius.org>
+Daniel Heule <hda--@--sfs.biz>
 
 
 NAME
@@ -26,6 +26,11 @@ name::
 state::
     Either "present" or "absent", defaults to "present"
 
+version::
+    The version of the package to install. Default is to install the version
+    choosen by the local package manager. For a list of version have a look to
+    the output of "zypper se -s packagename"
+
 ptype::
     Either "package", "patch", "pattern", "product" or "srcpackage", defaults to "package". For a description see man zypper.
 
@@ -34,12 +39,15 @@ EXAMPLES
 --------
 
 --------------------------------------------------------------------------------
-# Ensure zsh in installed
+# Ensure zsh is 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
 
+# Ensure binutils is installed and the version is forced to be 2.23.1-0.19.2
+__package_zypper binutils --state present --version 2.23.1-0.19.2
+
 # Remove package
 __package_zypper cfengine --state absent
 
@@ -56,5 +64,6 @@ SEE ALSO
 
 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).
+Copyright \(C) 2012 Nico Schottelius.
+Copyright \(C) 2013 Daniel Heule.
+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_zypper/parameter/optional b/cdist/conf/type/__package_zypper/parameter/optional
index b484bf07..bc8565fc 100644
--- a/cdist/conf/type/__package_zypper/parameter/optional
+++ b/cdist/conf/type/__package_zypper/parameter/optional
@@ -1,3 +1,4 @@
 name
 state
 ptype
+version

From b12bd82fe21259be88cb310523afe30a2fded300 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 12 Dec 2013 09:29:22 +0100
Subject: [PATCH 42/93] corrected some minor spell misstakes

---
 cdist/conf/type/__package_zypper/man.text | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cdist/conf/type/__package_zypper/man.text b/cdist/conf/type/__package_zypper/man.text
index 21c5c5bb..104d3a7a 100644
--- a/cdist/conf/type/__package_zypper/man.text
+++ b/cdist/conf/type/__package_zypper/man.text
@@ -28,8 +28,8 @@ state::
 
 version::
     The version of the package to install. Default is to install the version
-    choosen by the local package manager. For a list of version have a look to
-    the output of "zypper se -s packagename"
+    choosen by the local package manager. For a list of available versions,
+    have a look at the output of "zypper se -s packagename"
 
 ptype::
     Either "package", "patch", "pattern", "product" or "srcpackage", defaults to "package". For a description see man zypper.

From fc8543eab6e32e2fcf9898108447cbf0b6b955b4 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 12 Dec 2013 10:56:15 +0100
Subject: [PATCH 43/93] initial submit of __package_emerge type

---
 .../__package_emerge/explorer/pkg_version     | 35 +++++++++
 .../conf/type/__package_emerge/gencode-remote | 72 +++++++++++++++++++
 cdist/conf/type/__package_emerge/man.text     | 60 ++++++++++++++++
 .../type/__package_emerge/parameter/optional  |  3 +
 4 files changed, 170 insertions(+)
 create mode 100644 cdist/conf/type/__package_emerge/explorer/pkg_version
 create mode 100644 cdist/conf/type/__package_emerge/gencode-remote
 create mode 100644 cdist/conf/type/__package_emerge/man.text
 create mode 100644 cdist/conf/type/__package_emerge/parameter/optional

diff --git a/cdist/conf/type/__package_emerge/explorer/pkg_version b/cdist/conf/type/__package_emerge/explorer/pkg_version
new file mode 100644
index 00000000..7053eaff
--- /dev/null
+++ b/cdist/conf/type/__package_emerge/explorer/pkg_version
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# 2013 Thomas Oettli (otho at sfs.biz)
+#
+# 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/>.
+#
+#
+# Retrieve the status of a package
+#
+
+if [ ! -x /usr/bin/equery ]; then
+    echo "gentoolkit not installed!" 1>&2
+    exit 1
+fi
+
+if [ -f "$__object/parameter/name" ]; then
+   name="$(cat "$__object/parameter/name")"
+else
+   name="$__object_id"
+fi
+
+equery -q l -F '$cp $fullversion' "$name" || true
diff --git a/cdist/conf/type/__package_emerge/gencode-remote b/cdist/conf/type/__package_emerge/gencode-remote
new file mode 100644
index 00000000..d4cee37e
--- /dev/null
+++ b/cdist/conf/type/__package_emerge/gencode-remote
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# 2013 Thomas Oettli (otho at sfs.biz)
+#
+# 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/>.
+#
+#
+# Manage packages with Portage (mostly gentoo)
+#
+
+if [ -f "$__object/parameter/name" ]; then
+   name="$__object/parameter/name"
+else
+   name="$__object_id"
+fi
+
+if [ -f "$__object/parameter/state" ]; then
+   state_should="$(cat "$__object/parameter/state")"
+else
+   state_should="present"
+fi
+
+pkg_version="$(cat "$__object/explorer/pkg_version")"
+if [ -z "$pkg_version" ]; then
+    state_is="absent"
+elif [ $(echo "$pkg_version" | wc -l) -gt 1 ]; then
+    echo "Package name is not unique! The following packages are installed:"
+    echo "$pkg_version"
+    exit 1
+else
+    state_is="present"
+    installed_version="$(echo "$pkg_version" | cut -d " " -f 2)"
+fi
+
+if [ -f "$__object/parameter/version" ]; then
+    version="$(cat "$__object/parameter/version")"
+    if [ ! -z "$version" ]; then
+        name="=$name-$version"
+    fi
+else
+    version=""
+fi
+
+# Exit if nothing is needed to be done
+[ "$state_is" = "$state_should" ] && ( [ -z "$version" ] || [ "$installed_version" = "$version" ] ) && exit 0
+[ "$state_should" = "absent" ] && [ ! -z "$version" ] && [ "$installed_version" != "$version" ] && exit 0
+
+case "$state_should" in
+   present)
+        echo "emerge \"$name\" &>/dev/null || exit 1"
+        ;;
+   absent)
+        echo "emerge -C \"$name\" &>/dev/null || exit 1"
+        ;;
+   *)
+        echo "Unknown state: $state_should" >&2
+        exit 1
+        ;;
+esac
diff --git a/cdist/conf/type/__package_emerge/man.text b/cdist/conf/type/__package_emerge/man.text
new file mode 100644
index 00000000..983b49a8
--- /dev/null
+++ b/cdist/conf/type/__package_emerge/man.text
@@ -0,0 +1,60 @@
+cdist-type__package_emerge(7)
+=============================
+Thomas Oettli <otho--@--sfs.biz>
+
+
+NAME
+----
+cdist-type__package_emerge - Manage packages with portage
+
+
+DESCRIPTION
+-----------
+Portage is usually used on the gentoo distribution to manage packages.
+This type requires app-portage/gentoolkit installed on the target host.
+cdist-type__package_emerge_dependencies is supposed to install the needed
+packages on the target host.
+
+
+REQUIRED PARAMETERS
+-------------------
+None
+
+
+OPTIONAL PARAMETERS
+-------------------
+name::
+    If supplied, use the name and not the object id as the package name.
+
+state::
+    Either "present" or "absent", defaults to "present".
+
+version::
+    If supplied, use to install or uninstall a specific version of the package named.
+
+EXAMPLES
+--------
+
+--------------------------------------------------------------------------------
+# Ensure sys-devel/gcc is installed
+__package_emerge sys-devel/gcc --state present
+
+# If you want a specific version of a package
+__package_emerge app-portage/gentoolkit --state present --version 0.3.0.8-r2
+
+# Remove package
+__package_emerge sys-devel/gcc --state absent
+--------------------------------------------------------------------------------
+
+
+SEE ALSO
+--------
+- cdist-type(7)
+- cdist-type__package(7)
+- cdist-type__package_emerge_dependencies(7)
+
+
+COPYING
+-------
+Copyright \(C) 2013 Thomas Oettli. 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_emerge/parameter/optional b/cdist/conf/type/__package_emerge/parameter/optional
new file mode 100644
index 00000000..f5c897df
--- /dev/null
+++ b/cdist/conf/type/__package_emerge/parameter/optional
@@ -0,0 +1,3 @@
+name
+state
+version

From c48f31389f4e739615dca8194d50ab2c153e2b17 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 12 Dec 2013 10:59:45 +0100
Subject: [PATCH 44/93] initial submit of type __package_emerge_dependencies

---
 .../explorer/flaggie_installed                |  7 +++
 .../explorer/gentoolkit_installed             |  7 +++
 .../gencode-remote                            | 15 ++++++
 .../__package_emerge_dependencies/man.text    | 48 +++++++++++++++++++
 .../__package_emerge_dependencies/singleton   |  0
 5 files changed, 77 insertions(+)
 create mode 100644 cdist/conf/type/__package_emerge_dependencies/explorer/flaggie_installed
 create mode 100644 cdist/conf/type/__package_emerge_dependencies/explorer/gentoolkit_installed
 create mode 100644 cdist/conf/type/__package_emerge_dependencies/gencode-remote
 create mode 100644 cdist/conf/type/__package_emerge_dependencies/man.text
 create mode 100644 cdist/conf/type/__package_emerge_dependencies/singleton

diff --git a/cdist/conf/type/__package_emerge_dependencies/explorer/flaggie_installed b/cdist/conf/type/__package_emerge_dependencies/explorer/flaggie_installed
new file mode 100644
index 00000000..1652ffc3
--- /dev/null
+++ b/cdist/conf/type/__package_emerge_dependencies/explorer/flaggie_installed
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ -x /usr/bin/flaggie ]; then
+    echo "true"
+else
+    echo "false"
+fi
diff --git a/cdist/conf/type/__package_emerge_dependencies/explorer/gentoolkit_installed b/cdist/conf/type/__package_emerge_dependencies/explorer/gentoolkit_installed
new file mode 100644
index 00000000..74c2378d
--- /dev/null
+++ b/cdist/conf/type/__package_emerge_dependencies/explorer/gentoolkit_installed
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ -x /usr/bin/q ]; then
+    echo "true"
+else
+    echo "false"
+fi
diff --git a/cdist/conf/type/__package_emerge_dependencies/gencode-remote b/cdist/conf/type/__package_emerge_dependencies/gencode-remote
new file mode 100644
index 00000000..0c84e53d
--- /dev/null
+++ b/cdist/conf/type/__package_emerge_dependencies/gencode-remote
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+gentoolkit_installed="$(cat "$__object/explorer/gentoolkit_installed")"
+flaggie_installed="$(cat "$__object/explorer/flaggie_installed")"
+
+if [ "${gentoolkit_installed}" != "true" ]; then
+    # emerge app-portage/gentoolkit
+    echo "emerge app-portage/gentoolkit &> /dev/null || exit 1"
+fi
+
+if [ "${flaggie_installed}" != "true" ]; then
+    # emerge app-portage/flaggie
+    echo "emerge app-portage/flaggie &> /dev/null || exit 1"
+fi
+
diff --git a/cdist/conf/type/__package_emerge_dependencies/man.text b/cdist/conf/type/__package_emerge_dependencies/man.text
new file mode 100644
index 00000000..0862256b
--- /dev/null
+++ b/cdist/conf/type/__package_emerge_dependencies/man.text
@@ -0,0 +1,48 @@
+cdist-type__package_emerge_dependencies(7)
+==========================================
+Thomas Oettli <otho--@--sfs.biz>
+
+
+NAME
+----
+cdist-type__package_emerge_dependencies - Install dependencies for __package_emerge
+
+
+DESCRIPTION
+-----------
+Portage is usually used on the gentoo distribution to manage packages.
+This type installs the following tools which are required by __package_emerge to work:
+app-portage/flaggie
+app-portage/gentoolkit
+
+
+REQUIRED PARAMETERS
+-------------------
+None
+
+
+OPTIONAL PARAMETERS
+-------------------
+None
+
+
+EXAMPLES
+--------
+
+--------------------------------------------------------------------------------
+# Ensure app-portage/flaggie and app-portage/gentoolkit are installed
+__package_emerge_dependencies
+--------------------------------------------------------------------------------
+
+
+SEE ALSO
+--------
+- cdist-type(7)
+- cdist-type__package(7)
+- cdist-type__package_emerge(7)
+
+
+COPYING
+-------
+Copyright \(C) 2013 Thomas Oettli. 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_emerge_dependencies/singleton b/cdist/conf/type/__package_emerge_dependencies/singleton
new file mode 100644
index 00000000..e69de29b

From 8749ce61783359944adb4c291746d0c823509c23 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Thu, 12 Dec 2013 18:04:49 +0100
Subject: [PATCH 45/93] +begin of discussion with steven

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/dev/logs/2013-12-12.discussion | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 docs/dev/logs/2013-12-12.discussion

diff --git a/docs/dev/logs/2013-12-12.discussion b/docs/dev/logs/2013-12-12.discussion
new file mode 100644
index 00000000..58d25517
--- /dev/null
+++ b/docs/dev/logs/2013-12-12.discussion
@@ -0,0 +1,6 @@
+With Steven
+
+- Implement environments
+    - for configuring "anything" including switches
+    - can disable / use other global explorers
+- 98% of our framework is generic and can be used for any applikation

From 976ce8c44ee198e0426dc8e1ff3eb79ff3d7a7ba Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 13 Dec 2013 11:42:12 +0100
Subject: [PATCH 46/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index ff480a93..8aebcc3f 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -18,6 +18,7 @@ Changelog
 	* Type __cron: Add support for raw lines (Daniel Heule)
 	* Type __key_value: Fix quoting issue (Steven Armstrong)
 	* Type __package_zypper: Support non packages as well (Daniel Heule)
+	* Type __package_zypper: Support package versions (Daniel Heule)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From f165b5611e83745e2febb05dc916e9db948901a4 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 13 Dec 2013 14:33:22 +0100
Subject: [PATCH 47/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docs/changelog b/docs/changelog
index 8aebcc3f..a8fe33b4 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -10,6 +10,8 @@ Changelog
 	* Core: Removed unused "changed" attribute of objects 
 	* New Type: __zypper_repo (Daniel Heule)
 	* New Type: __zypper_service (Daniel Heule)
+	* New Type: __package_emerge (Daniel Heule)
+	* New Type: __package_emerge_dependencies (Daniel Heule)
 	* Type: __iptables_rule: Use default parameter
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)

From 14dee79a9ba1149a05aea097025ab4fb57f8a54f Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Mon, 16 Dec 2013 13:29:43 +0100
Subject: [PATCH 48/93] handle parameter --state explicilty to respect defaults

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/conf/type/__package/manifest                | 8 +++++---
 cdist/conf/type/__package/parameter/default/state | 1 +
 2 files changed, 6 insertions(+), 3 deletions(-)
 create mode 100644 cdist/conf/type/__package/parameter/default/state

diff --git a/cdist/conf/type/__package/manifest b/cdist/conf/type/__package/manifest
index 6a84cb7f..0ebf0099 100755
--- a/cdist/conf/type/__package/manifest
+++ b/cdist/conf/type/__package/manifest
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
 #
 # This file is part of cdist.
 #
@@ -44,10 +44,12 @@ else
    esac
 fi
 
-set -- "$@" "$__object_id"
+state="$(cat "$__object/parameter/state")"
+
+set -- "$@" "$__object_id" "--state" "$state"
 cd "$__object/parameter"
 for property in $(ls .); do
-   if [ "$property" != "type" ]; then
+   if [ "$property" != "type" -a "$property" != "state" ]; then
       set -- "$@" "--$property" "$(cat "$property")"
    fi
 done
diff --git a/cdist/conf/type/__package/parameter/default/state b/cdist/conf/type/__package/parameter/default/state
new file mode 100644
index 00000000..e7f6134f
--- /dev/null
+++ b/cdist/conf/type/__package/parameter/default/state
@@ -0,0 +1 @@
+present

From aec163262741d9427057e0caeff3e0d6e16c7ef7 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Mon, 16 Dec 2013 16:19:27 +0100
Subject: [PATCH 49/93] on older systems, zypper service and zypper repos
 doesn't know the parameter -E, so we need a way which works on older releases
 too

---
 cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids | 4 +++-
 cdist/conf/type/__zypper_service/explorer/repo_ids      | 5 ++++-
 cdist/conf/type/__zypper_service/explorer/service_id    | 4 +++-
 cdist/conf/type/__zypper_service/explorer/service_ids   | 4 +++-
 cdist/conf/type/__zypper_service/explorer/service_uri   | 4 +++-
 5 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
index a0d092b1..2dfb946f 100644
--- a/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
+++ b/cdist/conf/type/__zypper_repo/explorer/enabled_repo_ids
@@ -21,4 +21,6 @@
 # Retrieve all repo id nummbers from enabled repos - parsed zypper output
 #
 #
-echo $(zypper lr -E | cut -d'|' -f 1 | grep -E '^[0-9]')
+# simpler command which works only on SLES11 SP3 or newer:
+# echo $(zypper lr -E | cut -d'|' -f 1 | grep -E '^[0-9]')
+echo $(zypper lr |  grep -E '^[0-9]([^|]+\|){3,3} Yes' | cut -d'|' -f 1)
diff --git a/cdist/conf/type/__zypper_service/explorer/repo_ids b/cdist/conf/type/__zypper_service/explorer/repo_ids
index 8c32b40b..e831b76c 100644
--- a/cdist/conf/type/__zypper_service/explorer/repo_ids
+++ b/cdist/conf/type/__zypper_service/explorer/repo_ids
@@ -21,4 +21,7 @@
 # Manage services with Zypper (mostly suse)
 #
 #
-echo $(zypper lr -u -E  | cut -d'|' -f 1 | grep -E '^[0-9]')
+# simpler command which works only on SLES11 SP3 or newer:
+# echo $(zypper lr -u -E | cut -d'|' -f 1 | grep -E '^[0-9]')
+# on older systems, zypper doesn't know the parameter -E 
+echo $(zypper lr -u | grep -E '^([^|]+\|){3,3} Yes' | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_service/explorer/service_id b/cdist/conf/type/__zypper_service/explorer/service_id
index b473340c..9c3d3a2d 100644
--- a/cdist/conf/type/__zypper_service/explorer/service_id
+++ b/cdist/conf/type/__zypper_service/explorer/service_id
@@ -25,4 +25,6 @@ if [ -f "$__object/parameter/service_uri" ]; then
 else
    uri="/$__object_id"
 fi
-echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 1 )
+# simpler command which works only on SLES11 SP3 or newer:
+# echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 1 )
+echo $(zypper ls -u | grep -E '^([^|]+\|){3,3} Yes' | grep -E "\<$uri\>" | cut -d'|' -f 1 )
diff --git a/cdist/conf/type/__zypper_service/explorer/service_ids b/cdist/conf/type/__zypper_service/explorer/service_ids
index 460b2006..0f1f4186 100644
--- a/cdist/conf/type/__zypper_service/explorer/service_ids
+++ b/cdist/conf/type/__zypper_service/explorer/service_ids
@@ -20,4 +20,6 @@
 #
 # Manage services with Zypper (mostly suse)
 #
-echo $(zypper ls -u -E  | cut -d'|' -f 1 | grep -E '^[0-9]')
+# simpler command which works only on SLES11 SP3 or newer:
+# echo $(zypper ls -u -E | cut -d'|' -f 1 | grep -E '^[0-9]')
+echo $(zypper ls -u | grep -E '^([^|]+\|){3,3} Yes' | cut -d'|' -f 1 | grep -E '^[0-9]')
diff --git a/cdist/conf/type/__zypper_service/explorer/service_uri b/cdist/conf/type/__zypper_service/explorer/service_uri
index aec93cb2..2f4f8960 100644
--- a/cdist/conf/type/__zypper_service/explorer/service_uri
+++ b/cdist/conf/type/__zypper_service/explorer/service_uri
@@ -25,4 +25,6 @@ if [ -f "$__object/parameter/service_uri" ]; then
 else
    uri="/$__object_id"
 fi
-echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 7 )
+# simpler command which works only on SLES11 SP3 or newer:
+# echo $(zypper ls -u -E | grep -E "\<$uri\>" | cut -d'|' -f 7)
+echo $(zypper ls -u | grep -E '^([^|]+\|){3,3} Yes' | grep -E "\<$uri\>" | cut -d'|' -f 7 )

From a70d478f9e6b26d86f51615e2087ad4df854e79f Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Mon, 16 Dec 2013 17:07:49 +0100
Subject: [PATCH 50/93] fixed a minor type with param remove-all-other-services

---
 cdist/conf/type/__zypper_service/man.text          | 4 ++--
 cdist/conf/type/__zypper_service/parameter/boolean | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/cdist/conf/type/__zypper_service/man.text b/cdist/conf/type/__zypper_service/man.text
index b1717c96..31543d93 100644
--- a/cdist/conf/type/__zypper_service/man.text
+++ b/cdist/conf/type/__zypper_service/man.text
@@ -33,7 +33,7 @@ type::
 
 BOOLEAN PARAMETERS
 ------------------
-remove-all-other-service::
+remove-all-other-services::
    Drop all other services found on the target host before adding the new one.
 
 remove-all-repos::
@@ -45,7 +45,7 @@ EXAMPLES
 
 --------------------------------------------------------------------------------
 # Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded
-__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-service --remove-all-repos
+__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos
 
 # Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos
 __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir"
diff --git a/cdist/conf/type/__zypper_service/parameter/boolean b/cdist/conf/type/__zypper_service/parameter/boolean
index bc6a5629..ca711ded 100644
--- a/cdist/conf/type/__zypper_service/parameter/boolean
+++ b/cdist/conf/type/__zypper_service/parameter/boolean
@@ -1,2 +1,2 @@
-remove-all-other-service
+remove-all-other-services
 remove-all-repos

From 138d26e398ae333db032adad78ac608426c2d7e0 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 17 Dec 2013 14:13:20 +0100
Subject: [PATCH 51/93] extended type __user: parameter state, system,
 remove-home new

---
 cdist/conf/type/__user/TODO                   |   2 -
 cdist/conf/type/__user/explorer/group         |   0
 cdist/conf/type/__user/explorer/passwd        |   0
 cdist/conf/type/__user/explorer/shadow        |   0
 cdist/conf/type/__user/gencode-remote         | 153 ++++++++++--------
 cdist/conf/type/__user/man.text               |  28 +++-
 cdist/conf/type/__user/parameter/boolean      |   2 +
 .../conf/type/__user/parameter/default/state  |   1 +
 cdist/conf/type/__user/parameter/optional     |   1 +
 9 files changed, 113 insertions(+), 74 deletions(-)
 delete mode 100644 cdist/conf/type/__user/TODO
 mode change 100755 => 100644 cdist/conf/type/__user/explorer/group
 mode change 100755 => 100644 cdist/conf/type/__user/explorer/passwd
 mode change 100755 => 100644 cdist/conf/type/__user/explorer/shadow
 mode change 100755 => 100644 cdist/conf/type/__user/gencode-remote
 create mode 100644 cdist/conf/type/__user/parameter/default/state

diff --git a/cdist/conf/type/__user/TODO b/cdist/conf/type/__user/TODO
deleted file mode 100644
index fa6aeee7..00000000
--- a/cdist/conf/type/__user/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-- delete users
-
diff --git a/cdist/conf/type/__user/explorer/group b/cdist/conf/type/__user/explorer/group
old mode 100755
new mode 100644
diff --git a/cdist/conf/type/__user/explorer/passwd b/cdist/conf/type/__user/explorer/passwd
old mode 100755
new mode 100644
diff --git a/cdist/conf/type/__user/explorer/shadow b/cdist/conf/type/__user/explorer/shadow
old mode 100755
new mode 100644
diff --git a/cdist/conf/type/__user/gencode-remote b/cdist/conf/type/__user/gencode-remote
old mode 100755
new mode 100644
index a2cdfd22..de559435
--- a/cdist/conf/type/__user/gencode-remote
+++ b/cdist/conf/type/__user/gencode-remote
@@ -2,6 +2,7 @@
 #
 # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 # 2011 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013 Daniel Heule (hda at sfs.biz)
 #
 # This file is part of cdist.
 #
@@ -21,11 +22,14 @@
 #
 # Manage users.
 #
+#set -x
 
 name="$__object_id"
 
 os="$(cat "$__global/explorer/os")"
 
+state=$(cat "$__object/parameter/state")
+
 # We need to shorten options for both usermod and useradd since on some
 # systems (such as *BSD, Darwin) those commands do not handle GNU style long
 # options.
@@ -40,80 +44,97 @@ shorten_property() {
 	shell) ret="-s";;
 	uid) ret="-u";;
     create-home) ret="-m";;
+    system) ret="-r";;
     esac
     echo "$ret"
 }
 
-cd "$__object/parameter"
-if grep -q "^${name}:" "$__object/explorer/passwd"; then
-   for property in $(ls .); do
-      new_value="$(cat "$property")"
-      unset current_value
+if [ "$state" = "present" ]; then
+    cd "$__object/parameter"
+    if grep -q "^${name}:" "$__object/explorer/passwd"; then
+       for property in $(ls .); do
+          new_value="$(cat "$property")"
+          unset current_value
 
-      file="$__object/explorer/passwd"
+          file="$__object/explorer/passwd"
 
-      case "$property" in
-         gid)
-            if $(echo "$new_value" | grep -q '^[0-9][0-9]*$'); then
-               field=4
+          case "$property" in
+             gid)
+                if $(echo "$new_value" | grep -q '^[0-9][0-9]*$'); then
+                   field=4
+                else
+                   # We were passed a group name.  Compare the gid in
+                   # the user's /etc/passwd entry with the gid of the
+                   # group returned by the group explorer.
+                   gid_from_group=$(awk -F: '{ print $3 }' "$__object/explorer/group")
+                   gid_from_passwd=$(awk -F: '{ print $4 }' "$file")
+                   if [ "$gid_from_group" != "$gid_from_passwd" ]; then
+                      current_value="$gid_from_passwd"
+                   else
+                      current_value="$new_value"
+                   fi
+                fi
+             ;;
+             password)
+                field=2
+                file="$__object/explorer/shadow"
+             ;;
+             comment) field=5 ;;
+             home)    field=6 ;;
+             shell)   field=7 ;;
+             uid)     field=3 ;;
+             create-home) continue;; # Does not apply to user modification
+             system) continue;; # Does not apply to user modification
+             state) continue;; # Does not apply to user modification
+             remove-home) continue;; # Does not apply to user modification
+          esac
+
+          # If we haven't already set $current_value above, pull it from the
+          # appropriate file/field.
+          if [ -z "$current_value" ]; then
+             export field
+             current_value="$(awk -F: '{ print $ENVIRON["field"] }' < "$file")"
+          fi
+
+          if [ "$new_value" != "$current_value" ]; then
+              set -- "$@" "$(shorten_property $property)" \'$new_value\'
+          fi
+       done
+
+       if [ $# -gt 0 ]; then
+          if [ "$os" = "freebsd" ]; then
+             echo pw usermod "$@" "$name"
+          else
+             echo usermod "$@" "$name"
+          fi
+       else
+          true
+       fi
+    else
+        for property in $(ls .); do
+            [ "$property" = "state" ] && continue
+            [ "$property" = "remove-home" ] && continue
+            new_value="$(cat "$property")"
+            if [ -z "$new_value" ];then       # Boolean values have no value
+              set -- "$@" "$(shorten_property $property)"
             else
-               # We were passed a group name.  Compare the gid in
-               # the user's /etc/passwd entry with the gid of the
-               # group returned by the group explorer.
-               gid_from_group=$(awk -F: '{ print $3 }' "$__object/explorer/group")
-               gid_from_passwd=$(awk -F: '{ print $4 }' "$file")
-               if [ "$gid_from_group" != "$gid_from_passwd" ]; then
-                  current_value="$gid_from_passwd"
-               else
-                  current_value="$new_value"
-               fi
+              set -- "$@" "$(shorten_property $property)" \'$new_value\'
             fi
-         ;;
-         password)
-            field=2
-            file="$__object/explorer/shadow"
-         ;;
-         comment) field=5 ;;
-         home)    field=6 ;;
-         shell)   field=7 ;;
-         uid)     field=3 ;;
-         create-home) continue;; # Does not apply to user modification
-      esac
+        done
 
-      # If we haven't already set $current_value above, pull it from the
-      # appropriate file/field.
-      if [ -z "$current_value" ]; then
-         export field
-         current_value="$(awk -F: '{ print $ENVIRON["field"] }' < "$file")"
-      fi
-
-      if [ "$new_value" != "$current_value" ]; then
-          set -- "$@" "$(shorten_property $property)" \'$new_value\'
-      fi
-   done
-
-   if [ $# -gt 0 ]; then
-      if [ "$os" = "freebsd" ]; then
-         echo pw usermod "$@" "$name"
-      else
-         echo usermod "$@" "$name"
-      fi
-   else
-      true
-   fi
+       if [ "$os" = "freebsd" ]; then
+          echo pw useradd "$@" "$name"
+       else
+          echo useradd "$@" "$name"
+       fi
+    fi
 else
-   for property in $(ls .); do
-      new_value="$(cat "$property")"
-      if [ -z "$new_value" ];then       # Boolean values have no value
-          set -- "$@" "$(shorten_property $property)"
-      else
-          set -- "$@" "$(shorten_property $property)" \'$new_value\'
-      fi
-   done
-
-   if [ "$os" = "freebsd" ]; then
-      echo pw useradd "$@" "$name"
-   else
-      echo useradd "$@" "$name"
-   fi
+    if grep -q "^${name}:" "$__object/explorer/passwd"; then
+        #user exists, but state != present, so delete it
+        if [ -f "$__object/parameter/remove-home" ]; then
+            echo userdel -r "${name}"
+        else
+            echo userdel "${name}"
+        fi
+    fi
 fi
diff --git a/cdist/conf/type/__user/man.text b/cdist/conf/type/__user/man.text
index 9db4a9f0..2536c1bc 100644
--- a/cdist/conf/type/__user/man.text
+++ b/cdist/conf/type/__user/man.text
@@ -20,19 +20,29 @@ None.
 
 OPTIONAL PARAMETERS
 -------------------
+state::
+    absent or present, defaults to present
 comment::
-   see usermod(8)
+    see usermod(8)
 home::
-   see above
+    see above
 gid::
-   see above
+    see above
 password::
-   see above
+    see above
 shell::
-   see above
+    see above
 uid::
-   see above
+    see above
+system::
+    see above
 
+BOOLEAN PARAMETERS
+------------------
+create-home::
+    see useradd(8), apply only on user create
+remove-home::
+    see userdel(8), apply only on user delete
 
 EXAMPLES
 --------
@@ -44,8 +54,14 @@ __user foobar
 # Same but with a different shell
 __user foobar --shell /bin/zsh
 
+# Same but for a system account
+__user foobar --system
+
 # Set explicit uid and home
 __user foobar --uid 1001 --shell /bin/zsh --home /home/foobar
+
+# Drop user if exists
+__user foobar --state absent
 --------------------------------------------------------------------------------
 
 
diff --git a/cdist/conf/type/__user/parameter/boolean b/cdist/conf/type/__user/parameter/boolean
index e0517c6a..83afdebe 100644
--- a/cdist/conf/type/__user/parameter/boolean
+++ b/cdist/conf/type/__user/parameter/boolean
@@ -1 +1,3 @@
 create-home
+remove-home
+system
diff --git a/cdist/conf/type/__user/parameter/default/state b/cdist/conf/type/__user/parameter/default/state
new file mode 100644
index 00000000..e7f6134f
--- /dev/null
+++ b/cdist/conf/type/__user/parameter/default/state
@@ -0,0 +1 @@
+present
diff --git a/cdist/conf/type/__user/parameter/optional b/cdist/conf/type/__user/parameter/optional
index e3cf52d5..de6c3838 100644
--- a/cdist/conf/type/__user/parameter/optional
+++ b/cdist/conf/type/__user/parameter/optional
@@ -1,3 +1,4 @@
+state
 comment
 home
 gid

From 7d4c11a1860ffc6ef63c897264a19d9fc70507d7 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 17 Dec 2013 14:15:41 +0100
Subject: [PATCH 52/93] reset false mode changes

---
 cdist/conf/type/__user/explorer/group  | 0
 cdist/conf/type/__user/explorer/passwd | 0
 cdist/conf/type/__user/explorer/shadow | 0
 cdist/conf/type/__user/gencode-remote  | 0
 4 files changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 cdist/conf/type/__user/explorer/group
 mode change 100644 => 100755 cdist/conf/type/__user/explorer/passwd
 mode change 100644 => 100755 cdist/conf/type/__user/explorer/shadow
 mode change 100644 => 100755 cdist/conf/type/__user/gencode-remote

diff --git a/cdist/conf/type/__user/explorer/group b/cdist/conf/type/__user/explorer/group
old mode 100644
new mode 100755
diff --git a/cdist/conf/type/__user/explorer/passwd b/cdist/conf/type/__user/explorer/passwd
old mode 100644
new mode 100755
diff --git a/cdist/conf/type/__user/explorer/shadow b/cdist/conf/type/__user/explorer/shadow
old mode 100644
new mode 100755
diff --git a/cdist/conf/type/__user/gencode-remote b/cdist/conf/type/__user/gencode-remote
old mode 100644
new mode 100755

From 87336f9b4f3e7f7ed7967bd69342fe466a626ebe Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 18 Dec 2013 17:20:30 +0100
Subject: [PATCH 53/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index a8fe33b4..0a6ba0a1 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -21,6 +21,7 @@ Changelog
 	* Type __key_value: Fix quoting issue (Steven Armstrong)
 	* Type __package_zypper: Support non packages as well (Daniel Heule)
 	* Type __package_zypper: Support package versions (Daniel Heule)
+	* Type __package: Use state --present by default (Steven Armstrong)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From 122fb9665411d16ad2b2207d10435d58574d3cd8 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 18 Dec 2013 18:09:57 +0100
Subject: [PATCH 54/93] use default parameter for __start_on_boot type

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 cdist/conf/type/__start_on_boot/gencode-remote          | 2 +-
 cdist/conf/type/__start_on_boot/parameter/default/state | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 cdist/conf/type/__start_on_boot/parameter/default/state

diff --git a/cdist/conf/type/__start_on_boot/gencode-remote b/cdist/conf/type/__start_on_boot/gencode-remote
index 58ff6a4a..a8abebbc 100755
--- a/cdist/conf/type/__start_on_boot/gencode-remote
+++ b/cdist/conf/type/__start_on_boot/gencode-remote
@@ -19,7 +19,7 @@
 #
 #
 
-state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo present)"
+state_should="$(cat "$__object/parameter/state")"
 state_is=$(cat "$__object/explorer/state")
 
 # Short circuit if nothing is to be done
diff --git a/cdist/conf/type/__start_on_boot/parameter/default/state b/cdist/conf/type/__start_on_boot/parameter/default/state
new file mode 100644
index 00000000..e7f6134f
--- /dev/null
+++ b/cdist/conf/type/__start_on_boot/parameter/default/state
@@ -0,0 +1 @@
+present

From 7d46156fd6becff0d70154ac678d3142d9bf93f9 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 18 Dec 2013 18:13:32 +0100
Subject: [PATCH 55/93] changes for __start_on_boot

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 0a6ba0a1..a8a686dd 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -22,6 +22,7 @@ Changelog
 	* Type __package_zypper: Support non packages as well (Daniel Heule)
 	* Type __package_zypper: Support package versions (Daniel Heule)
 	* Type __package: Use state --present by default (Steven Armstrong)
+	* Type __start_on_boot: Use default parameter state
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From e5253e0330c2e5ad15dd3e38e4f7cfde6af3228f Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 19 Dec 2013 08:14:29 +0100
Subject: [PATCH 56/93] correct man page text of system parameter

---
 cdist/conf/type/__user/man.text | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cdist/conf/type/__user/man.text b/cdist/conf/type/__user/man.text
index 2536c1bc..47e63d3d 100644
--- a/cdist/conf/type/__user/man.text
+++ b/cdist/conf/type/__user/man.text
@@ -34,11 +34,11 @@ shell::
     see above
 uid::
     see above
-system::
-    see above
 
 BOOLEAN PARAMETERS
 ------------------
+system::
+    see useradd(8), apply only on user create
 create-home::
     see useradd(8), apply only on user create
 remove-home::

From 9d54eb7257a3b27830fc92f0855f6c01d807be8d Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Thu, 19 Dec 2013 11:21:26 +0100
Subject: [PATCH 57/93] implement messaging for __group type

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/conf/type/__group/gencode-remote | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/cdist/conf/type/__group/gencode-remote b/cdist/conf/type/__group/gencode-remote
index bb6797c2..1cffa8d4 100755
--- a/cdist/conf/type/__group/gencode-remote
+++ b/cdist/conf/type/__group/gencode-remote
@@ -58,10 +58,12 @@ if grep -q "^${name}:" "$__object/explorer/group"; then
 
       if [ "$new_value" != "$current_value" ]; then
          set -- "$@" "$proparg" \"$new_value\"
+         echo change $property $new_value $current_value >> "$__messages_out"
       fi
    done
 
    if [ $# -gt 0 ]; then
+      echo mod >> "$__messages_out"
       case $os in
          freebsd)
             echo pw group mod "$@" "$name"
@@ -72,6 +74,7 @@ if grep -q "^${name}:" "$__object/explorer/group"; then
       esac
    fi
 else
+   echo add >> "$__messages_out"
    for property in $(ls .); do
       new_value="$(cat "$property")"
       if [ "$os" = "freebsd" ]; then
@@ -95,6 +98,7 @@ else
       fi
 
       set -- "$@" "$proparg" \"$new_value\"
+      echo set $property $new_value >> "$__messages_out"
    done
 
    case $os in

From 80fffbad1116d215669d2a716b1bc629f47ef6a5 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Thu, 19 Dec 2013 11:21:44 +0100
Subject: [PATCH 58/93] implement messaging for __user type

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/conf/type/__user/gencode-remote | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/cdist/conf/type/__user/gencode-remote b/cdist/conf/type/__user/gencode-remote
index a2cdfd22..892bb8e1 100755
--- a/cdist/conf/type/__user/gencode-remote
+++ b/cdist/conf/type/__user/gencode-remote
@@ -89,10 +89,12 @@ if grep -q "^${name}:" "$__object/explorer/passwd"; then
 
       if [ "$new_value" != "$current_value" ]; then
           set -- "$@" "$(shorten_property $property)" \'$new_value\'
+          echo change $property $new_value $current_value >> "$__messages_out"
       fi
    done
 
    if [ $# -gt 0 ]; then
+      echo mod >> "$__messages_out"
       if [ "$os" = "freebsd" ]; then
          echo pw usermod "$@" "$name"
       else
@@ -102,12 +104,15 @@ if grep -q "^${name}:" "$__object/explorer/passwd"; then
       true
    fi
 else
+   echo add >> "$__messages_out"
    for property in $(ls .); do
       new_value="$(cat "$property")"
       if [ -z "$new_value" ];then       # Boolean values have no value
           set -- "$@" "$(shorten_property $property)"
+          echo set $property >> "$__messages_out"
       else
           set -- "$@" "$(shorten_property $property)" \'$new_value\'
+          echo set $property $new_value >> "$__messages_out"
       fi
    done
 

From d6f84d1ef0069c3663f56864626daed5d43370f8 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 19 Dec 2013 13:54:16 +0100
Subject: [PATCH 59/93] __start_on_boot incl. gentoo support

---
 cdist/conf/type/__start_on_boot/explorer/state   |  8 ++++++--
 cdist/conf/type/__start_on_boot/gencode-remote   | 16 ++++++++--------
 cdist/conf/type/__start_on_boot/man.text         |  4 +++-
 .../parameter/default/target_runlevel            |  1 +
 .../conf/type/__start_on_boot/parameter/optional |  1 +
 5 files changed, 19 insertions(+), 11 deletions(-)
 create mode 100644 cdist/conf/type/__start_on_boot/parameter/default/target_runlevel

diff --git a/cdist/conf/type/__start_on_boot/explorer/state b/cdist/conf/type/__start_on_boot/explorer/state
index 4e0c82c2..62f86332 100755
--- a/cdist/conf/type/__start_on_boot/explorer/state
+++ b/cdist/conf/type/__start_on_boot/explorer/state
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # 2012-2013 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013 Daniel Heule (hda at sfs.biz)
 #
 # This file is part of cdist.
 #
@@ -23,9 +24,9 @@
 
 os=$("$__explorer/os")
 runlevel=$("$__explorer/runlevel")
+target_runlevel="$(cat "$__object/parameter/target_runlevel")"
 name="$__object_id"
 
-
 case "$os" in
     archlinux)
         state=$(systemctl is-enabled "$name" >/dev/null 2>&1 \
@@ -42,7 +43,10 @@ case "$os" in
         state=$(chkconfig --level "$runlevel" "$name" || echo absent)
         [ "$state" ] || state="present"
     ;;
-
+    gentoo)
+        state="present"
+        [ -f "/etc/runlevels/${target_runlevel}/${name}" ] || state="absent"
+    ;;
     *)
        echo "Unsupported os: $os" >&2
        exit 1
diff --git a/cdist/conf/type/__start_on_boot/gencode-remote b/cdist/conf/type/__start_on_boot/gencode-remote
index a8abebbc..61b2b9fe 100755
--- a/cdist/conf/type/__start_on_boot/gencode-remote
+++ b/cdist/conf/type/__start_on_boot/gencode-remote
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # 2012-2013 Nico Schottelius (nico-cdist at schottelius.org)
+# 2013 Daniel Heule (hda at sfs.biz)
 #
 # This file is part of cdist.
 #
@@ -21,6 +22,7 @@
 
 state_should="$(cat "$__object/parameter/state")"
 state_is=$(cat "$__object/explorer/state")
+target_runlevel="$(cat "$__object/parameter/target_runlevel")"
 
 # Short circuit if nothing is to be done
 [ "$state_should" = "$state_is" ] && exit 0
@@ -38,10 +40,9 @@ case "$state_should" in
                 echo "update-rc.d \"$name\" defaults >/dev/null"
             ;;
 
-#           FIXME: Disabled until the explorer is checked
-#            gentoo)
-#                echo rc-update add \"$name\" default
-#            ;;
+            gentoo)
+                echo rc-update add \"$name\" \"$target_runlevel\"
+            ;;
 
             amazon|centos|fedora|owl|redhat|suse)
                 echo chkconfig \"$name\" on
@@ -70,10 +71,9 @@ case "$state_should" in
                 echo update-rc.d -f \"$name\" remove
             ;;
 
-# FIXME: Disabled until the explorer is checked
-#            gentoo)
-#                echo rc-update del \"$name\"
-#            ;;
+            gentoo)
+                echo rc-update del \"$name\"  \"$target_runlevel\"
+            ;;
 
             centos|fedora|owl|redhat|suse)
                 echo chkconfig \"$name\" off
diff --git a/cdist/conf/type/__start_on_boot/man.text b/cdist/conf/type/__start_on_boot/man.text
index 6d804884..dfada6d8 100644
--- a/cdist/conf/type/__start_on_boot/man.text
+++ b/cdist/conf/type/__start_on_boot/man.text
@@ -14,7 +14,7 @@ This cdist type allows you to enable or disable stuff to be started
 at boot of your operating system.
 
 Warning: This type has not been tested intensively and is not fully
-supported (i.e. gentoo and *bsd are not implemented).
+supported (i.e. *bsd are not implemented).
 
 
 REQUIRED PARAMETERS
@@ -25,6 +25,8 @@ OPTIONAL PARAMETERS
 -------------------
 state::
     Either "present" or "absent", defaults to "present"
+target_runlevel::
+    Runlevel which should be modified, defaults to "default" (only used on gentoo systems).
 
 
 EXAMPLES
diff --git a/cdist/conf/type/__start_on_boot/parameter/default/target_runlevel b/cdist/conf/type/__start_on_boot/parameter/default/target_runlevel
new file mode 100644
index 00000000..4ad96d51
--- /dev/null
+++ b/cdist/conf/type/__start_on_boot/parameter/default/target_runlevel
@@ -0,0 +1 @@
+default
diff --git a/cdist/conf/type/__start_on_boot/parameter/optional b/cdist/conf/type/__start_on_boot/parameter/optional
index ff72b5c7..91685caf 100644
--- a/cdist/conf/type/__start_on_boot/parameter/optional
+++ b/cdist/conf/type/__start_on_boot/parameter/optional
@@ -1 +1,2 @@
 state
+target_runlevel

From 17d36fdfab850739aab0ad4293b3f140afd97b95 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Thu, 19 Dec 2013 14:35:36 +0100
Subject: [PATCH 60/93] update changes for 3.0.0 release (5 more days to go)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/docs/changelog b/docs/changelog
index a8a686dd..4c689392 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -6,23 +6,24 @@ Changelog
 
 
 3.0.0:
-	* Core: Messaging support added
+	* Core: Added messaging support
 	* Core: Removed unused "changed" attribute of objects 
 	* New Type: __zypper_repo (Daniel Heule)
 	* New Type: __zypper_service (Daniel Heule)
 	* New Type: __package_emerge (Daniel Heule)
 	* New Type: __package_emerge_dependencies (Daniel Heule)
-	* Type: __iptables_rule: Use default parameter
+	* Type __cron: Add support for raw lines (Daniel Heule)
 	* Type __file: Do not generate code if mode is 0xxx
+	* Type: __iptables_rule: Use default parameter
+	* Type __key_value: Fix quoting issue (Steven Armstrong)
+	* Type __package: Use state --present by default (Steven Armstrong)
+	* Type __package_zypper: Support non packages as well (Daniel Heule)
+	* Type __package_zypper: Support package versions (Daniel Heule)
 	* Type __postfix_*: Depend on __postfix Type (Steven Armstrong)
 	* Type __postfix_postconf: Enable support for SuSE (Daniel Heule)
 	* Type __postfix: Enable support for SuSE (Daniel Heule)
-	* Type __cron: Add support for raw lines (Daniel Heule)
-	* Type __key_value: Fix quoting issue (Steven Armstrong)
-	* Type __package_zypper: Support non packages as well (Daniel Heule)
-	* Type __package_zypper: Support package versions (Daniel Heule)
-	* Type __package: Use state --present by default (Steven Armstrong)
 	* Type __start_on_boot: Use default parameter state
+	* Type __start_on_boot: Add support for gentoo (Daniel Heule)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From c50925cab5b6a8d5647092a46a5893fff944c4e9 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Thu, 19 Dec 2013 14:45:55 +0100
Subject: [PATCH 61/93] bugfix in __cron type, was a wrong quoting

---
 cdist/conf/type/__cron/explorer/entry | 0
 cdist/conf/type/__cron/gencode-remote | 6 +++---
 2 files changed, 3 insertions(+), 3 deletions(-)
 mode change 100755 => 100644 cdist/conf/type/__cron/explorer/entry
 mode change 100644 => 100755 cdist/conf/type/__cron/gencode-remote

diff --git a/cdist/conf/type/__cron/explorer/entry b/cdist/conf/type/__cron/explorer/entry
old mode 100755
new mode 100644
diff --git a/cdist/conf/type/__cron/gencode-remote b/cdist/conf/type/__cron/gencode-remote
old mode 100644
new mode 100755
index e84cf66a..712eb1a1
--- a/cdist/conf/type/__cron/gencode-remote
+++ b/cdist/conf/type/__cron/gencode-remote
@@ -60,7 +60,7 @@ prefix="#cdist:__cron/$__object_id"
 suffix="#/cdist:__cron/$__object_id"
 filter="^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V"
 cat << DONE
-crontab -u $user -l | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" '
+crontab -u $user -l 2>/dev/null | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" '
 {
    if (index(\$0,prefix)) {
       triggered=1
@@ -79,12 +79,12 @@ DONE
 case "$state_should" in
     present)
         echo "("
-        echo "crontab -u $user -l | grep -v -E "$filter" 2>/dev/null || true"
+        echo "crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" 2>/dev/null || true"
         echo "echo '$entry'"
         echo ") | crontab -u $user -"
     ;;
     absent)
-        echo "( crontab -u $user -l | grep -v -E "$filter" 2>/dev/null || true ) | \\"
+        echo "( crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" 2>/dev/null || true ) | \\"
         echo "grep -v \"# $name\\$\" | crontab -u $user -"
     ;;
 esac

From ad5c105858692fc5dd09fb641a43ae08a438ade0 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Thu, 19 Dec 2013 15:06:51 +0100
Subject: [PATCH 62/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docs/changelog b/docs/changelog
index 4c689392..764386b9 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -13,6 +13,8 @@ Changelog
 	* New Type: __package_emerge (Daniel Heule)
 	* New Type: __package_emerge_dependencies (Daniel Heule)
 	* Type __cron: Add support for raw lines (Daniel Heule)
+	* Type __cron: Suppress stderr output from crontab (Daniel Heule)
+	* Type __cron: Fix quoting issue (Daniel Heule)
 	* Type __file: Do not generate code if mode is 0xxx
 	* Type: __iptables_rule: Use default parameter
 	* Type __key_value: Fix quoting issue (Steven Armstrong)

From 67f61eb7ec12745b9ab7c87eb014ee7fae96a0a7 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Thu, 19 Dec 2013 23:33:43 +0100
Subject: [PATCH 63/93] make default values for optional_multiple parameters
 work

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/emulator.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/cdist/emulator.py b/cdist/emulator.py
index b1cd8f2d..1e530fec 100644
--- a/cdist/emulator.py
+++ b/cdist/emulator.py
@@ -37,6 +37,21 @@ class MissingRequiredEnvironmentVariableError(cdist.Error):
         return self.message
 
 
+class DefaultList(list):
+    """Helper class to allow default values for optional_multiple parameters.
+
+    @see https://groups.google.com/forum/#!msg/comp.lang.python/sAUvkJEDpRc/RnRymrzJVDYJ
+    """
+    def __copy__(self):
+        return []
+
+    @classmethod
+    def create(cls, initial=None):
+        if initial:
+            initial = initial.split('\n')
+        return cls(initial)
+
+
 class Emulator(object):
     def __init__(self, argv, stdin=sys.stdin.buffer, env=os.environ):
         self.argv           = argv
@@ -101,7 +116,7 @@ class Emulator(object):
         for parameter in self.cdist_type.optional_multiple_parameters:
             argument = "--" + parameter
             parser.add_argument(argument, dest=parameter, action='append', required=False,
-                default=self.cdist_type.parameter_defaults.get(parameter, None))
+                default=DefaultList.create(self.cdist_type.parameter_defaults.get(parameter, None)))
         for parameter in self.cdist_type.boolean_parameters:
             argument = "--" + parameter
             parser.add_argument(argument, dest=parameter, action='store_const', const='')

From 3c1e001f5e07335e6c2c4f9e79f3b17db751c34b Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 20 Dec 2013 08:46:33 +0100
Subject: [PATCH 64/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docs/changelog b/docs/changelog
index 764386b9..bc1b894d 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -26,6 +26,8 @@ Changelog
 	* Type __postfix: Enable support for SuSE (Daniel Heule)
 	* Type __start_on_boot: Use default parameter state
 	* Type __start_on_boot: Add support for gentoo (Daniel Heule)
+	* Type __user: Add support for state parameter (Daniel Heule)
+	* Type __user: Add support for system users (Daniel Heule)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From b99af6663c8c58d70c9b4bda4fe279e0bae102a2 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 20 Dec 2013 08:50:45 +0100
Subject: [PATCH 65/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index bc1b894d..abe8626f 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -8,6 +8,7 @@ Changelog
 3.0.0:
 	* Core: Added messaging support
 	* Core: Removed unused "changed" attribute of objects 
+	* Core: Support default values for multiple parameters (Steven Armstrong)
 	* New Type: __zypper_repo (Daniel Heule)
 	* New Type: __zypper_service (Daniel Heule)
 	* New Type: __package_emerge (Daniel Heule)

From e5ab33651da3445572a068f0d3def154f4b0daa5 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 20 Dec 2013 08:54:16 +0100
Subject: [PATCH 66/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index abe8626f..a5f5d102 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -29,6 +29,7 @@ Changelog
 	* Type __start_on_boot: Add support for gentoo (Daniel Heule)
 	* Type __user: Add support for state parameter (Daniel Heule)
 	* Type __user: Add support for system users (Daniel Heule)
+	* Type __user: Add messaging support (Steven Armstrong)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From d84a43960ba7c0e17bca917fc0d8b2bc2022b921 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 20 Dec 2013 08:56:23 +0100
Subject: [PATCH 67/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index a5f5d102..c51d38c9 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -30,6 +30,7 @@ Changelog
 	* Type __user: Add support for state parameter (Daniel Heule)
 	* Type __user: Add support for system users (Daniel Heule)
 	* Type __user: Add messaging support (Steven Armstrong)
+	* Type __zypper_service: Support older SuSE releases (Daniel Heule)
 
 2.3.7: 2013-12-02
 	* Type __file: Secure the file transfer by using mktemp (Steven Armstrong)

From 8b0eb5766af4fb4545baa116237690e58ed36dec Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Fri, 20 Dec 2013 10:56:46 +0100
Subject: [PATCH 68/93] bugfix: handle non-existent default

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/emulator.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cdist/emulator.py b/cdist/emulator.py
index 1e530fec..78597621 100644
--- a/cdist/emulator.py
+++ b/cdist/emulator.py
@@ -48,8 +48,8 @@ class DefaultList(list):
     @classmethod
     def create(cls, initial=None):
         if initial:
-            initial = initial.split('\n')
-        return cls(initial)
+            return cls(initial.split('\n'))
+        return cls()
 
 
 class Emulator(object):

From 39f65d2ef7b3756bc7610b10bf136e5e8d97911c Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Fri, 20 Dec 2013 11:17:43 +0100
Subject: [PATCH 69/93] leave conversion of list to underlying fsproperty

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/emulator.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/cdist/emulator.py b/cdist/emulator.py
index 1e530fec..15728215 100644
--- a/cdist/emulator.py
+++ b/cdist/emulator.py
@@ -143,8 +143,6 @@ class Emulator(object):
         self.parameters = {}
         for key,value in vars(self.args).items():
             if value is not None:
-                if isinstance(value, list):
-                    value = '\n'.join(value)
                 self.parameters[key] = value
 
         if self.cdist_object.exists:

From 29ae02565cbdb1b5a190b7caad5ebd3f155b71ac Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Fri, 20 Dec 2013 22:57:15 +0100
Subject: [PATCH 70/93] ++changes(3.0.0)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index c51d38c9..7be233dc 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -9,6 +9,7 @@ Changelog
 	* Core: Added messaging support
 	* Core: Removed unused "changed" attribute of objects 
 	* Core: Support default values for multiple parameters (Steven Armstrong)
+	* Core: Ensure Object Parameter file contains \n (Steven Armstrong)
 	* New Type: __zypper_repo (Daniel Heule)
 	* New Type: __zypper_service (Daniel Heule)
 	* New Type: __package_emerge (Daniel Heule)

From 08762330e177729372349b3fdde67e81a9fd3377 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Sat, 21 Dec 2013 21:59:47 +0100
Subject: [PATCH 71/93] default to None, not empty list

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/emulator.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/cdist/emulator.py b/cdist/emulator.py
index c9ce663a..b70ef956 100644
--- a/cdist/emulator.py
+++ b/cdist/emulator.py
@@ -49,7 +49,6 @@ class DefaultList(list):
     def create(cls, initial=None):
         if initial:
             return cls(initial.split('\n'))
-        return cls()
 
 
 class Emulator(object):

From 49bdd83ea1191bf684c3e680b65cf9080d65cb81 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Sat, 21 Dec 2013 22:00:57 +0100
Subject: [PATCH 72/93] test for feature instead of type

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/util/fsproperty.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/cdist/util/fsproperty.py b/cdist/util/fsproperty.py
index 5814b2b4..797c929b 100644
--- a/cdist/util/fsproperty.py
+++ b/cdist/util/fsproperty.py
@@ -134,7 +134,11 @@ class DirectoryDict(collections.MutableMapping):
     def __setitem__(self, key, value):
         try:
             with open(os.path.join(self.path, key), "w") as fd:
-                if type(value) == type([]):
+                if (not hasattr(value, 'strip') and
+                    hasattr(value, '__getitem__') or
+                    hasattr(value, '__iter__')):
+                    # if it looks like a sequence and quacks like a sequence,
+                    # it is a sequence
                     for v in value:
                         fd.write(str(v) + '\n')
                 else:

From 7ab5cd35acafcb8b20a118cc1884e3e90ff0db42 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Sat, 21 Dec 2013 22:49:06 +0100
Subject: [PATCH 73/93] missing parens -> matched what we did not want to match

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/util/fsproperty.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cdist/util/fsproperty.py b/cdist/util/fsproperty.py
index 797c929b..49d4a32d 100644
--- a/cdist/util/fsproperty.py
+++ b/cdist/util/fsproperty.py
@@ -135,8 +135,8 @@ class DirectoryDict(collections.MutableMapping):
         try:
             with open(os.path.join(self.path, key), "w") as fd:
                 if (not hasattr(value, 'strip') and
-                    hasattr(value, '__getitem__') or
-                    hasattr(value, '__iter__')):
+                    (hasattr(value, '__getitem__') or
+                    hasattr(value, '__iter__'))):
                     # if it looks like a sequence and quacks like a sequence,
                     # it is a sequence
                     for v in value:

From 2b0210b905a285c865c2759edee6e549622c225f Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 24 Dec 2013 23:05:56 +0100
Subject: [PATCH 74/93] update releasedate

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/changelog b/docs/changelog
index 7be233dc..586411fa 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -5,7 +5,7 @@ Changelog
 	* Exception: No braces means author == Nico Schottelius
 
 
-3.0.0:
+3.0.0: 2013-12-24
 	* Core: Added messaging support
 	* Core: Removed unused "changed" attribute of objects 
 	* Core: Support default values for multiple parameters (Steven Armstrong)

From 241d8e6c3ab1817094e4c94e7c8cec51c0bb2ebf Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 24 Dec 2013 23:07:43 +0100
Subject: [PATCH 75/93] fix typo

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/changelog b/docs/changelog
index 586411fa..ee3e4c9c 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -18,7 +18,7 @@ Changelog
 	* Type __cron: Suppress stderr output from crontab (Daniel Heule)
 	* Type __cron: Fix quoting issue (Daniel Heule)
 	* Type __file: Do not generate code if mode is 0xxx
-	* Type: __iptables_rule: Use default parameter
+	* Type __iptables_rule: Use default parameter
 	* Type __key_value: Fix quoting issue (Steven Armstrong)
 	* Type __package: Use state --present by default (Steven Armstrong)
 	* Type __package_zypper: Support non packages as well (Daniel Heule)

From 37e1c95bf0ca2d415d23c1a7b2729947e1249291 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 24 Dec 2013 23:25:54 +0100
Subject: [PATCH 76/93] add link to messaging

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/web/cdist/update.mdwn | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/docs/web/cdist/update.mdwn b/docs/web/cdist/update.mdwn
index 9e47fccc..338cf9f8 100644
--- a/docs/web/cdist/update.mdwn
+++ b/docs/web/cdist/update.mdwn
@@ -55,6 +55,11 @@ To upgrade to the lastet version do
 
 ## General Update Instructions
 
+### Updating from 2.3 to 3.0
+
+The **changed** attribute of objects has been removed.
+Use [messaging](man/3.0.0/man7/cdist-messaging.html) instead.
+
 ### Updating from 2.2 to 2.3
 
 No incompatiblities.

From b0b0e46f037882d1bca3b4ca8ba807e8ab94b772 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 24 Dec 2013 23:29:13 +0100
Subject: [PATCH 77/93] update link to messaging

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/web/cdist/update.mdwn | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/web/cdist/update.mdwn b/docs/web/cdist/update.mdwn
index 338cf9f8..aea33c08 100644
--- a/docs/web/cdist/update.mdwn
+++ b/docs/web/cdist/update.mdwn
@@ -58,7 +58,7 @@ To upgrade to the lastet version do
 ### Updating from 2.3 to 3.0
 
 The **changed** attribute of objects has been removed.
-Use [messaging](man/3.0.0/man7/cdist-messaging.html) instead.
+Use [messaging](../man/3.0.0/man7/cdist-messaging.html) instead.
 
 ### Updating from 2.2 to 2.3
 

From 9e153f5c18a6c2afe75cefa2b72f3369a87eb453 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 24 Dec 2013 23:30:33 +0100
Subject: [PATCH 78/93] use absolute links

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/web/cdist/update.mdwn | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/web/cdist/update.mdwn b/docs/web/cdist/update.mdwn
index aea33c08..2e3e9b92 100644
--- a/docs/web/cdist/update.mdwn
+++ b/docs/web/cdist/update.mdwn
@@ -58,7 +58,7 @@ To upgrade to the lastet version do
 ### Updating from 2.3 to 3.0
 
 The **changed** attribute of objects has been removed.
-Use [messaging](../man/3.0.0/man7/cdist-messaging.html) instead.
+Use [messaging](/software/cdist/man/3.0.0/man7/cdist-messaging.html) instead.
 
 ### Updating from 2.2 to 2.3
 

From dc8e9c68552a7a5d418af349800da5b2368a693b Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 7 Jan 2014 13:23:39 +0100
Subject: [PATCH 79/93] fix typo on optional parameter which is only a
 passthrough to __package_zypper

---
 cdist/conf/type/__package/parameter/optional | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cdist/conf/type/__package/parameter/optional b/cdist/conf/type/__package/parameter/optional
index 5a89ffc6..d674f32e 100644
--- a/cdist/conf/type/__package/parameter/optional
+++ b/cdist/conf/type/__package/parameter/optional
@@ -3,4 +3,4 @@ version
 type
 pkgsite
 state
-pstate
+ptype

From d2c45717f1172d83d64209cad12d1c84f3e16974 Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Tue, 7 Jan 2014 16:31:32 +0100
Subject: [PATCH 80/93] install rubygems for ubuntu/debian

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 cdist/conf/type/__package_rubygem/manifest | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100755 cdist/conf/type/__package_rubygem/manifest

diff --git a/cdist/conf/type/__package_rubygem/manifest b/cdist/conf/type/__package_rubygem/manifest
new file mode 100755
index 00000000..7199d939
--- /dev/null
+++ b/cdist/conf/type/__package_rubygem/manifest
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
+#
+# 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/>.
+#
+
+
+os=$(cat "$__global/explorer/os")
+
+case "$os" in
+   debian|ubuntu)
+      __package rubygems
+   ;;
+   *)
+      echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
+      echo "Please contribute an implementation for it if you can." >&2
+      exit 1
+   ;;
+esac

From 6dcf3e7c2651f656466bbf80915fd4cc661cf16c Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 17:03:14 +0100
Subject: [PATCH 81/93] ++changes(3.0.1)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/docs/changelog b/docs/changelog
index ee3e4c9c..6eebc74e 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -4,6 +4,9 @@ Changelog
 	* Changes are always commented with their author in (braces)
 	* Exception: No braces means author == Nico Schottelius
 
+3.0.1:
+	* Type __package: Fix typo in optional parameter ptype (Daniel Heule)
+	* Type __package_rubygems: Require rubygems prior to use (Steven Armstrong)
 
 3.0.0: 2013-12-24
 	* Core: Added messaging support

From f5cee7a57d419baeb5256300e7a6133ebf0cd796 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Tue, 7 Jan 2014 17:31:45 +0100
Subject: [PATCH 82/93] suses chkconfig has the same name, but works different

---
 cdist/conf/type/__start_on_boot/explorer/state | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/cdist/conf/type/__start_on_boot/explorer/state b/cdist/conf/type/__start_on_boot/explorer/state
index 62f86332..e9e4318e 100755
--- a/cdist/conf/type/__start_on_boot/explorer/state
+++ b/cdist/conf/type/__start_on_boot/explorer/state
@@ -39,10 +39,19 @@ case "$os" in
         [ -f "/etc/rc$runlevel.d/S"??"$name" ] || state="absent"
     ;;
 
-    amazon|centos|fedora|owl|redhat|suse)
+    amazon|centos|fedora|owl|redhat)
         state=$(chkconfig --level "$runlevel" "$name" || echo absent)
         [ "$state" ] || state="present"
     ;;
+    suse)
+        # check for target if set, usable for boot. services in runlevel B
+        if [ "$target_runlevel" != 'default' ]; then
+            runlevel="$target_runlevel"
+        fi
+        # suses chkconfig has the same name, but works different ...
+        state=$(chkconfig --check "$name" "$runlevel" || echo absent)
+        [ "$state" ] || state="present"
+    ;;
     gentoo)
         state="present"
         [ -f "/etc/runlevels/${target_runlevel}/${name}" ] || state="absent"

From 71e5314ec1b7788bfe74ea3304b769af73bd1b2a Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 20:40:46 +0100
Subject: [PATCH 83/93] ++changes(3.0.1)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 6eebc74e..75a7f329 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -7,6 +7,7 @@ Changelog
 3.0.1:
 	* Type __package: Fix typo in optional parameter ptype (Daniel Heule)
 	* Type __package_rubygems: Require rubygems prior to use (Steven Armstrong)
+	* Type __start_on_boot: Fix for SuSE's chkconfig (Daniel Heule)
 
 3.0.0: 2013-12-24
 	* Core: Added messaging support

From f8c36c080e47f4139434658b28c099748fae5f15 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 22:30:59 +0100
Subject: [PATCH 84/93] do not escape \ in --line

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 cdist/conf/type/__line/gencode-remote | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/cdist/conf/type/__line/gencode-remote b/cdist/conf/type/__line/gencode-remote
index 1c46c16c..d4796965 100755
--- a/cdist/conf/type/__line/gencode-remote
+++ b/cdist/conf/type/__line/gencode-remote
@@ -49,7 +49,15 @@ case "$state_should" in
         # Replace all \ so \t and other combinations are not interpreted
         #
 
-        line_sanitised=$(cat "$__object/parameter/line" | sed -e "s/'/'\"'\"'/g" -e 's/\\/\\\\/g')
+
+        # line_sanitised=$(cat "$__object/parameter/line" | sed -e "s/'/'\"'\"'/g" -e 's/\\/\\\\/g')
+        # The one above does not work:
+        #     --line "PS1='[\t] \[\033[1m\]\h\[\033[0m\]:\w\\$ '"
+        # becomes
+        # PS1='[\\t] \\[\\033[1m\\]\\h\\[\\033[0m\\]:\\w\\$ '
+
+        # Only replace ' with '"'"' and keep \ as they are
+        line_sanitised=$(cat "$__object/parameter/line" | sed -e "s/'/'\"'\"'/g")
         echo "printf '%s\n' '$line_sanitised' >> $file"
 
     ;;

From 14ee9c4cc718c771aa6a44b77202996fceb1ce86 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 22:32:08 +0100
Subject: [PATCH 85/93] ++changes(3.0.1)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/changelog b/docs/changelog
index 75a7f329..d606ba69 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -5,6 +5,7 @@ Changelog
 	* Exception: No braces means author == Nico Schottelius
 
 3.0.1:
+	* Type __line: Remove unecessary backslash escape
 	* Type __package: Fix typo in optional parameter ptype (Daniel Heule)
 	* Type __package_rubygems: Require rubygems prior to use (Steven Armstrong)
 	* Type __start_on_boot: Fix for SuSE's chkconfig (Daniel Heule)

From 52bcc8bc3b254670715a04ec081122f9ffe765ae Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 23:09:56 +0100
Subject: [PATCH 86/93] add old notifications sketch

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/dev/logs/2013-08-27-notifications.xoj | Bin 0 -> 38786 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 docs/dev/logs/2013-08-27-notifications.xoj

diff --git a/docs/dev/logs/2013-08-27-notifications.xoj b/docs/dev/logs/2013-08-27-notifications.xoj
new file mode 100644
index 0000000000000000000000000000000000000000..c34c467640b7c303fb0aa160d8108c7aca8d9518
GIT binary patch
literal 38786
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
OpZ+gcs}`Jw1Ofob4P%o4

literal 0
HcmV?d00001


From aea95d256fa9e928d6c450e0e31b83bda8bd66a2 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 23:13:36 +0100
Subject: [PATCH 87/93] remove unneeded changelog.future

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog.future | 10 ----------
 1 file changed, 10 deletions(-)
 delete mode 100644 docs/changelog.future

diff --git a/docs/changelog.future b/docs/changelog.future
deleted file mode 100644
index 12adf8c3..00000000
--- a/docs/changelog.future
+++ /dev/null
@@ -1,10 +0,0 @@
-Changelog
----------
-
-	* Changes are always commented with their author in (braces)
-	* Exception: No braces means author == Nico Schottelius
-
-future (maybe 3.x?):
-	* Type __cron: Dropped support for old internal format
-	  Using this version prior to running cdist 2.1.2 will
-	  break add the cron entries twice.

From baad4c3276b1f3923ccf6292dc630df441986443 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Tue, 7 Jan 2014 23:14:07 +0100
Subject: [PATCH 88/93] +factsheets

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/dev/factsheet.odt | Bin 0 -> 19072 bytes
 docs/dev/factsheet.pdf | Bin 0 -> 19974 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 docs/dev/factsheet.odt
 create mode 100644 docs/dev/factsheet.pdf

diff --git a/docs/dev/factsheet.odt b/docs/dev/factsheet.odt
new file mode 100644
index 0000000000000000000000000000000000000000..2bb2a84bde5b59e530c628f9c3964d3bdbc9c1d6
GIT binary patch
literal 19072
zcmcG#W0YpW^CnofZQHhO+qP}1%eK4hF59-vF5A{t|7QNPb9Q%jzwG2Wac^e6Z$`$w
zaZg5OL_7-8z#u3901yBG4*a6Rdc#aG<NyEw|LCU+z}C{%)Wy@m)X>4f#?si(#nRr6
z-p$U0&fd`3(wWZQ!PL&g-q_XF)Xs&@#ni(^;XlkEARzw3>}UM{D6~H{1xsTWS0__v
zdPau-sW38g{I`}M8?z9bAft#FGo6E-IUpF=>+3HCIdNDhEU2Hsu#yrYN&o<W96$9E
zK;WONO9f!f&kfL7Nn8k^W*X=8rvauQqaynK{ryu_?O*Wwxj{NeXgUJ`KqLPnK!D6_
zjGs<$7fD%B@C`6T7%qTs?;>ab0MIZ=5kVD=fy?wMX%cai-pUQe1!`#)rf{6hf@UV>
z=3oR(Cltp}(In~3PiQ2FgLGTo!{t%1bvAIsIHa)QU=J;!*eIF5VQi(m$7XUz7*F)0
z?`3B*8E$ZZ;iRzB$xA(+kKJ!em1uvz&v`p+2+8{w-=OhWgSn>Pm}c*?y#n9OZUkw~
zY-_R<Z^KxuZk(h_m_<K73h?UQI_4)QSH_dtGAvvDn1EM$hHF({yd|O7pf`JAR2KVc
zK^->H2RZvN<W4QtbTc9Db?%!mA3yZ>oOxqHQVxbV%RBu-{Hz_UR1Xf@#K|PF3Jdjz
ztK<EkIkKzwN!FzMvY;#6iX^wmz7ufaE8G@!loMcoSubjAVxt9VHWEh%)8L&pgb;5`
zU>b2!u8ebZC?AO|_?FtUyD8V~sooQ?8D(1#=jc?APPB$nP>f=aG{K3+`1Mj6*OpuN
z_fx9Y53Iboxjn*s3~7)jN*Ut3)@DaKF@SJyb{eV`4k}d|jdVwLa?Gr4&-8N#3aX3-
zx3%``A{?V|F#1ECcTc?bel;KOC}~RZeQ^<Iwb~^gPa7wK+)c-_GkH3uaF?J)-8-XR
zam7yP1Z=3h^=zYOzp!^*-5&Fp!fNWLu>)<Re`r7Y_TR&+hyTv?(1hr5zNWlc?-A>8
zBPe$4U2cs_)%ku7@^x$kYSHE<gh%ld=MDF8f&Pm8?U!%=z<gzp)w=loG@tPe&SiGA
zTr3!;cKwT1EA|c;yxDy^!&ujO_x%Gh1#)n5Gt<@f8vV%Zi_QU!|JBlObsN)}EJ5vM
zVZCId+;2R}bvTTrj@19}jLEbfzhV(b3J3<v#>+0t##5?WQL}LBSpaVZ+otg|*y$NL
z(mZ3Q<=*c2W33-ZR*1*TLFQ%tJeH^70c-$wfD}A11xyZDvTSQHj}`E!^-VfXA2O7V
zNcK_yHk-q4I8O_J(dQuY{nehrZhPIVwgen{Zb{s>*?HkJ@ipqQxsM7siGaZDE_#$+
z{21|-4u`oXoDoH2wlL0#yPsmRIaSvY*5FXT=OcLv#8tQreF+Mr@-!JY3J70kU>_Hi
zA8H-0JQ918@dat=Z;brRxQ_Hm`q^0cH8^U=KRZ)vfo7F-S83oUX}=fg!{_Jhh<bKc
z$Q)li0MKFIJmK=Ns!C<u;qMJ%?g3Ulub6sjVmuh6a$WB4tXdz(TIK1*oJqZZ7j~tC
zk8U0ISoTC`igJtWyMR;KP{Oy`kH3SCpTMQA8{wUNQGM%7S0Js(txO#U*6BQ4s!_sM
z+}T_#UeuwqP^}2qnZ3)|r5?l_NIgXs;yzh?^Ad2Ul1&10x_ZtoyFpBvpTjmm|EfCb
z>&?b?d~Ruj?HzOU?A1{(+Dzv`=-SGy|1ugn*qdr??Yru!3YotXQXCMR<#KnXp7W%M
z_6v25dKw?FHv)W8@<&j+6Ttdza_4s(V#*_)gid&Cp?=N<r?Z+n5E5gy*YJJDw^=}2
z@IoLy?iK452S$Ay%h`pqSTXP0GaNVEM}Vcm@fhR$wYw|u<t)5wuvI&L9<~@iYZmp+
z(z>zdtS7mRh)>+5`~_rJ&`S$G3HyR^svEoC*hz@*EXjWX+3)*Hw$O=X1-i`qz&O5n
zrH_pvp%sy)Z9SIo%KqqOX>2LjmoJDz`Dr?!#{5@@J7^PfrpPVKjJ~zsJko9={yGfL
zQ49YJFPEhDZfQJ6#LKT$gk@#jC6(d5;NaV74jQn`jf*qq@(Fqvj&08H>R%TuVxsB#
z7!IAGH<NwJXg<GmdN)aBeb`d>(ZRU33z_wDkAxC-Fr{(U`@lu3yP1GB@vXhbxkA>O
zRM}3-$D(8AvJ;V=u#p{wWXlZ9g{HIOwR7T=z8RnSbiRR7amt$7J*FCe7HI%UQ8|$s
zA%h?VX>f=}JqlWAu%89~hyK@A=07IO)Wwj_!`3DyNjffz0VVYL6Ez}(7K2*=DT+Y}
zT{mV?O15}SG}brV1B#8wOyb*jszHV<ijMP{n{NcZzSLUP>)HUTe5r55@W4C26-@~h
z{CnkAyY4>kjy}WBHwC9`wzFDbEgxut$6OT_R~)>DHPUK%G>l43P?)x~9gJ1`B(p?#
zwoFI5+z<aFs)<#!?7Y2hBV-)~;`-T}MaEp^CbUvp87_GjLh1w=D?~Wjtl9phr`XF)
zSJJu*<ncwrD}q=N<@c?32{f^Yr#*1&7QsrqCR(TT37(Jr`qx?Sue_Pkjg`@c0vPt*
zDq<k>uxt?z<Xwu0L}EEhA&XAvBnxaqp+w!VD-Nc<Q{MAjJBii-k|7Sl4VbCbbSNP$
z_uD{=sXDc<{d60DIl#OyeBKXu`hu}BSl%&W?EoP2WitO%bKsqD+us~6&uEDw=H=_>
zr>1GS^Q+o`rRyi`yJ$lk6@??U)ik0E#~<2G(HeRd#<~;3Qdh9;rpHJ?HQJ`|-5n=_
z$*9zPzuq>(w<;bZ2cyh13^jZ;!A@CD8xf;gf03u?X9sFC+*@>zE=aURozu+=DKlRM
z*^RNt`X-y73`h$;e~o|8|5LsA^?~&eAOOI^kJ0~Ms~+a(gK;)>aj~>BcmAjTF0CEs
zbq)l-o*tt8XA~jibp}Z;0V!!|AmE~m^Q=1bS<z)L63$+Ke`?Hmob+U@^IWDshq{*j
zzB@IoZ;jDIW6Ts&ihAJY*A;z`qX@)w<|};zt<G<ZFD~~hsB)z|Az~qhSivl%SkVQf
zZy|hX?Fn7oa7v`uqbw`1V@9*E$ZQONZLd|gUakX_6S*{?Y4R(5o9RW0<uqtf?orRz
z3R6_(X=!Pw&u$GYBAkZ}!m6f~`jtY1=%P=-Hq3IG)mpr@Cg0%X=d#^Qvb3#htA@@W
zS(Qye7c-RX2-+LjRrnj#y5L3ix08mqMok3Q9p8TU!OQHZb&O<vM=_eD4`TV*pzP@Q
z=jiGwx|HG4SAB~Iku`Ya&k5pYxzsP6T0J~Y3;KaGN3R=v9VD+qMR7;17(yb3V3(Xp
z%(L29WD!8=Fm};W1?jOhHk3LRtpgBGl6g!8@M!*64F|~+5UB{4Sk(N(o9xNBR<7w|
z9dpZSO^TaX8)44Xt<=xMdevTfyhI{TrqHHtm%@sFGUY*%^JwL&;vU?B!oBYY&Gz1Z
zo3zYgMBl^uDpu;FA%7t=;w6<`Mr8eF5=Sk@(>AnPr<m8UBX`rB*N%`cHhrqm<)UFJ
zyL<Liqiub!!3zwS6<Ab!$nRZt#_O(Oc-O0qQu_kxA01F+^^T`9gZTXoq6e-rJejV@
z;7##3MS;aIl>MUEFSM?_5DlZe0jU{8*H3MlS>6{;Vq{i}9M?;`WsHo_Vy$;b*n6Fx
z(UJ}Z-6Pv)en-nY1kbeSgFQt7Mq^)==lh~iXYr_P+_DvHj^OW%kkBo^56KZvv!g_3
zMT-QRjvo8BO5Tv0DIG?^IZO4>x^2jtWk<>O#bt?j|5V)W$X%vHrZM6#uP1|!_6<p(
zMXzvD#b+w_GOMvhW}pG#q@qZjZtaA^eSQHw(KRERLK$*U*k0?gC@2=vwqTPik<_hg
z1qy1sw%KY(g%tLF`WP=yvr|5=*1=*aoYX$Cix!D@2}24T>)WE^HdV8OfLeEbtbkdx
zXo+`pM&>Q9luB5t;$(<Lg9yAp=m89s`eQr1KJptPE0Cz39K|2oN<FS{7sOezV`>z<
z$Sd>lLyN}whko^tHe{beMUeSa3V5vcH*Six#q2Rbs`Byrmb(2`Ad7P_3h#LFp~M4!
zis0@8|5)S(FXV~1Kgrn|EUx9<ebDq?Y<Q>gUxeDW9>L-*Fnw}|1|217gn6TJctQCm
zz9rk8(lL?nRA*elgmm4&HZ9-9Dx%4QuKvXm`ia(~^xGeX=CHXGmZ{-1fJ=%PalJ)+
zG-9|}=Yj7Fl&lGQ^@C03PcX(2$a}@A+Rr)Xsm{@Klj{UN`Kk945sMHnVaWJszZZP;
zkQ$}Qym|}S&&Co;0Zi{Vw{aEf&G)l;m1j6X-zeu`P|9f?hu&ui|2D_E(tEinR_3B3
z%XBR&qnU9gl}**1Kyb4bi|jl2_Iw1PL=i3BZF7rDbT!FZ+wTCjF+U*IpL2(}`U{7>
z!ByI_E+#I{XzMUFakYK|xb|@8b9aVX{ze!a>YIbrhPO$%NtJ11eS??Z%8^u=-IK!R
zCLDEWrS^U5iVb@w+SQeuv(+ktNLe{t!!{?y`C3x+%G_44HV3C{mM66;c%Qd=6dtkB
zO^4F)2$&#2q^^J&kA>=t?<~PyHl35kSu5F!ep%IVH;uE#w;c-BNi0P03lb8V*#S6a
z#O3o2!(ZF-&~FB{!oP9{+%lZ_U6F@;*YQirkv(owDxiBrJH1}z<;HT_Rp@o(gfJ=$
zg_dFn&Lrh<jGpajM_~JJ$Mx!5$BcG-Nj}m6oS;q1lnF$?FomL=FCvE_eG6^s{A=&;
zYRvLa?tYcfp@s`nD1+N|{6W*fUbj<O%q9@x`*^L&hAEMBD1GD7j{>LZvbnjJAevRd
zbA&SBrq^v2v9$rj(?5-a3)K?JJ(CJqOe9F~bH59VD~Q!<Na>LLysurUxqI>|F5XSo
zrh5Ka2s{k{@)J-1fGo2AHw*D|$^$UAw{!V-Sp6{&mpBu42d%fcwFq8+`e^E`nu?w(
znV*c%g110!Y@$7o4w?<5lLym@P!rEavhPsGc*Ak-G+z@@BzfOWJue=;c5?yO)l~mf
zXvo)>ve@@%A1-Pd5JH-#5&QFCa;A&&kkNGEe7^3(U%j4mRPJ;hN(vG2M0u(lrBky1
zmFbfQS7YXESe;O$T#Y7{Jcus9naGGV>+G%4V?9@ziKc;0u#yF*XCK^Jf~sAd9m;HO
zL7NJfX8URX5tt~5Vx`4s>fqTEMz1AtMTS$Gfi4;iL!*{j-8!UDu1NRXc51_+A7Df;
zKi1dL@c`SPz+rU}r7SCmB!*Y63YDC}f7g@EG7b$pE4A#P`oolG%(%)TQ9xTeF3QD0
zgm#LzAcBb$Y&?MQyoEhH@IzZooJwnWdD-6h0G51wIxT+)?h5KzY-dyw2!?iTwa%`*
zragaG=oug{mSM|~DbMh^m!*M^r3F#Ya2?DE-a*Wj{o$B#$Amrcfv3>voHbkr>1GSr
zY#_LyX(vp*)m!%ebnwMC<q)T3Y|C3Em7yBcnt-?r>Eh<S1)*zIh%rpu14ZscWob91
zDt%wjHMX8t8N8KKQXqdIcqF{t1nrxs73-4n;~=181L{v6dQZhDwA<oo?alMZERi&Z
zNN667YCIK&q{p-Y@=`Yy=%lJ6zzQwXWIJ~}QPmH!%-N3l(6tdzW>4F-jj+<2<f?oh
z(mAL!yl^48=U6*vO;}1uE?7V8jPt)^nO^FGsc<DNUl<6UQ{Aewt(UF^B$;j90ufz}
zaTGaR($@CCt~1VS+D`k;-!Epj@|rCyBA8HJ?j*E=J(~KfrVuIkFSWW>mAl3$YoMB;
z&&g&`N+NEdUlbIbe~Y9=0q>q$V3rXWh=Lo)4C1*WiioH}I=Tb`a>6skGxFGRv5OsI
z()6R=l$Xj(f!YcRflK^YfL(x<lVp)kwAJ<P&aD3UfR(F7SXpB#)baD_!6oz!RIC)J
znmUOSY#!O&l({`PyB~4oe7gWpF%YU|3_t)MXcqWNO?#*s0x@Eo)i4+D7SJ6wv}m16
z<~&!hNN7KB7YQ7F$$}#I0)!L0#RC}k8=eB6NAeviBx$|8!{zt-JCuKhFKEwGcgYNz
z4F}}FdonxAKnnj_txs1)%Df`|o`V1yr6JuA<U=H6pwlW4sAPj}+20{Fo9UE!^I<HQ
zG~5fb)tYDWq*~ZT4RFOoA@67g=F$Z$84VbOiM|bUIcQo^w>>!Y`(kTt+)^AmPO0S9
z=3vcH>Eg#$9MXt!zVVY%roIUl=Spk(eVFHpjp=3JH>@I(Jb=?Y^a|ig%wITjZq`h~
zfA}ihK`}sZGV2&B9#qQKXsO?qJ}Nf*pkR)-4f`h3fVXVftvVdiMQs|O8(Fm8Gl#DV
zqF5014Bz{?y>JN_uuifFhAO>XEXtlN=60XY|AY@}U>u8vRaG``QZtZptnHz7uO6o8
zf~X!eDYoV`9A(8eZ$HMtw`aD1pwy@~u0MAc?OKcwvEtCM)W>ZBJ#-PibEbdT#0AtB
z{+XB}ym5Ny@&D+c1jZH2>0Dm~oCXrfQ`4cauc2{4pYepbqsRnaFRJ4cyEf_&RJvvB
z4N)FX<8V7xD11O_jfv*!-$QJki4x;W4!)ICRq|5p&xsCB@`J3PN-wbQs&noM;5B&!
ze<69X$@@6x*RPYG#yd-HFn^SKS<`zx_V3ZCeSvrS^_~5d-aR~i*piBWf&}f)R-4^9
zyne`Em-jNWAup$Idgx`rf1B5qm)$k|hRQQa+UNYX|G}zOvs>^<;&J5Xbc<!Je$(rR
z#ADBYOI};=!rNE?BEO)(bwb$kz3cJLzx~xCkcVUcO+Q0DvhfXlKXUu@P1NPo`Psws
z|J*H5+L^rJZ;p`felI_?Y>|aIML72bSYF4dBf9PyhBpt&8MM>14;9rI)GCd1PUyj$
zwE(C-0Ii=R|FDx_3KZ5h03?zX_=(#aw&CIAhG&(!LE_e2n$dBJWPoO04?1gDl4*cG
z5u%`F-vY?85sBoJnyrFyiABQT#7s9zUIQM$4xaGl0&TliRy;0=qs*P9oUhT7syrna
zL%tBzuDP6UhGm6b-;E+qH(iQd=CxhXr`e;nFN|3h@Gg)>{wt(N*EXXjPXBt~IvNnT
zs$QKf$s0^`BAbEN8Xl&{ZZrc)q5_UW)HC+1j~*D2<LWQyaMe9esp$}66`~?g7%GR7
zJ%LG&s~7%`3bjP6(uGqQvq-hIBpbgIQOLH6yN!5q72fmwJ{M4_P+Zl@326~Zgv~Fj
z5Z}Pzr5B(`1!fU)R`0aLY!+c@*+BtPAk3g+E}`Z+A@rl_wSGB`<_XuL3xd_%I#$Pn
z%bdn)1ZTY3EO6XgRq2G6Yf`hz!7H{|wC(iKph8z({bRMQ5<9kLgU`TuB&ZlnuVpU2
z$h8r#_7_K;-4$_WPx~EwX0sjpCZmpPH#1S&KS%)0Ch-cp`s&rtn^CaB&toigDRaLo
z?rD`5Bs0gC&N0j=P%3;?wMzFHVEWrZ7k_8;ab#z|u)3IT^YGZ_u9R5H<zoRBDQ%GC
z8gH9rnF`I!Y{g5Y07=6q)_v}WA3vqJm+n26UVl9EhwKAgsL?igr-;N|Eiq)AGKCZF
z|HTRkU{w+rTVoY>{0#LhsNShi=Eq1{_M-%A?dP8FB+JD1cR>|Qr3Uv>6PmC0A}1Dy
zDU`tHy^h1(-E)oIeIqT%$X#ECKQ>qXwqfGEoe7F+Xy}EPbMt*}V|<iEnTC&m7E_nN
z4=iptD*oL{JO?xmHs)Aa*^;zj?l{BZUKblO^hRN){}wM#0zI#L1B#=uw_CB(Fi#E{
zPOjA&AQql@P!1wV9t<VE5*t!d*%5vZ2B#?pSG^OcMJi|j;w3Pdo+BQ?${0wiI$WFx
zXBbO2>d;@h!;@p@3`09eNgA6&ijKl3`JwU!@&vIM>-wzAJ-jXR9Wf!nn*-sy>x9HH
zjEQ{4eu-nP{E|>cnq82?&cCfg-!H6Y4H$fPX&@FX7d^1V7#v`<`|OK(l@CfpM%3+k
zL|UbcaF5g&W~Rdg)U_$ezyxdi)M~|$qZ3lfrxFMtCFt?@JxO<`&HjV>hIcqzdzYN1
z71{XHiwcJu&gKDjA8r7_D1P|}RZ~j)7=Tj8MXAarn_to<*a>5-iBc)vm7vHcF#@<d
zo@!pxXtfV_U;1d#Y4Wx2;tA~PoBEh-fki><&CHXCmSC8u6?LeciljI;fvd-EnF=^5
zOrCr+H9`Ylkgy|qbc0lJ*B1)&S(<!_@S-uvsoJj{<{+XM7BqIceO3xolS7}IKOus<
z#i3UfN?B<=)4Q^cZG$`EoSs;N3oqVEw+(T|nT8065tg)@<^g((0Cg~hrZ`<B<KCF>
z+c&&=rQ_P8t5V^!@pZ>a=M(?mF0-%2u$%TL6p<$UU%Slzike`Qq}=!u0Ra4?f8hlc
z3s+ksJ3~twXL^_as{V^<{NKYF0K-243;+nApF!sQx#$1@L}LHq5FXi=Ip8iRD@!Bh
zSy&PQXaz#xh!rBJXrdT|B$<#yY{RQ^K8YN!eD49;7lV$kIL;B!vAAjbtG^iGnkgdz
z#RFggZEPSzC=0PsNmLYSJLW5FGp?sLb6Ofig?cxL9Q}{$%vs)#rn1)f=l!p?-SaY!
zJ>djb3!a_;;&Z{IpbTODH<Ao|Lb6bS0h8^U*t?<YcCN@zyM<4EF^QR1M5#*P*CrPQ
zWe6j$l+uZfPaqyCB|zw*u2*uAfMgl@_55#=&=(+HL8X_p>CzL(#KM5)Z2c|{jN0t=
zjt3CQIeEFO;?Ao|J9%D5USXvO`MuwX?L$3SIrvxH{)s;3Brvy%l7HIg==d9I%BrK(
zs>H4SqWyGj5y4%ZmB4pi?X{GZ;!%#|Qc?~^JqSqd;S*oaf07(3F;1EuJl3f_7r#r6
zADYwbjER8g!CSlPx91fh;DeKfG7PJe49zxqbWuB@xMP3MJ)lZ5egJfCFWFL)^{SJE
zK42&)K^XgpD(SHc*qxoRMccea7GeB#r5|bzw+pY8IAiO4<VDp_K$$nbL6v+>20Zgp
zZz)i1r|Tx7B<lsgkfaawa{4#NO^4oK$4g{UJf1LovP#@7`__YykF*lIFLH+Y<d#?X
zmI^{kti9w}2|w`Bf}nj@<p!I~nRcR(7XYumQtmgf%f{CjuvdPO-4NK;$)ZBq=Cs#e
zuc9Ixn^{=jUUn{46vq;9DX3eze=7L@i(p7xos5U;UJwl-6{}IJ0TBVGVaMSwrw>cF
zGk8MwJz|wdcZkASj+PRP?GHj?b4I<LIROTfHam;p{9mfwgk)Y%tC~O9oQ=J`#D)*=
zQ;(agzvMRcoo^HSZCDPQ*k8g!S`L~*LW=UnD5v&<!bC!v7ulQ6T8j(NGs8nl@#64m
zc-<+}*t)MDLq6lK%kS->A*`|*3>J?vM^^`q$G(aVzf8EloY+o_W>!nSud1W7w(}Yx
zFK|_k`0W(FQ0GgktN!-QT&Xg3@{Yzh-zQd3RsWKLqoA~n{;P#8eFj!_^*9s<Mr^;O
zpJfNvwAiHbgpHt51UZLMlY#*Z6-h?_i`TVgyzH+G;mXqydkA=(@;xl+&|7bxRypGc
zDT{i=@3$pzaCF}UD?12yi}J<zPi<vdlMR)0Ij+;Z9Q-+Inu<Ar^=wL*DBUcTCnrS9
zg{miF;2ZZ(YM5IDcKY)7l^x^1DaQKx)081{9?I`kuTr5x>))F?%%w_W>-cMleAEQq
zPvr0pQWo}#WhtGW*+QazEECwZo81s>B@wn9bg4Eos4a0ebC5YaPuLAYu$QHGWc9qh
z+L5!RYefRQo>|(rN>WYz%fUjI<~=)d@*!<K5(GVgCvk;p9E$RESQ8tgEtcd|YuGN@
zXRx<qFPH?;f|7*)gB&}Gn7;3TJ#%hLIdyGzQXCFtK_w93`(%`Ar*qRgzZV;~vD!<?
z?gxJ~GRX8<03XNlY$@$U<2lpd9UcR<_1XeVE#HZ-A?>^yw;?8v<x|{O#DERUDg@#3
zWbLe!w}#9}En~`-_|%~%dx_0{<1!I{@=!IF6hxnPI{q>8>2+x_Pv+J7^pI9cNCY(}
zSD&}kM9>1nEXnJA(n=*jywkwS+Cj*ZzpapDUXwkqApRty?|5K9UF%Qw)ByB3jA6S;
zf7h)>Gw<WdwWw6urbQVdz$sUGM13}y&^gQJ6KS+<P436f&tW)K?pskRGvYQ_B^$)%
zIy7Wky@!A}MFo>ZaV72pXqKo13c_`v*>Nifp+aWwH%bGR*l*tXMNsO|YZ64D7VG!6
zweSumq_AidgmCgVPMt~x%7UNSQqww7>w@HnP_Dp7KEgrD)`mFTg1i!1&<>H^52;>&
zG{&TYLsP*;>_cdyLyFRb%1YGqGB8XY)yQBGYsm%1a=b7nV&&G-+wbKNT9SUm<+k_i
zfr;Vb4o@f3S4P8un$LFTb#oK`2$zM&vo@HQ-zM+kW{mqi&)%!@)xgb5Ozfc@)jV(Q
zcTQOi!UFQP?{P2Q*H*2bEb05iioc{>nrqX=s-*JYNr8ET-4q>$m+YP}76M@-S9Uvd
zpY_~x+P)n>cLSGkA8_xh_zMK)x^$OxB_$pMSNeKJ^(l1S>g;AY33-eOR4mWFqomK7
zU!~aFwIAm>?T86p^SkSFKnyQa%EP_!8e1_Nn0d{|)Geh|FFxH3yzUZi8fKZ)F0HSI
z+lzeKmm^7d$v8#iH19sSLWHXynpQoN`~9atVzeDB`j)l?#XRxA$Tr=uZKRtg#a2wz
zMHUCJ8}}8$9hK&rqF+docstX%+$7wyaMZCE!M{1IZicq=0kdnG#*q;Az)M><t*-J~
zWq6>^eqq`@D7}I=ShCFb{E6d~I#f3r$429j8#s^3EN4Gkafy9NPfUZ02gB-4xxh@%
z)1J-bB`CFLHD@|%deZI5-wOq1nYnLMr=P*+F8p@*9k1-g1H6g)$9hn`-05z3tK6yC
zLbjS~UUKbSKX5_o<z&`>Nn{vzazXnA68gq4f$?Yh7}B9IG;5anLN6tOp5c-^J>Y&+
zG-2ER%&0|dOz0V8{3MO3BrsA`SCg5hv>KUcsMd-GjhFVLyKU&;Pq(pqo+xeb5LDHd
zS43`AH4VtCie|kVRX{4)2&vQl!VDn^a&b{{(d^~p!m))i7T;tX%b7Dcf&lC;mAj+x
zQ@3?xaP;mvm5)#W$n458cBNR9XgRI#0MH`9B8w}Hen)AuF(uwZ&)hieZxk&MZql~O
zcN57Xa~(~V*aj}Dzl~`3QkgW73?ssV$9X*|G`9WV^!H+gaevtAptag19+N}mt2v9Q
zN{8uavB){8CO=%*?K*o{o*)pVPsP7(CeX*?GW=f)e!r0Wo>#Wir}49jZP)M3KOfCO
zYAI@vvzra_GGps)xudqM{`_r=Kcj?%7H54-hcS&K+|x27b$c~7K0IyA?Ie45u7P}K
z^28qMdEGgJ_pYt2eC9l?Y`uY*KIO>aQ~Tjy1d)sP<;1Yk{2EC(VJWZpK8DtOc#tgh
zlu(9?<+=2`GlRb_`uk{V%V5CW7vtfcwUljHM2_O6oVKU>C<pj}HFn=1S8X^I*uAF}
z3di?T{Jr;d;OX67*N62wPJMez_hiN12q5i2!)ZN_KHI}{LiY_ejGjsEqKAp#RL(<z
z06yU0q7r}7>mc`*P;qLuXQGToL<hXQW<JC4W_FihZ*rEJ<I|_cr(e@7?}+e|JYk|>
zVM2%qEKzuL^i<nnK?oe$eDU;ruaC$A=exm`IuqW^{E`P4dGU$2D~)G)GP|7AID*q>
zxv_QUu({v>Eb$$l-PS0BkBI5A%CMhA9@J^edWP_cV*m+9QGapONaYp!zUG6;<IdPO
z%5nYo&<+I}?0!|jC}lA#e|9AtD|`+6B93e|F&vi`?#a%&iakRzTJvxu+h&=PootuL
zHdQ$?nRiMuSiE{Y{*mS5@^J=MRjgmq$>y(x@XJ^KXrfXLKGEC3o-_6s^yS)l9bWa(
zlo9ZETk7g^+Xd2Mk^bQRVT{Y=#f!V35<pf_&(0?QG)2vbRy$w*tZA6waIkPl^T>MZ
zVXqEIb77fBMr)$ex-nyMJ6{q1C<dpuRJ~5i!!BY8^}U7U8v{fRO+dk|qh*Tp{1OCw
z>*f-*Bu17r>RMmrSp+;GJAyW$R?A1tj6tquZJrjBH1A8!LA<t0%DNG*YpZwqy^+cN
z_g`^GB>R&?o6d0w3l<>zJoqKrx5l(kd**WEtQwyBwCt9$8u^*~Balg59>_AUK;L}N
z*YFBSU)FPNQF8jLY#Fpxf2T(1sP*!LIL->?)#%?I1m$3|x2^wBBrk)5%E8Rncx!Xm
z7B2ob&5uYR>fSb{*2r))=*B**GN$lFt!@WpkzJ@~uJ82)?bF^5=F?rSk?<{(NH;8a
ztg*13NHx9gMTPfd@ohQ>vOjyNh9eXXbW)FrFPKTigyB)FJIo@RH(VMrD_KBqRKl)-
zQ@X!FHEG#$C%E=ZwIQ?qI!+L?_J)XmyY9V<ii5E7#3+<Tp4KUrlL+VNE-sX3pu?xB
ziet6%$}<U0XwQsKKJm$azX{<5PrIyB9&9qc97PP4clSW&a%qtiZ;vIv@a#CL|7>;p
zi#DR37St3y-;6ZU?v-Sa^vkmPOj)sy`ZL(LkS26Dg3vY){z7?41$Mcqb7+&`)$z^F
z+3v8s3OYzNjfSU^TF4Gge)T@1aDuM7jMPu_S&K|VI*BfgLrt!6Y_KtmyyE-Ta*mq5
zG<(Yh5Qnjd79>{F{;iQnrLiVB$O>9Y7Wi@pmeZ%cwTXRAQ*9L`__UudK>Xs>`yMon
zwoTLn9fx{kOVEbNk>F>4h*E4&R!jsP-z=~RN$%c}sNdWr%@vZ9PIrOrF_;@X(afI9
zHd4_@3N26=v>3wH!n`GSy<WxT2YdnT(VyF~NzA@j#pJ#<NAC3dr!Aht-_S;Omr)#i
zUtC8oQanLw?DyJfD&<k@caDC-b`j#i1rn-DHXz_yzfFeAa?;@^xPU$q;cw5bnLkrG
z0=M(}7x<W;E9h{dGl=}+)qpW0M4PKs5$at?MT->kp5Bi|Bn_M%>ZuYrcyVA9pOKN`
zf(a9>BB=@ET_8BL&yRa>G8HKY>Wzk~;|w1&U-e$2dy@J`uKVSedfKfatQ53?*`le*
zSE-17!T8Lipnkd}!+b8ypH;sYOvx;2@tEiki?HnTR*FXd2$jch=2EDA9=pGCG98#D
zcUzMw+8DSzrb?bLBu0`(uOIoTv;4+FEYH%Ic_vkh2#kt)v{Fe`nb-5;W<C{Cx#>_T
z)01465hgZiK^L2m-%i9q92SetS6_3(1`4}GSqv2Kz1~xxHvjAi5uSHZob+RU;+5}Q
z%X3FC*d<p6{Z#Kq@Hj|SokeW__F3+sdgoFnKu=m+-j3bDz^5BPVj5=W`H+y?Px*^B
zoMkK|B<!Up<lEhel2eOeh$)6Zko)Bzw#;HUHQj}l?Cj#RhTnH4_tXO)=JHuGNek{>
znOevwTuM`wPIq+6SQFr2u;{_pio~$-Xh7!S9~tdrQwv#PI<#zOH3#WH+R?9j`K4Pk
zU*v8+%7#y)mX7*fOu9whdyw8=Mh2$7U3RhMjUo8_+eDouG;oj9FdMngc>-IDd`A5q
z&TUMCD%j5Q2cgg1#CSgE;r#Q_h?#~!kVlbc1pnmQvd`t`oM5@t&9te3wId+QAuA1+
zSG4(Rciaki0!T5-56kNO7=5-Cy7?T%))&%($j(8&H^0KjNK;1ny4`;2fH@j_?)K)o
zFONc>R)NDyt2<hJUz6Tv;mkH)5N$`t`<3fV%@&`xPehxoG^QD%zMae==6gKaBo!0s
z{VsWTG>$7x@WHG5u<Ka=AIaE!@G+b{2@M&agQFZJ*jl9J@-iB2;?kE3gZc+5ItX8;
z7m&y9%uyEbpbn?(Ye>I^zoecfy^n40xB@@29>%4S#|%oo57t}~u0qL^v<ZSmAjPy-
z=gV-kDo-kX6T=!wA^JI`b-AJ{Cy^;Rb#s@AW{?t&|EwO*w8B_YCPVG9{|Wym_=`pe
z1K7_Q{J$vd^RFfD6jQMK*!dj%Jr|Y8^4LMQ9ND0&-!@$99_p&ZxB7f-{2u2F-N8jt
z!Kp`(cxYk_HdW`5gIJpS0RqlbQ#N#JR4FdErI+yv7S<k0WFqgM+CF{}?#(I&Z0R_5
zo|m;QAyK9Vrbka*haM}>P?+>bwt0h`&9t4_?G#8y-xd0ZZVxs`#o@NFQoi>00nG2T
z_y-N9>_&O(0atYc>ZFQP-{-!k7j^bgb%RP|awMVh#_a*`q|1;b&&>9t%t>VIugvng
z)hRj>ci_YV)G$I51JL4>B5)^sr*B1RHUqKk&W;ZWa$<V3L~iH9tt}Qd>q*;`6;ZfK
zYjR!;E$lIgus3Y^Y_1tqib+956LaHlEe>5dExoz1#-uKC0Rax4M-PdI^sjo%pwG<d
zM?CbTdK((<oJ{~4boqC$QafP#C<nXfIiafh3VV~XV!28+49@~0O<V7q-nT*?-QS%;
zV3S^zE$IeMc~<BC9ZZCFhIKm~<!e;BxTkG(Z)Xo-w?)DnmR*9-$_ISc9-wT7g?SoH
zGRC7gc}SXs+JUfV)q>?LTjbuOY;AORS(g@8IR#ZqJxv+Ybe&$U79R5oG3hW<QEjMN
z{3(i^@C9cC^?=NG&5;8Em{Ai$>Jd|H>S3ejL@V8yVqOYbjV2^9Xv&h-wGm?e-%<q|
zZ)CWej4@IRDoVJ|9wZ<kBjujPeQi`pwqf~yZa&00-;&RL0<MA%|5~OE4lS4<%GtfL
zt(mYmnlfv_c*LS;b<X%LW6NAYU#vsfWOE$bU1p)p-;aEhG6>3Zm8VRr8w6LFI`eA~
zlQ2%G86=%mLl)1Y)VEsKkKMg!o4sE2EBQjN=>U$+#%mKk5p04x0-GI>_8K{sFg6UH
zhBU8MvB;H0RUs{uobD!hF5G^<bA6dQmb#3Xb$uStIAR0!_XD{=$?*v*a5}9`lGOTY
z9>fkU;FMl#2FEM#Mu%ad(ovZ>G@FFf$VM~_Q>9FQuCmu{T#ZB7xE0Uicq@#Xqr?4z
zMsE>KpuDV^<1C>nHXAi+fHPKD_a}mK{h;P|$1CC?uwn0!S8E&8-bKdm$4Ex`KZ#zV
z;vQuRTWXhvzmYpF&&&J{A?<bsTgTw?txw*wuQ4{@c48pzE`oIH+G#HG+$`ITh2fR7
zcRH3T_s}HU(VedXyMasIw4}SG%T&(gqxVB6ojc`0<Br`(5x7hrK{5R}J`WNy`(P{h
zz2YjJ4~{B8^@<mS`40}7X~2uQw1mW429D=Pk~WrCfv1GW+3m^Rx^tS7<^H>#d_HNv
z#YaO?bEDr9(eW;M3~yp!F)r8V_E1_xteY<ei^3x;?Dl+}m4wDr;O}C_`$S8@@I~_{
zk!dL9NZS(?X4##)iDTLsTW#GmPowugLE&MK<nEB;O@gcU?U<!^bqsCUD&<^Emda(S
z=vS|fi^9*=a@nP~s^O95UBkBt(s3Q!_)9UGIi%e6VQ8VlJXoHW#ncS$Qmd3<Vg-JJ
zQ(-#cA2JfVB-dh3kr)cb)c|PZQ-e+#$$)?J!mLS$0Xkleo4Q_M_xko1eS{_d@Hy0}
zSxq`ZPTh?U8hzYvhE~Pj-cI+)&mYMcYE*I530^KS_)nB6jR&`6qo~m`usmLwMoRuF
z0>y2#>aL&0p{rpOEX{nKy8r$w4m_w>NiB8OAF@NWS6_GR$}D$iXz0YL_3v?*+ga}w
z3^vA-N6)I9S-Q^@ZmU*IhMuf1;o)5E|D!JTkIN?1W~e^12;na@q2GVMeDA3GjnWwv
z)wTqp`yeth$o(6q2itqBZ{;aANI?KX17b9{HS{tt3ezTJ?sdWVIVqngXl@O1!S7oJ
zLuOt-Lm`qi@zh8M*qnuABG6poYyU~AS(^6CanW^NU%p&tW3$F2n=2#~eWHRGe+}tQ
z#AthQj!??6SyLQ!=FNY{U#QOex0>CP()6v2<|h!kY6xy6HUywN7jk9Pt$e61zzx^!
z3|w$tz2U4zVYNZ#1O+K>&nJ>Yy_y{9Ty}qMj(Ij$w)*y}8}fx&7N;7|y#QYY`h_R?
zPIkwn$W4>|dcw5hZ{C0Bwl>p}r$LXGH{4}9VmfU*-Cvy5uxHrpu1t%EvNQ_=EAPUr
zhb~~KK7ZntVB4YX8jnpwQ-)+C1Ee4CnkK^5wABsi7HbmM+@}KCJ0HWa&R5<$YUVIi
zZie{O*iYzM=W?T5eNwDW&)qdTqMfz6JZ6BJbanL@hU(Y5ZhZOXbsb96>TCC{EAcNH
zz5e|CQi<9$mETXw)sC+B)o6jhx&PYGz%JAN3y&*Oc|v|p@s1J4+w8vN2(ZhHPE*z&
zb^M)j(^&=GuxhQexX*&?=v>YDgs1HlEcks3jD6i%i;AN*=Nz94F?E6B?H;fUL`N$D
zdO}gacqpabJ{E+!XT0Rk=}{q@g{EHxLeS7)Ti%S7(l)>P)wBPqy4;G;G=I7*9|=SP
z{&uVLT2{}?>p~P9?{{rp&_IsyUl#IoWN7@0PXe9@cES9%A77E?UTQ^|cT$oVTS_*c
z9<O5&Ms(PL8P`#EV`u%u>C%Cqu#VB-ji{J<VwRySTw0&6T3)F8k0wfsgZ%H)Hb1{L
zASNt7^eR9$>j-(lQhy_SL$hN@O_x%Sj2kU1sAq?yR`?bp(2)6k3k6%2b?vO+QT(<h
z6sDsO84Y)Q^`nh3IVQbQl9DnhM?ntv*<{j`tCOSgsr!zx2QCtDmXdUwjV|BOuOdlg
zf{n!2|GcJ>b_z+}lo_c~w2b!J?$=DiSUaL>z0Tf*v3819zW?#y$v*whLY@yQ_02nB
zDUlld(E_Ap=rp;$PF;lyjeq7{PF4C#fBW9!a`z4>=V%3ya1KnIq>ms}zCnw5AmYw3
zG{{Lw?s2sf(hrW19wxwCRfb57$7p$KLd>pvZ*Axu>#Jx&XsC{s)AP9NH`AN*SRAXC
zz%Sfv1frC_nrTh2?y#EbjXsuNrbQhcizv6^x5Fq0yKQl*9mMX$I3iupO|%>#rNt{W
zCz!wXRfH9Du?mNNhG2lUdA;mW*sbzte!6HPkf1gylE1TYJfQ|m3|4#)p7(Is9yCAB
zH)q^f_?@pmq~AhQwJXt!{n>}a><QthmGBpb{zVQ?XM)!sFa7qI%I*<DZ6$W}R>ZfQ
zk|_yLRErQf(9eE{LK`+3BRRehT9u5j-?H245&xm`<vcZ%lsAB#X{6>`>rXmIHJ7nN
z(L)YTYid=LAz~&^Y?Qg{Wdu&#Vp?QE28?D6;ODkpHxv^iMK({rWzYJm>qI|NFShAf
z`9hF&avR#VMFv~gQYbN;M@e_`q{*l=ESFZ^0B1jCM*7c0#iKc?RlE-+efBV0;qo-O
zN7*==iazse)4~)^Mw>e8{3=8zMeI73Q`H{+w=AA#4i=KlH4oXGU){e<y^f7)=`MLf
zh@!r2wWVpF@tchC4&f`1N<ZRncYITxi$A4^X;X2$Up^9|*4#znB8^?wB9OQBd1Q0B
zcnS~i`8&6--6<1(+yqUJfm-kXotb#`?x~hl!C8Jkt|oNaG^e%(CSq9({1Z0?ZR(~{
zxn(Vtl6ZJSyVW4(HGM9bJg%B!?T2$^MhhD=H=4Jr>2Y;|L}*4$G1<|24UxTUj(PQ`
z)cQ;sQ*he-J=cQ+1hkLAElbCNL1=x_&xFMWu%hFWEm8H*bg9&0n;_fz|KHIYJN=wJ
zu?85foq;hY%o7*t<2E(iL#%k=X&<McT-{tE!O``H=AE-0RlMp**aznmh1_d_%D{x}
zQEFO2v>b%3F%l{aq|4HKA$aX=zNaX1b1wMqU|}wr<|EY24z6I~R6vr)5?*}+h$fe0
zQvqeLX5aL-kG)fqIN_W>Kik~+uvs-VK+ukp-1s^yPjv@_|L!6?qmM_diG&ISB?zm|
zg{4FSWc7Ms9BlQte)E@)kRP8J<@2Y^B4bZ7Cfq4FYIGR$vAeQw`fj^U;g*VH*WjSD
zDQp+Y{v}GsbHAaLZVr}q?L#{|Gssa;lHpePc1?fO)nl0{T<C0lsqWjf!S}XP@ynjZ
z&SMWihx@peFgTB$gu~@CsDwUtuE;!dwod`MCBj?X++ma{plDl=nT7T7D7GHPKr<v&
zN>+PAl$HDgs=#&FAO|!vY_{s@eI@oH3}Pb}C|LK45oc99&)lkRS)YJ78+)ElSO>re
zW27$;s*yxXR(I%|huh<F`bd>@Xvqgb){bmMs9RXl5@)Tv1;qLciU#&~qm?N34C;Se
z<JrGVcNcvyCz*pM+`G|E!uPKhD?FWcf9Iw8@n0c^iyS+1zm!Me<3CIgf9#}PC)RX%
zj$<&rl%MfM{kVEZq0%y3+QiR|)R`54nE$(KWY1JxvrP$TqYyfLDp^f?+omx-Mzdra
z4bU$n8?T|@vfrP<Ej~dFL#SA30Qw}QsXiz^F}_Q=$Ikij_gcmM%ydW8WbBTLe8ShD
z9FL!pQ#O(ex*+8yshdnS1R|LyH=SH*XW_v^2}6KYp-M%Lx$$%fb#VEW{Vta`DxGL_
z+)Sk3s8qjX{Ufe=rz)8_OfXlQxhI)UNK6F`_1%|5t3g&Ep_Nz}ELEDZEQ}&Usz@^L
zm*%9b<F5g@i$CW9RO*8d$ekQ%=TYc7GR<m`a&l^9_^>BaA1*p|LRW4#|5~nq!ntT#
zwICmqpwiR@pEifjd`NS-$c;!|x-HFpE)@v7j+bTpes@Up<bOX+J$X;_`KbQ-B|2dL
zx6n>_(|YERHQ<!WQ1Fqkk*AN`f7HL-5LX4c^=UkH;v7!`g&Ix)92V3adS{ZXS>1dQ
znY)&XIcX(dFHk7Yv)VHBjkF<{%A`ieu6^eCp};yJFewJkCb+_4zf!s{Son5J72C}I
zmE+)4R=5TYyKkk`cC)1J!%E_FsK1kP1RDn#CLz|LmN#t$prkSckz0BKIXW5>gI*Q+
zUnIad5p4zAYLxkwWlT``HQ4iSNH>70z0tAkQs6;T^OpQcL+5j%9~Q&tV#<VUi`%ze
zI~ryYnYFxrScOIV3e&&&bz`%9M@Bod3vc3{n`cmD9a+?CENyG-ndI?NEk6n#*7p(x
zC4)1zUUH+nFWV-V0F_U}Sh(Rci!tF9Yh`g8n|5n7^ay1e@70v)rzVi+gG7U6blWyv
zz{i(~8kWfj_|{YFZJIV_3HCzuwbo<oYnB|WLx&KL{TzB)CDyx4ypMltZJ%tfPxFGg
z)8`(w%K+Gt*W%FV|DIIafoVrF1$5KP95+`FTA5DS$gopqb;q5i?jhk{i-vhW^@ECm
z4@LIH{15{B-<qZHzcT~ke>d;RZ{VnO1o-3$?vbCwlK%-u^$+U%|Afx{2cEGtw6iob
zb#|e1GBKM<nz9RKKnS_!2{oNw6`%(Nb)pz=v&!pb4buRnzsp40?v71TQ!J`D%Uj&9
z5o6woZOpnf#2JmMFY8lbF{UIPm#}C$rRM6OYb)O1T3>CZ#?QpPwF)lIqiT1zqvF(0
z4W(s=v6*Qor0~eR=aKIu>RaM)lz<s-jD>*2ixIMXJn+Hdoc;@GrmpC6o*(b|Ou!qp
z#Z{hP4`tY_)D_-LkPs*k11U2e;u4J0E+;+2oO-Xw*;jD+cf_D;A-Iso;D$POW_3FP
zrsPm>x2x_-CwRvv#lq{#*voZc=yr!V*&v(gO8%^a+w=SQi*Du{^KWgVn~06T^l$UG
z_~XVqd{yz<|G>_kE#^Ugut&lF1AFveIY0ki?0*&fpNg=(otdS%tJ8ll(#}lumbQlG
zKTu~OOBY*12j?Fk)Boz-|ASipUk4i+8=Kmg{_wJQqBnMRa{BKn>%c$wC-8q5H-LW$
zL;uSEn(aT#w6lw+jp={TP?uWTaT{!CemnYxWfnUYn%$GDc4VOILq^aflyym0)`HT>
zLt#juiC7!2kGv$V1tw!^Oo56RIpKhl_qR7U-00g6N2SK&Wb`5u;|=8W>C>H%V?uay
zHs1%IU$^`gm!A($`t}|;3-LC@cxaSkD2Zo-5!nLAGIrHBW7HzehZ;(4Qw~xGYN6V>
zNmXZ!u5;SV$+nE+!*1*bEiFXitj!I>&2N9VUJ_teFL5D#Fg7%e1C?96Cr8})q{571
zg>sKH=3-IB#Tw-0^$JzGA3q277<g$)bS^#(8rELKw6JlOTRRaZ^9yImqfh#Z@MVB|
z`b$Li{ybS$Su3d(aTAFt2cz=cSNN>O#YUuk0<ane4V|nq>^6I&&v`u45w+Mysxs{+
zHGSiS9PPZj%hE)+Txeiz6jGtE;Pc8xxxG72TPwSQXXOuXzS=ZDT-t;CwnFejR75!J
z?umLtXlgJ|FYwI+puYqN9EgTnhN5}R2WP5x6L6weu#w>D=Lh6?=IH&BT66HSv;^IX
zqBsi;;)KRmf(63uQgC{iwpN{<fLnFJF&Lk1q60fvE|0<u%BW>@T@R4XETnpJU5oQf
z=p!*Gr+_3G$%d#9P0z5~NDWh?lWJ4&J@EO+t2LEaF)QOcyxXObbiTH2`WnPp&cz4^
z5hXFXyTsOJKRf#MSsmkj=ND|rmp6|K4lWo|ra)<08e6AW7!^QbaEvHP{YVdg7b{fE
zoGg<Y7};uGhVL+a7^j<WYYS_~ozFW40H8_i5!rx7R7w@neisDF3fFD437&Zc#pyYm
zk==>iSQXkHs!4~+a6&N-z~0Z|nXlA6+~}XgfBPLZVaA!xNS0GXbjq6bQ2;={ap_lC
z&r8Her_lyo$&$u)1v-t4<%Qb(5#t1CNskh$o0XfU668-*XU7Bw{pcQbH~=MlbH-E`
zLuuS};Mo03IDXK_8$dPUc>KV0IN?jzEdet21u(EFp7-SCV5&s04$fkknm=a(m8Kiw
zi3(&4C%jHs2on8)c_n42F!+%4Au3mUH8}K+PwN`9S>9TbJ@^!-Oe%iMe>h!|yxobW
z&aiu^1JRPFKlHB`0t6=(qFq7yA!H30gWCm2UtJ5Z`J93(Qdh6lz7n3GJ6ZgCQ-72h
z;#_6sc4<dLd32Rc2rCd##Ie%IPTd--&W0~rmJm`t;lgwi=wet55~w96s|qb)RkY6h
z3<3O68<Q=J`8&{c!7q~%!jNKdNQms6JnOKCpct?>5fL-96>hSiLp<}XK|2PoO(^8a
zlFH7KHl~6^KRGH%OKH-V!-3Z_FaGh-+woS`@#zj`J6c%__XDkmbMV?*y-J$sa@3}d
zt|&+72l7%L!i-xSBaX-bcjKsX;OLS@Hh&Y3V^Oq<eyT-R5HrYoFn+zbZz?-Qkpcu0
zulO~Wwv5`$3!732I2*R|S9zRo-u+crW~HSHy9>xfqs$CjE!2Q}W(B>`B4AI^#MSCX
zWfn}wfst*fi`H4rf_+#tXb8M8=knjLO~Ax`@Hu@2#Ys7N5Mv2{y$g|iFP7KbZ4KN7
zuoq_Hr4i8**fmI~ju~l4)4@F#O_tiazmae_UwO*lu+Fea7wx4=l$Sw$Lc;iu8u;CK
zxE?cHtFwzW1gZhYof_)-dD7SCAl!5)ebI7c&Cf%X)rBBDXY~!1bycj{(|HBWo<P!Z
zZzT09d4NraNVG~TXtFNe+WTiKccq<ms4WZ6rBoh0q0Zc<Z^mv92T^;-l)AYf^v=KM
zLOO#*&#le82oEyUIEhBJ3K+hT=)Z!dYQC|(AgWMapzj;+hAQtCbpSV@r5d<XZGWw~
zsXV7O>}}#|T-#<{0dnJW81)KX6oP9B4QNr~o^5t4a&1|AmK!ui`G*1z++uU3WBH=v
ze#Ge9$`XAX2lesEkf(Q{CVmc$_mknubQyJ+9$Pixw+1;yy^%^>T7tW<=?at3C-Z{m
zPQ9^H-*O3v=|NEMEu*#rQdFZK5Q)BFVGU5J%WI?+)LXBN)kH{JxmhBxl5tA9#t(5L
z2+v+I`xdO0HUm?-W({LB>wE|hHFB>7{U76~Ry{Ad$Ic|=@#{q!HCA^PikhlFQ|C8*
zn>sa7B}{Zr;*RoN3bIK>D#t%tKd!Jm@Nv`p$4_-F;_gTuU(MJT{#Ryw-ocNb&RNt+
zJovG2{^R!Of<3#8`{daz>fSv6@lj019;om&W8Zb4!u*3DAI~k^Bl)1>^7)U?#AMdL
z?|Qso`ojhN_aBJ8$$Qs*_a(#r%XMwb%^zCKxGQ<`GvlP^e^t)Mdlp4MF`8fKsv@JY
zdB(f$PfVM{7JPD$FJAZMy`4JC)0nr1-*Bh3)=klrUfp+T=AOz)g}-kU@2lH<@z*MT
zzb`e%qdhidoN&06pRhE}_)^3L^D_^0TWc?wT|Y6K{W;gF{&_*(&dp`Hnu{Yf&ZJjV
zML(|*OxR*7&-7w<?FCQg5YAQH(`<K0&p)ttt?<9!HoSY}0-o!g_TV$Q6u)-u>*D52
zUyi%#RYC_JJn?$#FwZF_;IC!C%QU?y2SO^JPp|BMef*r@hMi}ur(ccUXWY5rnyFIu
znWOGS()}7ok5`rbV%qW3WC@GMr0`cdrkh{pe0%XBV6Vd>Sw<@#cIK#@Yqkn9ugmwv
z`AnYVKkrG;we6V}zcx=eb*!~l?6#i5dhf;0R==NJ?f?7Yu`_=v-yN=-|9my4I?L<p
z+Mf@XM;1t(7d17klAE$r;pnDof&F1-S-#@(3u0!^O(-i`y!hVx|6V`e#)BFav1fwU
z$pV`ePj&D$Dnx;e3SZX{M_o@pH+^`65xALdZOFmALk2v1KZ}O03l`=QauQ|T=sTx8
zL4Ly0yv`{Wp^p@P{N9@5u)MP~>q*M-Z=X+hPd@r8!FLn8{FcK_sWoSW9G-ghmL9yf
zeRj#Yu+tY0d0i1@Id$Ic(zV1LJ6OBriq)I>EWNlD)u--e+fbqv<#4M0+4JRo;_KZL
z4ozG9<ktF2Y?rp(lV5)`)I=>;<t>+5USrI5-6>JaN^%w?Y|88jn{>-$<MB!JIX>I@
z`xPjtwG~uc?poBYu&FRV_43c@8|V4XPk;TU)c7gyHS-SM*BOl}`K)^xugN-=Jak;Z
z*l{bGpPxO9Z)Nbei#u+|Zjsm6%Gq@8nY>W8cD6ul&5UdJtM5#|DjR$?&6d~hWcOjO
z>lf!M9CGnkdcfhem43*VfB9ekU4MOUx{y+tNX3<yuYzpnBxHH-SSNCSe0@E#jtLb0
zRh%hPZGjEV4J@GWXJis#z<nqWsNshIup@e4x?t^l<P#G>r|%$uFOW&nSv=@QBk#xu
zH%H-SZw4OE06Z}Wd;kNwF63RBpbiHDtOFW?ymud6C-TaB&@N5{xWI?9rxT_T)<{QR
zn2*qCCW(8QKFkz&NFsFtP#yl-8nxd9(+RU5VIKnnsFQ#ITDF+2evB>yBpJY*0n!X>
z_k%hO2#}7&FdSV7m<wTsBIkQhmjMCx0S!fTAkg(8r&my^fB?d7ILe3sZ&qOH03O2x
Ngx7%{nd}bY0RUA+EV2Lq

literal 0
HcmV?d00001

diff --git a/docs/dev/factsheet.pdf b/docs/dev/factsheet.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..c59a1a6f12563f84b4a4d4ea41bf5b7a11cc854c
GIT binary patch
literal 19974
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
Rrrpa>cxW{_I}0~O@(p~QbbkN<

literal 0
HcmV?d00001


From 3e398b233b4ab56f17b27cb0ddfa72041b55b775 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 8 Jan 2014 09:48:04 +0100
Subject: [PATCH 89/93] fix compare with leading 0 on directory mode

---
 cdist/conf/type/__directory/gencode-remote | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/cdist/conf/type/__directory/gencode-remote b/cdist/conf/type/__directory/gencode-remote
index 800fc6e4..e206ca63 100755
--- a/cdist/conf/type/__directory/gencode-remote
+++ b/cdist/conf/type/__directory/gencode-remote
@@ -85,7 +85,13 @@ DONE
          if [ -f "$__object/parameter/$attribute" ]; then
             value_should="$(cat "$__object/parameter/$attribute")"
             value_is="$(get_current_value "$attribute" "$value_should")"
-            if [ "$set_attributes" -o "$value_should" != "$value_is" ]; then
+            # the compare isn't correct when eg 0700 = 700 so we prefix the value_is to 4 chars
+            if [ "$attribute" = "mode" ] && [ ${#value_should} != ${#value_is} ]; then
+                if [ ${#value_is} = 3 ]; then
+                    value_is=0${value_is}
+                fi
+            fi
+            if [ "$set_attributes" = 1 ] || [ "$value_should" != "$value_is" ]; then
                "set_$attribute" "$value_should"
             fi
          fi

From 3f08565e592eb0d7300397fff38afa4836652216 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 8 Jan 2014 11:09:01 +0100
Subject: [PATCH 90/93] Revert "install rubygems for ubuntu/debian"

On request by Steven.

This reverts commit d2c45717f1172d83d64209cad12d1c84f3e16974.
---
 cdist/conf/type/__package_rubygem/manifest | 33 ----------------------
 1 file changed, 33 deletions(-)
 delete mode 100755 cdist/conf/type/__package_rubygem/manifest

diff --git a/cdist/conf/type/__package_rubygem/manifest b/cdist/conf/type/__package_rubygem/manifest
deleted file mode 100755
index 7199d939..00000000
--- a/cdist/conf/type/__package_rubygem/manifest
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-#
-# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
-#
-# 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/>.
-#
-
-
-os=$(cat "$__global/explorer/os")
-
-case "$os" in
-   debian|ubuntu)
-      __package rubygems
-   ;;
-   *)
-      echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
-      echo "Please contribute an implementation for it if you can." >&2
-      exit 1
-   ;;
-esac

From de1913049725f9fae6a266e4c66d6bd4ab65ac4d Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 8 Jan 2014 11:09:36 +0100
Subject: [PATCH 91/93] no changes for __package_rubygems

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 1 -
 1 file changed, 1 deletion(-)

diff --git a/docs/changelog b/docs/changelog
index d606ba69..06f8a29c 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -7,7 +7,6 @@ Changelog
 3.0.1:
 	* Type __line: Remove unecessary backslash escape
 	* Type __package: Fix typo in optional parameter ptype (Daniel Heule)
-	* Type __package_rubygems: Require rubygems prior to use (Steven Armstrong)
 	* Type __start_on_boot: Fix for SuSE's chkconfig (Daniel Heule)
 
 3.0.0: 2013-12-24

From afb06b729eab62352c3443cac7bc2e6721e9c415 Mon Sep 17 00:00:00 2001
From: Daniel Heule <hda@sfs.biz>
Date: Wed, 8 Jan 2014 13:10:46 +0100
Subject: [PATCH 92/93] mode and message handling now like __file type

---
 cdist/conf/type/__directory/gencode-remote | 27 +++++++++++++---------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/cdist/conf/type/__directory/gencode-remote b/cdist/conf/type/__directory/gencode-remote
index e206ca63..05c301b3 100755
--- a/cdist/conf/type/__directory/gencode-remote
+++ b/cdist/conf/type/__directory/gencode-remote
@@ -56,15 +56,18 @@ get_current_value() {
 }
 
 set_group() {
-   echo chgrp $recursive \"$1\" \"$destination\"
+    echo chgrp $recursive \"$1\" \"$destination\"
+    echo chgrp $recursive $1 >> "$__messages_out"
 }
 
 set_owner() {
-   echo chown $recursive \"$1\" \"$destination\"
+    echo chown $recursive \"$1\" \"$destination\"
+    echo chown $recursive $1 >> "$__messages_out"
 }
 
 set_mode() {
-   echo chmod $recursive \"$1\" \"$destination\"
+    echo chmod $recursive \"$1\" \"$destination\"
+    echo chmod $recursive $1 >> "$__messages_out"
 }
 
 case "$state_should" in
@@ -77,6 +80,7 @@ case "$state_should" in
 rm -f "$destination"
 mkdir $mkdiropt "$destination"
 DONE
+        echo "remove non directory" >> "$__messages_out"
       fi
 
       # Note: Mode - needs to happen last as a chown/chgrp can alter mode by
@@ -85,12 +89,12 @@ DONE
          if [ -f "$__object/parameter/$attribute" ]; then
             value_should="$(cat "$__object/parameter/$attribute")"
             value_is="$(get_current_value "$attribute" "$value_should")"
-            # the compare isn't correct when eg 0700 = 700 so we prefix the value_is to 4 chars
-            if [ "$attribute" = "mode" ] && [ ${#value_should} != ${#value_is} ]; then
-                if [ ${#value_is} = 3 ]; then
-                    value_is=0${value_is}
-                fi
+
+            # change 0xxx format to xxx format => same as stat returns
+            if [ "$attribute" = mode ]; then
+                value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')"
             fi
+
             if [ "$set_attributes" = 1 ] || [ "$value_should" != "$value_is" ]; then
                "set_$attribute" "$value_should"
             fi
@@ -98,9 +102,10 @@ DONE
       done
    ;;
    absent)
-      if [ "$type" = "directory" ]; then
-         echo rm -rf \"$destination\"
-      fi
+        if [ "$type" = "directory" ]; then
+            echo rm -rf \"$destination\"
+            echo remove >> "$__messages_out"
+        fi
    ;;
    *)
       echo "Unknown state: $state_should" >&2

From 57b700d11bbeb5cc65a5b203758f40484b3fa578 Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Wed, 8 Jan 2014 14:54:21 +0100
Subject: [PATCH 93/93] ++changes(3.0.1)

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 docs/changelog | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/docs/changelog b/docs/changelog
index 06f8a29c..d83552f5 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -6,6 +6,9 @@ Changelog
 
 3.0.1:
 	* Type __line: Remove unecessary backslash escape
+	* Type __directory: Add messaging support (Daniel Heule)
+	* Type __directory: Do not generate code if mode is 0xxx ((Daniel Heule)
+	* Type __directory: Add messaging support (Daniel Heule)
 	* Type __package: Fix typo in optional parameter ptype (Daniel Heule)
 	* Type __start_on_boot: Fix for SuSE's chkconfig (Daniel Heule)