vagrant-salt 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/README.rst +131 -170
  2. data/example/complete/Vagrantfile +67 -0
  3. data/example/complete/salt/custom-bootstrap-salt.sh +2425 -0
  4. data/example/complete/salt/key/master.pem +30 -0
  5. data/example/complete/salt/key/master.pub +14 -0
  6. data/example/complete/salt/key/minion.pem +30 -0
  7. data/example/complete/salt/key/minion.pub +14 -0
  8. data/example/complete/salt/master +459 -0
  9. data/example/{salt/minion.conf → complete/salt/minion} +1 -2
  10. data/example/{salt → complete/salt}/roots/pillar/top.sls +0 -0
  11. data/example/complete/salt/roots/salt/nginx.sls +5 -0
  12. data/example/complete/salt/roots/salt/top.sls +3 -0
  13. data/example/masterless/Vagrantfile +18 -0
  14. data/example/masterless/salt/minion +219 -0
  15. data/example/{salt/roots/salt → masterless/salt/roots/pillar}/top.sls +0 -0
  16. data/example/masterless/salt/roots/salt/nginx.sls +5 -0
  17. data/example/masterless/salt/roots/salt/top.sls +3 -0
  18. data/lib/vagrant-salt.rb +16 -3
  19. data/lib/vagrant-salt/config.rb +103 -0
  20. data/lib/vagrant-salt/errors.rb +11 -0
  21. data/lib/vagrant-salt/plugin.rb +31 -0
  22. data/lib/vagrant-salt/provisioner.rb +211 -104
  23. data/lib/vagrant-salt/version.rb +5 -0
  24. data/scripts/.travis.yml +16 -0
  25. data/scripts/ChangeLog +39 -0
  26. data/scripts/LICENSE +16 -0
  27. data/scripts/README.rst +124 -35
  28. data/scripts/bootstrap-salt-minion.sh +1815 -381
  29. data/scripts/bootstrap-salt.sh +2425 -0
  30. data/scripts/salt-bootstrap.sh +2425 -0
  31. data/scripts/tests/README.rst +38 -0
  32. data/scripts/tests/bootstrap/__init__.py +11 -0
  33. data/{example/salt/key/KEYPAIR_GOES_HERE → scripts/tests/bootstrap/ext/__init__.py} +0 -0
  34. data/scripts/tests/bootstrap/ext/console.py +100 -0
  35. data/scripts/tests/bootstrap/ext/os_data.py +199 -0
  36. data/scripts/tests/bootstrap/test_install.py +586 -0
  37. data/scripts/tests/bootstrap/test_lint.py +27 -0
  38. data/scripts/tests/bootstrap/test_usage.py +28 -0
  39. data/scripts/tests/bootstrap/unittesting.py +216 -0
  40. data/scripts/tests/ext/checkbashisms +640 -0
  41. data/scripts/tests/install-testsuite-deps.py +99 -0
  42. data/scripts/tests/runtests.py +207 -0
  43. data/templates/locales/en.yml +14 -0
  44. data/vagrant-salt.gemspec +2 -2
  45. metadata +43 -10
  46. data/example/Vagrantfile +0 -26
  47. data/lib/vagrant_init.rb +0 -1
@@ -1,26 +1,112 @@
1
- #!/bin/bash -
1
+ #!/bin/sh -
2
2
  #===============================================================================
3
3
  # vim: softtabstop=4 shiftwidth=4 expandtab fenc=utf-8 spell spelllang=en
4
4
  #===============================================================================
5
5
  #
6
- # FILE: bootstrap-salt-minion.sh
6
+ # FILE: bootstrap-salt.sh
7
7
  #
8
8
  # DESCRIPTION: Bootstrap salt installation for various systems/distributions
9
9
  #
10
10
  # BUGS: https://github.com/saltstack/salty-vagrant/issues
11
11
  # AUTHOR: Pedro Algarvio (s0undt3ch), pedro@algarvio.me
12
12
  # Alec Koumjian (akoumjian), akoumjian@gmail.com
13
+ # Geoff Garside (geoffgarside), geoff@geoffgarside.co.uk
14
+ # LICENSE: Apache 2.0
13
15
  # ORGANIZATION: Salt Stack (saltstack.org)
14
16
  # CREATED: 10/15/2012 09:49:37 PM WEST
15
17
  #===============================================================================
16
18
  set -o nounset # Treat unset variables as an error
17
- ScriptVersion="1.1"
18
- ScriptName="bootstrap-salt-minion.sh"
19
+ ScriptVersion="1.5.2"
20
+ ScriptName="bootstrap-salt.sh"
21
+
22
+ #===============================================================================
23
+ # Environment variables taken into account.
24
+ #-------------------------------------------------------------------------------
25
+ # * BS_COLORS: If 0 disables colour support
26
+ # * BS_PIP_ALLOWED: If 1 enable pip based installations(if needed)
27
+ # * BS_ECHO_DEBUG: If 1 enable debug echo which can also be set by -D
28
+ # * BS_SALT_ETC_DIR: Defaults to /etc/salt
29
+ # * BS_FORCE_OVERWRITE: Force overriding copied files(config, init.d, etc)
30
+ #===============================================================================
31
+
19
32
 
20
33
  #===============================================================================
21
34
  # LET THE BLACK MAGIC BEGIN!!!!
22
35
  #===============================================================================
23
36
 
37
+
38
+ # Bootstrap script truth values
39
+ BS_TRUE=1
40
+ BS_FALSE=0
41
+
42
+ #--- FUNCTION ----------------------------------------------------------------
43
+ # NAME: __detect_color_support
44
+ # DESCRIPTION: Try to detect color support.
45
+ #-------------------------------------------------------------------------------
46
+ COLORS=${BS_COLORS:-$(tput colors 2>/dev/null || echo 0)}
47
+ __detect_color_support() {
48
+ if [ $? -eq 0 ] && [ "$COLORS" -gt 2 ]; then
49
+ RC="\033[1;31m"
50
+ GC="\033[1;32m"
51
+ BC="\033[1;34m"
52
+ YC="\033[1;33m"
53
+ EC="\033[0m"
54
+ else
55
+ RC=""
56
+ GC=""
57
+ BC=""
58
+ YC=""
59
+ EC=""
60
+ fi
61
+ }
62
+ __detect_color_support
63
+
64
+
65
+ #--- FUNCTION ----------------------------------------------------------------
66
+ # NAME: echoerr
67
+ # DESCRIPTION: Echo errors to stderr.
68
+ #-------------------------------------------------------------------------------
69
+ echoerror() {
70
+ printf "${RC} * ERROR${EC}: $@\n" 1>&2;
71
+ }
72
+
73
+ #--- FUNCTION ----------------------------------------------------------------
74
+ # NAME: echoinfo
75
+ # DESCRIPTION: Echo information to stdout.
76
+ #-------------------------------------------------------------------------------
77
+ echoinfo() {
78
+ printf "${GC} * INFO${EC}: %s\n" "$@";
79
+ }
80
+
81
+ #--- FUNCTION ----------------------------------------------------------------
82
+ # NAME: echowarn
83
+ # DESCRIPTION: Echo warning informations to stdout.
84
+ #-------------------------------------------------------------------------------
85
+ echowarn() {
86
+ printf "${YC} * WARN${EC}: %s\n" "$@";
87
+ }
88
+
89
+ #--- FUNCTION ----------------------------------------------------------------
90
+ # NAME: echodebug
91
+ # DESCRIPTION: Echo debug information to stdout.
92
+ #-------------------------------------------------------------------------------
93
+ echodebug() {
94
+ if [ $ECHO_DEBUG -eq $BS_TRUE ]; then
95
+ printf "${BC} * DEBUG${EC}: %s\n" "$@";
96
+ fi
97
+ }
98
+
99
+ #--- FUNCTION ----------------------------------------------------------------
100
+ # NAME: pip_not_allowed
101
+ # DESCRIPTION: Simple function to let the users know that -P needs to be
102
+ # used.
103
+ #-------------------------------------------------------------------------------
104
+ pip_not_allowed() {
105
+ echoerror "pip based installations were not allowed. Retry using '-P'"
106
+ usage
107
+ exit 1
108
+ }
109
+
24
110
  #=== FUNCTION ================================================================
25
111
  # NAME: usage
26
112
  # DESCRIPTION: Display usage information.
@@ -44,9 +130,23 @@ usage() {
44
130
  $ ${ScriptName} git 8c3fadf15ec183e5ce8c63739850d543617e4357
45
131
 
46
132
  Options:
47
- -h|help Display this message
48
- -v|version Display script version
49
- -c|config-dir Temporary minion configuration directory
133
+ -h Display this message
134
+ -v Display script version
135
+ -n No colours.
136
+ -D Show debug output.
137
+ -c Temporary configuration directory
138
+ -M Also install salt-master
139
+ -S Also install salt-syndic
140
+ -N Do not install salt-minion
141
+ -C Only run the configuration function. This option automaticaly
142
+ bypasses any installation.
143
+ -P Allow pip based installations. On some distributions the required salt
144
+ packages or it's dependencies are not available as a package for that
145
+ distribution. Using this flag allows the script to use pip as a last
146
+ resort method. NOTE: This works for functions which actually implement
147
+ pip based installations.
148
+ -F Allow copied files to overwrite existing(config, init.d, etc)
149
+
50
150
  EOT
51
151
  } # ---------- end of function usage ----------
52
152
 
@@ -54,34 +154,73 @@ EOT
54
154
  # Handle command line arguments
55
155
  #-----------------------------------------------------------------------
56
156
  TEMP_CONFIG_DIR="null"
57
-
58
- while getopts ":hvc:" opt
157
+ INSTALL_MASTER=$BS_FALSE
158
+ INSTALL_SYNDIC=$BS_FALSE
159
+ INSTALL_MINION=$BS_TRUE
160
+ ECHO_DEBUG=${BS_ECHO_DEBUG:-$BS_FALSE}
161
+ CONFIG_ONLY=$BS_FALSE
162
+ PIP_ALLOWED=${BS_PIP_ALLOWED:-$BS_FALSE}
163
+ SALT_ETC_DIR=${BS_SALT_ETC_DIR:-/etc/salt}
164
+ FORCE_OVERWRITE=${BS_FORCE_OVERWRITE:-$BS_FALSE}
165
+
166
+ while getopts ":hvnDc:MSNCP" opt
59
167
  do
60
- case $opt in
61
-
62
- h|help ) usage; exit 0 ;;
63
-
64
- v|version ) echo "$0 -- Version $ScriptVersion"; exit 0 ;;
65
- c|config-dir ) TEMP_CONFIG_DIR="$OPTARG" ;;
66
-
67
- \? ) echo "\n Option does not exist : $OPTARG\n"
68
- usage; exit 1 ;;
168
+ case "${opt}" in
169
+
170
+ h ) usage; exit 0 ;;
171
+
172
+ v ) echo "$0 -- Version $ScriptVersion"; exit 0 ;;
173
+ n ) COLORS=0; __detect_color_support ;;
174
+ D ) ECHO_DEBUG=$BS_TRUE ;;
175
+ c ) TEMP_CONFIG_DIR="$OPTARG"
176
+ # If the configuration directory does not exist, error out
177
+ if [ ! -d "$TEMP_CONFIG_DIR" ]; then
178
+ echoerror "The configuration directory ${TEMP_CONFIG_DIR} does not exist."
179
+ exit 1
180
+ fi
181
+ ;;
182
+ M ) INSTALL_MASTER=$BS_TRUE ;;
183
+ S ) INSTALL_SYNDIC=$BS_TRUE ;;
184
+ N ) INSTALL_MINION=$BS_FALSE ;;
185
+ C ) CONFIG_ONLY=$BS_TRUE ;;
186
+ P ) PIP_ALLOWED=$BS_TRUE ;;
187
+ F ) FORCE_OVERWRITE=$BS_TRUE ;;
188
+
189
+ \?) echo
190
+ echoerror "Option does not exist : $OPTARG"
191
+ usage
192
+ exit 1
193
+ ;;
69
194
 
70
195
  esac # --- end of case ---
71
196
  done
72
197
  shift $(($OPTIND-1))
73
198
 
199
+
74
200
  __check_unparsed_options() {
75
201
  shellopts="$1"
76
202
  unparsed_options=$( echo "$shellopts" | grep -E '[-]+[[:alnum:]]' )
77
203
  if [ "x$unparsed_options" != "x" ]; then
78
204
  usage
79
205
  echo
80
- echo " * ERROR: options come before install arguments"
206
+ echoerror "options are only allowed before install arguments"
81
207
  echo
82
208
  exit 1
83
209
  fi
84
210
  }
