orca 0.3.2 → 0.3.3

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- orca (0.3.2)
4
+ orca (0.3.3)
5
5
  colored
6
6
  net-sftp
7
7
  net-ssh
data/lib/orca.rb CHANGED
@@ -38,6 +38,7 @@ module Orca
38
38
  end
39
39
  end
40
40
 
41
+ require_relative "./orca/logger"
41
42
  require_relative "./orca/package"
42
43
  require_relative "./orca/package_index"
43
44
  require_relative "./orca/node"
@@ -1,20 +1,32 @@
1
+ require "open3"
2
+
1
3
  class Orca::ExecutionContext
2
4
  attr_reader :node
3
5
 
4
- def initialize(node)
6
+ def initialize(node, log)
5
7
  @node = node
8
+ @log = log
9
+ @node.log_to(@log)
6
10
  end
7
11
 
8
12
  def apply(blk)
9
13
  instance_eval(&blk)
10
14
  end
11
15
 
16
+ def run_local(cmd)
17
+ @log.local(cmd)
18
+ stdout, stderr, status = Open3.capture3(cmd)
19
+ @log.stdout(stdout)
20
+ @log.stderr(stderr)
21
+ end
22
+
12
23
  def run(cmd, opts={})
13
24
  @node.execute(cmd, opts)
14
25
  end
15
26
 
16
- def log(msg)
17
- @node.log('log', msg)
27
+ def log(msg=nil)
28
+ @log.log(msg) if msg
29
+ @log
18
30
  end
19
31
 
20
32
  def sudo(cmd, opts={})
@@ -74,32 +86,32 @@ end
74
86
 
75
87
  class Orca::MockExecutionContext < Orca::ExecutionContext
76
88
  def run(cmd)
77
- @node.log 'mock-execute', cmd
89
+ @log.mock_execute(cmd)
78
90
  ''
79
91
  end
80
92
 
81
93
  def sudo(cmd)
82
- @node.log 'mock-execute', "sudo #{cmd}"
94
+ @log.mock_execute "sudo #{cmd}"
83
95
  ''
84
96
  end
85
97
 
86
98
  def upload(from, to)
87
- @node.log('mock-sftp', "UPLOAD: #{from} => #{to}")
99
+ @log.mock_execute("UPLOAD: #{from} => #{to}")
88
100
  end
89
101
 
90
102
  def download(from, to)
91
- @node.log('mock-sftp', "DOWLOAD: #{from} => #{to}")
103
+ @log.mock_execute("DOWLOAD: #{from} => #{to}")
92
104
  end
93
105
 
94
106
  def remove(path)
95
- @node.log('mock-sftp', "REMOVE: #{path}")
107
+ @log.mock_execute("REMOVE: #{path}")
96
108
  end
97
109
 
98
110
  def stat(path)
99
- @node.log('mock-sftp', "STAT: #{path}")
111
+ @log.mock_execute("STAT: #{path}")
100
112
  end
101
113
 
102
114
  def setstat(path, opts)
103
- @node.log('mock-sftp', "SET: #{path} - #{opts.inspect}")
115
+ @log.mock_execute("SET: #{path} - #{opts.inspect}")
104
116
  end
105
117
  end
@@ -37,10 +37,11 @@ Orca.extension :apt do
37
37
 
38
38
  action 'ppa' do |repo|
39
39
  sudo "DEBIAN_FRONTEND=noninteractive add-apt-repository #{repo} -y"
40
+ trigger 'apt:update', true
40
41
  end
41
42
 
42
- action 'update' do
43
- sudo "DEBIAN_FRONTEND=noninteractive apt-get update -y -qq"
43
+ action 'update' do |force=false|
44
+ sudo "DEBIAN_FRONTEND=noninteractive apt-get update -y -qq", {:once => !force}
44
45
  end
45
46
 
46
47
  action 'exists' do |package_name, required_version=nil|
