pec 0.7.0 → 0.7.1

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: 39403ae482bef2606f9eac2fba8477c61772ed43
4
- data.tar.gz: 81ae4ef40939d3b775def68c2892869246931cd8
3
+ metadata.gz: bff0038d6e2313f1e3b8b039dfae6a5c07766c7f
4
+ data.tar.gz: cc9ebdecf5f4d785c8bcbe296ee3b94c022201e4
5
5
  SHA512:
6
- metadata.gz: 541e589d51496de9be957b031a78f0d9c62d794374e50ee39682d044e71ae738ebd40527f8175df65709fe0f0e68babc77ce50e83827374cf3e80fef1eefe291
7
- data.tar.gz: c4aa962da6abe6d2a4d8cbba8b0c553dcfb2d6827bf3fb987b436e75118f667f0201563f3b89ada115ad15e5350b04c01623603c9a7f971dec710580ef7cbec6
6
+ metadata.gz: 9250a610cd7bc60cdf757b4ff067f78640b8954eba8d746de3ad36b18457770cadb86199099f6c017c7e207a611a6199faa129ea7579144b611a2e94a78ec5d1
7
+ data.tar.gz: 78dfab706b07339bbcc385593127141c2084af477233d9ca448c8c39aada1e9f349a660f2749d153b25ceca54e914aa4f22c79faa8345366838250ee83141102
data/exe/pec CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
-
3
- require "pec"
2
+ require 'pec'
3
+ Pec::CLI.start
data/lib/pec/cli.rb CHANGED
@@ -4,100 +4,28 @@ module Pec
4
4
 
5
5
  desc 'init', 'create sample config'
6
6
  def init
7
- Pec::Init.show_env_setting
8
- Pec::Init.create_template_dir
9
- Pec::Init.create_sample_config
7
+ _sub_command(host_name, options)
10
8
  end
11
9
 
12
10
  desc 'up', 'create vm by Pec.yaml'
13
11
  def up(host_name = nil)
14
- Pec.configure.each do |host|
15
- next if host_name && host.name != host_name
16
- Pec.init_yao(host.tenant)
17
-
18
- server = Yao::Server.list_detail.find {|s|s.name == host.name}
19
- if server
20
- Pec::Logger.notice "already exists: #{host.name}"
21
- next
22
- end
23
- Pec::Logger.info "make start #{host.name}"
24
-
25
- attribute = { name: host.name}
26
- host.keys.each do |k|
27
- Pec::Handler.constants.each do |c|
28
- if Object.const_get("Pec::Handler::#{c}").kind == k
29
- attribute.deep_merge!(Object.const_get("Pec::Handler::#{c}").build(host))
30
- end
31
- end
32
- end
33
- attribute[:user_data] = Base64.encode64("#cloud-config\n" + attribute[:user_data].to_yaml) if attribute[:user_data]
34
-
35
- Yao::Server.create(attribute)
36
- Pec::Logger.info "create success! #{host.name}"
37
- end
38
- rescue => e
39
- print_exception(e)
12
+ _sub_command(host_name, options)
40
13
  end
41
14
 
42
15
  option :force , type: :boolean, aliases: "-f"
43
16
  desc "destroy", "delete vm"
44
17
  def destroy(host_name = nil)
45
- Pec.configure.each do |host|
46
- next if host_name && host.name != host_name
47
- Pec.init_yao(host.tenant)
48
-
49
- server = Yao::Server.list_detail.find {|s|s.name == host.name}
50
- unless server
51
- Pec::Logger.notice "not be created #{host.name}"
52
- next
53
- end
54
-
55
- if options[:force] || yes?("#{host.name}: Are you sure you want to destroy the '#{host.name}' VM? [y/N]")
56
- Yao::Server.destroy(server.id)
57
- Pec::Logger.info "#{host.name} is deleted!"
58
- end
59
- end
60
-
61
- rescue => e
62
- print_exception(e)
18
+ _sub_command(host_name, options)
63
19
  end
64
20
 
65
21
  desc "status", "vm status"
66
22
  def status(host_name = nil)
67
- say("Current machine stasus:", :yellow)
68
- Pec.configure.each do |host|
69
- next if host_name && host.name != host_name
70
- Pec.init_yao(host.tenant)
71
- if server = Yao::Server.list_detail.find {|s|s.name == host.name}
72
- puts sprintf(" %-35s %-10s %-10s %-10s %-10s %-35s %-48s",
73
- host.name,
74
- server.status,
75
- Yao::Tenant.list.find {|tenant| tenant.id == server.tenant_id}.name,
76
- Yao::Flavor.get(server.flavor['id']).name,
77
- server.availability_zone,
78
- server.ext_srv_attr_host,
79
- server.addresses.map do |ethers|
80
- ethers[1].map do |ether|
81
- ether["addr"]
82
- end
83
- end.flatten.join(",")
84
- )
85
- else
86
- puts sprintf(" %-35s %-10s",
87
- host.name,
88
- "uncreated"
89
- )
90
- end
91
- end
92
- rescue => e
93
- print_exception(e)
23
+ _sub_command(host_name, options)
94
24
  end
95
25
 