211
+
212
+
213
+ # Check that we're actually installing one of minion/master/syndic
214
+ if [ $INSTALL_MINION -eq $BS_FALSE ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && [ $CONFIG_ONLY -eq $BS_FALSE ]; then
215
+ echowarn "Nothing to install or configure"
216
+ exit 0
217
+ fi
218
+
219
+ if [ $CONFIG_ONLY -eq $BS_TRUE ] && [ "$TEMP_CONFIG_DIR" = "null" ]; then
220
+ echoerror "In order to run the script in configuration only mode you also need to provide the configuration directory."
221
+ exit 1
222
+ fi
223
+
85
224
  # Define installation type
86
225
  if [ "$#" -eq 0 ];then
87
226
  ITYPE="stable"
@@ -91,11 +230,13 @@ else
91
230
  shift
92
231
  fi
93
232
 
94
- if [ "$ITYPE" != "stable" -a "$ITYPE" != "daily" -a "$ITYPE" != "git" ]; then
95
- echo " ERROR: Installation type \"$ITYPE\" is not known..."
233
+ # Check installation type
234
+ if [ "$ITYPE" != "stable" ] && [ "$ITYPE" != "daily" ] && [ "$ITYPE" != "git" ]; then
235
+ echoerror "Installation type \"$ITYPE\" is not known..."
96
236
  exit 1
97
237
  fi
98
238
 
239
+ # If doing a git install, check what branch/tag/sha will be checked out
99
240
  if [ $ITYPE = "git" ]; then
100
241
  if [ "$#" -eq 0 ];then
101
242
  GIT_REV="master"
@@ -106,30 +247,50 @@ if [ $ITYPE = "git" ]; then
106
247
  fi
107
248
  fi
108
249
 
250
+ # Check for any unparsed arguments. Should be an error.
109
251
  if [ "$#" -gt 0 ]; then
110
252
  __check_unparsed_options "$*"
111
253
  usage
112
254
  echo
113
- echo " * ERROR: Too many arguments."
255
+ echoerror "Too many arguments."
114
256
  exit 1
115
257
  fi
116
258
 
117
259
  # Root permissions are required to run this script
118
260
  if [ $(whoami) != "root" ] ; then
119
- echo " * ERROR: Salt requires root privileges to install. Please re-run this script as root."
261
+ echoerror "Salt requires root privileges to install. Please re-run this script as root."
120
262
  exit 1
121
263
  fi
122
264
 
265
+ CALLER=$(echo `ps -a -o pid,args | grep $$ | grep -v grep | tr -s ' '` | cut -d ' ' -f 2)
266
+ if [ "${CALLER}x" = "${0}x" ]; then
267
+ CALLER="PIPED THROUGH"
268
+ fi
269
+ echoinfo "${CALLER} ${0} -- Version ${ScriptVersion}"
270
+ #echowarn "Running the unstable version of ${ScriptName}"
271
+
123
272
 
124
273
  #--- FUNCTION ----------------------------------------------------------------
125
274
  # NAME: __exit_cleanup
126
275
  # DESCRIPTION: Cleanup any leftovers after script has ended
276
+ #
277
+ #
278
+ # http://www.unix.com/man-page/POSIX/1posix/trap/
279
+ #
280
+ # Signal Number Signal Name
281
+ # 1 SIGHUP
282
+ # 2 SIGINT
283
+ # 3 SIGQUIT
284
+ # 6 SIGABRT
285
+ # 9 SIGKILL
286
+ # 14 SIGALRM
287
+ # 15 SIGTERM
127
288
  #-------------------------------------------------------------------------------
128
289
  __exit_cleanup() {
129
290
  EXIT_CODE=$?
130
291
 
131
292
  # Remove the logging pipe when the script exits
132
- echo " * Removing the logging pipe $LOGPIPE"
293
+ echodebug "Removing the logging pipe $LOGPIPE"
133
294
  rm -f $LOGPIPE
134
295
 
135
296
  # Kill tee when exiting, CentOS, at least requires this
@@ -137,25 +298,24 @@ __exit_cleanup() {
137
298
 
138
299
  [ "x$TEE_PID" = "x" ] && exit $EXIT_CODE
139
300
 
140
- echo " * Killing logging pipe tee's with pid(s): $TEE_PID"
301
+ echodebug "Killing logging pipe tee's with pid(s): $TEE_PID"
141
302
 
142
303
  # We need to trap errors since killing tee will cause a 127 errno
143
304
  # We also do this as late as possible so we don't "mis-catch" other errors
144
305
  __trap_errors() {
145
- echo "Errors Trapped: $EXIT_CODE"
306
+ echoinfo "Errors Trapped: $EXIT_CODE"
146
307
  # Exit with the "original" exit code, not the trapped code
147
308
  exit $EXIT_CODE
148
309
  }
149
- # Bash understands ERR trap signal, FreeBSD does not
150
- trap "__trap_errors" ERR >/dev/null 2>&1 || trap "__trap_errors" INT KILL QUIT
310
+ trap "__trap_errors" INT QUIT ABRT KILL QUIT TERM
151
311
 
152
312
  # Now we're "good" to kill tee
153
- kill -TERM $TEE_PID
313
+ kill -s TERM $TEE_PID
154
314
 
155
315
  # In case the 127 errno is not triggered, exit with the "original" exit code
156
316
  exit $EXIT_CODE
157
317
  }
158
- trap "__exit_cleanup" EXIT
318
+ trap "__exit_cleanup" EXIT INT
159
319
 
160
320
 
161
321
  # Define our logging file and pipe paths
@@ -166,7 +326,7 @@ LOGPIPE="/tmp/$( echo $ScriptName | sed s/.sh/.logpipe/g )"
166
326
  # On FreeBSD we have to use mkfifo instead of mknod
167
327
  mknod $LOGPIPE p >/dev/null 2>&1 || mkfifo $LOGPIPE >/dev/null 2>&1
168
328
  if [ $? -ne 0 ]; then
169
- echo " * Failed to create the named pipe required to log"
329
+ echoerror "Failed to create the named pipe required to log"
170
330
  exit 1
171
331
  fi
172
332
 
@@ -188,6 +348,11 @@ exec 2>$LOGPIPE
188
348
  __gather_hardware_info() {
189
349
  if [ -f /proc/cpuinfo ]; then
190
350
  CPU_VENDOR_ID=$(cat /proc/cpuinfo | grep -E 'vendor_id|Processor' | head -n 1 | awk '{print $3}' | cut -d '-' -f1 )
351
+ elif [ -f /usr/bin/kstat ]; then
352
+ # SmartOS.
353
+ # Solaris!?
354
+ # This has only been tested for a GenuineIntel CPU
355
+ CPU_VENDOR_ID=$(/usr/bin/kstat -p cpu_info:0:cpu_info0:vendor_id | awk '{print $2}')
191
356
  else
192
357
  CPU_VENDOR_ID=$( sysctl -n hw.model )
193
358
  fi
@@ -231,6 +396,71 @@ __parse_version_string() {
231
396
  }
232
397
 
233
398
 
399
+ #--- FUNCTION ----------------------------------------------------------------
400
+ # NAME: __unquote_string
401
+ # DESCRIPTION: Strip single or double quotes from the provided string.
402
+ #-------------------------------------------------------------------------------
403
+ __unquote_string() {
404
+ echo $@ | sed "s/^\([\"']\)\(.*\)\1\$/\2/g"
405
+ }
406
+
407
+ #--- FUNCTION ----------------------------------------------------------------
408
+ # NAME: __camelcase_split
409
+ # DESCRIPTION: Convert CamelCased strings to Camel_Cased
410
+ #-------------------------------------------------------------------------------
411
+ __camelcase_split() {
412
+ echo $@ | sed -r 's/([^A-Z-])([A-Z])/\1 \2/g'
413
+ }
414
+
415
+ #--- FUNCTION ----------------------------------------------------------------
416
+ # NAME: __strip_duplicates
417
+ # DESCRIPTION: Strip duplicate strings
418
+ #-------------------------------------------------------------------------------
419
+ __strip_duplicates() {
420
+ echo $@ | tr -s '[:space:]' '\n' | awk '!x[$0]++'
421
+ }
422
+
423
+ #--- FUNCTION ----------------------------------------------------------------
424
+ # NAME: __sort_release_files
425
+ # DESCRIPTION: Custom sort function. Alphabetical or numerical sort is not
426
+ # enough.
427
+ #-------------------------------------------------------------------------------
428
+ __sort_release_files() {
429
+ KNOWN_RELEASE_FILES=$(echo "(arch|centos|debian|ubuntu|fedora|redhat|suse|\
430
+ mandrake|mandriva|gentoo|slackware|turbolinux|unitedlinux|lsb|system|\
431
+ os)(-|_)(release|version)" | sed -r 's:[[:space:]]::g')
432
+ primary_release_files=""
433
+ secondary_release_files=""
434
+ # Sort know VS un-known files first
435
+ for release_file in $(echo $@ | sed -r 's:[[:space:]]:\n:g' | sort --unique --ignore-case); do
436
+ match=$(echo $release_file | egrep -i ${KNOWN_RELEASE_FILES})
437
+ if [ "x${match}" != "x" ]; then
438
+ primary_release_files="${primary_release_files} ${release_file}"
439
+ else
440
+ secondary_release_files="${secondary_release_files} ${release_file}"
441
+ fi
442
+ done
443
+
444
+ # Now let's sort by know files importance, max important goes last in the max_prio list
445
+ max_prio="redhat-release centos-release"
446
+ for entry in $max_prio; do
447
+ if [ "x$(echo ${primary_release_files} | grep $entry)" != "x" ]; then
448
+ primary_release_files=$(echo ${primary_release_files} | sed -e "s:\(.*\)\($entry\)\(.*\):\2 \1 \3:g")
449
+ fi
450
+ done
451
+ # Now, least important goes last in the min_prio list
452
+ min_prio="lsb-release"
453
+ for entry in $max_prio; do
454
+ if [ "x$(echo ${primary_release_files} | grep $entry)" != "x" ]; then
455
+ primary_release_files=$(echo ${primary_release_files} | sed -e "s:\(.*\)\($entry\)\(.*\):\1 \3 \2:g")
456
+ fi
457
+ done
458
+
459
+ # Echo the results collapsing multiple white-space into a single white-space
460
+ echo "${primary_release_files} ${secondary_release_files}" | sed -r 's:[[:space:]]:\n:g'
461
+ }
462
+
463
+
234
464
  #--- FUNCTION ----------------------------------------------------------------
235
465
  # NAME: __gather_linux_system_info
236
466
  # DESCRIPTION: Discover Linux system information
@@ -239,36 +469,52 @@ __gather_linux_system_info() {
239
469
  DISTRO_NAME=""
240
470
  DISTRO_VERSION=""
241
471
 
242
- if [ -f /etc/lsb-release ]; then
472
+ # Let's test if the lsb_release binary is available
473
+ rv=$(lsb_release >/dev/null 2>&1)
474
+ if [ $? -eq 0 ]; then
475
+ DISTRO_NAME=$(lsb_release -si)
476
+ if [ "x$(echo "$DISTRO_NAME" | grep RedHat)" != "x" ]; then
477
+ # Let's convert CamelCase to Camel Case
478
+ DISTRO_NAME=$(__camelcase_split "$DISTRO_NAME")
479
+ fi
480
+ rv=$(lsb_release -sr)
481
+ [ "${rv}x" != "x" ] && DISTRO_VERSION=$(__parse_version_string "$rv")
482
+ elif [ -f /etc/lsb-release ]; then
483
+ # We don't have the lsb_release binary, though, we do have the file it parses
243
484
  DISTRO_NAME=$(grep DISTRIB_ID /etc/lsb-release | sed -e 's/.*=//')
244
- DISTRO_VERSION=$(__parse_version_string $(grep DISTRIB_RELEASE /etc/lsb-release | sed -e 's/.*=//'))
485
+ rv=$(grep DISTRIB_RELEASE /etc/lsb-release | sed -e 's/.*=//')
486
+ [ "${rv}x" != "x" ] && DISTRO_VERSION=$(__parse_version_string "$rv")
245
487
  fi
246
488
 
247
- if [ "x$DISTRO_NAME" != "x" -a "x$DISTRO_VERSION" != "x" ]; then
489
+ if [ "x$DISTRO_NAME" != "x" ] && [ "x$DISTRO_VERSION" != "x" ]; then
248
490
  # We already have the distribution name and version
249
491
  return
250
492
  fi
251
493
 
252
- for rsource in $(
494
+ for rsource in $(__sort_release_files $(
253
495
  cd /etc && /bin/ls *[_-]release *[_-]version 2>/dev/null | env -i sort | \
254
496
  sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \
255
497
  echo redhat-release lsb-release
256
- ); do
498
+ )); do
257
499
 
258
500
  [ -L "/etc/${rsource}" ] && continue # Don't follow symlinks
259
501
  [ ! -f "/etc/${rsource}" ] && continue # Does not exist
260
502
 
261
503
  n=$(echo ${rsource} | sed -e 's/[_-]release$//' -e 's/[_-]version$//')
262
- v=$( __parse_version_string "$( (grep VERSION /etc/${rsource}; cat /etc/${rsource}) | grep '[0-9]' | sed -e 'q' )" )
504
+ rv=$( (grep VERSION /etc/${rsource}; cat /etc/${rsource}) | grep '[0-9]' | sed -e 'q' )
505
+ [ "${rv}x" = "x" ] && continue # There's no version information. Continue to next rsource
506
+ v=$(__parse_version_string "$rv")
263
507
  case $(echo ${n} | tr '[:upper:]' '[:lower:]') in
264
- redhat )
265
- if [ ".$(egrep '(Red Hat Enterprise Linux|CentOS)' /etc/${rsource})" != . ]; then
508
+ redhat )
509
+ if [ ".$(egrep 'CentOS' /etc/${rsource})" != . ]; then
510
+ n="CentOS"
511
+ elif [ ".$(egrep 'Red Hat Enterprise Linux' /etc/${rsource})" != . ]; then
266
512
  n="<R>ed <H>at <E>nterprise <L>inux"
267
513
  else
268
514
  n="<R>ed <H>at <L>inux"
269
515
  fi
270
516
  ;;
271
- arch ) n="Arch" ;;
517
+ arch ) n="Arch Linux" ;;
272
518
  centos ) n="CentOS" ;;
273
519
  debian ) n="Debian" ;;
274
520
  ubuntu ) n="Ubuntu" ;;
@@ -279,6 +525,20 @@ __gather_linux_system_info() {
279
525
  slackware ) n="Slackware" ;;
280
526
  turbolinux ) n="TurboLinux" ;;
281
527
  unitedlinux ) n="UnitedLinux" ;;
528
+ system )
529
+ while read -r line; do
530
+ [ "${n}x" != "systemx" ] && break
531
+ case "$line" in
532
+ *Amazon*Linux*AMI*)
533
+ n="Amazon Linux AMI"
534
+ break
535
+ esac
536
+ done < /etc/${rsource}
537
+ ;;
538
+ os )
539
+ n=$(__unquote_string $(grep '^NAME=' /etc/os-release | sed -e 's/^NAME=\(.*\)$/\1/g'))
540
+ [ "${n}" = "Arch Linux" ] && v="" # Arch Linux does not provide a version.
541
+ ;;
282
542
  * ) n="${n}" ;
283
543
  esac
284
544
  DISTRO_NAME=$n
@@ -293,13 +553,55 @@ __gather_linux_system_info() {
293
553
  # DESCRIPTION: Discover SunOS system info
294
554
  #-------------------------------------------------------------------------------
295
555
  __gather_sunos_system_info() {
296
- DISTRO_NAME="Solaris"
297
- DISTRO_VERSION=$(
298
- echo "${OS_VERSION}" |
299
- sed -e 's;^4\.;1.;' \
300
- -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
301
- -e 's;^5\.\([0-9][0-9]*\).*;\1;'
302
- )
556
+ if [ -f /sbin/uname ]; then
557
+ DISTRO_VERSION=$(/sbin/uname -X | grep -i kernelid | awk '{ print $3}')
558
+ fi
559
+
560
+ DISTRO_NAME=""
561
+ if [ -f /etc/release ]; then
562
+ while read -r line; do
563
+ [ "${DISTRO_NAME}x" != "x" ] && break
564
+ case "$line" in
565
+ *OpenIndiana*oi_[0-9]*)
566
+ DISTRO_NAME="OpenIndiana"
567
+ DISTRO_VERSION=$(echo "$line" | sed -nr "s/OpenIndiana(.*)oi_([[:digit:]]+)(.*)/\2/p")
568
+ break
569
+ ;;
570
+ *OpenSolaris*snv_[0-9]*)
571
+ DISTRO_NAME="OpenSolaris"
572
+ DISTRO_VERSION=$(echo "$line" | sed -nr "s/OpenSolaris(.*)snv_([[:digit:]]+)(.*)/\2/p")
573
+ break
574
+ ;;
575
+ *Oracle*Solaris*[0-9]*)
576
+ DISTRO_NAME="Oracle Solaris"
577
+ DISTRO_VERSION=$(echo "$line" | sed -nr "s/(Oracle Solaris) ([[:digit:]]+)(.*)/\2/p")
578
+ break
579
+ ;;
580
+ *Solaris*)
581
+ DISTRO_NAME="Solaris"
582
+ break
583
+ ;;
584
+ *NexentaCore*)
585
+ DISTRO_NAME="Nexenta Core"
586
+ break
587
+ ;;
588
+ *SmartOS*)
589
+ DISTRO_NAME="SmartOS"
590
+ break
591
+ ;;
592
+ esac
593
+ done < /etc/release
594
+ fi
595
+
596
+ if [ "${DISTRO_NAME}x" = "x" ]; then
597
+ DISTRO_NAME="Solaris"
598
+ DISTRO_VERSION=$(
599
+ echo "${OS_VERSION}" |
600
+ sed -e 's;^4\.;1.;' \
601
+ -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \
602
+ -e 's;^5\.\([0-9][0-9]*\).*;\1;'
603
+ )
604
+ fi
303
605
  }
