larrow-runner 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,11 @@
1
1
  module Larrow::Runner
2
2
  module Model
3
3
  class App
4
-
4
+ include Service
5
5
  attr_accessor :vcs, :node, :configuration
6
6
  def initialize vcs, attributes={}
7
7
  self.vcs = vcs
8
- self.configuration = vcs.configuration
8
+ self.configuration = Manifest.configuration vcs
9
9
  self.assign attributes unless attributes.empty?
10
10
  end
11
11
 
@@ -29,7 +29,7 @@ module Larrow::Runner
29
29
  RunLogger.title 'allocate resource'
30
30
  begin_at = Time.new
31
31
  option = {image_id: configuration.image}
32
- self.node = Node.new(*Cloud.create(option).first)
32
+ self.node = Node.new(*Session.cloud.create(option).first)
33
33
  during = sprintf('%.2f', Time.new - begin_at)
34
34
  RunLogger.level(1).detail "allocated(#{during}s)"
35
35
  end
@@ -37,7 +37,7 @@ module Larrow::Runner
37
37
  def build_image
38
38
  action :image
39
39
  node.stop
40
- new_image = Cloud.create_image node.instance.id
40
+ new_image = Session.cloud.create_image node.instance.id
41
41
  RunLogger.level(1).detail "New Image Id: #{new_image.id}"
42
42
  [
43
43
  "To reduce the system setup, you might want to change larrow.yml.",
@@ -1,73 +1,73 @@
1
+ require 'larrow/qingcloud'
1
2
  module Larrow::Runner
2
3
  module Model
3
- class Node
4
- include Larrow::Runner::Service
5
- include Larrow::Qingcloud
6
- attr_accessor :instance, :eip
7
- attr_accessor :user,:host
8
- def initialize instance, eip, user='root'
9
- self.instance = instance
10
- self.eip = eip
11
- self.host = eip.address
12
- self.user = user
13
- @executor = Executor.new host, user, nil, nil
14
- end
4
+ class Node
5
+ include Larrow::Runner::Service
6
+ include Larrow::Qingcloud
7
+ attr_accessor :instance, :eip
8
+ attr_accessor :user,:host
9
+ def initialize instance, eip, user='root'
10
+ self.instance = instance
11
+ self.eip = eip
12
+ self.host = eip.address
13
+ self.user = user
14
+ @executor = Executor.new host, user, nil, nil
15
+ end
15
16
 
16
- def execute command, base_dir:nil
17
- block = if block_given?
18
- -> (data) { yield data }
19
- else
20
- -> (data) {
21
- data.split(/\r?\n/).each do |msg|
22
- RunLogger.level(1).info msg
23
- end
24
- }
25
- end
26
- @executor.execute command, base_dir: base_dir, &block
27
- end
17
+ def execute command, base_dir:nil
18
+ block = if block_given?
19
+ -> (data) { yield data }
20
+ else
21
+ -> (data) {
22
+ data.split(/\r?\n/).each do |msg|
23
+ RunLogger.level(1).info msg
24
+ end
25
+ }
26
+ end
27
+ @executor.execute command, base_dir: base_dir, &block
28
+ end
28
29
 
29
- def stop
30
- self.instance = instance.stop
31
- end
30
+ def stop
31
+ self.instance = instance.stop
32
+ end
32
33
 
33
- def destroy
34
- instance.destroy.force
35
- eip.destroy.force
36
- self
37
- end
34
+ def destroy
35
+ Session.cloud.destroy instance,eip
36
+ self
37
+ end
38
38
 
39
- def dump
40
- {
41
- instance:{id: instance.id},
42
- eip:{id:eip.id, address:eip.address}
43
- }
44
- end
39
+ def dump
40
+ {
41
+ instance:{id: instance.id},
42
+ eip:{id:eip.id, address:eip.address}
43
+ }
44
+ end
45
45
 
46
- def self.show resources, level=0
47
- resources.map do |hash|
48
- node = load_obj hash
49
- RunLogger.level(level).info "instance: #{node.instance.id}"
50
- RunLogger.level(level).info "eip:"
51
- RunLogger.level(level+1).info "id: #{node.eip.id}"
52
- RunLogger.level(level+1).info "address: #{node.eip.address}"
46
+ def self.show resources, level=0
47
+ resources.map do |hash|
48
+ node = load_obj hash
49
+ RunLogger.level(level).detail "instance: #{node.instance.id}"
50
+ RunLogger.level(level).detail "eip:"
51
+ RunLogger.level(level+1).detail "id: #{node.eip.id}"
52
+ RunLogger.level(level+1).detail "address: #{node.eip.address}"
53
+ end
53
54
  end
54
- end
55
55
 
56
- def self.cleanup resources
57
- resources.map do |hash|
58
- node = load_obj hash
59
- future{node.destroy}
60
- end.map do |instance|
61
- RunLogger.detail "node cleaned: #{instance.address}"
56
+ def self.cleanup resources
57
+ resources.map do |hash|
58
+ node = load_obj hash
59
+ future{node.destroy}
60
+ end.map do |node|
61
+ RunLogger.info "node cleaned: #{node.eip.address}"
62
+ end
62
63
  end
63
- end
64
64
 
65
- def self.load_obj data
65
+ def self.load_obj data
66
66
  instance = Instance.new data[:instance][:id]
67
67
  eip = Eip.new data[:eip][:id],address:data[:eip][:address]
68
68
  new instance,eip
69
- end
69
+ end
70
70
 
71
- end
71
+ end
72
72
  end
73
73
  end
@@ -19,10 +19,10 @@ module Larrow
19
19
  def create image_id:nil,count:1
20
20
  RunLogger.level(1).detail "assign node"
21
21
  instances = Instance.create(image_id: image_id||'trustysrvx64c',
22
- count:count,
23
- login_mode:'keypair',
24
- keypair_id: @keypair_id
25
- )
22
+ count:count,
23
+ login_mode:'keypair',
24
+ keypair_id: @keypair_id
25
+ )
26
26
 
