syncwrap 2.9.1 → 2.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 41675f753b936a41dfa9adc50306cba476cb7809
4
- data.tar.gz: 8a61feac7054cf90aa1226abe47fbaf5b1e88913
3
+ metadata.gz: 3b332ef7c3b7cd3a26930594f9ff9d0e22054295
4
+ data.tar.gz: a8ef0a95a638f7449dda4ab994be73bc9e08f8af
5
5
  SHA512:
6
- metadata.gz: 357c6f3382234c6bf91e49e43434a0056ead68bd30921276101b0e2399011de55d202b9f90fa9a48e016a12e8b34e20445df6dd06ce99121d9b75a5054bf9aca
7
- data.tar.gz: 85a464dd1ebe06e37de0973cb90a00bf660eea82807d7cc34ac3da29bbfa93c01ba55a349fe13047d60a71671ccb495b5920fde86d5c0f3221e166e696d73468
6
+ metadata.gz: 448c97cf5df5774e541c57297bb0c4224dc278068551d06031175e9179b9418dfdb098792643b61af19ef3dd492c263e03946147fb2923932395d4fa8cd069aa
7
+ data.tar.gz: cb9bd08e0b91b65df2bf86bbd99183126ed8ab83c421a2a88fb257e22c6b4af268fc1eb115f328f31f04f0ae2844a91b7d1339b0bee78f2aefb8c17287e1d462
data/History.rdoc CHANGED
@@ -1,12 +1,35 @@
1
+ === 2.10.0 (2017-10-26)
2
+ * SyncWrap::Debian: dist_update condition based on local context
3
+ hasn't worked properly since 2.7.0, when remote conditional install
4
+ was implemented. Fix this by using a remote lock file and running
5
+ prior to any install (inside install conditional) if it hasn't been
6
+ run in last 1 hour by syncwrap.
7
+ * Add SyncWrap::Component#sh_if, sudo_if, and rudo_if helper methods
8
+ for common bash conditionals. Using these where applicable to
9
+ simplify various internal components.
10
+ * Add SyncWrap::SystemDService#enable and disable commands
11
+ * Add SyncWrap::TimeChecker utility component
12
+ * SyncWrap::CRubyVM
13
+ * Add hashes for 2.2.8, 2.3.5 and 2.4.2
14
+ * Update default version to 2.3.5
15
+ * SyncWrap::JRubyVM; Add hash for 9.1.13.0 and make it the default
16
+ * SyncWrap::TarpitGem; default version 2.1.2
17
+ * SyncWrap::RakeGem; default version 12.1.0, support user_install
18
+ * Expand transitive dependency constraints for new releases:
19
+ term-ansicolor, tins, json and nokogiri. The latest of tins and
20
+ nokogiri are incompatible with jruby 1.7.x (in 1.9 mode) which
21
+ prompts dropping jruby 1.7.x from syncwrap's Travis CI. Compatible
22
+ earlier versions are still available to users however.
23
+
1
24
  === 2.9.1 (2017-8-4)
2
25
  * SyncWrap::JRubyVM
3
- * Avoid setting Env['GEM_HOME'] in the jruby 9.x installed profile
4
- by default. In 2.9.0, this was added as a substitute for the
5
- jruby.gem.home system property, which when set caused incessant
6
- warnings with 9.x. However setting GEM_HOME also undesirably
7
- effects gem bin wrapper install location. Instead just use the
8
- default in-dist path of jruby 9.x, and system gems will need to be
9
- re-installed with a jruby upgrade.
26
+ * Avoid setting GEM_HOME environment var in the jruby 9.x installed
27
+ profile by default. In 2.9.0, this was added as a substitute for
28
+ the jruby.gem.home system property, which when set caused
29
+ incessant warnings with 9.x. However setting GEM_HOME also
30
+ undesirably effects gem bin wrapper install location. Instead just
31
+ use the default in-dist path of jruby 9.x, and system gems will
32
+ need to be re-installed with a jruby upgrade.
10
33
  * Add support for fast path gem user_install (no-op if same version
11
34
  specification is found)
