syncwrap 2.7.1 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +61 -0
  3. data/Manifest.txt +3 -0
  4. data/lib/syncwrap/base.rb +1 -1
  5. data/lib/syncwrap/change_key_listener.rb +56 -0
  6. data/lib/syncwrap/cli.rb +71 -8
  7. data/lib/syncwrap/components/arch.rb +8 -10
  8. data/lib/syncwrap/components/bundle.rb +3 -6
  9. data/lib/syncwrap/components/bundled_iyyov_daemon.rb +3 -8
  10. data/lib/syncwrap/components/bundler_gem.rb +2 -2
  11. data/lib/syncwrap/components/cruby_vm.rb +9 -5
  12. data/lib/syncwrap/components/debian.rb +13 -11
  13. data/lib/syncwrap/components/iyyov.rb +21 -4
  14. data/lib/syncwrap/components/jruby_vm.rb +5 -4
  15. data/lib/syncwrap/components/postgresql.rb +28 -7
  16. data/lib/syncwrap/components/puma.rb +112 -35
  17. data/lib/syncwrap/components/qpid.rb +2 -2
  18. data/lib/syncwrap/components/rhel.rb +65 -34
  19. data/lib/syncwrap/components/run_user.rb +11 -4
  20. data/lib/syncwrap/components/source_tree.rb +5 -1
  21. data/lib/syncwrap/components/tarpit_gem.rb +2 -2
  22. data/lib/syncwrap/components/users.rb +2 -1
  23. data/lib/syncwrap/context.rb +15 -2
  24. data/lib/syncwrap/distro.rb +5 -7
  25. data/lib/syncwrap/shell.rb +2 -2
  26. data/lib/syncwrap/systemd_service.rb +140 -0
  27. data/lib/syncwrap.rb +4 -3
  28. data/sync/etc/systemd/system/puma.service.erb +3 -0
  29. data/sync/etc/systemd/system/puma.socket.erb +15 -0
  30. data/sync/postgresql/postgresql.conf.erb +25 -5
  31. data/test/test_components.rb +14 -2
  32. data/test/test_context.rb +1 -1
  33. data/test/test_context_rput.rb +1 -1
  34. data/test/test_rsync.rb +1 -1
  35. data/test/test_shell.rb +2 -1
  36. data/test/test_space.rb +22 -1
  37. data/test/test_space_main.rb +6 -2
  38. data/test/test_version_support.rb +1 -1
  39. data/test/test_zone_balancer.rb +2 -2
  40. metadata +7 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5896d57fe2fbc03aa1b81254619ed604b37ae513
4
- data.tar.gz: 8764f0567918f0872297bda1802f179ece696b56
3
+ metadata.gz: 13c35dd94712da0efcf94baf546fe093c22ea98b
4
+ data.tar.gz: 7ab95e5de09411aeebb0999611e04eda2380fe49
5
5
  SHA512:
6
- metadata.gz: a60f4f82c141f4aa2fe773b9a3e484123c8d02333130bf1a59c56df2dd6fe203adf03ff01926f3cdb4f9e4968ebe871ebb671ca914805117ae85a2ad888c33b4
7
- data.tar.gz: c3fbff10f3100aa06ab58e0dc286bd29957256e9220f14d036432aaded32f85e681d2a7e078ad07037c30304b8483cf86672b3175536db40b2b6e35293ca8a86
6
+ metadata.gz: 00008c83b2ef58df4ca10b2913257963d9f64cc3ca992f6838d8a9bd075f8863a52265115016e1c93585bff946da6ac324a9bc6bf673ff3af308be95a3a3866a
7
+ data.tar.gz: b3c96fe0054c7011e05fb8bc858eaaab57dd08ea32ff0d9633fceddbce195bca6079d069fff7e9accfc3adb42a71ab37becf19f9bb25097cff80b1b4646fa7d0
data/History.rdoc CHANGED
@@ -1,3 +1,64 @@
1
+ === 2.8.0 (2016-7-19)
2
+ * Only allow public component methods to be executed via the
3
+ SyncWrap::Space#execute and thus the CLI. Previously it was possible
4
+ to execute protected or private methods.
5
+ * Uniformly name start, stop, and restart methods on SyncWrap::Iyyov
6
+ and SyncWrap::PostgreSQL for consistency and use in the CLI. Also
7
+ add reload and status methods to these components.
8
+ * Add optional SyncWrap::Puma systemd_socket (activation) support:
9
+ * The systemd_unit property is deprecated in favor of systemd_service
10
+ * Add lookup for systemd unit source files under the specific names
11
+ configured, before using generic puma.service/puma.socket
12
+ templates.
13
+ * Add systemctl daemon-reload based on changes
14
+ * Restart service or both socket and service based on changes
15
+ * Don't set a default port for SyncWrap::Puma, since users may prefer
16
+ to set port(s) in a puma config file. If relying on this port
17
+ selection, users will need to specify `port: 5874` on upgrade.
18
+ * Add SyncWrap::Puma start, stop, restart, and status methods.
19
+ * Add SyncWrap::SystemDService module for reuse
20
+ * Make systemd flag consistent between RHEL and Debian and respect
21
+ false.
22
+ * SyncWrap::Bundle, SyncWrap::BundledIyyovDaemon and SyncWrap::Puma
23
+ now support 'listening' for changes on multiple change keys, which
24
+ is more intuitive to configure than having SyncWrap::SourceTree
25
+ produce changes on multiple change keys. However, the later is
26
+ still supported.
27
+ * Add SyncWrap::ChangeKeyListener module for reuse
28
+ * Add :mode option to SyncWrap::RunUser#mkdir_run_user,
29
+ SyncWrap::RunUser#run_dir_mode, SyncWrap::SourceTree#remote_dir_mode
30
+ and change defaults to 0755. This was previously hard-coded to 0775,
31
+ which caused ssh access as the :run_user to fail and other conflicts
32
+ with distro security features.
33
+ * Set ssh option PasswordAuthentication=no when using
34
+ Users#ssh_user_pem. This is reasonable with use of a PEM file and
35
+ provides a (partial) workaround for an occasionally observed timing
36
+ issue causing a password prompt to be temporarily offered on a
37
+ booting CentOS host with Cloud-Init.
38
+ * CLI (-l --list*) listings now attempt to format output to (Unix)
39
+ terminal width
40
+ * The :check_install option to Distro#dist_install added in 2.7.0 is
41
+ now true (on) by default
42
+ * The previously deprecated :succeed flag to
43
+ Disto#dist_install/dist_uninstall has been dropped
44
+ * Replace RHEL installed test with "rpm -q" which is considerably
45
+ faster than "yum list"
46
+ * Add RHEL#dist_install :yum_flags options for special cases
47
+ * Fully replace the original use case for the :succeed option with
48
+ SyncWrap::RHEL#dist_install_url, defaulting to package name
49
+ extracted from rpm URL or file path for the install check
50
+ * SyncWrap::Iyyov with systemd should also conditionally daemon-reload
51
+ * Update SyncWrap::PostgreSQL and postgresql.conf for support of
52
+ version 9.6 (as of beta 2). Changes remain backward compatible with
53
+ 9.1+ and SyncWrap 2.3+
54
+ * Minor fixes based on ruby 2.4 testing (including with frozen string
55
+ literals)
56
+ * Upgrade dev dependencies to minitest 5.8.4 and tarpit 2.1.1
57
+ * Upgrade SyncWrap::CRubyVM default version to 2.1.10 (+ hash for 2.2.5)
58
+ * Upgrade SyncWrap::JRubyVM default version to 1.7.24 (+ hash for 1.7.25)
59
+ * Upgrade SyncWrap::BundlerGem default version to 1.12.5
60
+ * Upgrade SyncWrap::TarpitGem default version to 2.1.1
61
+
1
62
  === 2.7.1 (2016-3-2)