27
27
  eips = Eip.create(count:count)
28
28
 
@@ -42,8 +42,14 @@ module Larrow
42
42
  Image.list(:self, ids: [image_id]).size == 1
43
43
  end
44
44
 
45
+ # concurrent destroy(force)
46
+ def destroy *args
47
+ args.map(&:destroy).map(&:force)
48
+ end
49
+
45
50
  def check_available
46
51
  KeyPair.list
52
+ self
47
53
  rescue
48
54
  Qingcloud.remove_connection
49
55
  raise $!
@@ -16,9 +16,9 @@ module Larrow
16
16
  :keypair_id].
17
17
  reduce({}){|s,key| s.update key => value_for(key)}
18
18
 
19
- cloud = Service::Cloud.new data
19
+ tmp_cloud = Service::Cloud.new data
20
20
  begin
21
- cloud.check_available
21
+ tmp_cloud.check_available
22
22
  RunLogger.info "login success! write to ~/.larrow"
23
23
  break
24
24
  rescue Exception => e
@@ -30,15 +30,18 @@ module Larrow
30
30
  File.write FILE, YAML.dump(content)
31
31
  end
32
32
 
33
- def load_cloud
34
- args = begin
35
- YAML.
36
- load(File.read FILE).
37
- with_indifferent_access[:qingcloud]
38
- rescue
39
- nil
40
- end
41
- Service::Cloud.new args if args
33
+ def cloud
34
+ @cloud ||= begin
35
+ args = YAML.
36
+ load(File.read FILE).
37
+ with_indifferent_access[:qingcloud]
38
+ Service::Cloud.new(args).check_available
39
+ rescue
40
+ fail(InvalidConfigFile,
41
+ {file:FILE,
42
+ wiki:"setup-cloud-account"}
43
+ )
44
+ end
42
45
  end
43
46
 
44
47
  def value_for name
@@ -1,17 +1,19 @@
1
- module Larrow::Runner::Vcs
2
- class Base
3
- attr_accessor :larrow_file
4
- include Larrow::Runner
5
- def configuration merge=true
6
- configuration = Manifest.configuration(self)
7
- if merge
8
- Manifest.add_base_scripts configuration,self
1
+ module Larrow::Runner
2
+ module Vcs
3
+ class Base
4
+ attr_accessor :larrow_file
5
+
6
+ def get filename
7
+ raise 'not implement yet'
9
8
  end
10
- configuration
11
- end
12
9
 
13
- def formatted_url
14
- raise 'not implement yet'
10
+ def update_source node, target_dir
11
+ raise 'not implement yet'
12
+ end
13
+
14
+ def formatted_url
15
+ raise 'not implement yet'
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -1,48 +1,50 @@
1
1
  require 'faraday'
2
2
 