304
606
 
305
607
 
@@ -329,12 +631,77 @@ __gather_system_info() {
329
631
  __gather_bsd_system_info
330
632
  ;;
331
633
  * )
332
- echo " * ERROR: $OS_NAME not supported.";
634
+ echoerror "${OS_NAME} not supported.";
333
635
  exit 1
334
636
  ;;
335
637
  esac
336
638
 
337
639
  }
640
+ __gather_system_info
641
+
642
+
643
+ echo
644
+ echoinfo "System Information:"
645
+ echoinfo " CPU: ${CPU_VENDOR_ID}"
646
+ echoinfo " CPU Arch: ${CPU_ARCH}"
647
+ echoinfo " OS Name: ${OS_NAME}"
648
+ echoinfo " OS Version: ${OS_VERSION}"
649
+ echoinfo " Distribution: ${DISTRO_NAME} ${DISTRO_VERSION}"
650
+ echo
651
+
652
+ # Let users know what's going to be installed/configured
653
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
654
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
655
+ echoinfo "Installing minion"
656
+ else
657
+ echoinfo "Configuring minion"
658
+ fi
659
+ fi
660
+
661
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
662
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
663
+ echoinfo "Installing master"
664
+ else
665
+ echoinfo "Configuring master"
666
+ fi
667
+ fi
668
+
669
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
670
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
671
+ echoinfo "Installing syndic"
672
+ else
673
+ echoinfo "Configuring syndic"
674
+ fi
675
+ fi
676
+
677
+ # Simplify version naming on functions
678
+ if [ "x${DISTRO_VERSION}" = "x" ]; then
679
+ DISTRO_MAJOR_VERSION=""
680
+ DISTRO_MINOR_VERSION=""
681
+ PREFIXED_DISTRO_MAJOR_VERSION=""
682
+ PREFIXED_DISTRO_MINOR_VERSION=""
683
+ else
684
+ DISTRO_MAJOR_VERSION="$(echo $DISTRO_VERSION | sed 's/^\([0-9]*\).*/\1/g')"
685
+ DISTRO_MINOR_VERSION="$(echo $DISTRO_VERSION | sed 's/^\([0-9]*\).\([0-9]*\).*/\2/g')"
686
+ PREFIXED_DISTRO_MAJOR_VERSION="_${DISTRO_MAJOR_VERSION}"
687
+ if [ "${PREFIXED_DISTRO_MAJOR_VERSION}" = "_" ]; then
688
+ PREFIXED_DISTRO_MAJOR_VERSION=""
689
+ fi
690
+ PREFIXED_DISTRO_MINOR_VERSION="_${DISTRO_MINOR_VERSION}"
691
+ if [ "${PREFIXED_DISTRO_MINOR_VERSION}" = "_" ]; then
692
+ PREFIXED_DISTRO_MINOR_VERSION=""
693
+ fi
694
+ fi
695
+ # Simplify distro name naming on functions
696
+ DISTRO_NAME_L=$(echo $DISTRO_NAME | tr '[:upper:]' '[:lower:]' | sed 's/[^a-zA-Z0-9_ ]//g' | sed -re 's/([[:space:]])+/_/g')
697
+
698
+
699
+ # Only Ubuntu has daily packages, let's let users know about that
700
+ if ([ "${DISTRO_NAME_L}" != "ubuntu" ] && [ $ITYPE = "daily" ]) && \
701
+ ([ "${DISTRO_NAME_L}" != "trisquel" ] && [ $ITYPE = "daily" ]); then
702
+ echoerror "${DISTRO_NAME} does not have daily packages support"
703
+ exit 1
704
+ fi
338
705
 
339
706
 
340
707
  #--- FUNCTION ----------------------------------------------------------------