2
63
  * Fix handling of the -R/--components-in-role flag to correctly limit
3
64
  to hosts including the role, for both execution and listing
data/Manifest.txt CHANGED
@@ -18,6 +18,7 @@ lib/syncwrap/base.rb
18
18
  lib/syncwrap.rb
19
19
  lib/syncwrap/amazon_ec2.rb
20
20
  lib/syncwrap/amazon_ws.rb
21
+ lib/syncwrap/change_key_listener.rb
21
22
  lib/syncwrap/cli.rb
22
23
  lib/syncwrap/component.rb
23
24
  lib/syncwrap/context.rb
@@ -32,6 +33,7 @@ lib/syncwrap/rsync.rb
32
33
  lib/syncwrap/ruby_support.rb
33
34
  lib/syncwrap/shell.rb
34
35
  lib/syncwrap/systemd.rb
36
+ lib/syncwrap/systemd_service.rb
35
37
  lib/syncwrap/user_data.rb
36
38
  lib/syncwrap/version_support.rb
37
39
  lib/syncwrap/zone_balancer.rb
@@ -74,6 +76,7 @@ sync/etc/sysconfig/pgsql/postgresql.erb
74
76
  sync/etc/sysctl.d/61-postgresql-shm.conf.erb
75
77
  sync/etc/systemd/system/iyyov.service.erb
76
78
  sync/etc/systemd/system/puma.service.erb
79
+ sync/etc/systemd/system/puma.socket.erb
77
80
  sync/jruby/bin/jgem
78
81
  sync/postgresql/environment
79
82
  sync/postgresql/pg_ctl.conf
data/lib/syncwrap/base.rb CHANGED
@@ -15,7 +15,7 @@
15
15
  #++
16
16
 
17
17
  module SyncWrap
18
- VERSION='2.7.1'
18
+ VERSION='2.8.0'
19
19
 
20
20
  GEM_ROOT = File.dirname(File.dirname(File.dirname(__FILE__))) # :nodoc:
21
21
  end
@@ -0,0 +1,56 @@
1
+ #--
2
+ # Copyright (c) 2011-2016 David Kellum
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
5
+ # may not use this file except in compliance with the License. You may
6
+ # obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13
+ # implied. See the License for the specific language governing
14
+ # permissions and limitations under the License.
15
+ #++
16
+
17
+ module SyncWrap
18
+
19
+ # Support module for components which listen for and act on changes
20
+ # set on SyncWrap::Context#state keys.
21
+ module ChangeKeyListener
22
+
23
+ protected
24
+
25
+ def initialize( opts = {} )
26
+ @change_key = nil
27
+ super
28
+ end
29
+
30
+ # An optional state key, or array of state keys, to check for
31
+ # changes. (Default: nil; Example: :source_tree)
32
+ attr_accessor :change_key
33
+
34
+ # Returns true if there are any changes with any #change_key.
35
+ def change_key_changes?
36
+ Array( change_key ).any? do |k|
37
+ c = state[ k ]
38
+ c && !c.emtpy?
39
+ end
40
+ end
41
+
42
+ # Returns the combined array of all changes on all #change_key.
43
+ def change_key_changes
44
+ Array( change_key ).inject( [] ) do |m,k|
45
+ c = state[ k ]
46
+ if c
47
+ m + c
48
+ else
49
+ m
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ end
data/lib/syncwrap/cli.rb CHANGED
@@ -308,7 +308,7 @@ TEXT
308
308
  table = roles.map do |role|
309
309
  row = [ ':' + role.to_s ]
310
310
  classes = space.role( role ).map( &:class )
311
- row << short_class_names( classes ).join(' ')
311
+ row << short_class_names( classes )
312
312
  end
313
313
  print_table( table )
314
314
  puts if multi
@@ -333,19 +333,56 @@ TEXT
333
333
  def print_table( table )
334
334
  max_columns = table.map( &:count ).max || 0
335
335
  col_widths = max_columns.times.map do |i|