96
26
  desc "config", "show configure"
97
27
  def config
98
- puts YAML.dump(
99
- YAML.load_file("Pec.yaml").to_hash.reject {|c| c[0].to_s.match(/^_/)}
100
- )
28
+ _sub_command(host_name, options)
101
29
  end
102
30
 
103
31
  map %w[--version -v] => :__print_version
@@ -106,12 +34,9 @@ module Pec
106
34
  puts Pec::VERSION
107
35
  end
108
36
 
109
-
110
37
  no_commands do
111
-
112
- def print_exception(e)
113
- Pec::Logger.critical(e)
114
- Pec::Logger.info("\t" + e.backtrace.join("\n\t"))
38
+ def _sub_command(host_name, options)
39
+ Object.const_get("Pec::Command::#{caller[0][/`([^']*)'/, 1].capitalize}").run(host_name, options)
115
40
  end
116
41
  end
117
42
  end
@@ -0,0 +1,18 @@
1
+ module Pec::Command
2
+ class Base
3
+ def self.run(host_name, options)
4
+ Pec.servers(host_name) do |server,config|
5
+ task(host_name, options, server, config)
6
+ end
7
+ rescue => e
8
+ print_exception(e)
9
+ end
10
+
11
+ def self.print_exception(e)
12
+ Pec::Logger.critical(e)
13
+ Pec::Logger.info("\t" + e.backtrace.join("\n\t"))
14
+ end
15
+
16
+ def self.task(host_name, options, server, config); end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ module Pec::Command
2
+ class Config < Base
3
+ def self.run(host_name, options)
4
+ puts YAML.dump(
5
+ YAML.load_file("Pec.yaml").to_hash.reject {|c| c[0].to_s.match(/^_/)}
6
+ )
7
+ rescue => e
8
+ print_exception(e)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module Pec::Command
2
+ class Destroy < Base
3
+ def self.task(host_name, options, server, config)
4
+ unless server
5
+ Pec::Logger.notice "not be created #{config.name}"
6
+ else
7
+ if options[:force] || Thor.new.yes?("#{config.name}: Are you sure you want to destroy the '#{config.name}' VM? [y/N]")
8
+ Yao::Server.destroy(server.id)
9
+ Pec::Logger.info "#{config.name} is deleted!"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ module Pec::Command
2
+ class Init < Base
3
+ def self.run(host_name, options)
4
+ Pec::Init.show_env_setting
5
+ Pec::Init.create_template_dir
6
+ Pec::Init.create_sample_config
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,40 @@
1
+ module Pec::Command
2
+ class Status < Base
3
+ def self.task(host_name, options, server, config)
4
+ Thor.new.say("Current machine stasus:", :yellow)
5
+ if server
6
+ puts sprintf(
7
+ " %-35s %-10s %-10s %-10s %-10s %-35s %-48s",
8
+ config.name,
9
+ server.status,
10
+ tenant_name(server),
11
+ flavor_name(server),
12
+ server.availability_zone,
13
+ server.ext_srv_attr_host,
14
+ ip_addresses(server)
15
+ )
16
+ else
17
+ puts sprintf(" %-35s %-10s",
18
+ config.name,
19
+ "uncreated"
20
+ )
21
+ end
22
+ end
23
+
24
+ def self.tenant_name(server)
25
+ Yao::Tenant.list.find {|tenant| tenant.id == server.tenant_id}.name
26
+ end
27
+
28
+ def self.flavor_name(server)
29
+ Yao::Flavor.get(server.flavor['id']).name
30
+ end
31
+
32
+ def self.ip_addresses(server)
33
+ server.addresses.map do |ethers|
34
+ ethers[1].map do |ether|
35
+ ether["addr"]
36
+ end
37
+ end.flatten.join(",")
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ module Pec::Command
2
+ class Up < Base
3
+ def self.task(host_name, options, server, config)
4
+ unless server
5
+ Pec::Logger.info "make start #{config.name}"
6
+
7
+ attribute = {name: config.name}
8
+ config.keys.each do |k|
9
+ Pec::Handler.constants.each do |c|
10
+ _handler = Object.const_get("Pec::Handler::#{c}")
11
+ attribute.deep_merge!(_handler.build(config)) if _handler.kind == k
12
+ end
13
+ end
14
+
15
+ attribute[:user_data] = Base64.encode64("#cloud-config\n" + attribute[:user_data].to_yaml) if attribute[:user_data]
16
+
17
+ Yao::Server.create(attribute)
18
+ Pec::Logger.info "create success! #{config.name}"
19
+ else
20
+ Pec::Logger.notice "already server: #{config.name}"
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ module Pec
2
+ module Command
3
+ autoload :Base, "pec/command/base"
4
+ autoload :Up, "pec/command/up"
5
+ autoload :Destroy, "pec/command/destroy"
6
+ autoload :Status, "pec/command/status"
7
+ autoload :Config, "pec/command/config"
8
+ autoload :Init, "pec/command/init"
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ class Pec::ConfigError < StandardError
2
+ end
data/lib/pec/configure.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "pec/config_error"
2
+
1
3
  module Pec
2
4
  class Configure
3
5
  def initialize(config)