12
35
  * Fix error message for CLI -S (session) with host not found
data/Manifest.txt CHANGED
@@ -66,6 +66,7 @@ lib/syncwrap/components/rhel.rb
66
66
  lib/syncwrap/components/run_user.rb
67
67
  lib/syncwrap/components/source_tree.rb
68
68
  lib/syncwrap/components/tarpit_gem.rb
69
+ lib/syncwrap/components/time_checker.rb
69
70
  lib/syncwrap/components/ubuntu.rb
70
71
  lib/syncwrap/components/users.rb
71
72
  sync/etc/gemrc
data/lib/syncwrap/base.rb CHANGED
@@ -15,7 +15,7 @@
15
15
  #++
16
16
 
17
17
  module SyncWrap
18
- VERSION='2.9.1'
18
+ VERSION='2.10.0'
19
19
 
20
20
  GEM_ROOT = File.dirname(File.dirname(File.dirname(__FILE__))) # :nodoc:
21
21
  end
@@ -123,6 +123,8 @@ module SyncWrap
123
123
  # sudo "touch /var/foobar" #=> NestingError
124
124
  # end
125
125
  #
126
+ # See also #sh_if, #sudo_if for convenience methods.
127
+ #
126
128
  # While executing the block, #flush is _locked_. The above fails
127
129
  # with a NestingError and accurate stack trace, without running
128
130
  # any potentially dangerous, incomplete bash fragments on the
@@ -200,6 +202,23 @@ module SyncWrap
200
202
  sh( command, { user: run_user }.merge( opts ), &block )
201
203
  end
202
204
 
205
+ # Wraps cond in a bash "if cond; then" expression and close: "fi",
206
+ # and then calls #sh with the remaining options and block.
207
+ def sh_if( cond, opts = {}, &block )
208
+ cmd = "if #{cond}; then"
209
+ sh( cmd, opts.merge( close: 'fi' ), &block )
210
+ end
211
+
212
+ # Equivalent to `sh_if( cond, user: :root )`
213
+ def sudo_if( cond, opts = {}, &block )
214
+ sh_if( cond, { user: :root }.merge( opts ), &block )
215
+ end
216
+
217
+ # Equivalent to `sh_if( cond, user: run_user )`
218
+ def rudo_if( cond, opts = {}, &block )
219
+ sh_if( cond, { user: run_user }.merge( opts ), &block )
220
+ end
221
+
203
222
  # Capture and return [exit_code, stdout] from command, where
204
223
  # stdout is the entire stream read into a String. Any commands
205
224
  # already queued via #sh are executed via #flush beforehand, to
@@ -66,8 +66,7 @@ module SyncWrap
66
66
  # yield to block.
67
67
  def dist_if_not_installed?( pkgs, chk = true, opts = {}, &block )
68
68
  if chk
69
- c = "if ! pacman -Q #{pkgs.join ' '} >/dev/null 2>&1; then"
70
- sudo( c, opts.merge( close: 'fi' ), &block )
69
+ sudo_if( "! pacman -Q #{pkgs.join ' '} >/dev/null 2>&1", opts, &block )
71
70
  else
72
71
  block.call
73
72
  end
@@ -76,8 +75,7 @@ module SyncWrap
76
75
  # Wrap block in a sudo bash conditional testing if the single
77
76
  # specified pkg is installed.
78
77
  def dist_if_installed?( pkg, opts = {}, &block )
79
- c = "if pacman -Q #{pkg} >/dev/null 2>&1; then"
80
- sudo( c, opts.merge( close: 'fi' ), &block )
78
+ sudo_if( "pacman -Q #{pkg} >/dev/null 2>&1", opts, &block )
81
79
  end
82
80
 
83
81
  alias_method :dist_service, :dist_service_via_systemctl
@@ -70,7 +70,7 @@ module SyncWrap
70
70
  map { |b| "../lib/java/bin/#{b}" }.
71
71
  join( ' ' )
72
72
 
73
- sudo( "if [ ! -d #{jdk_dir} ]; then", close: "fi" ) do
73
+ sudo_if( "[ ! -d #{jdk_dir} ]" ) do
74
74
  dist_install( 'curl', minimal: true, check_install: true )