336
- table.map { |row| row[i] && row[i].length }.compact.max
336
+ table.map do |row|
337
+ case row[i]
338
+ when String
339
+ row[i].length
340
+ when Array
341
+ 1
342
+ end
343
+ end.compact.max
337
344
  end
338
- format = col_widths.inject("") do |f,w|
339
- if f.empty? #first
340
- f << "%-#{w}s "
341
- else
342
- f << "%-#{w}s "
345
+ wfirst = unless col_widths.empty?
346
+ col_widths[0] += 4 # Extra pad first col
347
+ col_widths[0] + 1
348
+ end
349
+
350
+ table = table.map do |row|
351
+ row.map do |cell|
352
+ if cell.is_a?( Array )
353
+ l = 0
354
+ cell.inject( String.new ) do |m,i|
355
+ if l == 0 || ( wfirst + l + i.length + 1 < term_width )
356
+ m << i << ' '
357
+ l += i.length + 1
358
+ else
359
+ m << "\n" + (' ' * wfirst)
360
+ m << i << ' '
361
+ l = wfirst + i.length + 1
362
+ end
363
+ m
364
+ end
365
+ else
366
+ cell
367
+ end
343
368
  end
344
369
  end
345
370
 
371
+ wall = 0
372
+ format = col_widths.inject( String.new ) do |f,w|
373
+ if f.empty? || ( wall + w + 1 < term_width )
374
+ f << "%-#{w}s "
375
+ wall += w + 1
376
+ else
377
+ f[-1,1] = "\n"
378
+ f << ( ' ' * wfirst ) + "%-#{w}s "
379
+ wall = wfirst + w + 1
380
+ end
381
+ f
382
+ end
346
383
  table.each do |row|
347
384
  row[ max_columns ] = nil
348
- puts format % row
385
+ puts (format % row ).gsub( /\s+$/, '' )
349
386
  end
350
387
  end
351
388
 
@@ -413,5 +450,31 @@ TEXT
413
450
  end
414
451
  end
415
452
 
453
+ def term_width
454
+ @term_width ||= ( unix? && (check_stty_width || check_tput_width) ) || 80
455
+ end
456
+
457
+ def unix?
458
+ !!( RbConfig::CONFIG['host_os'] =~
459
+ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i )
460
+ end
461
+
462
+ def check_stty_width
463
+ s = `stty size 2>/dev/null`
464
+ s &&= s.split[1]
465
+ s &&= s.to_i
466
+ s if s && s >= 30
467
+ rescue
468
+ nil
469
+ end
470
+
471
+ def check_tput_width
472
+ s = `tput cols 2>/dev/null`
473
+ s &&= s.to_i
474
+ s if s && s >= 30
475
+ rescue
476
+ nil
477
+ end
478
+
416
479
  end
417
480
  end
@@ -35,26 +35,24 @@ module SyncWrap
35
35
  # ==== Options
36
36
  #
37
37
  # :check_install:: Short-circuit if all packages already
38
- # installed. Thus no upgrades will be performed.
38
+ # installed. Thus no upgrades will be
39
+ # performed. (Default: true)
39
40
  #
40
- # Additional options are passed to the sudo calls.
41
+ # Options are also passed to the sudo calls.
41
42
  def dist_install( *pkgs )
42
- opts = pkgs.last.is_a?( Hash ) && pkgs.pop.dup || {}
43
- opts.delete( :minimal )
43
+ opts = pkgs.last.is_a?( Hash ) && pkgs.pop || {}
44
44
  pkgs.flatten!
45
- chk = opts.delete( :check_install )
46
- chk = opts.delete( :succeed ) if chk.nil?
45
+ chk = opts[ :check_install ]
47
46
  chk = check_install? if chk.nil?
48
- dist_if_not_installed?( pkgs, chk, opts ) do
47
+ dist_if_not_installed?( pkgs, chk != false, opts ) do
49
48
  sudo( "pacman -S --noconfirm #{pkgs.join ' '}", opts )
50
49
  end
51
50
  end
52
51
 
