vagrant-salt 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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