75
75
  sudo <<-SH
76
76
  curl -sSL -o #{distro} #{jdk_url}
@@ -47,7 +47,7 @@ module SyncWrap
47
47
  include HashSupport
48
48
 
49
49
  # Default #ruby_version to install
50
- DEFAULT_VERSION = '2.2.7'
50
+ DEFAULT_VERSION = '2.3.5'
51
51
 
52
52
  # A set of known (sha256) cryptographic hashes, keyed by version
53
53
  # string, for the source ruby-(version).tar.gz package.
@@ -64,17 +64,23 @@ module SyncWrap
64
64
  'de8e192791cb157d610c48a9a9ff6e7f19d67ce86052feae62b82e3682cc675f',
65
65
  '2.2.7' =>
66
66
  '374184c6c5bbc88fb7bad422368d4053a236fb6587f0eff76146dcba57f93da5',
67
+ '2.2.8' =>
68
+ '8f37b9d8538bf8e50ad098db2a716ea49585ad1601bbd347ef84ca0662d9268a',
67
69
  '2.3.3' =>
68
70
  '241408c8c555b258846368830a06146e4849a1d58dcaf6b14a3b6a73058115b7',
69
71
  '2.3.4' =>
70
- '98e18f17c933318d0e32fed3aea67e304f174d03170a38fd920c4fbe49fec0c3' }
72
+ '98e18f17c933318d0e32fed3aea67e304f174d03170a38fd920c4fbe49fec0c3',
73
+ '2.3.5' =>
74
+ '5462f7bbb28beff5da7441968471ed922f964db1abdce82b8860608acc23ddcc',
75
+ '2.4.2' =>
76
+ '93b9e75e00b262bc4def6b26b7ae8717efc252c47154abb7392e54357e6c8c9c' }
71
77
 
72
78
  # The ruby version to install, as it appears in source packages
73
79
  # from ruby-lang.org. Note that starting with 2.1.0, the patch
74
80
  # release (p#) no longer appears in package names.
75
81
  # (Default: DEFAULT_VERSION)
76
82
  #
77
- # Example values: '2.0.0-p481', '2.2.7', '2.3.3'
83
+ # Example values: '2.0.0-p481', '2.2.8', '2.3.5', '2.4.2'
78
84
  attr_accessor :ruby_version
79
85
 
80
86
  # If true, attempt to uninstall any pre-existing distro packaged
@@ -33,6 +33,8 @@ module SyncWrap
33
33
 
34
34
  alias :distro_version :debian_version
35
35
 
36
+ UPDATE_LOCK = "/var/lock/subsys/syncwrap-apt-get-update".freeze
37
+
36
38
  protected
37
39
 
38
40
  # Set true/false to override the default, distro version based
@@ -89,14 +91,20 @@ module SyncWrap
89
91
  # ==== Options
90
92
  #
91
93
  # :update_required:: If true, always perform update. If specified
92
- # as false, do nothing. If unspecified, run on
93
- # the first call per Context only.
94
+ # as false, do nothing. If unspecified, update
95
+ # if it hasn't already been run in the last
96
+ # hour via syncwrap (using a lock file).
94
97
  #
95
98
  # Options are also passed to the sudo calls.
96
99
  def dist_update( opts = {} )
97
100
  req = opts[ :update_required ]
98
- if ( req != false ) && ( first_apt? || req )
99
- sudo( "apt-get -yqq update", opts )
101
+ if ( req != false )
102
+ dist_if_update_old?( req != true, opts ) do
103
+ sudo( <<-SH, opts )
104
+ apt-get -yqq update
105
+ touch #{UPDATE_LOCK}
106
+ SH
107
+ end
100
108
  end
101
109
  end
102
110
 
@@ -119,8 +127,7 @@ module SyncWrap
119
127
  if chk
120
128
  qry = "dpkg-query -W -f '${db:Status-Status}\\n' #{pkgs.join ' '}"
121
129
  cnt = qry + " | grep -c -E '^installed$'"
