sshkit-custom-dsl 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab9dd14dc306c8e3f18d81ca8385ed115842edbe
4
- data.tar.gz: 6526ba1775b63d8b6d87243033bd3b5895e8aee9
3
+ metadata.gz: bd78c52e9066b2a20a58ec0a15a582c18421d2bb
4
+ data.tar.gz: 676a5a5944f1eb99a1d6af444301602d83bae625
5
5
  SHA512:
6
- metadata.gz: dcb0c1732f808742b14f7d4ae62e2ac22ed47a0d27dca66e3e6e937530261f110529867796bc954abf51631ecb0892a33bce960ce8979753fcd42dd61670e765
7
- data.tar.gz: ef35b8bd4836fa29ead1faec46b58245b756cdc979ad61754b1c07726ef6df0f63bcf412fe0fcf98ddd49bc046c00f985a49dadd483fdf21efda27227bbe133c
6
+ metadata.gz: 6494485ae41a1c46ddeac63acd849df3992abb06c7a577c6cf173be699af18754498ca17efab7cab609eff7f2e6314c1f0741a02643de64138e6a9e17eb50aea
7
+ data.tar.gz: 23fdd8841b78db4226f7ebe7985b1c9005e9469c4ea8faf684a3aa5dcc9358eb1708b3887e1cf95936c478bf38afb7d8d3b5e2502665605b3310b69ec3aac020
@@ -11,12 +11,20 @@ module SSHKit
11
11
  self.class.active_backend=new_backend
12
12
  end
13
13
 
14
+ def self.scope_storage
15
+ ScopedStorage::ThreadLocalStorage
16
+ end
17
+
18
+ def self.scope
19
+ @scope ||= ScopedStorage::Scope.new('sshkit_runner', scope_storage)
20
+ end
21
+
14
22
  def self.active_backend
15
- Thread.current[:active_backend]
23
+ scope[:active_backend]
16
24
  end
17
25
 
18
26
  def self.active_backend=(new_backend)
19
- Thread.current[:active_backend]=new_backend
27
+ scope[:active_backend]=new_backend
20
28
  end
21
29
 
22
30
  def send_cmd(cmd, *args, &block)
@@ -4,12 +4,12 @@ module SSHKit
4
4
  class Group < Sequential
5
5
  attr_writer :group_size
6
6
 
7
- def do_it( &block)
7
+ def apply_block_to_bcks( &block)
8
8
  backends.each_slice(group_size).collect do |group_backends|
9
9
 
10
10
  Parallel.new(nil, nil).tap do |runner|
11
11
  runner.backends = group_backends
12
- runner.do_it(&block)
12
+ runner.apply_block_to_bcks(&block)
13
13
  end
14
14
 
15
15
  sleep wait_interval
@@ -3,7 +3,7 @@ module SSHKit
3
3
 
4
4
  class Parallel < Abstract
5
5
 
6
- def do_it( &block)
6
+ def apply_block_to_bcks( &block)
7
7
  threads = []
8
8
  backends.each do |host|
9
9
  threads << Thread.new(host) do |h|
@@ -1,7 +1,7 @@
1
1
  module SSHKit
2
2
  module Runner
3
3
  class Sequential < Abstract
4
- def do_it( &block)
4
+ def apply_block_to_bcks( &block)
5
5
  backends.each do |backend|
6
6
  begin
7
7
 
@@ -1,24 +1,31 @@
1
1
  module SSHKit
2
2
  module Custom
3
- module DSL
4
- module ConfigStore
3
+ module Config
4
+ module Store
5
5
 
6
6
  module_function
7
-
8
- def runner_opts=(opts)
9
- @runner = nil
10
- @runner_opts = { in: :parallel }.merge(opts)
11
- end
12
7
 
13
- def runner
14
- @runner ||= case @runner_opts[:in]
8
+ def scope_storage
9
+ ScopedStorage::ThreadLocalStorage
10
+ end
11
+
12
+ def config_scope
13
+ @config_scope ||= ScopedStorage::Scope.new('sshkit_dsl_config', scope_storage)
14
+ end
15
+
16
+ def create_runner(opts)
17
+ opts_with_defaults = { in: :parallel }.merge(opts)
18
+
19
+ @runner ||= case opts_with_defaults[:in]
15
20
  when :parallel then SSHKit::Runner::Parallel
16
21
  when :sequence then SSHKit::Runner::Sequential
17
22
  when :groups then SSHKit::Runner::Group
18
23
  else
19
- raise RuntimeError, "Don't know how to handle run style #{@runner_opts[:in].inspect}"
20
- end.new(nil, @runner_opts)
24
+ raise RuntimeError, "Don't know how to handle run style #{opts_with_defaults[:in].inspect}"
25
+ end.new(nil, opts_with_defaults)
26
+ end
21
27
 
28
+ def runner
22
29
  @runner.tap{|r| r.backends = backends}
23
30
  end
24
31
 
@@ -31,22 +38,22 @@ module SSHKit
31
38
  end
32
39
 
33
40
  def add_pwd(directory)
34
- backend.pwd ||= []; backend.pwd << directory
41
+ active_backend.pwd ||= []; active_backend.pwd << directory
35
42
  end