@@ -0,0 +1,53 @@
1
+ class Orca::Logger
2
+ def initialize(node, package)
3
+ @node = node
4
+ @package = package
5
+ end
6
+
7
+ def set_package(package)
8
+ @package = package
9
+ end
10
+
11
+ def command(msg)
12
+ say(msg, :yellow)
13
+ end
14
+
15
+ def local(cmd)
16
+ say(cmd, :cyan)
17
+ end
18
+
19
+ def execute(cmd)
20
+ say(cmd, :cyan)
21
+ end
22
+
23
+ def mock_execute(cmd)
24
+ execute(cmd)
25
+ end
26
+
27
+ def cached(cmd)
28
+ execute(cmd)
29
+ end
30
+
31
+ def sftp(cmd)
32
+ execute(cmd)
33
+ end
34
+
35
+ def log(msg)
36
+ say(msg)
37
+ end
38
+
39
+ def stdout(msg, force=false)
40
+ say(msg, :green) if force || Orca.verbose
41
+ end
42
+
43
+ def stderr(msg, force=false)
44
+ say(msg, :red) if force || Orca.verbose
45
+ end
46
+
47
+ def say(msg, color=nil)
48
+ msg.to_s.split("\n").each do |line|
49
+ out = color ? line.send(color) : line
50
+ Thread.exclusive { puts "#{@node.to_s} [#{@package.name.bold}] #{out}" }
51
+ end
52
+ end
53
+ end
data/lib/orca/node.rb CHANGED
@@ -20,6 +20,7 @@ class Orca::Node
20
20
  @host = host
21
21
  @options = options
22
22
  @connection = nil
23
+ @history = []
23
24
  Orca::Node.register(self)
24
25
  end
25
26
 
@@ -32,17 +33,17 @@ class Orca::Node
32
33
  end
33
34
 
34
35
  def upload(from, to)
35
- log('sftp', "UPLOAD: #{from} => #{to}")
36
+ log.sftp("UPLOAD: #{from} => #{to}")
36
37
  sftp.upload!(from, to)
37
38
  end
38
39
 
39
40
  def download(from, to)
40
- log('sftp', "DOWLOAD: #{from} => #{to}")
41
+ log.sftp("DOWLOAD: #{from} => #{to}")
41
42
  sftp.download!(from, to)
42
43
  end
43
44
 
44
45
  def remove(path)
45
- log('sftp', "REMOVE: #{path}")
46
+ log.sftp("REMOVE: #{path}")
46
47
  begin
47
48
  sftp.remove!(path)
48
49
  rescue Net::SFTP::StatusException
@@ -51,12 +52,12 @@ class Orca::Node
51
52
  end
52
53
 
53
54
  def stat(path)
54
- log('sftp', "STAT: #{path}")
55
+ log.sftp("STAT: #{path}")
55
56
  sftp.stat!(path)
56
57
  end
57
58
 
58
59
  def setstat(path, opts)
59
- log('sftp', "SET: #{path} - #{opts.inspect}")
60
+ log.sftp("SET: #{path} - #{opts.inspect}")
60
61
  sftp.setstat!(path, opts)
61
62
  end
62
63
 
@@ -65,25 +66,23 @@ class Orca::Node
65
66
  end
66
67
 
67
68
  def execute(cmd, opts={})
68
- log('execute', cmd.cyan)
69
- output = ""
70
- connection.exec! cmd do |channel, stream, data|
71
- output += data if stream == :stdout
72
- data.split("\n").each do |line|
73
- msg = stream == :stdout ? line.green : line.red
74
- log(stream, msg) if opts[:log] || Orca.verbose
75
- end
69
+ if should_execute?(cmd, opts)
70
+ really_execute(cmd, opts)
71
+ else
72
+ cached_execute(cmd, opts)
76
73
  end
77
- output
78
74
  end
79
75
 
80
76
  def sudo(cmd, opts={})
81
77
  execute("sudo #{cmd}", opts)
82
78
  end
83
79
 