3
- module Larrow::Runner::Vcs
4
- class Github < Base
5
- URL_TEMPLATE='https://raw.githubusercontent.com/%s/%s/%s/%s'
6
- attr_accessor :organize, :name, :branch
7
- # url sample:
8
- # git@github.com:fsword/larrow-qingcloud.git
9
- # https://github.com/fsword/larrow-qingcloud.git
10
- def initialize url
11
- self.branch = 'master'
12
- case url
13
- when /git@github\.com:(.+)\/(.+)\.git/
14
- self.organize = $1
15
- self.name = $2
16
- when /http.:\/\/github.com\/(.+)\/(.+)\.git/
17
- self.organize = $1
18
- self.name = $2
3
+ module Larrow::Runner
4
+ module Vcs
5
+ class Github < Base
6
+ URL_TEMPLATE='https://raw.githubusercontent.com/%s/%s/%s/%s'
7
+ attr_accessor :organize, :name, :branch
8
+ # url sample:
9
+ # git@github.com:fsword/larrow-qingcloud.git
10
+ # https://github.com/fsword/larrow-qingcloud.git
11
+ def initialize url
12
+ self.branch = 'master'
13
+ case url
14
+ when /git@github\.com:(.+)\/(.+)\.git/
15
+ self.organize = $1
16
+ self.name = $2
17
+ when /http.:\/\/github.com\/(.+)\/(.+)\.git/
18
+ self.organize = $1
19
+ self.name = $2
20
+ end
19
21
  end
20
- end
21
22
 
22
- def formatted_url
23
- 'git@github.com:%s/%s.git' % [organize, name]
24
- end
23
+ def formatted_url
24
+ 'git@github.com:%s/%s.git' % [organize, name]
25
+ end
25
26
 
26
- def get filename
27
- url = URL_TEMPLATE % [organize, name, branch, filename]
28
- resp = Faraday.get(url)
29
- case resp.status
30
- when 200
31
- resp.body
32
- when 404
33
- nil
34
- else
35
- raise resp.body
27
+ def get filename
28
+ url = URL_TEMPLATE % [organize, name, branch, filename]
29
+ resp = Faraday.get(url)
30
+ case resp.status
31
+ when 200
32
+ resp.body
33
+ when 404
34
+ nil
35
+ else
36
+ raise resp.body
37
+ end
36
38
  end
37
- end
38
39
 
39
- def update_source node, target_dir
40
- template = ["git clone ",
41
- "--depth 1",
42
- "http://github.com/%s/%s.git",
43
- "-b %s %s"].join(' ')
44
- cmd = template % [organize, name, branch, target_dir]
45
- node.execute cmd
40
+ def update_source node, target_dir
41
+ template = ["git clone ",
42
+ "--depth 1",
43
+ "http://github.com/%s/%s.git",
44
+ "-b %s %s"].join(' ')
45
+ cmd = template % [organize, name, branch, target_dir]
46
+ node.execute cmd
47
+ end
46
48
  end
47
49
  end
48
50
  end
@@ -1,5 +1,5 @@
1
1
  module Larrow
2
2
  module Runner
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: larrow-runner
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
  - fsword
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-16 00:00:00.000000000 Z
11
+ date: 2014-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.0'
83
- - !ruby/object:Gem::Dependency
84
- name: tilt
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '2'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '2'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: thor
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +94,6 @@ dependencies:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0.19'
111
- - !ruby/object:Gem::Dependency
112
- name: activesupport
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '4.1'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '4.1'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: pry
127
99
  requirement: !ruby/object:Gem::Requirement
@@ -162,26 +134,6 @@ dependencies:
162
134
  - - '='
163
135
  - !ruby/object:Gem::Version
164
136
  version: 0.2.4
165
- - !ruby/object:Gem::Dependency
166
- name: minitest
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - "~>"
170
- - !ruby/object:Gem::Version
171
- version: '5.4'
172
- - - '='
173
- - !ruby/object:Gem::Version
174
- version: 5.4.1
175
- type: :runtime
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - "~>"
180
- - !ruby/object:Gem::Version
181
- version: '5.4'
182
- - - '='
183
- - !ruby/object:Gem::Version
184
- version: 5.4.1
185
137
  - !ruby/object:Gem::Dependency
186
138
  name: net-ssh
187
139
  requirement: !ruby/object:Gem::Requirement
@@ -269,6 +221,15 @@ files:
269
221
  - Rakefile
270
222
  - bin/larrow
271
223
  - larrow-runner.gemspec
224
+ - lib/active_support/core_ext/hash.rb
225
+ - lib/active_support/core_ext/hash/compact.rb
226
+ - lib/active_support/core_ext/hash/deep_merge.rb
227
+ - lib/active_support/core_ext/hash/except.rb
228
+ - lib/active_support/core_ext/hash/indifferent_access.rb
229
+ - lib/active_support/core_ext/hash/keys.rb
230
+ - lib/active_support/core_ext/hash/reverse_merge.rb
231
+ - lib/active_support/core_ext/hash/slice.rb
232
+ - lib/active_support/hash_with_indifferent_access.rb
272
233
  - lib/larrow/runner.rb
273
234
  - lib/larrow/runner/cli.rb
274
235
  - lib/larrow/runner/cli/build.rb