36
43
 
37
44
  def pop_pwd
38
- backend.pwd ||= []; backend.pwd.pop
45
+ active_backend.pwd ||= []; active_backend.pwd.pop
39
46
  end
40
47
 
41
48
  def _envs
42
- Thread.current[:_envs] ||= []
49
+ config_scope[:_envs] ||= []
43
50
  end
44
51
 
45
52
  def add_env(env)
46
53
  old_env = backends.first.env.clone
47
54
  _envs << old_env
48
55
  env = old_env.merge(env)
49
- backend.env = env
56
+ active_backend.env = env
50
57
  end
51
58
 
52
59
  def pop_env
@@ -55,20 +62,22 @@ module SSHKit
55
62
  end
56
63
 
57
64
  def _user_groups
58
- Thread.current[:_user_groups] ||= []
65
+ config_scope[:_user_groups] ||= []
59
66
  end
60
67
 
61
68
  def add_user_group(user, group)
62
- _user_groups << {user: backend.user, group: backend.group }
63
- backend.user = user; backend.group = group
69
+ _user_groups << {user: active_backend.user, group: active_backend.group }
70
+ active_backend.user = user
71
+ active_backend.group = group
64
72
  end
65
73
 
66
74
  def pop_user_group
67
75
  old_user_group = _user_groups.pop || {}
68
- backend.user = old_user_group[:user]; backend.group = old_user_group[:group]
76
+ active_backend.user = old_user_group[:user]
77
+ active_backend.group = old_user_group[:group]
69
78
  end
70
79
 
71
- def backend
80
+ def active_backend
72
81
  SSHKit::Runner::Abstract.active_backend
73
82
  end
74
83
  end
@@ -1,16 +1,17 @@
1
1
  require 'sshkit/custom/dsl/version'
2
2
  require 'core_ext/sshkit'
3
+ require 'scoped_storage'
3
4
 
4
- require 'sshkit/custom/dsl/config_store'
5
- require 'sshkit/custom/dsl/configuration'
6
- require 'sshkit/custom/dsl/execution'
5
+ require 'sshkit/custom/config/store'
6
+ require 'sshkit/custom/dsl/config_statements'
7
+ require 'sshkit/custom/dsl/exec_statements'
7
8
  require 'sshkit/custom/dsl/helper'
8
9
 
9
10
  module SSHKit
10
11
  module Custom
11
12
  module DSL
12
- include Configuration
13
- include Execution
13
+ include ConfigStatements
14
+ include ExecStatements
14
15
  include Helper
15
16
  end
16
17
  end
@@ -0,0 +1,55 @@
1
+ module SSHKit
2
+ module Custom
3
+ module DSL
4
+ module ConfigStatements
5
+
6
+ def on(hosts, options={}, &block)
7
+ hosts = Array(hosts).map { |rh| Host(rh) }.uniq
8
+
9
+ _config_store.backends = hosts
10
+ _config_store.create_runner options
11
+
12
+ _config_store.runner.apply_block_to_bcks(&block) if block_given?
13
+ end
14
+
15
+ def within(directory)
16
+ _guard_dir!(File.join(_config_store.active_backend.pwd + [directory]))
17
+
18
+ _config_store.add_pwd directory
19
+
20
+ yield if block_given?
21
+ ensure
22
+ _config_store.pop_pwd
23
+ end
24
+
25
+ def with(environment)
26
+ _config_store.add_env environment
27
+ yield if block_given?
28
+ ensure
29
+ _config_store.pop_env
30
+ end
31
+
32
+ def as(who)
33
+
34
+ if who.respond_to? :fetch
35
+ user = who.fetch(:user, who.fetch("user"))
36
+ group = who.fetch(:group, who.fetch("group", nil))
37
+ else
38
+ user = who
39
+ group = nil
40
+ end
41
+
42
+ _guard_sudo_user!(user)
43
+ _guard_sudo_group!(user, group)
44
+
45
+ _config_store.add_user_group user, group
46
+
47
+ yield if block_given?
48
+ ensure
49
+ _config_store.pop_user_group
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,43 @@
1
+ module SSHKit
2
+ module Custom
3
+ module DSL
4
+ module ExecStatements
5
+
6
+
7
+ [:execute, :make, :rake, :test, :capture, :upload!, :download!].each do |method|
8
+ define_method method do |*args, &block|
9
+ _config_store.runner.send_cmd method, *args, &block
10
+ end
11
+ end
12
+
13
+ def _guard_sudo_user!(user)
14
+ execute <<-EOTEST, verbosity: Logger::DEBUG
15
+ if ! sudo -u #{user} whoami > /dev/null
16
+ then echo "You cannot switch to user '#{user}' using sudo, please check the sudoers file" 1>&2
17
+ false
18
+ fi
19
+ EOTEST
20
+ end
21
+
22
+ def _guard_sudo_group!(user, group)
23
+ execute <<-EOTEST, verbosity: Logger::DEBUG if group
24
+ if ! sudo -u #{user} -g #{group} whoami > /dev/null
25
+ then echo "You cannot switch to group '#{group}' using sudo, please check the sudoers file" 1>&2
26
+ false
27
+ fi
28
+ EOTEST
29
+ end
30
+
31
+ def _guard_dir!(dir_to_check)
32
+ execute <<-EOTEST, verbosity: Logger::DEBUG
33
+ if test ! -d #{dir_to_check}
34
+ then echo "Directory does not exist '#{dir_to_check}'" 1>&2
35
+ false
36
+ fi
37
+ EOTEST
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
@@ -17,6 +17,18 @@ module SSHKit
17
17
  end