84
- def log(context, msg)
85
- Thread.exclusive { puts "#{self.to_s} [#{context.to_s.bold}] #{msg}" }
86
- msg
80
+ def log
81
+ @log
82
+ end
83
+
84
+ def log_to(log)
85
+ @log = log
87
86
  end
88
87
 
89
88
  def connection
@@ -108,4 +107,33 @@ class Orca::Node
108
107
  hsh
109
108
  end
110
109
  end
110
+
111
+ def cached_execute(cmd, opts={})
112
+ log.cached(cmd)
113
+ last_output(cmd)
114
+ end
115
+
116
+ def really_execute(cmd, opts={})
117
+ log.execute(cmd.cyan)
118
+ output = ""
119
+ connection.exec! cmd do |channel, stream, data|
120
+ output += data if stream == :stdout
121
+ data.split("\n").each do |line|
122
+ log.send(stream, line, opts[:log])
123
+ end
124
+ end
125
+ @history << {cmd:cmd, output:output}
126
+ output
127
+ end
128
+
129
+ def should_execute?(cmd, opts)
130
+ return true unless opts[:once]
131
+ last_output(cmd).nil?
132
+ end
133
+
134
+ def last_output(cmd)
135
+ results = @history.select {|h| h[:cmd] == cmd }
136
+ return nil unless results && results.size > 0
137
+ results.last[:output]
138
+ end
111
139
  end
data/lib/orca/runner.rb CHANGED
@@ -4,6 +4,7 @@ class Orca::Runner
4
4
  @package = package
5
5
  @perform = true
6
6
  @skip_dependancies = skip_dependancies
7
+ @log = Orca::Logger.new(@node, package)
7
8
  end
8
9
 
9
10
  def packages
@@ -14,7 +15,7 @@ class Orca::Runner
14
15
  end
15
16
 
16
17
  def execute(command_name)
17
- @node.log command_name, packages.map(&:name).join(', ').yellow
18
+ @log.say packages.map(&:name).join(', ').yellow
18
19
  packages.each do |pkg|
19
20
  send(:"execute_#{command_name}", pkg)
20
21
  end
@@ -64,8 +65,9 @@ class Orca::Runner
64
65
  end
65
66
 
66
67
  def exec(pkg, command_name)
67
- @node.log pkg.name, command_name.to_s.yellow
68
- context = @perform ? Orca::ExecutionContext.new(@node) : Orca::MockExecutionContext.new(@node)
68
+ @log.set_package(pkg)
69
+ @log.command(command_name)
70
+ context = @perform ? Orca::ExecutionContext.new(@node, @log) : Orca::MockExecutionContext.new(@node, @log)
69
71
  cmds = pkg.command(command_name)
70
72
  cmds.map {|cmd| context.apply(cmd) }
71
73
  end
data/orca.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
11
11
  gem.name = "orca"
12
12
  gem.require_paths = ["lib"]
13
- gem.version = '0.3.2'
13
+ gem.version = '0.3.3'
14
14
  gem.add_dependency('colored')
15
15
  gem.add_dependency('net-ssh')
16
16
  gem.add_dependency('net-sftp')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-27 00:00:00.000000000 Z
12
+ date: 2013-06-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colored
@@ -100,6 +100,7 @@ files:
100
100
  - lib/orca/extensions/file_sync.rb
101
101
  - lib/orca/group.rb
102
102
  - lib/orca/local_file.rb
103
+ - lib/orca/logger.rb
103
104
  - lib/orca/node.rb
104
105
  - lib/orca/package.rb
105
106
  - lib/orca/package_index.rb
@@ -132,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
133
  version: '0'
133
134
  segments:
134
135
  - 0
135
- hash: -77465203265155118
136
+ hash: -3898811184980038862
136
137
  required_rubygems_version: !ruby/object:Gem::Requirement
137
138
  none: false
138
139
  requirements:
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
142
  version: '0'
142
143
  segments:
143
144
  - 0
144
- hash: -77465203265155118
145
+ hash: -3898811184980038862
145
146
  requirements: []
146
147
  rubyforge_project:
147
148
  rubygems_version: 1.8.23