@@ -0,0 +1,19 @@
1
+ module Pec::Handler
2
+ class Keypair < Base
3
+ self.kind = 'keypair'
4
+
5
+ def self.build(host)
6
+ return({}) unless host.keypair
7
+
8
+ Pec::Logger.notice "keypair is #{host.keypair}"
9
+ keypair = Yao::Keypair.list.find {|k| k.name == host.keypair }
10
+ if keypair
11
+ {
12
+ key_name: keypair.name,
13
+ }
14
+ else
15
+ raise Pec::ConfigError, "keypair name=#{host.keypair} does not exist"
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/pec/handler.rb CHANGED
@@ -4,6 +4,7 @@ module Pec
4
4
  autoload :AvailabilityZone, "pec/handler/availability_zone"
5
5
  autoload :Image, "pec/handler/image"
6
6
  autoload :Flavor, "pec/handler/flavor"
7
+ autoload :Keypair, "pec/handler/keypair"
7
8
  autoload :Networks, "pec/handler/networks"
8
9
  autoload :UserData, "pec/handler/user_data"
9
10
  autoload :Templates, "pec/handler/templates"
data/lib/pec/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pec
2
- VERSION = "0.7.0"
2
+ VERSION = "0.7.1"
3
3
  end
data/lib/pec.rb CHANGED
@@ -9,6 +9,7 @@ require "pec/version"
9
9
  require "pec/logger"
10
10
  require "pec/configure"
11
11
  require "pec/handler"
12
+ require "pec/command"
12
13
  require "pec/sample"
13
14
  require "pec/init"
14
15
  require "pec/cli"
@@ -38,6 +39,15 @@ module Pec
38
39
  @_configure
39
40
  end
40
41
 
42
+ def self.servers(host_name)
43
+ self.configure.each do |host|
44
+ next if host_name && host.name != host_name
45
+ Pec.init_yao(host.tenant)
46
+ server = Yao::Server.list_detail.find {|s|s.name == host.name}
47
+ yield(server, host)
48
+ end
49
+ end
50
+
41
51
  def self.check_env
42
52
  %w(
43
53
  OS_AUTH_URL
@@ -47,7 +57,6 @@ module Pec
47
57
  raise "please set env #{name}" unless ENV[name]
48
58
  end
49
59
  end
50
-
51
60
  end
52
61
 
53
62
  class ::Hash
@@ -60,4 +69,3 @@ class ::Hash
60
69
  self.merge!(deep_merge(second))
61
70
  end
62
71
  end
63
-
data/pec.gemspec CHANGED
@@ -15,13 +15,14 @@ Gem::Specification.new do |spec|
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
  spec.add_dependency 'thor', '~> 0.19.1'
21
- spec.add_dependency 'yao', '>= 0.0.5'
21
+ spec.add_dependency 'yao', '~> 0.0.6'
22
22
  spec.add_dependency 'ruby-ip', '~> 0.9.3'
23
23
  spec.add_dependency 'colorator', '~> 0.1'
24
24
  spec.add_development_dependency "bundler"
25
- spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "rspec", ">= 3"
26
+ spec.add_development_dependency "rspec-mocks", ">= 3"
26
27
  spec.add_development_dependency "rake"
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - kazuhiko yamashita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-18 00:00:00.000000000 Z
11
+ date: 2015-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: yao
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.5
33
+ version: 0.0.6
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.5
40
+ version: 0.0.6
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ruby-ip
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '3'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-mocks
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '3'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '3'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -112,9 +126,7 @@ description: openstack vm booter.
112
126
  email:
113
127
  - pyama@pepabo.com
114
128
  executables:
115
- - console
116
129
  - pec
117
- - setup
118
130
  extensions: []
119
131
  extra_rdoc_files: []
120
132
  files:
@@ -130,12 +142,21 @@ files:
130
142
  - exe/pec
131
143
  - lib/pec.rb
132
144
  - lib/pec/cli.rb
145
+ - lib/pec/command.rb
146
+ - lib/pec/command/base.rb
147
+ - lib/pec/command/config.rb
148
+ - lib/pec/command/destroy.rb
149
+ - lib/pec/command/init.rb
150
+ - lib/pec/command/status.rb
151
+ - lib/pec/command/up.rb
152
+ - lib/pec/config_error.rb
133
153
  - lib/pec/configure.rb
134
154
  - lib/pec/handler.rb
135
155
  - lib/pec/handler/availability_zone.rb
136
156
  - lib/pec/handler/base.rb
137
157
  - lib/pec/handler/flavor.rb
138
158
  - lib/pec/handler/image.rb
159
+ - lib/pec/handler/keypair.rb
139
160
  - lib/pec/handler/networks.rb
140
161
  - lib/pec/handler/networks/allowed_address_pairs.rb
141
162
  - lib/pec/handler/networks/ip_address.rb
@@ -167,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
188
  version: '0'
168
189
  requirements: []
169
190
  rubyforge_project:
170
- rubygems_version: 2.4.6
191
+ rubygems_version: 2.2.2
171
192
  signing_key:
172
193
  specification_version: 4
173
194
  summary: openstack vm booter.