53
52
  # Uninstall the specified package names. A trailing hash is
54
- # interpreted as options, passed to the sudo calls.
53
+ # interpreted as options and passed to the sudo calls.
55
54
  def dist_uninstall( *pkgs )
56
- opts = pkgs.last.is_a?( Hash ) && pkgs.pop.dup || {}
57
- opts.delete( :succeed )
55
+ opts = pkgs.last.is_a?( Hash ) && pkgs.pop || {}
58
56
  pkgs.flatten!
59
57
  pkgs.each do |pkg|
60
58
  dist_if_installed?( pkg, opts ) do
@@ -18,6 +18,7 @@ require 'syncwrap/component'
18
18
 
19
19
  require 'syncwrap/git_help'
20
20
  require 'syncwrap/path_util'
21
+ require 'syncwrap/change_key_listener'
21
22
 
22
23
  module SyncWrap
23
24
 
@@ -26,6 +27,7 @@ module SyncWrap
26
27
  # Host component dependencies: RunUser?, SourceTree?, BundlerGem
27
28
  class Bundle < Component
28
29
  include PathUtil
30
+ include ChangeKeyListener
29
31
 
30
32
  # Path to the Gemfile(.lock)
31
33
  # (Default: SourceTree#remote_source_path)
@@ -45,10 +47,6 @@ module SyncWrap
45
47
 
46
48
  protected
47
49
 
48
- # An optional state key to check, indicating changes requiring
49
- # bundle install (Default: nil; Example: :source_tree)
50
- attr_accessor :change_key
51
-
52
50
  # Hash of environment key/values to set on call to bundle install
53
51
  # (Default: {} -> none)
54
52
  attr_accessor :bundle_install_env
@@ -69,7 +67,6 @@ module SyncWrap
69
67
  public
70
68
 
71
69
  def initialize( opts = {} )
72
- @change_key = nil
73
70
  @bundle_path = nil
74
71
  @bundle_install_env = {}
75
72
  @bundle_install_path = '~/.gem'
@@ -79,7 +76,7 @@ module SyncWrap
79
76
  end
80
77
 
81
78
  def install
82
- bundle_install if change_key.nil? || state[ change_key ]
79
+ bundle_install if change_key.nil? || change_key_changes?
83
80
  end
84
81
 
85
82
  def bundle_install
@@ -15,6 +15,7 @@
15
15
  #++
16
16
 
17
17
  require 'syncwrap/component'
18
+ require 'syncwrap/change_key_listener'
18
19
 
19
20
  module SyncWrap
20
21
 
@@ -30,6 +31,7 @@ module SyncWrap
30
31
  #
31
32
  # Host component dependencies: RunUser, <ruby>, Iyyov
32
33
  class BundledIyyovDaemon < Component
34
+ include ChangeKeyListener
33
35
 
34
36
  protected
35
37
 
@@ -44,16 +46,11 @@ module SyncWrap
44
46
  # one of 'name' on a host. (Default: nil)
45
47
  attr_accessor :instance
46
48
 
47
- # An optional state key to check, indicating changes requiring
48
- # a daemon restart (Default: nil; Example: :source_tree)
49
- attr_accessor :change_key
50
-
51
49
  public
52
50
 
53
51
  def initialize( opts = {} )
54
52
  @name = nil
55
53
  @instance = nil
56
- @change_key = nil
57
54
 
58
55
  super
59
56
  end
@@ -76,9 +73,7 @@ module SyncWrap
76
73
  user: run_user )
77
74
  job_changes += iyyov_install_jobs
78
75
 