122
- cond = %Q{if [ "$(#{cnt})" != "#{pkgs.count}" ]; then}
123
- sudo( cond, opts.merge( close: 'fi' ), &block )
130
+ sudo_if( %Q{[ "$(#{cnt})" != "#{pkgs.count}" ]}, opts, &block )
124
131
  else
125
132
  block.call
126
133
  end
@@ -131,8 +138,7 @@ module SyncWrap
131
138
  def dist_if_installed?( pkg, opts = {}, &block )
132
139
  qry = "dpkg-query -W -f '${db:Status-Status}\\n' #{pkg}"
133
140
  tst = qry + " | grep -q -E '^installed$'"
134
- cond = "if #{tst}; then"
135
- sudo( cond, opts.merge( close: 'fi' ), &block )
141
+ sudo_if( tst, opts, &block )
136
142
  end
137
143
 
138
144
  # Install a System V style init.d service script
@@ -163,13 +169,13 @@ module SyncWrap
163
169
 
164
170
  protected
165
171
 
166
- def first_apt?
167
- s = state
168
- if s[ :debian_apt_updated ]
169
- false
172
+ def dist_if_update_old?( chk = true, opts = {}, &block )
173
+ if chk
174
+ l = UPDATE_LOCK
175
+ sudo_if( %Q{[[ ! -e #{l} || -n "$(find #{l} -mmin +60)" ]]},
176
+ opts, &block )
170
177
  else
171
- s[ :debian_apt_updated ] = true
172
- true
178
+ block.call
173
179
  end
174
180
  end
175
181
 
@@ -32,7 +32,7 @@ module SyncWrap
32
32
  include HashSupport
33
33
 
34
34
  # Default #jruby_version to install
35
- DEFAULT_VERSION = '1.7.26'
35
+ DEFAULT_VERSION = '9.1.13.0'
36
36
 
37
37
  # A set of known cryptographic hashes, keyed by version
38
38
  # string. We prefer sha256 but sha1 is what is published for
@@ -46,11 +46,13 @@ module SyncWrap
46
46
  '1.7.27' => '4a24fe103d3735b23cc58668dec711857125a6f3',
47
47
  '9.1.12.0' =>
48
48
  'ddb23c95f4b3cc3fc1cc57b81cb4ceee776496ede402b9a6eb0622cf15e1a597',
49
+ '9.1.13.0' =>
50
+ '9d156646623ac2f27174721035b52572a4b05690db7c1293295aa2c04aad3908',
49
51
  }
50
52
 
51
53
  # JRuby version to install (default: DEFAULT_VERSION)
52
54
  #
53
- # Example values: '1.7.26', '9.1.12.0'
55
+ # Example values: '1.7.27', '9.1.13.0'
54
56
  attr_accessor :jruby_version
55
57
 
56
58
  # A cryptographic hash value (hexadecimal, some standard length)
@@ -181,8 +183,7 @@ module SyncWrap
181
183
  specs = [ "#{prefix}/specifications/#{gem}-#{ver}-java.gemspec",
182
184
  "#{prefix}/specifications/#{gem}-#{ver}.gemspec" ]
183
185
 
184
- cond = "if [ ! -e #{specs[0]} -a ! -e #{specs[1]} ]; then"
185
- shopts = { close: 'fi' }
186
+ shopts = {}
186
187
  case opts[ :user_install ]
187
188
  when String
188
189
  shopts[ :user ] = opts[ :user_install ]
@@ -190,7 +191,7 @@ module SyncWrap
190
191
  shopts[ :user ] = :root
191
192
  end
192
193
 
193
- sh( cond, shopts ) do
194
+ sh_if( "[ ! -e #{specs[0]} -a ! -e #{specs[1]} ]", shopts ) do
194
195
  super
195
196
  end
196
197
  else
@@ -93,7 +93,7 @@ module SyncWrap
93
93
  else
94
94
  dist_install( "lvm2", minimal: true )
95
95
  end
96
- sudo( "if ! lvs /dev/#{vg}/#{lv_cache}; then", close: "fi" ) do
96
+ sudo_if( "! lvs /dev/#{vg}/#{lv_cache}" ) do
97
97
  unmount_device( raw_device )
98
98
  sudo <<-SH
99
99
  vgextend #{vgextend_flags.join ' '} #{vg} #{raw_device}
@@ -120,9 +120,7 @@ module SyncWrap
120
120
 
121
121
  paths = lvm_volumes.map { |r| r[1] }
122
122
  test = paths.map { |p| "! -e #{p}" }.join( " -a " )
123
-
124
- sudo( "if [ #{test} ]; then", close: "fi" ) do
125
-
123
+ sudo_if( "[ #{test} ]" ) do
126
124
  dist_install( "mdadm", "lvm2", minimal: true )
127
125
 
128
126
  raw_devices.each do |d|
@@ -138,7 +136,6 @@ module SyncWrap
138
136
  end
139
137
 
140
138
  create_volumes( dev )
141
-
142
139
  end
143
140
  end
144
141
 
@@ -319,7 +319,7 @@ module SyncWrap
319
319
  changes = rput( 'etc/sysconfig/pgsql/postgresql', user: :root )
320
320
  end
321
321
 
322
- sudo( "if [ ! -d '#{pg_data_dir}/base' ]; then", close: "fi" ) do
322
+ sudo_if( "[ ! -d '#{pg_data_dir}/base' ]" ) do
323
323
  sudo <<-SH
324
324
  mkdir -p #{pg_data_dir}
325
325
  chown postgres:postgres #{pg_data_dir}
@@ -20,27 +20,40 @@ module SyncWrap
20
20
 
21
21
  # Provision for the rake rubygem and its (j)rake command
22
22
  #
23
- # Host component dependencies: <Ruby>
23
+ # Host component dependencies: RunUser?, <ruby>
24
24
  #
25
25
  class RakeGem < Component
26
26
 
27
- # Rake version to install (Default: 10.3.2)
27
+ # Rake version to install (Default: 12.1.0)
28
28
  attr_accessor :rake_version
29
29
 
30
- def initialize( opts = {} )
31
- @rake_version = '10.3.2'
32
- super
30
+ protected
31
+
32
+ # Perform a user_install as the run_user? (Default: false)
33
+ attr_writer :user_install
34
+
35
+ def user_install?
36
+ @user_install
33
37
  end
34
38
 
39
+ public
40
+
35
41
  def rake_command
36
42
  ( ruby_command == 'jruby' ) ? 'jrake' : 'rake'
37
43
  end
38
44
 
45
+ def initialize( opts = {} )
46
+ @rake_version = '12.1.0'
47
+ @user_install = false
48
+ super
49
+ end
50
+
39
51
  def install
40
- opts = { version: rake_version }
52
+ opts = { version: rake_version, user_install: user_install? && run_user }
41
53
  opts[ :format_executable ] = true unless rake_command == 'rake'
42
54
  gem_install( 'rake', opts )
43
55
  end
44
56
 
45
57
  end
58
+
46
59
  end
@@ -125,8 +125,7 @@ module SyncWrap
125
125
  if chk
126
126
  pkgs = Array( pkgs )
127
127
  cnt = "rpm -q #{pkgs.join ' '} | grep -cv 'not installed'"
128
- cond = %Q{if [ "$(#{cnt})" != "#{pkgs.count}" ]; then}
129
- sudo( cond, opts.merge( close: 'fi' ), &block )
128
+ sudo_if( %Q{[ "$(#{cnt})" != "#{pkgs.count}" ]}, opts, &block )
130
129
  else
131
130
  block.call
132
131
  end
@@ -63,7 +63,7 @@ module SyncWrap
63
63
 
64
64
  # Create run_user if not already present
65
65
  def create_run_user
66
- sudo( "if ! id #{run_user} >/dev/null 2>&1; then", close: "fi" ) do
66
+ sudo_if( "! id #{run_user} >/dev/null 2>&1" ) do
67
67
  user_opts = "-r -c 'Run User' -s /bin/bash"
68
68
  user_opts += " -d #{run_user_home}" if run_user_home
69
69
  if run_group && run_group != run_user
@@ -24,7 +24,7 @@ module SyncWrap
24
24
  #
25
25
  class TarpitGem < Component
26
26
 
27
- # Tarpit version to install (Default: 2.1.1)
27
+ # Tarpit version to install (Default: 2.1.2)
28
28
  attr_accessor :tarpit_version
29
29
 
30
30
  protected
@@ -39,7 +39,7 @@ module SyncWrap
39
39
  public
40
40
 
41
41
  def initialize( opts = {} )
42
- @tarpit_version = '2.1.1'
42
+ @tarpit_version = '2.1.2'
43
43
  @user_install = false
44
44
  super
45
45
  end
@@ -0,0 +1,107 @@
1
+ #--
2
+ # Copyright (c) 2011-2017 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
+ require 'time'
18
+ require 'term/ansicolor'
19
+
20
+ require 'syncwrap/component'
21
+
22
+ module SyncWrap
23
+
24
+ # Component for checking and comparing remote host times. This can
25
+ # be used to validate proper time keeping (e.g. via ntpd or similar)
26
+ # on multiple remote hosts by comparing with local time. Its also
27
+ # illustrative of syncwrap threading and synchronized output
28
+ # formatting.
29
+ #
30
+ # === Usage
31
+ #
32
+ # First you should add this component to some or all hosts:
33
+ #
34
+ # role( :all, TimeChecker.new )
35
+ #
36
+ # Then you run it via the command line:
37
+ #
38
+ # syncwrap TimeChecker.check
39
+ #
40
+ # You can also experiment with -v and -t flags if desired.
41
+ #
42
+ # Output is in the following form per host:
43
+ #
44
+ # host-name : start-delta <- HH:MM:SS.NNNNNNZ -> return-delta
45
+ #
46
+ # Where:
47
+ #
48
+ # * the captured and parsed remote time is shown in 'Z'ulu (UTC)
49
+ #
50
+ # * start-delta is the time difference between the local time, just
51
+ # before the remote command is started, and the remote time.
52
+ #
53
+ # * return-delta is the difference between the remote time and local
54
+ # time, just after the remote command has returned.
55
+ #
56
+ # If both local and remote hosts have well synchronized clocks, then
57
+ # both these differences should be positive, but small negative
58
+ # values for return-delta are common, in the range of the clock
59
+ # skew. Negative values are formatted in red when output is
60
+ # colorized.
61
+ #
62
+ # Host component dependencies: none
63
+ class TimeChecker < Component
64
+ include Term::ANSIColor
65
+
66
+ FORMAT = "%-24s: %s%9.6fs%s <- %s -> %s%9.6fs%s\n".freeze
67
+
68
+ def check
69
+ lnow1 = Time.now.utc
70
+ rc, out = capture( 'date --rfc-3339=ns' )
71
+ if rc == 0
72
+ lnow2 = Time.now.utc
73
+ rnow = Time.parse( out ).utc
74
+ d1 = rnow - lnow1
75
+ d2 = lnow2 - rnow
76
+ formatter.sync do
77
+ c = formatter.io
78
+ c << FORMAT % [ host.name,
79
+ d1 < 0.0 ? red? : green?, d1, clear?,
80
+ rnow.strftime( '%H:%M:%S.%6NZ' ),
81
+ d2 < 0.0 ? red? : green?, d2, clear? ]
82
+ c.flush
83
+ end
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def formatter
90
+ @formatter ||= host.space.formatter
91
+ end
92
+
93
+ def green?
94
+ formatter.colorize ? green : ""
95
+ end
96
+
97
+ def red?
98
+ formatter.colorize ? red : ""
99
+ end
100
+
101
+ def clear?
102
+ formatter.colorize ? clear : ""
103
+ end
104
+
105
+ end
106
+
107
+ end
@@ -18,8 +18,8 @@ module SyncWrap
18
18
 
19
19
  # Support module for components which install SystemD
20
20
  # services. Provide unit file installation with `systemctl` calls,
21
- # and also provides standard #start, #restart, #stop, and #status
22
- # commands for use in the CLI.
21
+ # and also provides standard #enable, #start, #status, #restart,
22
+ # #stop, and #disable commands for use in the CLI.
23
23
  #
24
24
  # Host component dependencies: <Distro>
25
25
  module SystemDService
@@ -105,6 +105,18 @@ module SyncWrap
105
105
  systemctl( 'stop', *systemd_units )
106
106
  end
107
107
 
108
+ # Disable all #systemd_units.
109
+ def disable
110
+ require_systemd_service!
111
+ systemctl( 'disable', *systemd_units )
112
+ end
113
+
114
+ # Enable all #systemd_units.
115
+ def enable
116
+ require_systemd_service!
117
+ systemctl( 'enable', *systemd_units )
118
+ end
119
+
108
120
  # Output status of #systemd_units (useful via CLI with --verbose).
109
121
  # Exit codes 0-3 are accepted from `systemctl`, since these will
110
122
  # be returned in normal operational contexts, for example, when
data/lib/syncwrap.rb CHANGED
@@ -417,6 +417,7 @@ module SyncWrap
417
417
  autoload :RunUser, 'syncwrap/components/run_user'
418
418
  autoload :SourceTree, 'syncwrap/components/source_tree'
419
419
  autoload :TarpitGem, 'syncwrap/components/tarpit_gem'
420
+ autoload :TimeChecker, 'syncwrap/components/time_checker'
420
421
  autoload :Ubuntu, 'syncwrap/components/ubuntu'
421
422
  autoload :Users, 'syncwrap/components/users'
422
423
 
metadata CHANGED
@@ -1,43 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syncwrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.1
4
+ version: 2.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Kellum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-04 00:00:00.000000000 Z
11
+ date: 2017-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.2.2
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.5'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 1.2.2
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.5'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: tins
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: 0.13.2
39
+ version: 1.6.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.14'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
- - - "~>"
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.6.0
50
+ - - "<"
39
51
  - !ruby/object:Gem::Version
40
- version: 0.13.2
52
+ version: '1.14'
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: aws-sdk
43
55
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +73,7 @@ dependencies:
61
73
  version: 1.7.1
62
74
  - - "<"
63
75
  - !ruby/object:Gem::Version
64
- version: '1.9'
76
+ version: '2.2'
65
77
  type: :runtime
66
78
  prerelease: false
67
79
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +83,7 @@ dependencies:
71
83
  version: 1.7.1
72
84
  - - "<"
73
85
  - !ruby/object:Gem::Version
74
- version: '1.9'
86
+ version: '2.2'
75
87
  - !ruby/object:Gem::Dependency
76
88
  name: nokogiri
77
89
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +93,7 @@ dependencies:
81
93
  version: 1.5.9
82
94
  - - "<"
83
95
  - !ruby/object:Gem::Version
84
- version: '1.7'
96
+ version: '1.9'
85
97
  type: :runtime
86
98
  prerelease: false
87
99
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +103,7 @@ dependencies:
91
103
  version: 1.5.9
92
104
  - - "<"
93
105
  - !ruby/object:Gem::Version
94
- version: '1.7'
106
+ version: '1.9'
95
107
  - !ruby/object:Gem::Dependency
96
108
  name: minitest
97
109
  requirement: !ruby/object:Gem::Requirement
@@ -200,6 +212,7 @@ files:
200
212
  - lib/syncwrap/components/run_user.rb
201
213
  - lib/syncwrap/components/source_tree.rb
202
214
  - lib/syncwrap/components/tarpit_gem.rb
215
+ - lib/syncwrap/components/time_checker.rb
203
216
  - lib/syncwrap/components/ubuntu.rb
204
217
  - lib/syncwrap/components/users.rb
205
218
  - lib/syncwrap/context.rb
@@ -285,7 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
285
298
  version: '0'
286
299
  requirements: []
287
300
  rubyforge_project:
288
- rubygems_version: 2.6.10
301
+ rubygems_version: 2.5.2.1
289
302
  signing_key:
290
303
  specification_version: 4
291
304
  summary: A rather direct provisioning and deployment system in ruby, bash over ssh,