@@ -345,33 +712,13 @@ __gather_system_info() {
345
712
  #-------------------------------------------------------------------------------
346
713
  __function_defined() {
347
714
  FUNC_NAME=$1
348
- if [ "${DISTRO_NAME}" = "centos" ]; then
349
- if typeset -f $FUNC_NAME &>/dev/null ; then
350
- echo " * INFO: Found function $FUNC_NAME"
351
- return 0
352
- fi
353
- elif [ "${DISTRO_NAME}" = "ubuntu" ]; then
354
- if $( type ${FUNC_NAME} | grep -q 'shell function' ); then
355
- echo " * INFO: Found function $FUNC_NAME"
356
- return 0
357
- fi
358
- # Last resorts try POSIXLY_CORRECT or not
359
- elif test -n "${POSIXLY_CORRECT+yes}"; then
360
- if typeset -f $FUNC_NAME >/dev/null 2>&1 ; then
361
- echo " * INFO: Found function $FUNC_NAME"
362
- return 0
363
- fi
364
- else
365
- # Arch linux seems to fall here
366
- if $( type ${FUNC_NAME} >/dev/null 2>&1 ) ; then
367
- echo " * INFO: Found function $FUNC_NAME"
368
- return 0
369
- fi
715
+ if [ "$(command -v $FUNC_NAME)x" != "x" ]; then
716
+ echoinfo "Found function $FUNC_NAME"
717
+ return 0
370
718
  fi
371
- echo " * INFO: $FUNC_NAME not found...."
719
+ echodebug "$FUNC_NAME not found...."
372
720
  return 1
373
721
  }
374
- __gather_system_info
375
722
 
376
723
 
377
724
  #--- FUNCTION ----------------------------------------------------------------
@@ -383,35 +730,77 @@ __git_clone_and_checkout() {
383
730
  SALT_GIT_CHECKOUT_DIR=/tmp/git/salt
384
731
  [ -d /tmp/git ] || mkdir /tmp/git
385
732
  cd /tmp/git
386
- [ -d $SALT_GIT_CHECKOUT_DIR ] || git clone git://github.com/saltstack/salt.git salt
387
- cd salt
388
- git checkout $GIT_REV
733
+ if [ -d $SALT_GIT_CHECKOUT_DIR ]; then
734
+ cd $SALT_GIT_CHECKOUT_DIR
735
+ git fetch || return 1
736
+ # Tags are needed because of salt's versioning, also fetch that
737
+ git fetch --tags || return 1
738
+ git reset --hard $GIT_REV || return 1
739
+
740
+ # Just calling `git reset --hard $GIT_REV` on a branch name that has
741
+ # already been checked out will not update that branch to the upstream
742
+ # HEAD; instead it will simply reset to itself. Check the ref to see
743
+ # if it is a branch name, check out the branch, and pull in the
744
+ # changes.
745
+ git branch -a | grep -q ${GIT_REV}
746
+ if [ $? -eq 0 ]; then
747
+ git pull --rebase || return 1
748
+ fi
749
+ else
750
+ git clone https://github.com/saltstack/salt.git salt || return 1
751
+ cd $SALT_GIT_CHECKOUT_DIR
752
+ git checkout $GIT_REV || return 1
753
+ fi
754
+ return 0
389
755
  }
390
756
 
391
757
 
392
- echo " * System Information:"
393
- echo " CPU: ${CPU_VENDOR_ID}"
394
- echo " CPU Arch: ${CPU_ARCH}"
395
- echo " OS Name: ${OS_NAME}"
396
- echo " OS Version: ${OS_VERSION}"
397
- echo " Distribution: ${DISTRO_NAME} ${DISTRO_VERSION}"
398
-
399
-
400
- # Simplify version naming on functions
401
- if [ "x${DISTRO_VERSION}" = "x" ]; then
402
- DISTRO_VERSION_NO_DOTS=""
403
- else
404
- DISTRO_VERSION_NO_DOTS="_$(echo $DISTRO_VERSION | tr -d '.')"
405
- fi
406
- # Simplify distro name naming on functions
407
- DISTRO_NAME_L=$(echo $DISTRO_NAME | tr '[:upper:]' '[:lower:]' | sed 's/[^a-zA-Z0-9_ ]//g' | sed -e 's|[:space:]+|_|g')
408
-
409
758
  #--- FUNCTION ----------------------------------------------------------------
410
759
  # NAME: __apt_get_noinput
411
760
  # DESCRIPTION: (DRY) apt-get install with noinput options
412
761
  #-------------------------------------------------------------------------------
413
762
  __apt_get_noinput() {
414
- apt-get install -y -o DPkg::Options::=--force-confold $@
763
+ apt-get install -y -o DPkg::Options::=--force-confold $@; return $?
764
+ }
765
+
766
+
767
+ #--- FUNCTION ----------------------------------------------------------------
768
+ # NAME: copyfile
769
+ # DESCRIPTION: Simple function to copy files. Overrides if asked.
770
+ #-------------------------------------------------------------------------------
771
+ copyfile() {
772
+ overwrite=$FORCE_OVERWRITE
773
+ if [ $# -eq 2 ]; then
774
+ sfile=$1
775
+ dfile=$2
776
+ elif [ $# -eq 3 ]; then
777
+ sfile=$1
778
+ dfile=$2
779
+ overwrite=$3
780
+ else
781
+ echoerror "Wrong number of arguments for copyfile()"
782
+ echoinfo "USAGE: copyfile <source> <dest> OR copyfile <source> <dest> <overwrite>"
783
+ exit 1
784
+ fi
785
+
786
+ # Does the source file exist?
787
+ if [ ! -f "$sfile" ]; then
788
+ echowarn "$sfile does not exist!"
789
+ return 1
790
+ fi
791
+
792
+ if [ ! -f "$dfile" ]; then
793
+ # The destination file does not exist, copy
794
+ echodebug "Copying $sfile to $dfile"
795
+ cp "$sfile" "$dfile"
796
+ elif [ -f "$dfile" ] && [ $overwrite -eq $BS_TRUE ]; then
797
+ # The destination exist and we're overwriting
798
+ echodebug "Overriding $dfile with $sfile"
799
+ cp -f "$sfile" "$dfile"
800
+ elif [ -f "$dfile" ] && [ $overwrite -ne $BS_TRUE ]; then
801
+ echodebug "Not overriding $dfile with $sfile"
802
+ fi
803
+ return 0
415
804
  }
416
805
 
417
806
 
@@ -422,113 +811,201 @@ __apt_get_noinput() {
422
811
  # In order to install salt for a distribution you need to define:
423
812
  #
424
813
  # To Install Dependencies, which is required, one of:
425
- # 1. install_<distro>_<distro_version>_<install_type>_deps
426
- # 2. install_<distro>_<distro_version>_deps
427
- # 3. install_<distro>_<install_type>_deps
428
- # 4. install_<distro>_deps
814
+ # 1. install_<distro>_<major_version>_<install_type>_deps
815
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>_deps
816
+ # 3. install_<distro>_<major_version>_deps
817
+ # 4 install_<distro>_<major_version>_<minor_version>_deps
818
+ # 5. install_<distro>_<install_type>_deps
819
+ # 6. install_<distro>_deps
429
820
  #
821
+ # Optionally, define a salt configuration function, which will be called if
822
+ # the -c|config-dir option is passed. One of:
823
+ # 1. config_<distro>_<major_version>_<install_type>_salt
824
+ # 2. config_<distro>_<major_version>_<minor_version>_<install_type>_salt
825
+ # 3. config_<distro>_<major_version>_salt
826
+ # 4 config_<distro>_<major_version>_<minor_version>_salt
827
+ # 5. config_<distro>_<install_type>_salt
828
+ # 6. config_<distro>_salt
829
+ # 7. config_salt [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
430
830
  #
431
831
  # To install salt, which, of course, is required, one of:
432
- # 1. install_<distro>_<distro_version>_<install_type>
433
- # 2. install_<distro>_<install_type>
832
+ # 1. install_<distro>_<major_version>_<install_type>
833
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>
834
+ # 3. install_<distro>_<install_type>
434
835
  #
435
- # Optionally, define a minion configuration function, which will be called if
436
- # the -c|config-dir option is passed. One of:
437
- # 1. config_<distro>_<distro_version>_<install_type>_minion
438
- # 2. config_<distro>_<distro_version>_minion
439
- # 3. config_<distro>_<install_type>_minion
440
- # 4. config_<distro>_minion
441
- # 5. config_minion [THIS ONE IS ALREADY DEFINED AS THE DEFAULT]
442
- #
443
- # Also optionally, define a post install function, one of:
444
- # 1. install_<distro>_<distro_versions>_<install_type>_post
445
- # 2. install_<distro>_<distro_versions>_post
446
- # 3. install_<distro>_<install_type>_post
447
- # 4. install_<distro>_post
836
+ # Optionally, define a post install function, one of:
837
+ # 1. install_<distro>_<major_version>_<install_type>_post
838
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>_post
839
+ # 3. install_<distro>_<major_version>_post
840
+ # 4 install_<distro>_<major_version>_<minor_version>_post
841
+ # 5. install_<distro>_<install_type>_post
842
+ # 6. install_<distro>_post
843
+ #
844
+ # Optionally, define a start daemons function, one of:
845
+ # 1. install_<distro>_<major_version>_<install_type>_restart_daemons
846
+ # 2. install_<distro>_<major_version>_<minor_version>_<install_type>_restart_daemons
847
+ # 3. install_<distro>_<major_version>_restart_daemons
848
+ # 4 install_<distro>_<major_version>_<minor_version>_restart_daemons
849
+ # 5. install_<distro>_<install_type>_restart_daemons
850
+ # 6. install_<distro>_restart_daemons
851
+ #
852
+ # NOTE: The start daemons function should be able to restart any daemons
853
+ # which are running, or start if they're not running.
448
854
  #
449
855
  ##############################################################################
450
856
 
857
+
451
858
  ##############################################################################
452
859
  #
453
860
  # Ubuntu Install Functions
454
861
  #
455
862
  install_ubuntu_deps() {
456
863
  apt-get update
457
- __apt_get_noinput python-software-properties
458
- add-apt-repository -y ppa:saltstack/salt
864
+ if [ $DISTRO_MAJOR_VERSION -eq 12 ] && [ $DISTRO_MINOR_VERSION -gt 04 ] || [ $DISTRO_MAJOR_VERSION -gt 12 ]; then
865
+ # Above Ubuntu 12.04 add-apt-repository is in a different package
866
+ __apt_get_noinput software-properties-common
867
+ else
868
+ __apt_get_noinput python-software-properties
869
+ fi
870
+ if [ $DISTRO_MAJOR_VERSION -lt 11 ] && [ $DISTRO_MINOR_VERSION -lt 10 ]; then
871
+ add-apt-repository ppa:saltstack/salt
872
+ else
873
+ add-apt-repository -y ppa:saltstack/salt
874
+ fi
459
875
  apt-get update
460
876
  }
461
877
 
462
- install_ubuntu_1004_deps() {
878
+ install_ubuntu_daily_deps() {
463
879
  apt-get update
464
- __apt_get_noinput python-software-properties
465
- add-apt-repository ppa:saltstack/salt
880
+ if [ $DISTRO_MAJOR_VERSION -eq 12 ] && [ $DISTRO_MINOR_VERSION -gt 04 ] || [ $DISTRO_MAJOR_VERSION -gt 12 ]; then
881
+ # Above Ubuntu 12.04 add-apt-repository is in a different package
882
+ __apt_get_noinput software-properties-common
883
+ else
884
+ __apt_get_noinput python-software-properties
885
+ fi
886
+ if [ $DISTRO_MAJOR_VERSION -lt 11 ] && [ $DISTRO_MINOR_VERSION -lt 10 ]; then
887
+ add-apt-repository ppa:saltstack/salt-daily
888
+ else
889
+ add-apt-repository -y ppa:saltstack/salt-daily
890
+ fi
466
891
  apt-get update
467
- __apt_get_noinput salt-minion
468
- }
469
-
470
- install_ubuntu_1004_git_deps() {
471
- install_ubuntu_1004_deps
472
- __apt_get_noinput git-core
473
892
  }
474
893
 
475
- install_ubuntu_1110_deps() {
894
+ install_ubuntu_11_10_deps() {
476
895
  apt-get update
477
896
  __apt_get_noinput python-software-properties
478
897
  add-apt-repository -y 'deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe'
479
898
  add-apt-repository -y ppa:saltstack/salt
480
- }
481
-
482
- install_ubuntu_daily_deps() {
483
- apt-get update
484
- __apt_get_noinput python-software-properties
485
- add-apt-repository -y ppa:saltstack/salt-depends
486
- add-apt-repository -y ppa:saltstack/salt-daily
487
899
  apt-get update
488
900
  }
489
901
 
490
902
  install_ubuntu_git_deps() {
491
- apt-get update
492
- __apt_get_noinput python-software-properties
493
- add-apt-repository ppa:saltstack/salt
494
- apt-get update
903
+ install_ubuntu_deps
495
904
  __apt_get_noinput git-core python-yaml python-m2crypto python-crypto msgpack-python python-zmq python-jinja2
905
+
906
+ __git_clone_and_checkout || return 1
907
+
908
+ # Let's trigger config_salt()
909
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
910
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
911
+ CONFIG_SALT_FUNC="config_salt"
912
+ fi
913
+
914
+ return 0
496
915
  }
497
916
 
498
- install_ubuntu_1110_post() {
917
+ install_ubuntu_11_10_post() {
499
918
  add-apt-repository -y --remove 'deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe'
500
919
  }
501
920
 
502
921
  install_ubuntu_stable() {
503
- __apt_get_noinput salt-minion
922
+ packages=""
923
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
924
+ packages="${packages} salt-minion"
925
+ fi
926
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
927
+ packages="${packages} salt-master"
928
+ fi
929
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
930
+ packages="${packages} salt-syndic"
931
+ fi
932
+ __apt_get_noinput ${packages}
504
933
  }
505
934
 
506
935
  install_ubuntu_daily() {
507
- __apt_get_noinput salt-minion
936
+ install_ubuntu_stable
508
937
  }
509
938
 
510
939
  install_ubuntu_git() {
511
- __git_clone_and_checkout
512
940
  python setup.py install --install-layout=deb
513
941
  }
514
942
 
515
943
  install_ubuntu_git_post() {
516
- for fname in $(echo "minion master syndic"); do
517
- if [ $fname != "minion" ]; then
518
- # Guess we should only enable and start the minion service. Right??
519
- continue
944
+ for fname in minion master syndic; do
945
+
946
+ # Skip if not meant to be installed
947
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
948
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
949
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
950
+
951
+ if [ -f /sbin/initctl ]; then
952
+ # We have upstart support
953
+ echodebug "There's upstart support"
954
+ /sbin/initctl status salt-$fname > /dev/null 2>&1
955
+
956
+ if [ $? -eq 1 ]; then
957
+ # upstart does not know about our service, let's copy the proper file
958
+ echowarn "Upstart does not apparently know anything about salt-$fname"
959
+ echodebug "Copying ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart to /etc/init/salt-$fname.conf"
960
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart /etc/init/salt-$fname.conf
961
+ fi
962
+ # No upstart support in Ubuntu!?
963
+ elif [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init ]; then
964
+ echodebug "There's NO upstart support!?"
965
+ echodebug "Copying ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init to /etc/init.d/salt-$fname"
966
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init /etc/init.d/salt-$fname
967
+ chmod +x /etc/init.d/salt-$fname
968
+ update-rc.d salt-$fname defaults
969
+ else
970
+ echoerror "Neither upstart not init.d was setup for salt-$fname"
520
971
  fi
521
- if [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init ]; then
522
- cp ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init /etc/init.d/salt-$fname
972
+ done
973
+ }
974
+
975
+ install_ubuntu_restart_daemons() {
976
+ for fname in minion master syndic; do
977
+
978
+ # Skip if not meant to be installed
979
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
980
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
981
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
982
+
983
+ if [ -f /sbin/initctl ]; then
984
+ echodebug "There's upstart support"
985
+ /sbin/initctl status salt-$fname || \
986
+ echowarn "Upstart does not apparently know anything about salt-$fname"
987
+ if [ $? -eq 0 ]; then
988
+ echodebug "Upstart apparently knows about salt-$fname"
989
+ # upstart knows about this service, let's stop and start it.
990
+ # We could restart but earlier versions of the upstart script
991
+ # did not support restart, so, it's safer this way
992
+ /sbin/initctl stop salt-$fname || echodebug "Failed to stop salt-$fname"
993
+ /sbin/initctl start salt-$fname
994
+ [ $? -eq 0 ] && continue
995
+ # We failed to start the service, let's test the SysV code bellow
996
+ echodebug "Failed to start salt-$fname"
997
+ fi
523
998
  fi
524
- if [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.upstart ]; then
525
- cp ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.upstart /etc/init/salt-$fname.conf
526
- elif [ -f ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart ]; then
527
- cp ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart /etc/init/salt-$fname.conf
999
+
1000
+ if [ ! -f /etc/init.d/salt-$fname ]; then
1001
+ echoerror "No init.d support for salt-$fname was found"
1002
+ return 1
528
1003
  fi
529
- chmod +x /etc/init.d/salt-$fname
530
- service salt-$fname start
1004
+
1005
+ /etc/init.d/salt-$fname stop > /dev/null 2>&1
1006
+ /etc/init.d/salt-$fname start
531
1007
  done
1008
+ return 0
532
1009
  }
533
1010
  #
534
1011
  # End of Ubuntu Install Functions
@@ -537,139 +1014,283 @@ install_ubuntu_git_post() {
537
1014
 
538
1015
  ##############################################################################
539
1016
  #
540
- # Debian Install Functions
1017
+ # Trisquel(Ubuntu) Install Functions
541
1018
  #
542
-
543
- install_debian_deps() {
1019
+ # Trisquel 6.0 is based on Ubuntu 12.04
1020
+ #
1021
+ install_trisquel_6_stable_deps() {
544
1022
  apt-get update
545
- }
546
-
547
- install_debian_stable() {
548
- __apt_get_noinput salt-minion
549
- }
550
-
551
- install_debian_60_deps() {
552
- echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> \
553
- /etc/apt/sources.list.d/backports.list
554
-
555
- # Add madduck's repo since squeeze packages have been deprecated
556
- for i in {salt-common,salt-master,salt-minion,salt-syndic,salt-doc}; do
557
- echo "Package: $i"
558
- echo "Pin: release a=squeeze-backports"
559
- echo "Pin-Priority: 600"
560
- echo
561
- done > /etc/apt/preferences.d/local-salt-backport.pref
562
-
563
- cat <<_eof > /etc/apt/sources.list.d/local-madduck-backports.list
564
- deb http://debian.madduck.net/repo squeeze-backports main
565
- deb-src http://debian.madduck.net/repo squeeze-backports main
566
- _eof
567
-
568
- wget -q http://debian.madduck.net/repo/gpg/archive.key
569
- apt-key add archive.key
1023
+ __apt_get_noinput python-software-properties
1024
+ add-apt-repository -y ppa:saltstack/salt
570
1025
  apt-get update
571
1026
  }
572
1027
 
573
- install_debian_60() {
574
- __apt_get_noinput salt-minion
575
- }
576
-
577
- install_debian_git_deps() {
1028
+ install_trisquel_6_daily_deps() {
1029
+ apt-get update
1030
+ __apt_get_noinput python-software-properties
1031
+ add-apt-repository -y ppa:saltstack/salt-daily
578
1032
  apt-get update
579
- __apt_get_noinput lsb-release python python-pkg-resources python-crypto \
580
- python-jinja2 python-m2crypto python-yaml msgpack-python git python-zmq
581
1033
  }
582
1034
 
583
- install_debian_git() {
584
- __git_clone_and_checkout
585
- python setup.py install --install-layout=deb
1035
+ install_trisquel_6_git_deps() {
1036
+ install_trisquel_6_stable_deps
1037
+ __apt_get_noinput git-core python-yaml python-m2crypto python-crypto \
1038
+ msgpack-python python-zmq python-jinja2
586
1039
 
587
- # Let's trigger config_minion()
1040
+ __git_clone_and_checkout || return 1
1041
+
1042
+ # Let's trigger config_salt()
588
1043
  if [ "$TEMP_CONFIG_DIR" = "null" ]; then
589
1044
  TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
590
- CONFIG_MINION_FUNC="config_minion"
1045
+ CONFIG_SALT_FUNC="config_salt"
591
1046
  fi
592
- }
593
1047
 
594
- install_debian_60_git_deps() {
595
- install_debian_60_deps # Add backports
596
- install_debian_git_deps # Grab the actual deps
1048
+ return 0
597
1049
  }
598
1050
 
599
- install_debian_60_git() {
600
- apt-get -y purge salt-minion
1051
+ install_trisquel_6_stable() {
1052
+ install_ubuntu_stable
1053
+ }
601
1054
 
602
- __git_clone_and_checkout
1055
+ install_trisquel_6_daily() {
1056
+ install_ubuntu_daily
1057
+ }
603
1058
 
604
- python setup.py install --install-layout=deb
1059
+ install_trisquel_6_git() {
1060
+ install_ubuntu_git
1061
+ }
605
1062
 
606
- # Let's trigger config_minion()
607
- if [ "$TEMP_CONFIG_DIR" = "null" ]; then
608
- TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
609
- CONFIG_MINION_FUNC="config_minion"
610
- fi
1063
+ install_trisquel_git_post() {
1064
+ install_ubuntu_git_post
611
1065
  }
612
1066
 
613
- install_debian_git_post() {
614
- for fname in $(echo "minion master syndic"); do
615
- if [ $fname != "minion" ]; then
616
- # Guess we should only enable and start the minion service. Right??
617
- continue
618
- fi
619
- if [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init ]; then
620
- cp ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init /etc/init.d/salt-$fname
621
- fi
622
- chmod +x /etc/init.d/salt-$fname
623
- /etc/init.d/salt-$fname start
624
- done
1067
+ install_trisquel_restart_daemons() {
1068
+ install_ubuntu_restart_daemons
625
1069
  }
626
1070
  #
627
- # Ended Debian Install Functions
1071
+ # End of Tristel(Ubuntu) Install Functions
628
1072
  #
629
1073
  ##############################################################################
630
1074
 
631
1075
  ##############################################################################
632
1076
  #
633
- # Fedora Install Functions
1077
+ # Debian Install Functions
634
1078
  #
635
- install_fedora_deps() {
636
- yum install -y PyYAML libyaml m2crypto python-crypto python-jinja2 python-msgpack python-zmq
1079
+ install_debian_deps() {
1080
+ apt-get update
637
1081
  }
638
1082
 
639
- install_fedora_stable() {
640
- yum install -y salt-minion
641
- }
1083
+ install_debian_6_0_deps() {
1084
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
1085
+ echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3"
1086
+ echowarn "This is required for long term stable minion connections to the master."
642
1087
 
1088
+ # No user interaction, libc6 restart services for example
1089
+ export DEBIAN_FRONTEND=noninteractive
643
1090
 
644
- install_fedora_git_deps() {
645
- install_fedora_deps
646
- yum install -y git
647
- }
1091
+ if [ "x$(grep -R 'backports.debian.org' /etc/apt)" = "x" ]; then
1092
+ echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> \
1093
+ /etc/apt/sources.list.d/backports.list
1094
+ fi
648
1095
 
649
- install_fedora_git() {
650
- __git_clone_and_checkout
651
- python setup.py install
652
- }
1096
+ if [ ! -f /etc/apt/preferences.d/local-salt-backport.pref ]; then
1097
+ # Add madduck's repo since squeeze packages have been deprecated
1098
+ for fname in salt-common salt-master salt-minion salt-syndic salt-doc; do
1099
+ echo "Package: $fname"
1100
+ echo "Pin: release a=squeeze-backports"
1101
+ echo "Pin-Priority: 600"
1102
+ echo
1103
+ done > /etc/apt/preferences.d/local-salt-backport.pref
653
1104
 
654
- install_fedora_git_post() {
655
- for fname in $(echo "minion master syndic"); do
656
- if [ $fname != "minion" ]; then
657
- # Guess we should only enable and start the minion service. Right??
658
- continue
1105
+ cat <<_eof > /etc/apt/sources.list.d/local-madduck-backports.list
1106
+ deb http://debian.madduck.net/repo squeeze-backports main
1107
+ deb-src http://debian.madduck.net/repo squeeze-backports main
1108
+ _eof
1109
+
1110
+ wget -q http://debian.madduck.net/repo/gpg/archive.key -O - | apt-key add -
1111
+ fi
1112
+
1113
+ if [ ! -f /etc/apt/sources.list.d/debian-experimental.list ]; then
1114
+ cat <<_eof > /etc/apt/sources.list.d/debian-experimental.list
1115
+ deb http://ftp.debian.org/debian experimental main
1116
+ deb-src http://ftp.debian.org/debian experimental main
1117
+ _eof
1118
+
1119
+ cat <<_eof > /etc/apt/preferences.d/libzmq3-debian-experimental.pref
1120
+ Package: libzmq3
1121
+ Pin: release a=experimental
1122
+ Pin-Priority: 800
1123
+
1124
+ Package: libzmq3-dev
1125
+ Pin: release a=experimental
1126
+ Pin-Priority: 800
1127
+ _eof
1128
+ fi
1129
+
1130
+ apt-get update
1131
+ __apt_get_noinput -t experimental libzmq3 libzmq3-dev
1132
+ __apt_get_noinput build-essential python-dev python-pip
1133
+ }
1134
+
1135
+ install_debian_git_deps() {
1136
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
1137
+ echowarn "PyZMQ will be installed from PyPi in order to compile it against ZMQ3"
1138
+ echowarn "This is required for long term stable minion connections to the master."
1139
+
1140
+ # No user interaction, libc6 restart services for example
1141
+ export DEBIAN_FRONTEND=noninteractive
1142
+
1143
+ apt-get update
1144
+ __apt_get_noinput lsb-release python python-pkg-resources python-crypto \
1145
+ python-jinja2 python-m2crypto python-yaml msgpack-python python-pip git
1146
+
1147
+ __git_clone_and_checkout || return 1
1148
+
1149
+ # Let's trigger config_salt()
1150
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1151
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1152
+ CONFIG_SALT_FUNC="config_salt"
1153
+ fi
1154
+
1155
+ return 0
1156
+ }
1157
+
1158
+ install_debian_6_0_git_deps() {
1159
+ install_debian_6_0_deps # Add backports
1160
+ install_debian_git_deps # Grab the actual deps
1161
+ }
1162
+
1163
+ install_debian_stable() {
1164
+ packages=""
1165
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1166
+ packages="${packages} salt-minion"
1167
+ fi
1168
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
1169
+ packages="${packages} salt-master"
1170
+ fi
1171
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1172
+ packages="${packages} salt-syndic"
1173
+ fi
1174
+ __apt_get_noinput ${packages}
1175
+
1176
+ # Building pyzmq from source to build it against libzmq3.
1177
+ # Should override current installation
1178
+ pip install -U pyzmq
1179
+ }
1180
+
1181
+
1182
+ install_debian_6_0() {
1183
+ install_debian_stable
1184
+ }
1185
+
1186
+ install_debian_git() {
1187
+ python setup.py install --install-layout=deb
1188
+
1189
+ # Building pyzmq from source to build it against libzmq3.
1190
+ # Should override current installation
1191
+ pip install -U pyzmq
1192
+ }
1193
+
1194
+ install_debian_6_0_git() {
1195
+ install_debian_git
1196
+ }
1197
+
1198
+ install_debian_git_post() {
1199
+ for fname in minion master syndic; do
1200
+
1201
+ # Skip if not meant to be installed
1202
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1203
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1204
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1205
+
1206
+ if [ -f ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init ]; then
1207
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/debian/salt-$fname.init /etc/init.d/salt-$fname
659
1208
  fi
660
- #cp ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname /etc/rc.d/init.d/salt-$fname
661
- cp ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname.service /lib/systemd/system/salt-$fname.service
662
- #chmod +x /etc/rc.d/init.d/salt-$fname
663
-
664
- # Switch from forking to simple, dunny why I can't make it work
665
- sed -i 's/Type=forking/Type=simple/g' /lib/systemd/system/salt-$fname.service
666
- # Remove the daemon flag because of the above
667
- sed -ie 's;ExecStart=\(.*\) -d;ExecStart=\1;' /lib/systemd/system/salt-$fname.service
668
- systemctl preset salt-$fname.service
669
- systemctl enable salt-$fname.service
670
- sleep 0.2
1209
+ chmod +x /etc/init.d/salt-$fname
1210
+ update-rc.d salt-$fname defaults
1211
+ done
1212
+ }
1213
+
1214
+ install_debian_restart_daemons() {
1215
+ for fname in minion master syndic; do
1216
+
1217
+ # Skip if not meant to be installed
1218
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1219
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1220
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1221
+
1222
+ /etc/init.d/salt-$fname stop > /dev/null 2>&1
1223
+ /etc/init.d/salt-$fname start
1224
+ done
1225
+ }
1226
+ #
1227
+ # Ended Debian Install Functions
1228
+ #
1229
+ ##############################################################################
1230
+
1231
+ ##############################################################################
1232
+ #
1233
+ # Fedora Install Functions
1234
+ #
1235
+ install_fedora_deps() {
1236
+ yum install -y PyYAML libyaml m2crypto python-crypto python-jinja2 python-msgpack python-zmq
1237
+ }
1238
+
1239
+ install_fedora_stable() {
1240
+ packages=""
1241
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1242
+ packages="${packages} salt-minion"
1243
+ fi
1244
+ if [ $INSTALL_MASTER -eq $BS_TRUE ] || [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1245
+ packages="${packages} salt-master"
1246
+ fi
1247
+ yum install -y ${packages}
1248
+ }
1249
+
1250
+ install_fedora_git_deps() {
1251
+ install_fedora_deps
1252
+ yum install -y git
1253
+
1254
+ __git_clone_and_checkout || return 1
1255
+
1256
+ # Let's trigger config_salt()
1257
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1258
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1259
+ CONFIG_SALT_FUNC="config_salt"
1260
+ fi
1261
+
1262
+ return 0
1263
+ }
1264
+
1265
+ install_fedora_git() {
1266
+ python setup.py install
1267
+ }
1268
+
1269
+ install_fedora_git_post() {
1270
+ for fname in minion master syndic; do
1271
+
1272
+ # Skip if not meant to be installed
1273
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1274
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1275
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1276
+
1277
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname.service /lib/systemd/system/salt-$fname.service
1278
+
1279
+ systemctl is-enabled salt-$fname.service || (systemctl preset salt-$fname.service && systemctl enable salt-$fname.service)
1280
+ sleep 0.1
671
1281
  systemctl daemon-reload
672
- sleep 0.2
1282
+ done
1283
+ }
1284
+
1285
+ install_fedora_restart_daemons() {
1286
+ for fname in minion master syndic; do
1287
+
1288
+ # Skip if not meant to be installed
1289
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1290
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1291
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1292
+
1293
+ systemctl stop salt-$fname > /dev/null 2>&1
673
1294
  systemctl start salt-$fname.service
674
1295
  done
675
1296
  }
@@ -682,85 +1303,391 @@ install_fedora_git_post() {
682
1303
  #
683
1304
  # CentOS Install Functions
684
1305
  #
685
- install_centos_63_stable_deps() {
1306
+ install_centos_stable_deps() {
686
1307
  if [ $CPU_ARCH_L = "i686" ]; then
687
- local ARCH="i386"
1308
+ EPEL_ARCH="i386"
1309
+ else
1310
+ EPEL_ARCH=$CPU_ARCH_L
1311
+ fi
1312
+ if [ $DISTRO_MAJOR_VERSION -eq 5 ]; then
1313
+ rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/5/${EPEL_ARCH}/epel-release-5-4.noarch.rpm
1314
+ elif [ $DISTRO_MAJOR_VERSION -eq 6 ]; then
1315
+ rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/6/${EPEL_ARCH}/epel-release-6-8.noarch.rpm
688
1316
  else
689
- local ARCH=$CPU_ARCH_L
1317
+ echoerror "Failed add EPEL repository support."
1318
+ exit 1
690
1319
  fi
691
- rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/6/${ARCH}/epel-release-6-8.noarch.rpm
1320
+
692
1321
  yum -y update
1322
+
1323
+ if [ $DISTRO_MAJOR_VERSION -eq 5 ]; then
1324
+ yum -y install PyYAML python26-m2crypto m2crypto python26 python26-crypto \
1325
+ python26-msgpack python26-zmq python26-jinja2 --enablerepo=epel-testing
1326
+ else
1327
+ yum -y install PyYAML m2crypto python-crypto python-msgpack python-zmq \
1328
+ python-jinja2 --enablerepo=epel-testing
1329
+ fi
693
1330
  }
694
1331
 
695
- install_centos_63_stable() {
696
- yum -y install salt-minion --enablerepo=epel-testing
1332
+ install_centos_stable() {
1333
+ packages=""
1334
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1335
+ packages="${packages} salt-minion"
1336
+ fi
1337
+ if [ $INSTALL_MASTER -eq $BS_TRUE ] || [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1338
+ packages="${packages} salt-master"
1339
+ fi
1340
+ yum -y install ${packages} --enablerepo=epel-testing
697
1341
  }
698
1342
 
699
- install_centos_63_stable_post() {
700
- /sbin/chkconfig salt-minion on
701
- /etc/init.d/salt-minion start
1343
+ install_centos_stable_post() {
1344
+ for fname in minion master syndic; do
1345
+ # Skip if not meant to be installed
1346
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1347
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1348
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1349
+
1350
+ if [ ! -f /sbin/initctl ] && [ -f /etc/init.d/salt-$fname ]; then
1351
+ # Still in SysV init!?
1352
+ /sbin/chkconfig salt-$fname on
1353
+ fi
1354
+ done
702
1355
  }
703
1356
 
704
- install_centos_63_git_deps() {
705
- install_centos_63_stable_deps
706
- yum -y install git PyYAML m2crypto python-crypto python-msgpack python-zmq python-jinja2 --enablerepo=epel-testing
1357
+ install_centos_git_deps() {
1358
+ install_centos_stable_deps
1359
+ yum -y install git --enablerepo=epel-testing
1360
+
1361
+ __git_clone_and_checkout || return 1
1362
+
1363
+ # Let's trigger config_salt()
1364
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1365
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1366
+ CONFIG_SALT_FUNC="config_salt"
1367
+ fi
1368
+
1369
+ return 0
707
1370
  }
708
1371
 
709
- install_centos_63_git() {
710
- rm -rf /usr/lib/python*/site-packages/salt
711
- rm -rf /usr/bin/salt*
1372
+ install_centos_git() {
1373
+ if [ $DISTRO_MAJOR_VERSION -eq 5 ]; then
1374
+ python2.6 setup.py install
1375
+ else
1376
+ python2 setup.py install
1377
+ fi
1378
+ }
712
1379
 
713
- __git_clone_and_checkout
714
- python2 setup.py install
715
- mkdir -p /etc/salt/
1380
+ install_centos_git_post() {
1381
+ for fname in master minion syndic; do
1382
+
1383
+ # Skip if not meant to be installed
1384
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1385
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1386
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1387
+
1388
+ if [ -f /sbin/initctl ]; then
1389
+ # We have upstart support
1390
+ /sbin/initctl status salt-$fname > /dev/null 2>&1
1391
+ if [ $? -eq 1 ]; then
1392
+ # upstart does not know about our service, let's copy the proper file
1393
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.upstart /etc/init/salt-$fname.conf
1394
+ fi
1395
+ # Still in SysV init?!
1396
+ elif [ ! -f /etc/init.d/salt-$fname ]; then
1397
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-${fname} /etc/init.d/
1398
+ chmod +x /etc/init.d/salt-${fname}
1399
+ /sbin/chkconfig salt-${fname} on
1400
+ fi
1401
+ done
716
1402
  }
717
1403
 
718
- install_centos_63_git_post() {
719
- cp pkg/rpm/salt-{master,minion} /etc/init.d/
720
- chmod +x /etc/init.d/salt-{master,minion}
721
- /sbin/chkconfig salt-minion on
722
- /etc/init.d/salt-minion start
1404
+ install_centos_restart_daemons() {
1405
+ for fname in minion master syndic; do
1406
+ # Skip if not meant to be installed
1407
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1408
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1409
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1410
+
1411
+ if [ -f /sbin/initctl ]; then
1412
+ # We have upstart support
1413
+ /sbin/initctl status salt-$fname > /dev/null 2>&1
1414
+ if [ $? -eq 0 ]; then
1415
+ # upstart knows about this service.
1416
+ # Let's try to stop it, and then start it
1417
+ /sbin/initctl stop salt-$fname > /dev/null 2>&1
1418
+ /sbin/initctl start salt-$fname > /dev/null 2>&1
1419
+ # Restart service
1420
+ [ $? -eq 0 ] && continue
1421
+ # We failed to start the service, let's test the SysV code bellow
1422
+ fi
1423
+ fi
1424
+
1425
+ if [ -f /etc/init.d/salt-$fname ]; then
1426
+ # Still in SysV init!?
1427
+ /etc/init.d/salt-$fname stop > /dev/null 2>&1
1428
+ /etc/init.d/salt-$fname start
1429
+ fi
1430
+ done
723
1431
  }
724
1432
  #
725
1433
  # Ended CentOS Install Functions
726
1434
  #
727
1435
  ##############################################################################
728
1436
 
1437
+ ##############################################################################
1438
+ #
1439
+ # RedHat Install Functions
1440
+ #
1441
+ install_red_hat_linux_stable_deps() {
1442
+ install_centos_stable_deps
1443
+ }
1444
+
1445
+ install_red_hat_linux_git_deps() {
1446
+ install_centos_git_deps
1447
+ }
1448
+
1449
+ install_red_hat_enterprise_linux_stable_deps() {
1450
+ install_red_hat_linux_stable_deps
1451
+ }
1452
+
1453
+ install_red_hat_enterprise_linux_git_deps() {
1454
+ install_red_hat_linux_git_deps
1455
+ }
1456
+
1457
+ install_red_hat_enterprise_server_stable_deps() {
1458
+ install_red_hat_linux_stable_deps
1459
+ }
1460
+
1461
+ install_red_hat_enterprise_server_git_deps() {
1462
+ install_red_hat_linux_git_deps
1463
+ }
1464
+
1465
+ install_red_hat_linux_stable() {
1466
+ install_centos_stable
1467
+ }
1468
+
1469
+ install_red_hat_linux_git() {
1470
+ install_centos_git
1471
+ }
1472
+
1473
+ install_red_hat_enterprise_linux_stable() {
1474
+ install_red_hat_linux_stable
1475
+ }
1476
+
1477
+ install_red_hat_enterprise_linux_git() {
1478
+ install_red_hat_linux_git
1479
+ }
1480
+
1481
+ install_red_hat_enterprise_server_stable() {
1482
+ install_red_hat_linux_stable
1483
+ }
1484
+
1485
+ install_red_hat_enterprise_server_git() {
1486
+ install_red_hat_linux_git
1487
+ }
1488
+
1489
+ install_red_hat_linux_stable_post() {
1490
+ install_centos_stable_post
1491
+ }
1492
+
1493
+ install_red_hat_linux_restart_daemons() {
1494
+ install_centos_restart_daemons
1495
+ }
1496
+
1497
+ install_red_hat_linux_git_post() {
1498
+ install_centos_git_post
1499
+ }
1500
+
1501
+ install_red_hat_enterprise_linux_stable_post() {
1502
+ install_red_hat_linux_stable_post
1503
+ }
1504
+
1505
+ install_red_hat_enterprise_linux_restart_daemons() {
1506
+ install_red_hat_linux_restart_daemons
1507
+ }
1508
+
1509
+ install_red_hat_enterprise_linux_git_post() {
1510
+ install_red_hat_linux_git_post
1511
+ }
1512
+
1513
+ install_red_hat_enterprise_server_stable_post() {
1514
+ install_red_hat_linux_stable_post
1515
+ }
1516
+
1517
+ install_red_hat_enterprise_server_restart_daemons() {
1518
+ install_red_hat_linux_restart_daemons
1519
+ }
1520
+
1521
+ install_red_hat_enterprise_server_git_post() {
1522
+ install_red_hat_linux_git_post
1523
+ }
1524
+ #
1525
+ # Ended RedHat Install Functions
1526
+ #
1527
+ ##############################################################################
1528
+
1529
+ ##############################################################################
1530
+ #
1531
+ # Amazon Linux AMI Install Functions
1532
+ #
1533
+ install_amazon_linux_ami_deps() {
1534
+ # Acording to http://aws.amazon.com/amazon-linux-ami/faqs/#epel we should
1535
+ # enable the EPEL 6 repo
1536
+ if [ $CPU_ARCH_L = "i686" ]; then
1537
+ EPEL_ARCH="i386"
1538
+ else
1539
+ EPEL_ARCH=$CPU_ARCH_L
1540
+ fi
1541
+ rpm -Uvh --force http://mirrors.kernel.org/fedora-epel/6/${EPEL_ARCH}/epel-release-6-8.noarch.rpm
1542
+ yum -y update
1543
+ yum -y install PyYAML m2crypto python-crypto python-msgpack python-zmq \
1544
+ python-ordereddict python-jinja2 --enablerepo=epel-testing
1545
+ }
1546
+
1547
+ install_amazon_linux_ami_git_deps() {
1548
+ install_amazon_linux_ami_deps
1549
+ yum -y install git --enablerepo=epel-testing
1550
+
1551
+ __git_clone_and_checkout || return 1
1552
+
1553
+ # Let's trigger config_salt()
1554
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1555
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1556
+ CONFIG_SALT_FUNC="config_salt"
1557
+ fi
1558
+
1559
+ return 0
1560
+ }
1561
+
1562
+ install_amazon_linux_ami_stable() {
1563
+ install_centos_stable
1564
+ }
1565
+
1566
+ install_amazon_linux_ami_stable_post() {
1567
+ install_centos_stable_post
1568
+ }
1569
+
1570
+ install_amazon_linux_ami_restart_daemons() {
1571
+ install_centos_restart_daemons
1572
+ }
1573
+
1574
+ install_amazon_linux_ami_git() {
1575
+ install_centos_git
1576
+ }
1577
+
1578
+ install_amazon_linux_ami_git_post() {
1579
+ install_centos_git_post
1580
+ }
1581
+ #
1582
+ # Ended Amazon Linux AMI Install Functions
1583
+ #
1584
+ ##############################################################################
729
1585
 
730
1586
  ##############################################################################
731
1587
  #
732
1588
  # Arch Install Functions
733
1589
  #
734
- install_arch_stable_deps() {
735
- echo '[salt]
1590
+ install_arch_linux_stable_deps() {
1591
+ grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt]
736
1592
  Server = http://intothesaltmine.org/archlinux
737
1593
  ' >> /etc/pacman.conf
738
1594
  }
739
1595
 
740
- install_arch_git_deps() {
741
- echo '[salt]
742
- Server = http://intothesaltmine.org/archlinux
743
- ' >> /etc/pacman.conf
1596
+ install_arch_linux_git_deps() {
1597
+ grep '\[salt\]' /etc/pacman.conf >/dev/null 2>&1 || echo '[salt]
1598
+ Server = http://intothesaltmine.org/archlinux
1599
+ ' >> /etc/pacman.conf
1600
+
1601
+ pacman -Sy --noconfirm pacman
1602
+ pacman -Sy --noconfirm git python2-crypto python2-distribute \
1603
+ python2-jinja python2-m2crypto python2-markupsafe python2-msgpack \
1604
+ python2-psutil python2-yaml python2-pyzmq zeromq
1605
+
1606
+ __git_clone_and_checkout || return 1
1607
+
1608
+ # Let's trigger config_salt()
1609
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1610
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1611
+ CONFIG_SALT_FUNC="config_salt"
1612
+ fi
1613
+
1614
+ return 0
744
1615
  }
745
1616
 
746
- install_arch_stable() {
1617
+ install_arch_linux_stable() {
747
1618
  pacman -Sy --noconfirm pacman
748
1619
  pacman -Syu --noconfirm salt
749
1620
  }
750
1621
 
751
- install_arch_git() {
752
- pacman -Sy --noconfirm pacman
753
- pacman -Syu --noconfirm salt git
754
- rm -rf /usr/lib/python2.7/site-packages/salt*
755
- rm -rf /usr/bin/salt-*
1622
+ install_arch_linux_git() {
1623
+ python2 setup.py install
1624
+ }
756
1625
 
757
- __git_clone_and_checkout
1626
+ install_arch_linux_post() {
1627
+ for fname in minion master syndic; do
1628
+
1629
+ # Skip if not meant to be installed
1630
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1631
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1632
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1633
+
1634
+ if [ -f /usr/bin/systemctl ]; then
1635
+ # Using systemd
1636
+ /usr/bin/systemctl is-enabled salt-$fname.service > /dev/null 2>&1 || (
1637
+ /usr/bin/systemctl preset salt-$fname.service > /dev/null 2>&1 &&
1638
+ /usr/bin/systemctl enable salt-$fname.service > /dev/null 2>&1
1639
+ )
1640
+ sleep 0.1
1641
+ /usr/bin/systemctl daemon-reload
1642
+ continue
1643
+ fi
758
1644
 
759
- python2 setup.py install
1645
+ # XXX: How do we enable old Arch init.d scripts?
1646
+ done
1647
+ }
1648
+
1649
+ install_arch_linux_git_post() {
1650
+ for fname in minion master syndic; do
1651
+
1652
+ # Skip if not meant to be installed
1653
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1654
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1655
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1656
+
1657
+ if [ -f /usr/bin/systemctl ]; then
1658
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname.service /lib/systemd/system/salt-$fname.service
1659
+
1660
+ /usr/bin/systemctl is-enabled salt-$fname.service > /dev/null 2>&1 || (
1661
+ /usr/bin/systemctl preset salt-$fname.service > /dev/null 2>&1 &&
1662
+ /usr/bin/systemctl enable salt-$fname.service > /dev/null 2>&1
1663
+ )
1664
+ sleep 0.1
1665
+ /usr/bin/systemctl daemon-reload
1666
+ continue
1667
+ fi
1668
+
1669
+ # SysV init!?
1670
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname /etc/rc.d/init.d/salt-$fname
1671
+ chmod +x /etc/rc.d/init.d/salt-$fname
1672
+ done
760
1673
  }
761
1674
 
762
- install_arch_post() {
763
- /etc/rc.d/salt-minion start
1675
+ install_arch_linux_restart_daemons() {
1676
+ for fname in minion master syndic; do
1677
+
1678
+ # Skip if not meant to be installed
1679
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1680
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1681
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1682
+
1683
+ if [ -f /usr/bin/systemctl ]; then
1684
+ /usr/bin/systemctl stop salt-$fname.service > /dev/null 2>&1
1685
+ /usr/bin/systemctl start salt-$fname.service
1686
+ continue
1687
+ fi
1688
+ /etc/rc.d/salt-$fname stop > /dev/null 2>&1
1689
+ /etc/rc.d/salt-$fname start
1690
+ done
764
1691
  }
765
1692
  #
766
1693
  # Ended Arch Install Functions
@@ -771,101 +1698,483 @@ install_arch_post() {
771
1698
  #
772
1699
  # FreeBSD Install Functions
773
1700
  #
774
- install_freebsd_90_stable_deps() {
1701
+ __freebsd_get_packagesite() {
775
1702
  if [ $CPU_ARCH_L = "amd64" ]; then
776
- local ARCH="x86:64"
1703
+ BSD_ARCH="x86:64"
777
1704
  elif [ $CPU_ARCH_L = "x86_64" ]; then
778
- local ARCH="x86:64"
1705
+ BSD_ARCH="x86:64"
779
1706
  elif [ $CPU_ARCH_L = "i386" ]; then
780
- local ARCH="x86:32"
1707
+ BSD_ARCH="x86:32"
781
1708
  elif [ $CPU_ARCH_L = "i686" ]; then
782
- local ARCH="x86:32"
1709
+ BSD_ARCH="x86:32"
783
1710
  fi
784
1711
 
785
- fetch http://pkgbeta.freebsd.org/freebsd:9:${ARCH}/latest/Latest/pkg.txz
1712
+ if [ "x${PACKAGESITE}" = "x" ]; then
1713
+ echowarn "The environment variable PACKAGESITE is not set."
1714
+ echowarn "The installation will, most likely fail since pkgbeta.freebsd.org does not yet contain any packages"
1715
+ fi
1716
+ BS_PACKAGESITE=${PACKAGESITE:-"http://pkgbeta.freebsd.org/freebsd:${DISTRO_MAJOR_VERSION}:${BSD_ARCH}/latest"}
1717
+ }
1718
+
1719
+ install_freebsd_9_stable_deps() {
1720
+ __freebsd_get_packagesite
1721
+
1722
+ fetch "${BS_PACKAGESITE}/Latest/pkg.txz"
786
1723
  tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static"
787
1724
  ./pkg-static add ./pkg.txz
788
1725
  /usr/local/sbin/pkg2ng
789
- echo "PACKAGESITE: http://pkgbeta.freebsd.org/freebsd:9:${ARCH}/latest" > /usr/local/etc/pkg.conf
1726
+ echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf
790
1727
 
791
1728
  /usr/local/sbin/pkg install -y swig
792
1729
  }
793
1730
 
794
1731
  install_freebsd_git_deps() {
795
- if [ $CPU_ARCH_L = "amd64" ]; then
796
- local ARCH="x86:64"
797
- elif [ $CPU_ARCH_L = "x86_64" ]; then
798
- local ARCH="x86:64"
799
- elif [ $CPU_ARCH_L = "i386" ]; then
800
- local ARCH="x86:32"
801
- elif [ $CPU_ARCH_L = "i686" ]; then
802
- local ARCH="x86:32"
803
- fi
1732
+ __freebsd_get_packagesite
804
1733
 
805
- fetch http://pkgbeta.freebsd.org/freebsd:9:${ARCH}/latest/Latest/pkg.txz
1734
+ fetch "${BS_PACKAGESITE}/Latest/pkg.txz"
806
1735
  tar xf ./pkg.txz -s ",/.*/,,g" "*/pkg-static"
807
1736
  ./pkg-static add ./pkg.txz
808
1737
  /usr/local/sbin/pkg2ng
809
- echo "PACKAGESITE: http://pkgbeta.freebsd.org/freebsd:9:${ARCH}/latest" > /usr/local/etc/pkg.conf
1738
+ echo "PACKAGESITE: ${BS_PACKAGESITE}" > /usr/local/etc/pkg.conf
810
1739
 
811
1740
  /usr/local/sbin/pkg install -y swig
1741
+
1742
+ __git_clone_and_checkout || return 1
1743
+ # Let's trigger config_salt()
1744
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1745
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1746
+ CONFIG_SALT_FUNC="config_salt"
1747
+ fi
1748
+
1749
+ return 0
812
1750
  }
813
1751
 
814
- install_freebsd_90_stable() {
815
- /usr/local/sbin/pkg install -y salt
1752
+ install_freebsd_9_stable() {
1753
+ /usr/local/sbin/pkg install -y sysutils/py-salt
816
1754
  }
817
1755
 
818
1756
  install_freebsd_git() {
819
- /usr/local/sbin/pkg install -y git salt
820
- /usr/local/sbin/pkg delete -y salt
821
-
822
- __git_clone_and_checkout
1757
+ /usr/local/sbin/pkg install -y git sysutils/py-salt
1758
+ /usr/local/sbin/pkg delete -y sysutils/py-salt
823
1759
 
824
1760
  /usr/local/bin/python setup.py install
825
1761
  }
826
1762
 
827
- install_freebsd_90_stable_post() {
828
- salt-minion -d
1763
+ install_freebsd_9_stable_post() {
1764
+ for fname in minion master syndic; do
1765
+
1766
+ # Skip if not meant to be installed
1767
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1768
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1769
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1770
+
1771
+ enable_string="salt_${fname}_enable=\"YES\""
1772
+ grep "$enable_string" /etc/rc.conf >/dev/null 2>&1
1773
+ [ $? -eq 1 ] && echo "$enable_string" >> /etc/rc.conf
1774
+
1775
+ [ -f /usr/local/etc/salt/${fname}.sample ] && copyfile /usr/local/etc/salt/${fname}.sample /usr/local/etc/salt/${fname}
1776
+
1777
+ if [ $fname = "minion" ] ; then
1778
+ grep "salt_minion_paths" /etc/rc.conf >/dev/null 2>&1
1779
+ [ $? -eq 1 ] && echo "salt_minion_paths=\"/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin\"" >> /etc/rc.conf
1780
+ fi
1781
+
1782
+ done
829
1783
  }
830
1784
 
831
1785
  install_freebsd_git_post() {
832
- salt-minion -d
1786
+ install_freebsd_9_stable_post
1787
+ }
1788
+
1789
+ install_freebsd_restart_daemons() {
1790
+ for fname in minion master syndic; do
1791
+
1792
+ # Skip if not meant to be installed
1793
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1794
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1795
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1796
+
1797
+ service salt_$fname stop > /dev/null 2>&1
1798
+ service salt_$fname start
1799
+ done
833
1800
  }
834
1801
  #
835
1802
  # Ended FreeBSD Install Functions
836
1803
  #
837
1804
  ##############################################################################
838
1805
 
1806
+ ##############################################################################
1807
+ #
1808
+ # SmartOS Install Functions
1809
+ #
1810
+ install_smartos_deps() {
1811
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
1812
+ echowarn "PyZMQ will be installed using pip"
1813
+
1814
+ ZEROMQ_VERSION='3.2.2'
1815
+ pkgin -y in libtool-base autoconf automake libuuid gcc-compiler gmake \
1816
+ python27 py27-pip py27-setuptools py27-yaml py27-crypto swig
1817
+ [ -d zeromq-${ZEROMQ_VERSION} ] || (
1818
+ wget http://download.zeromq.org/zeromq-${ZEROMQ_VERSION}.tar.gz &&
1819
+ tar -xvf zeromq-${ZEROMQ_VERSION}.tar.gz
1820
+ )
1821
+ cd zeromq-${ZEROMQ_VERSION}
1822
+ ./configure
1823
+ make
1824
+ make install
1825
+
1826
+ pip-2.7 install pyzmq
1827
+
1828
+ # Let's trigger config_salt()
1829
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1830
+ # Let's set the configuration directory to /tmp
1831
+ TEMP_CONFIG_DIR="/tmp"
1832
+ CONFIG_SALT_FUNC="config_salt"
1833
+
1834
+ # Let's download, since they were not provided, the default configuration files
1835
+ if [ ! -f /etc/salt/minion ] && [ ! -f $TEMP_CONFIG_DIR/minion ]; then
1836
+ curl -sk -o $TEMP_CONFIG_DIR/minion -L https://raw.github.com/saltstack/salt/blob/develop/conf/minion
1837
+ fi
1838
+ if [ ! -f /etc/salt/master ] && [ ! -f $TEMP_CONFIG_DIR/master ]; then
1839
+ curl -sk -o $TEMP_CONFIG_DIR/master -L https://raw.github.com/saltstack/salt/blob/develop/conf/master
1840
+ fi
1841
+ fi
1842
+
1843
+ }
1844
+
1845
+ install_smartos_git_deps() {
1846
+ install_smartos_deps
1847
+ pkgin -y in scmgit
1848
+
1849
+ __git_clone_and_checkout || return 1
1850
+ # Let's trigger config_salt()
1851
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1852
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1853
+ CONFIG_SALT_FUNC="config_salt"
1854
+ fi
1855
+
1856
+ return 0
1857
+ }
1858
+
1859
+ install_smartos_stable() {
1860
+ USE_SETUPTOOLS=1 pip-2.7 install salt
1861
+ }
1862
+
1863
+ install_smartos_git() {
1864
+ # Use setuptools in order to also install dependencies
1865
+ USE_SETUPTOOLS=1 /opt/local/bin/python setup.py install
1866
+ }
1867
+
1868
+ install_smartos_post() {
1869
+ # Install manifest files if needed.
1870
+ for fname in minion master syndic; do
1871
+ svcs network/salt-$fname > /dev/null 2>&1
1872
+ if [ $? -eq 1 ]; then
1873
+ if [ ! -f $TEMP_CONFIG_DIR/salt-$fname.xml ]; then
1874
+ curl -sk -o $TEMP_CONFIG_DIR/salt-$fname.xml -L https://raw.github.com/saltstack/salt/develop/pkg/solaris/salt-$fname.xml
1875
+ fi
1876
+ svccfg import $TEMP_CONFIG_DIR/salt-$fname.xml
1877
+ fi
1878
+ done
1879
+ }
1880
+
1881
+ install_smartos_git_post() {
1882
+ # Install manifest files if needed.
1883
+ for fname in minion master syndic; do
1884
+ svcs network/salt-$fname > /dev/null 2>&1
1885
+ if [ $? -eq 1 ]; then
1886
+ svccfg import ${SALT_GIT_CHECKOUT_DIR}/pkg/solaris/salt-$fname.xml
1887
+ fi
1888
+ done
1889
+ }
1890
+
1891
+ install_smartos_restart_daemons() {
1892
+ for fname in minion master syndic; do
1893
+
1894
+ # Skip if not meant to be installed
1895
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1896
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1897
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1898
+
1899
+ # Stop if running && Start service
1900
+ svcadm disable salt-$fname > /dev/null 2>&1
1901
+ svcadm enable salt-$fname
1902
+ done
1903
+ }
1904
+ #
1905
+ # Ended SmartOS Install Functions
1906
+ #
1907
+ ##############################################################################
1908
+
1909
+ ##############################################################################
1910
+ #
1911
+ # openSUSE Install Functions.
1912
+ #
1913
+ install_opensuse_stable_deps() {
1914
+ DISTRO_REPO="openSUSE_${DISTRO_MAJOR_VERSION}.${DISTRO_MINOR_VERSION}"
1915
+ zypper --non-interactive addrepo --refresh \
1916
+ http://download.opensuse.org/repositories/devel:/languages:/python/${DISTRO_REPO}/devel:languages:python.repo
1917
+ zypper --gpg-auto-import-keys --non-interactive refresh
1918
+ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
1919
+ python-Jinja2 python-M2Crypto python-PyYAML python-msgpack-python \
1920
+ python-pycrypto python-pyzmq
1921
+ }
1922
+
1923
+ install_opensuse_git_deps() {
1924
+ install_opensuse_stable_deps
1925
+ zypper --non-interactive install --auto-agree-with-licenses git
1926
+
1927
+ __git_clone_and_checkout || return 1
1928
+
1929
+ # Let's trigger config_salt()
1930
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
1931
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
1932
+ CONFIG_SALT_FUNC="config_salt"
1933
+ fi
1934
+
1935
+ return 0
1936
+ }
1937
+
1938
+ install_opensuse_stable() {
1939
+ packages=""
1940
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
1941
+ packages="${packages} salt-minion"
1942
+ fi
1943
+ if [ $INSTALL_MASTER -eq $BS_TRUE ]; then
1944
+ packages="${packages} salt-master"
1945
+ fi
1946
+ if [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
1947
+ packages="${packages} salt-syndic"
1948
+ fi
1949
+ zypper --non-interactive install --auto-agree-with-licenses $packages
1950
+ }
1951
+
1952
+ install_opensuse_git() {
1953
+ python setup.py install --prefix=/usr
1954
+ }
1955
+
1956
+ install_opensuse_stable_post() {
1957
+ for fname in minion master syndic; do
1958
+
1959
+ # Skip if not meant to be installed
1960
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1961
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1962
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1963
+
1964
+ if [ -f /bin/systemctl ]; then
1965
+ systemctl is-enabled salt-$fname.service || (systemctl preset salt-$fname.service && systemctl enable salt-$fname.service)
1966
+ sleep 0.1
1967
+ systemctl daemon-reload
1968
+ continue
1969
+ fi
1970
+
1971
+ /sbin/chkconfig --add salt-$fname
1972
+ /sbin/chkconfig salt-$fname on
1973
+
1974
+ done
1975
+ }
1976
+
1977
+ install_opensuse_git_post() {
1978
+ for fname in minion master syndic; do
1979
+
1980
+ # Skip if not meant to be installed
1981
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
1982
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
1983
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
1984
+
1985
+ if [ -f /bin/systemctl ]; then
1986
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/salt-$fname.service /lib/systemd/system/salt-$fname.service
1987
+ continue
1988
+ fi
1989
+
1990
+ copyfile ${SALT_GIT_CHECKOUT_DIR}/pkg/rpm/salt-$fname /etc/init.d/salt-$fname
1991
+ chmod +x /etc/init.d/salt-$fname
1992
+
1993
+ done
1994
+
1995
+ install_opensuse_stable_post
1996
+ }
1997
+
1998
+ install_opensuse_restart_daemons() {
1999
+ for fname in minion master syndic; do
2000
+
2001
+ # Skip if not meant to be installed
2002
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2003
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2004
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2005
+
2006
+ if [ -f /bin/systemctl ]; then
2007
+ systemctl stop salt-$fname > /dev/null 2>&1
2008
+ systemctl start salt-$fname.service
2009
+ continue
2010
+ fi
2011
+
2012
+ service salt-$fname stop > /dev/null 2>&1
2013
+ service salt-$fname start
2014
+
2015
+ done
2016
+ }
2017
+ #
2018
+ # End of openSUSE Install Functions.
2019
+ #
2020
+ ##############################################################################
2021
+
2022
+ ##############################################################################
2023
+ #
2024
+ # SuSE Install Functions.
2025
+ #
2026
+ install_suse_11_stable_deps() {
2027
+ SUSE_PATCHLEVEL=$(grep PATCHLEVEL /etc/SuSE-release | awk '{print $3}')
2028
+ if [ "x${SUSE_PATCHLEVEL}" != "x" ]; then
2029
+ DISTRO_PATCHLEVEL="_SP${SUSE_PATCHLEVEL}"
2030
+ fi
2031
+ DISTRO_REPO="SLE_${DISTRO_MAJOR_VERSION}${DISTRO_PATCHLEVEL}"
2032
+
2033
+ zypper --non-interactive addrepo --refresh \
2034
+ http://download.opensuse.org/repositories/devel:/languages:/python/${DISTRO_REPO}/devel:languages:python.repo
2035
+ zypper --gpg-auto-import-keys --non-interactive refresh
2036
+ if [ $SUSE_PATCHLEVEL -eq 1 ]; then
2037
+ [ $PIP_ALLOWED -eq $BS_FALSE ] && pip_not_allowed
2038
+ echowarn "PyYaml will be installed using pip"
2039
+ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
2040
+ python-Jinja2 'python-M2Crypto>=0.21' python-msgpack-python \
2041
+ python-pycrypto python-pyzmq python-pip
2042
+ # There's no python-PyYaml in SP1, let's install it using pip
2043
+ pip install PyYaml
2044
+ else
2045
+ zypper --non-interactive install --auto-agree-with-licenses libzmq3 python \
2046
+ python-Jinja2 'python-M2Crypto>=0.21' python-PyYAML python-msgpack-python \
2047
+ python-pycrypto python-pyzmq
2048
+ fi
2049
+ }
2050
+
2051
+ install_suse_11_git_deps() {
2052
+ install_suse_11_stable_deps
2053
+ zypper --non-interactive install --auto-agree-with-licenses git
2054
+
2055
+ __git_clone_and_checkout || return 1
2056
+
2057
+ # Let's trigger config_salt()
2058
+ if [ "$TEMP_CONFIG_DIR" = "null" ]; then
2059
+ TEMP_CONFIG_DIR="${SALT_GIT_CHECKOUT_DIR}/conf/"
2060
+ CONFIG_SALT_FUNC="config_salt"
2061
+ fi
2062
+
2063
+ return 0
2064
+ }
2065
+
2066
+ install_suse_11_stable() {
2067
+ if [ $SUSE_PATCHLEVEL -gt 1 ]; then
2068
+ install_opensuse_stable
2069
+ else
2070
+ # USE_SETUPTOOLS=1 To work around
2071
+ # error: option --single-version-externally-managed not recognized
2072
+ USE_SETUPTOOLS=1 pip install salt
2073
+ fi
2074
+ }
2075
+
2076
+ install_suse_11_git() {
2077
+ install_opensuse_git
2078
+ }
2079
+
2080
+ install_suse_11_stable_post() {
2081
+ if [ $SUSE_PATCHLEVEL -gt 1 ]; then
2082
+ install_opensuse_stable_post
2083
+ else
2084
+ for fname in minion master syndic; do
2085
+
2086
+ # Skip if not meant to be installed
2087
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2088
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2089
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2090
+
2091
+ if [ -f /bin/systemctl ]; then
2092
+ curl -k -L https://github.com/saltstack/salt/raw/develop/pkg/salt-$fname.service \
2093
+ -o /lib/systemd/system/salt-$fname.service
2094
+ continue
2095
+ fi
2096
+
2097
+ curl -k -L https://github.com/saltstack/salt/raw/develop/pkg/rpm/salt-$fname \
2098
+ -o /etc/init.d/salt-$fname
2099
+ chmod +x /etc/init.d/salt-$fname
2100
+
2101
+ done
2102
+ fi
2103
+ }
2104
+
2105
+ install_suse_11_git_post() {
2106
+ install_opensuse_git_post
2107
+ }
2108
+
2109
+ install_suse_11_restart_daemons() {
2110
+ install_opensuse_restart_daemons
2111
+ }
2112
+ #
2113
+ # End of SuSE Install Functions.
2114
+ #
2115
+ ##############################################################################
839
2116
 
840
2117
  ##############################################################################
841
2118
  #
842
2119
  # Default minion configuration function. Matches ANY distribution as long as
843
- # the -c options is passed.
2120
+ # the -c options is passed.
844
2121
  #
845
- config_minion() {
2122
+ config_salt() {
846
2123
  # If the configuration directory is not passed, return
847
2124
  [ "$TEMP_CONFIG_DIR" = "null" ] && return
848
- # If the configuration directory does not exist, error out
849
- if [ ! -d "$TEMP_CONFIG_DIR" ]; then
850
- echo " * The configuration directory ${TEMP_CONFIG_DIR} does not exist."
851
- exit 1
852
- fi
2125
+
2126
+ CONFIGURED_ANYTHING=$BS_FALSE
2127
+
2128
+ PKI_DIR=$SALT_ETC_DIR/pki
853
2129
 
854
2130
  # Let's create the necessary directories
855
- [ -d /etc/salt ] || mkdir /etc/salt
856
- [ -d /etc/salt/pki ] || mkdir /etc/salt/pki && chmod 700 /etc/salt/pki
2131
+ [ -d $SALT_ETC_DIR ] || mkdir $SALT_ETC_DIR
2132
+ [ -d $PKI_DIR ] || mkdir -p $PKI_DIR && chmod 700 $PKI_DIR
2133
+
2134
+ if [ $INSTALL_MINION -eq $BS_TRUE ]; then
2135
+ # Create the PKI directory
2136
+ [ -d $PKI_DIR/minion ] || mkdir -p $PKI_DIR/minion && chmod 700 $PKI_DIR/minion
2137
+
2138
+ # Copy the minions configuration if found
2139
+ [ -f "$TEMP_CONFIG_DIR/minion" ] && mv "$TEMP_CONFIG_DIR/minion" /etc/salt && CONFIGURED_ANYTHING=$BS_TRUE
2140
+
2141
+ # Copy the minion's keys if found
2142
+ if [ -f "$TEMP_CONFIG_DIR/minion.pem" ]; then
2143
+ mv "$TEMP_CONFIG_DIR/minion.pem" $PKI_DIR/minion/
2144
+ chmod 400 $PKI_DIR/minion/minion.pem
2145
+ CONFIGURED_ANYTHING=$BS_TRUE
2146
+ fi
2147
+ if [ -f "$TEMP_CONFIG_DIR/minion.pub" ]; then
2148
+ mv "$TEMP_CONFIG_DIR/minion.pub" $PKI_DIR/minion/
2149
+ chmod 664 $PKI_DIR/minion/minion.pub
2150
+ CONFIGURED_ANYTHING=$BS_TRUE
2151
+ fi
2152
+ fi
857
2153
 
858
- # Copy the minions configuration if found
859
- [ -f "$TEMP_CONFIG_DIR/minion" ] && mv "$TEMP_CONFIG_DIR/minion" /etc/salt
860
2154
 
861
- # Copy the minion's keys if found
862
- if [ -f "$TEMP_CONFIG_DIR/minion.pem" ]; then
863
- mv "$TEMP_CONFIG_DIR/minion.pem" /etc/salt/pki
864
- chmod 400 /etc/salt/pki/minion.pem
2155
+ if [ $INSTALL_MASTER -eq $BS_TRUE ] || [ $INSTALL_SYNDIC -eq $BS_TRUE ]; then
2156
+ # Create the PKI directory
2157
+ [ -d $PKI_DIR/master ] || mkdir -p $PKI_DIR/master && chmod 700 $PKI_DIR/master
2158
+
2159
+ # Copy the masters configuration if found
2160
+ [ -f "$TEMP_CONFIG_DIR/master" ] && mv "$TEMP_CONFIG_DIR/master" /etc/salt && CONFIGURED_ANYTHING=$BS_TRUE
2161
+
2162
+ # Copy the master's keys if found
2163
+ if [ -f "$TEMP_CONFIG_DIR/master.pem" ]; then
2164
+ mv "$TEMP_CONFIG_DIR/master.pem" $PKI_DIR/master/
2165
+ chmod 400 $PKI_DIR/master/master.pem
2166
+ CONFIGURED_ANYTHING=$BS_TRUE
2167
+ fi
2168
+ if [ -f "$TEMP_CONFIG_DIR/master.pub" ]; then
2169
+ mv "$TEMP_CONFIG_DIR/master.pub" $PKI_DIR/master/
2170
+ chmod 664 $PKI_DIR/master/master.pub
2171
+ CONFIGURED_ANYTHING=$BS_TRUE
2172
+ fi
865
2173
  fi
866
- if [ -f "$TEMP_CONFIG_DIR/minion.pub" ]; then
867
- mv "$TEMP_CONFIG_DIR/minion.pub" /etc/salt/pki
868
- chmod 664 /etc/salt/pki/minion.pub
2174
+
2175
+ if [ $CONFIG_ONLY -eq $BS_TRUE ] && [ $CONFIGURED_ANYTHING -eq $BS_FALSE ]; then
2176
+ echowarn "No configuration or keys were copied over. No configuration was done!"
2177
+ exit 0
869
2178
  fi
870
2179
  }
871
2180
  #
@@ -874,18 +2183,45 @@ config_minion() {
874
2183
  ##############################################################################
875
2184
 
876
2185
 
2186
+ ##############################################################################
2187
+ #
2188
+ # This function checks if all of the installed daemons are running or not.
2189
+ #
2190
+ daemons_running() {
2191
+ FAILED_DAEMONS=0
2192
+ for fname in minion master syndic; do
2193
+
2194
+ # Skip if not meant to be installed
2195
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2196
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2197
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2198
+
2199
+ if [ "x$(ps aux | grep -v grep | grep salt-$fname)" = "x" ]; then
2200
+ echoerror "salt-$fname was not found running"
2201
+ FAILED_DAEMONS=$(expr $FAILED_DAEMONS + 1)
2202
+ fi
2203
+ done
2204
+ return $FAILED_DAEMONS
2205
+ }
2206
+ #
2207
+ # Ended daemons running check function
2208
+ #
2209
+ ##############################################################################
2210
+
877
2211
 
878
2212
  #=============================================================================
879
2213
  # LET'S PROCEED WITH OUR INSTALLATION
880
2214
  #=============================================================================
881
2215
  # Let's get the dependencies install function
882
- DEP_FUNC_NAMES="install_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_${ITYPE}_deps"
883
- DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_deps"
2216
+ DEP_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_deps"
2217
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_deps"
2218
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_deps"
2219
+ DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_deps"
884
2220
  DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}_deps"
885
2221
  DEP_FUNC_NAMES="$DEP_FUNC_NAMES install_${DISTRO_NAME_L}_deps"
886
2222
 
887
2223
  DEPS_INSTALL_FUNC="null"
888
- for DEP_FUNC_NAME in $DEP_FUNC_NAMES; do
2224
+ for DEP_FUNC_NAME in $(__strip_duplicates $DEP_FUNC_NAMES); do
889
2225
  if __function_defined $DEP_FUNC_NAME; then
890
2226
  DEPS_INSTALL_FUNC=$DEP_FUNC_NAME
891
2227
  break
@@ -893,12 +2229,34 @@ for DEP_FUNC_NAME in $DEP_FUNC_NAMES; do
893
2229
  done
894
2230
 
895
2231
 
2232
+ # Let's get the minion config function
2233
+ CONFIG_SALT_FUNC="null"
2234
+ if [ "$TEMP_CONFIG_DIR" != "null" ]; then
2235
+
2236
+ CONFIG_FUNC_NAMES="config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_salt"
2237
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_salt"
2238
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_salt"
2239
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_salt"
2240
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}_${ITYPE}_salt"
2241
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}_salt"
2242
+ CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_salt"
2243
+
2244
+ for FUNC_NAME in $(__strip_duplicates $CONFIG_FUNC_NAMES); do
2245
+ if __function_defined $FUNC_NAME; then
2246
+ CONFIG_SALT_FUNC=$FUNC_NAME
2247
+ break
2248
+ fi
2249
+ done
2250
+ fi
2251
+
2252
+
896
2253
  # Let's get the install function
897
- INSTALL_FUNC_NAMES="install_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_${ITYPE}"
2254
+ INSTALL_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}"
2255
+ INSTALL_FUNC_NAMES="$INSTALL_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}"
898
2256
  INSTALL_FUNC_NAMES="$INSTALL_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}"
899
2257
 
900
2258
  INSTALL_FUNC="null"
901
- for FUNC_NAME in $INSTALL_FUNC_NAMES; do
2259
+ for FUNC_NAME in $(__strip_duplicates $INSTALL_FUNC_NAMES); do
902
2260
  if __function_defined $FUNC_NAME; then
903
2261
  INSTALL_FUNC=$FUNC_NAME
904
2262
  break
@@ -906,32 +2264,17 @@ for FUNC_NAME in $INSTALL_FUNC_NAMES; do
906
2264
  done
907
2265
 
908
2266
 
909
- # Let's get the minion config function
910
- CONFIG_MINION_FUNC="null"
911
- if [ "$TEMP_CONFIG_DIR" != "null" ]; then
912
- CONFIG_FUNC_NAMES="config_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_${ITYPE}_minion"
913
- CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_minon"
914
- CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}_${ITYPE}_minion"
915
- CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_${DISTRO_NAME_L}_minion"
916
- CONFIG_FUNC_NAMES="$CONFIG_FUNC_NAMES config_minion"
917
-
918
- for FUNC_NAME in $CONFIG_FUNC_NAMES; do
919
- if __function_defined $FUNC_NAME; then
920
- CONFIG_MINION_FUNC=$FUNC_NAME
921
- break
922
- fi
923
- done
924
- fi
925
-
926
-
927
2267
  # Let's get the post install function
928
- POST_FUNC_NAMES="install_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_${ITYPE}_post"
929
- POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${DISTRO_VERSION_NO_DOTS}_post"
2268
+ POST_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_post"
2269
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_post"
2270
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_post"
2271
+ POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_post"
930
2272
  POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}_post"
931
2273
  POST_FUNC_NAMES="$POST_FUNC_NAMES install_${DISTRO_NAME_L}_post"
932
2274
 
2275
+
933
2276
  POST_INSTALL_FUNC="null"
934
- for FUNC_NAME in $POST_FUNC_NAMES; do
2277
+ for FUNC_NAME in $(__strip_duplicates $POST_FUNC_NAMES); do
935
2278
  if __function_defined $FUNC_NAME; then
936
2279
  POST_INSTALL_FUNC=$FUNC_NAME
937
2280
  break
@@ -939,53 +2282,144 @@ for FUNC_NAME in $POST_FUNC_NAMES; do
939
2282
  done
940
2283
 
941
2284
 
2285
+ # Let's get the start daemons install function
2286
+ STARTDAEMONS_FUNC_NAMES="install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}_restart_daemons"
2287
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}_restart_daemons"
2288
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_restart_daemons"
2289
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_restart_daemons"
2290
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}_${ITYPE}_restart_daemons"
2291
+ STARTDAEMONS_FUNC_NAMES="$STARTDAEMONS_FUNC_NAMES install_${DISTRO_NAME_L}_restart_daemons"
2292
+
2293
+ STARTDAEMONS_INSTALL_FUNC="null"
2294
+ for FUNC_NAME in $(__strip_duplicates $STARTDAEMONS_FUNC_NAMES); do
2295
+ if __function_defined $FUNC_NAME; then
2296
+ STARTDAEMONS_INSTALL_FUNC=$FUNC_NAME
2297
+ break
2298
+ fi
2299
+ done
2300
+
2301
+
2302
+ # Let's get the daemons running check function.
2303
+ DAEMONS_RUNNING_FUNC="null"
2304
+ DAEMONS_RUNNING_FUNC_NAMES="daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}_${ITYPE}"
2305
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}_${ITYPE}"
2306
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}"
2307
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}${PREFIXED_DISTRO_MAJOR_VERSION}${PREFIXED_DISTRO_MINOR_VERSION}"
2308
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}_${ITYPE}"
2309
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running_${DISTRO_NAME_L}"
2310
+ DAEMONS_RUNNING_FUNC_NAMES="$DAEMONS_RUNNING_FUNC_NAMES daemons_running"
2311
+
2312
+ for FUNC_NAME in $(__strip_duplicates $DAEMONS_RUNNING_FUNC_NAMES); do
2313
+ if __function_defined $FUNC_NAME; then
2314
+ DAEMONS_RUNNING_FUNC=$FUNC_NAME
2315
+ break
2316
+ fi
2317
+ done
2318
+
2319
+
2320
+
942
2321
  if [ $DEPS_INSTALL_FUNC = "null" ]; then
943
- echo " * ERROR: No dependencies installation function found. Exiting..."
2322
+ echoerror "No dependencies installation function found. Exiting..."
944
2323
  exit 1
945
2324
  fi
946
2325
 
947
2326
  if [ $INSTALL_FUNC = "null" ]; then
948
- echo " * ERROR: No installation function found. Exiting..."
2327
+ echoerror "No installation function found. Exiting..."
949
2328
  exit 1
950
2329
  fi
951
2330
 
952
2331
 
953
2332
  # Install dependencies
954
- echo " * Running ${DEPS_INSTALL_FUNC}()"
955
- $DEPS_INSTALL_FUNC
956
- if [ $? -ne 0 ]; then
957
- echo " * Failed to run ${DEPS_INSTALL_FUNC}()!!!"
958
- exit 1
2333
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
2334
+ # Only execute function is not in config mode only
2335
+ echoinfo "Running ${DEPS_INSTALL_FUNC}()"
2336
+ $DEPS_INSTALL_FUNC
2337
+ if [ $? -ne 0 ]; then
2338
+ echoerror "Failed to run ${DEPS_INSTALL_FUNC}()!!!"
2339
+ exit 1
2340
+ fi
959
2341
  fi
960
2342
 
961
- # Install Salt
962
- echo " * Running ${INSTALL_FUNC}()"
963
- $INSTALL_FUNC
964
- if [ $? -ne 0 ]; then
965
- echo " * Failed to run ${INSTALL_FUNC}()!!!"
966
- exit 1
967
- fi
968
2343
 
969
2344
  # Configure Salt
970
- if [ "$TEMP_CONFIG_DIR" != "null" -a "$CONFIG_MINION_FUNC" != "null" ]; then
971
- echo " * Running ${CONFIG_MINION_FUNC}()"
972
- $CONFIG_MINION_FUNC
2345
+ if [ "$TEMP_CONFIG_DIR" != "null" ] && [ "$CONFIG_SALT_FUNC" != "null" ]; then
2346
+ echoinfo "Running ${CONFIG_SALT_FUNC}()"
2347
+ $CONFIG_SALT_FUNC
973
2348
  if [ $? -ne 0 ]; then
974
- echo " * Failed to run ${CONFIG_MINION_FUNC}()!!!"
2349
+ echoerror "Failed to run ${CONFIG_SALT_FUNC}()!!!"
975
2350
  exit 1
976
2351
  fi
977
2352
  fi
978
2353
 
979
- # Run any post install function
980
- if [ "$POST_INSTALL_FUNC" != "null" ]; then
981
- echo " * Running ${POST_INSTALL_FUNC}()"
2354
+
2355
+ # Install Salt
2356
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
2357
+ # Only execute function is not in config mode only
2358
+ echoinfo "Running ${INSTALL_FUNC}()"
2359
+ $INSTALL_FUNC
2360
+ if [ $? -ne 0 ]; then
2361
+ echoerror "Failed to run ${INSTALL_FUNC}()!!!"
2362
+ exit 1
2363
+ fi
2364
+ fi
2365
+
2366
+
2367
+ # Run any post install function, Only execute function is not in config mode only
2368
+ if [ $CONFIG_ONLY -eq $BS_FALSE ] && [ "$POST_INSTALL_FUNC" != "null" ]; then
2369
+ echoinfo "Running ${POST_INSTALL_FUNC}()"
982
2370
  $POST_INSTALL_FUNC
983
2371
  if [ $? -ne 0 ]; then
984
- echo " * Failed to run ${POST_INSTALL_FUNC}()!!!"
2372
+ echoerror "Failed to run ${POST_INSTALL_FUNC}()!!!"
2373
+ exit 1
2374
+ fi
2375
+ fi
2376
+
2377
+
2378
+ # Run any start daemons function
2379
+ if [ "$STARTDAEMONS_INSTALL_FUNC" != "null" ]; then
2380
+ echoinfo "Running ${STARTDAEMONS_INSTALL_FUNC}()"
2381
+ $STARTDAEMONS_INSTALL_FUNC
2382
+ if [ $? -ne 0 ]; then
2383
+ echoerror "Failed to run ${STARTDAEMONS_INSTALL_FUNC}()!!!"
985
2384
  exit 1
986
2385
  fi
987
2386
  fi
988
2387
 
2388
+ # Check if the installed daemons are running or not
2389
+ if [ "$DAEMONS_RUNNING_FUNC" != "null" ]; then
2390
+ sleep 3 # Sleep a little bit to let daemons start
2391
+ echoinfo "Running ${DAEMONS_RUNNING_FUNC}()"
2392
+ $DAEMONS_RUNNING_FUNC
2393
+ if [ $? -ne 0 ]; then
2394
+ echoerror "Failed to run ${DAEMONS_RUNNING_FUNC}()!!!"
2395
+ echodebug "Running Processes:"
2396
+ echodebug "$(ps auxwww)"
2397
+
2398
+ for fname in minion master syndic; do
2399
+ # Skip if not meant to be installed
2400
+ [ $fname = "minion" ] && [ $INSTALL_MINION -eq $BS_FALSE ] && continue
2401
+ [ $fname = "master" ] && [ $INSTALL_MASTER -eq $BS_FALSE ] && continue
2402
+ [ $fname = "syndic" ] && [ $INSTALL_SYNDIC -eq $BS_FALSE ] && continue
2403
+
2404
+ [ ! $SALT_ETC_DIR/$fname ] && [ $fname != "syndic" ] && echodebug "$SALT_ETC_DIR/$fname does not exist"
2405
+
2406
+ echodebug "Running salt-$fname by hand outputs: $(salt-$fname -l debug)"
2407
+
2408
+ [ ! -f /var/log/salt/$fname ] && echodebug "/var/log/salt/$fname does not exist. Can't cat its contents!" && continue
2409
+
2410
+ echodebug "DEAMON LOGS for $fname:"
2411
+ echodebug "$(cat /var/log/salt/$fname)"
2412
+ echo
2413
+ done
2414
+ exit 1
2415
+ fi
2416
+ fi
2417
+
2418
+
989
2419
  # Done!
990
- echo " * Salt installed!"
2420
+ if [ $CONFIG_ONLY -eq $BS_FALSE ]; then
2421
+ echoinfo "Salt installed!"
2422
+ else
2423
+ echoinfo "Salt configured"
2424
+ fi
991
2425
  exit 0