79
- src_changes = ( change_key && state[ change_key ] ) || []
80
-
81
- if ( ( src_changes + conf_changes ).length > 0 ||
76
+ if ( change_key_changes? || !conf_changes.empty? ||
82
77
  state[ :hashdot_updated ] ||
83
78
  state[ :imaging ] )
84
79
  rudo( "kill $(< #{daemon_service_dir}/#{name}.pid ) || true" )
@@ -24,11 +24,11 @@ module SyncWrap
24
24
  #
25
25
  class BundlerGem < Component
26
26
 
27
- # Bundler version to install (Default: 1.6.5)
27
+ # Bundler version to install (Default: 1.12.5)
28
28
  attr_accessor :bundler_version
29
29
 
30
30
  def initialize( opts = {} )
31
- @bundler_version = '1.6.5'
31
+ @bundler_version = '1.12.5'
32
32
  super
33
33
  end
34
34
 
@@ -36,7 +36,7 @@ module SyncWrap
36
36
  # some common utility methods.
37
37
  #
38
38
  # Alternatives like RVM, rbenv, etc. are disfavored by this author
39
- # for server provisioning because of their often arcane shell and
39
+ # for server provisioning because of their intrusive shell and
40
40
  # environment modifications and obscure interations with non-/login
41
41
  # or non-/interactive sessions. These are fine tools if needed for
42
42
  # development however. Again you are currently on your own (beyond
@@ -47,22 +47,26 @@ module SyncWrap
47
47
  include HashSupport
48
48
 
49
49
  # Default #ruby_version to install
50
- DEFAULT_VERSION = '2.1.8'
50
+ DEFAULT_VERSION = '2.1.10'
51
51
 
52
52
  # A set of known (sha256) cryptographic hashes, keyed by version
53
- # string.
53
+ # string, for the source ruby-(version).tar.gz package.
54
54
  KNOWN_HASHES = {
55
55
  '2.1.7' =>
56
56
  'f59c1596ac39cc7e60126e7d3698c19f482f04060674fdfe0124e1752ba6dd81',
57
57
  '2.1.8' =>
58
- 'afd832b8d5ecb2e3e1477ec6a9408fdf9898ee73e4c5df17a2b2cb36bd1c355d' }
58
+ 'afd832b8d5ecb2e3e1477ec6a9408fdf9898ee73e4c5df17a2b2cb36bd1c355d',
59
+ '2.1.10' =>
60
+ 'fb2e454d7a5e5a39eb54db0ec666f53eeb6edc593d1d2b970ae4d150b831dd20',
61
+ '2.2.5' =>
62
+ '30c4b31697a4ca4ea0c8db8ad30cf45e6690a0f09687e5d483c933c03ca335e3' }
59
63
 
60
64
  # The ruby version to install, as it appears in source packages
61
65
  # from ruby-lang.org. Note that starting with 2.1.0, the patch
62
66
  # release (p#) no longer appears in package names.
63
67
  # (Default: DEFAULT_VERSION)
64
68
  #
65
- # Example values: '2.0.0-p481', '2.1.8'
69
+ # Example values: '2.0.0-p481', '2.1.10', '2.2.5'
66
70
  attr_accessor :ruby_version
67
71
 
68
72
  # If true, attempt to uninstall any pre-existing distro packaged
@@ -46,7 +46,10 @@ module SyncWrap
46
46
  end
47
47
 
48
48
  def systemd?
49
- @systemd ||= version_gte?( debian_version, [8] )
49
+ if @systemd.nil?
50
+ @systemd = version_gte?( debian_version, [8] )
51
+ end
52
+ @systemd
50
53
  end
51
54
 
52
55
  # Install the specified package names. The first time this is
@@ -56,30 +59,29 @@ module SyncWrap
56
59
  # ==== Options
57
60
  #
58
61
  # :check_install:: Short-circuit if all packages already
59
- # installed. Thus no upgrades will be performed.
62
+ # installed. Thus no upgrades will be
63
+ # performed. (Default: true)
60
64
  #
61
65
  # :minimal:: Eqv to --no-install-recommends
62
66
  #
63
- # Additional options are passed to the sudo calls.
67
+ # Options are also passed to the sudo calls.
64
68
  def dist_install( *args )
65
- opts = args.last.is_a?( Hash ) && args.pop.dup || {}
69
+ opts = args.last.is_a?( Hash ) && args.pop || {}
66
70
  args.flatten!
67
71
  flags = []
