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 +4 -4
- data/exe/pec +2 -2
- data/lib/pec/cli.rb +7 -82
- data/lib/pec/command/base.rb +18 -0
- data/lib/pec/command/config.rb +11 -0
- data/lib/pec/command/destroy.rb +14 -0
- data/lib/pec/command/init.rb +9 -0
- data/lib/pec/command/status.rb +40 -0
- data/lib/pec/command/up.rb +24 -0
- data/lib/pec/command.rb +10 -0
- data/lib/pec/config_error.rb +2 -0
- data/lib/pec/configure.rb +2 -0
- data/lib/pec/handler/keypair.rb +19 -0
- data/lib/pec/handler.rb +1 -0
- data/lib/pec/version.rb +1 -1
- data/lib/pec.rb +10 -2
- data/pec.gemspec +4 -3
- metadata +32 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bff0038d6e2313f1e3b8b039dfae6a5c07766c7f
|
4
|
+
data.tar.gz: cc9ebdecf5f4d785c8bcbe296ee3b94c022201e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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,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,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
|
data/lib/pec/command.rb
ADDED
@@ -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
|
data/lib/pec/configure.rb
CHANGED
@@ -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
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{^
|
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', '
|
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.
|
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-
|
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.
|
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.
|
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: '
|
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: '
|
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.
|
191
|
+
rubygems_version: 2.2.2
|
171
192
|
signing_key:
|
172
193
|
specification_version: 4
|
173
194
|
summary: openstack vm booter.
|