18
18
  end
19
19
 
20
+ def Host(rh)
21
+ if rh.is_a?(SSHKit::Host)
22
+ rh
23
+ else
24
+ SSHKit::Host.new(rh)
25
+ end
26
+ end
27
+
28
+ def _config_store
29
+ @_config_store ||= SSHKit::Custom::Config::Store
30
+ end
31
+
20
32
  end
21
33
  end
22
34
  end
@@ -1,7 +1,7 @@
1
1
  module SSHKit
2
2
  module Custom
3
3
  module DSL
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
6
6
  end
7
7
  end
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency 'sshkit', '~> 1.5.1'
22
+ spec.add_dependency 'scoped_storage'
22
23
 
23
24
  spec.add_development_dependency "bundler"
24
25
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sshkit-custom-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dieter Späth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-04 00:00:00.000000000 Z
11
+ date: 2014-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sshkit
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.5.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: scoped_storage
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -147,10 +161,10 @@ files:
147
161
  - lib/core_ext/sshkit/runner/group.rb
148
162
  - lib/core_ext/sshkit/runner/parallel.rb
149
163
  - lib/core_ext/sshkit/runner/sequential.rb
164
+ - lib/sshkit/custom/config/store.rb
150
165
  - lib/sshkit/custom/dsl.rb
151
- - lib/sshkit/custom/dsl/config_store.rb
152
- - lib/sshkit/custom/dsl/configuration.rb
153
- - lib/sshkit/custom/dsl/execution.rb
166
+ - lib/sshkit/custom/dsl/config_statements.rb
167
+ - lib/sshkit/custom/dsl/exec_statements.rb
154
168
  - lib/sshkit/custom/dsl/helper.rb
155
169
  - lib/sshkit/custom/dsl/version.rb
156
170
  - spec/acceptance/.gitkeep
@@ -1,75 +0,0 @@
1
- module SSHKit
2
- module Custom
3
- module DSL
4
- module Configuration
5
-
6
- def config_store
7
- @config_store ||= SSHKit::Custom::DSL::ConfigStore
8
- end
9
-
10
- def on(hosts, options={}, &block)
11
- hosts = Array(hosts).map { |rh| rh.is_a?(SSHKit::Host) ? rh : SSHKit::Host.new(rh) }.uniq
12
- config_store.backends = hosts
13
- config_store.runner_opts = options
14
- config_store.runner.do_it(&block) if block_given?
15
- end
16
-
17
- def within(directory)
18
-
19
- dir_to_check = File.join(config_store.backend.pwd + [directory])
20
-
21
- execute <<-EOTEST, verbosity: Logger::DEBUG
22
- if test ! -d #{dir_to_check}
23
- then echo "Directory does not exist '#{dir_to_check}'" 1>&2
24
- false
25
- fi
26
- EOTEST
27
-
28
- config_store.add_pwd directory
29
-
30
- yield if block_given?
31
- ensure
32
- config_store.pop_pwd
33
- end
34
-
35
- def with(environment)
36
- config_store.add_env environment
37
- yield if block_given?
38
- ensure
39
- config_store.pop_env
40
- end
41
-
42
- def as(who)
43
- if who.is_a? Hash
44
- user = who[:user] || who["user"]
45
- group = who[:group] || who["group"]
46
- else
47
- user = who
48
- group = nil
49
- end
50
-
51
- execute <<-EOTEST, verbosity: Logger::DEBUG
52
- if ! sudo -u #{user} whoami > /dev/null
53
- then echo "You cannot switch to user '#{user}' using sudo, please check the sudoers file" 1>&2
54
- false
55
- fi
56
- EOTEST
57
-
58
- execute <<-EOTEST, verbosity: Logger::DEBUG if group
59
- if ! sudo -u #{user} -g #{group} whoami > /dev/null
60
- then echo "You cannot switch to group '#{group}' using sudo, please check the sudoers file" 1>&2
61
- false
62
- fi
63
- EOTEST
64
-
65
- config_store.add_user_group user, group
66
-
67
- yield if block_given?
68
- ensure
69
- config_store.pop_user_group
70
- end
71
-
72
- end
73
- end
74
- end
75
- end
@@ -1,16 +0,0 @@
1
- module SSHKit
2
- module Custom
3
- module DSL
4
- module Execution
5
-
6
-
7
- [:execute, :make, :rake, :test, :capture, :upload!, :download!].each do |method|
8
- define_method method do |*args, &block|
9
- config_store.runner.send_cmd method, *args, &block
10
- end
11
- end
12
-
13
- end
14
- end
15
- end
16
- end