68
- flags << '--no-install-recommends' if opts.delete( :minimal )
69
- chk = opts.delete( :check_install )
70
- chk = opts.delete( :succeed ) if chk.nil?
72
+ flags << '--no-install-recommends' if opts[ :minimal ]
73
+ chk = opts[ :check_install ]
71
74
  chk = check_install? if chk.nil?
72
- dist_if_not_installed?( args, chk, opts ) do
75
+ dist_if_not_installed?( args, chk != false, opts ) do
73
76
  sudo( "apt-get -yqq update", opts ) if first_apt?
74
77
  sudo( "apt-get -yq install #{(flags + args).join ' '}", opts )
75
78
  end
76
79
  end
77
80
 
78
81
  # Uninstall the specified package names. A trailing hash is
79
- # interpreted as options, passed to the sudo calls.
82
+ # interpreted as options and passed to the sudo calls.
80
83
  def dist_uninstall( *pkgs )
81
- opts = pkgs.last.is_a?( Hash ) && pkgs.pop.dup || {}
82
- opts.delete( :succeed )
84
+ opts = pkgs.last.is_a?( Hash ) && pkgs.pop || {}
83
85
  pkgs.flatten!
84
86
  pkgs.each do |pkg|
85
87
  dist_if_installed?( pkg, opts ) do
@@ -41,7 +41,7 @@ module SyncWrap
41
41
  # empty jobs.rb.
42
42
  def install
43
43
  # Shorten if the desired iyyov version is already running
44
- pid, ver = capture_running_version( 'iyyov' )
44
+ _,ver = capture_running_version( 'iyyov' )
45
45
  if ver != iyyov_version
46
46
  install_run_dir #as root
47
47
  install_iyyov_gem #as root
@@ -140,6 +140,7 @@ module SyncWrap
140
140
  def install_iyyov_init
141
141
  if systemd?
142
142
  changes = rput( 'etc/systemd/system/iyyov.service', user: :root )
143
+ systemctl( 'daemon-reload' ) unless changes.empty?
143
144
  systemctl( 'enable', 'iyyov.service' )
144
145
  else
145
146
  rput( 'etc/init.d/iyyov', user: :root,
@@ -150,18 +151,34 @@ module SyncWrap
150
151
  end
151
152
  end
152
153
 
153
- def iyyov_start
154
+ def start
154
155
  dist_service( 'iyyov', 'start' )
155
156
  end
156
157
 
157
- def iyyov_stop
158
+ def stop
158
159
  dist_service( 'iyyov', 'stop' )
159
160
  end
160
161
 
161
- def iyyov_restart
162
+ def restart
162
163
  dist_service( 'iyyov', 'restart' )
163
164
  end
164
165
 
166
+ # Output the server status (useful via CLI with --verbose)
167
+ def status
168
+ dist_service( 'iyyov', 'status' )
169
+ end
170
+
171
+ # Reload server configuration
172
+ def reload
173
+ dist_service( 'iyyov', 'reload' )
174
+ end
175
+
176
+ protected
177
+
178
+ alias :iyyov_start :start
179
+ alias :iyyov_restart :restart
180
+ alias :iyyov_stop :stop
181
+
165
182
  end
166
183
 
167
184
  end
@@ -22,8 +22,8 @@ require 'syncwrap/hash_support'
22
22
  module SyncWrap
23
23
 
24
24
  # Provision JRuby (jruby.org - Ruby on the Java Virtual Machine) by
25
- # direct download from public S3 repo. Includes utility methods for
26
- # checking and installing JRuby gems.
25
+ # direct download from the public S3 repo. Includes utility methods
26
+ # for checking and installing JRuby gems.
27
27
  #
28
28
  # Host component dependencies: <Distro>
29
29
  class JRubyVM < Component
@@ -32,14 +32,15 @@ module SyncWrap
32
32
  include HashSupport
33
33
 
34
34
  # Default #jruby_version to install
35
- DEFAULT_VERSION = '1.7.23'
35
+ DEFAULT_VERSION = '1.7.24'
36
36
 
37
37
  # A set of known cryptographic hashes, keyed by version
38
38
  # string. Note, we prefer sha256 but sha1 is what is currently
39
39
  # published.
40
40
  KNOWN_HASHES = { '1.7.22' => '6b9e310a04ad8173d0d6dbe299da04c0ef85fc15',
41
41
  '1.7.23' => '2b5e796feeed2bcfab02f8bf2ff3d77ca318e310',
42
- '1.7.24' => '0c321d2192768dfec419bee6b44c7190f4db32e1' }
42
+ '1.7.24' => '0c321d2192768dfec419bee6b44c7190f4db32e1',
43
+ '1.7.25' => 'cd15aef419f97cff274491e53fcfb8b88ec36785' }
43
44
 
44
45
  # JRuby version to install (default: DEFAULT_VERSION)
45
46
  attr_accessor :jruby_version
@@ -80,7 +80,7 @@ module SyncWrap
80
80
 
81
81
  # Location of postgresql data (and possibly also config) directory.
82
82
  # (Default: #pg_default_data_dir)
83
- attr_accessor :pg_data_dir
83
+ attr_writer :pg_data_dir
84
84
 
85
85
  def pg_data_dir
86
86
  @pg_data_dir || pg_default_data_dir
@@ -120,7 +120,11 @@ module SyncWrap
120
120
  attr_writer :pg_specify_etc_config
121
121
 
122
122
  def pg_specify_etc_config
123
- @pg_specify_etc_config || distro.is_a?( Debian )
123
+ if @pg_specify_etc_config.nil?
124
+ distro.is_a?( Debian )
125
+ else
126
+ @pg_specify_etc_config
127
+ end
124
128
  end
125
129
 
126
130
  # The package names, including \PostgreSQL server of the
@@ -174,10 +178,10 @@ module SyncWrap
174
178
  # Shared buffers (Default: '256MB' vs PG: '128MB')
175
179
  attr_accessor :shared_buffers
176
180
 
177
- # Work memory (Default: '128MB' vs PG: '1MB')
181
+ # Work memory (Default: '128MB' vs PG 9.4+: '4MB')
178
182
  attr_accessor :work_mem
179
183
 
180
- # Maintenance work memory (Default: '128MB' vs PG: '16MB')
184
+ # Maintenance work memory (Default: '128MB' vs PG 9.4+: '64MB')
181
185
  attr_accessor :maintenance_work_mem
182
186
 
183
187
  # Maximum stack depth (Default: '4MB' vs PG: '2MB')
@@ -245,6 +249,7 @@ module SyncWrap
245
249
  @pg_data_dir = nil
246
250
  @pg_default_data_dir = nil
247
251
  @pg_version = nil
252
+ @pg_specify_etc_config = nil
248
253
  @package_names = nil
249
254
  @service_name = 'postgresql'
250
255
  @synchronous_commit = :on
@@ -355,20 +360,36 @@ module SyncWrap
355
360
  end
356
361
 
357
362
  # Start the server
358
- def pg_start
363
+ def start
359
364
  dist_service( service_name, 'start' )
360
365
  end
361
366
 
362
367
  # Restart the server
363
- def pg_restart
368
+ def restart
364
369
  dist_service( service_name, 'restart' )
365
370
  end
366
371
 
367
372
  # Stop the server
368
- def pg_stop
373
+ def stop
369
374
  dist_service( service_name, 'stop' )
370
375
  end
371
376
 
377
+ # Output the server status (useful via CLI with --verbose)
378
+ def status
379
+ dist_service( service_name, 'status' )
380
+ end
381
+
382
+ # Reload server configuration
383
+ def reload
384
+ dist_service( service_name, 'reload' )
385
+ end
386
+
387
+ protected
388
+
389
+ alias :pg_start :start
390
+ alias :pg_restart :restart
391
+ alias :pg_stop :stop
392
+
372
393
  end
373
394
 
374
395
  end