pec 0.5.2 → 0.6.0
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/README.md +3 -2
- data/lib/pec.rb +26 -22
- data/lib/pec/cli.rb +80 -5
- data/lib/pec/configure.rb +1 -1
- data/lib/pec/handler/base.rb +2 -8
- data/lib/pec/handler/flavor.rb +1 -1
- data/lib/pec/handler/image.rb +1 -1
- data/lib/pec/handler/networks.rb +13 -11
- data/lib/pec/handler/networks/allowed_address_pairs.rb +1 -1
- data/lib/pec/handler/networks/ip_address.rb +2 -2
- data/lib/pec/init.rb +6 -15
- data/lib/pec/sample.rb +4 -1
- data/lib/pec/version.rb +1 -1
- data/pec.gemspec +1 -2
- metadata +6 -21
- data/lib/pec/director.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf28083dd8187e302dd251c338c800cefaffe4d9
|
4
|
+
data.tar.gz: bbb7ff389e5c5be0a97f8afbeb203681e26f6bd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 662c961455e89a1f2869f9e678c522806d2751866908f26b5efc154d214ee7ab957276697dee475fe5a90c791428c79be81c6628002da09f9ab4a0a9206a6b99
|
7
|
+
data.tar.gz: 52ae51ea07c15324bb20ec7fa4e428941464feda24ceb740442fd18fd182ea25a881270b8f78bbe645cb1abcc8ea1ba8cc6a83d1e28e6a457ff8b8e98eae997d
|
data/README.md
CHANGED
@@ -39,7 +39,8 @@ pyama-test001:
|
|
39
39
|
networks:
|
40
40
|
eth0:
|
41
41
|
bootproto: static
|
42
|
-
allowed_address_pairs:
|
42
|
+
allowed_address_pairs:
|
43
|
+
- 10.1.1.5/24
|
43
44
|
ip_address: 10.1.1.1/24
|
44
45
|
gateway: 10.1.1.254
|
45
46
|
dns1: 8.8.8.8
|
@@ -83,7 +84,7 @@ pyama-test002:
|
|
83
84
|
| bootproto | ○ | static or dhcp |
|
84
85
|
| ip_address | ※ | 10.1.1.1/24 |
|
85
86
|
| path | | default:/etc/sysconfig/network-scripts/ifcfg-[device_name] |
|
86
|
-
| allowed_address_pairs | | 10.1.1.2/24
|
87
|
+
| allowed_address_pairs | | [10.1.1.2/24] |
|
87
88
|
|
88
89
|
※ bootproto=static is required
|
89
90
|
Items other than the above are output to the configuration file with `KEY = value` format
|
data/lib/pec.rb
CHANGED
@@ -1,35 +1,28 @@
|
|
1
|
-
require '
|
1
|
+
require 'pp'
|
2
|
+
require 'base64'
|
3
|
+
require 'yao'
|
4
|
+
require 'yaml'
|
5
|
+
require 'thor'
|
2
6
|
require 'ip'
|
3
7
|
require 'colorator'
|
4
8
|
require "pec/version"
|
5
9
|
require "pec/logger"
|
6
10
|
require "pec/configure"
|
7
|
-
require "pec/director"
|
8
11
|
require "pec/handler"
|
9
12
|
require "pec/sample"
|
10
13
|
require "pec/init"
|
11
14
|
require "pec/cli"
|
12
15
|
|
16
|
+
|
13
17
|
module Pec
|
14
|
-
def self.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@_neutron ||= Fog::Network.new({
|
23
|
-
provider: 'openstack'
|
24
|
-
})
|
25
|
-
@_neutron
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.identity
|
29
|
-
@_identity ||= Fog::Identity.new({
|
30
|
-
provider: 'openstack'
|
31
|
-
})
|
32
|
-
@_identity
|
18
|
+
def self.init_yao(_tenant_name=nil)
|
19
|
+
check_env
|
20
|
+
Yao.configure do
|
21
|
+
auth_url "#{ENV["OS_AUTH_URL"]}/tokens"
|
22
|
+
username ENV["OS_USERNAME"]
|
23
|
+
password ENV["OS_PASSWORD"]
|
24
|
+
tenant_name _tenant_name || ENV["OS_TENANT_NAME"]
|
25
|
+
end
|
33
26
|
end
|
34
27
|
|
35
28
|
def self.load_config(file_name=nil)
|
@@ -44,10 +37,20 @@ module Pec
|
|
44
37
|
load_config unless @_configure
|
45
38
|
@_configure
|
46
39
|
end
|
40
|
+
|
41
|
+
def self.check_env
|
42
|
+
%w(
|
43
|
+
OS_AUTH_URL
|
44
|
+
OS_USERNAME
|
45
|
+
OS_PASSWORD
|
46
|
+
).each do |name|
|
47
|
+
raise "please set env #{name}" unless ENV[name]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
47
51
|
end
|
48
52
|
|
49
53
|
class ::Hash
|
50
|
-
|
51
54
|
def deep_merge(second)
|
52
55
|
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
|
53
56
|
self.merge(second.to_h, &merger)
|
@@ -57,3 +60,4 @@ class ::Hash
|
|
57
60
|
self.merge!(deep_merge(second))
|
58
61
|
end
|
59
62
|
end
|
63
|
+
|
data/lib/pec/cli.rb
CHANGED
@@ -1,30 +1,105 @@
|
|
1
1
|
require 'pec'
|
2
|
-
require 'thor'
|
3
2
|
module Pec
|
4
3
|
class CLI < Thor
|
5
4
|
|
6
5
|
desc 'init', 'create sample config'
|
7
6
|
def init
|
8
|
-
Pec::Init.
|
7
|
+
Pec::Init.show_env_setting
|
9
8
|
Pec::Init.create_template_dir
|
10
9
|
Pec::Init.create_sample_config
|
11
10
|
end
|
12
11
|
|
13
12
|
desc 'up', 'create vm by Pec.yaml'
|
14
13
|
def up(host_name = nil)
|
15
|
-
Pec
|
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
|
+
p 1
|
34
|
+
attribute[:user_data] = Base64.encode64("#cloud-config\n" + attribute[:user_data].to_yaml) if attribute[:user_data]
|
35
|
+
|
36
|
+
Yao::Server.create(attribute)
|
37
|
+
Pec::Logger.info "create success! #{host.name}"
|
38
|
+
end
|
39
|
+
rescue => e
|
40
|
+
print_exception(e)
|
16
41
|
end
|
17
42
|
|
18
43
|
option :force , type: :boolean, aliases: "-f"
|
19
44
|
desc "destroy", "delete vm"
|
20
45
|
def destroy(host_name = nil)
|
21
|
-
Pec
|
46
|
+
Pec.configure.each do |host|
|
47
|
+
next if host_name && host.name != host_name
|
48
|
+
Pec.init_yao(host.tenant)
|
49
|
+
|
50
|
+
server = Yao::Server.list_detail.find {|s|s.name == host.name}
|
51
|
+
unless server
|
52
|
+
Pec::Logger.notice "not be created #{host.name}"
|
53
|
+
next
|
54
|
+
end
|
55
|
+
|
56
|
+
if options[:force] || yes?("#{host.name}: Are you sure you want to destroy the '#{host.name}' VM? [y/N]")
|
57
|
+
Yao::Server.destroy(server.id)
|
58
|
+
Pec::Logger.info "#{host.name} is deleted!"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
rescue => e
|
63
|
+
print_exception(e)
|
22
64
|
end
|
23
65
|
|
24
66
|
desc "status", "vm status"
|
25
67
|
def status(host_name = nil)
|
26
68
|
say("Current machine stasus:", :yellow)
|
27
|
-
Pec
|
69
|
+
Pec.configure.each do |host|
|
70
|
+
next if host_name && host.name != host_name
|
71
|
+
Pec.init_yao(host.tenant)
|
72
|
+
if server = Yao::Server.list_detail.find {|s|s.name == host.name}
|
73
|
+
puts sprintf(" %-35s %-10s %-10s %-10s %-10s %-35s %-48s",
|
74
|
+
host.name,
|
75
|
+
server.status,
|
76
|
+
Yao::Tenant.list.find {|tenant| tenant.id == server.tenant_id}.name,
|
77
|
+
Yao::Flavor.get(server.flavor['id']).name,
|
78
|
+
server.availability_zone,
|
79
|
+
server.ext_srv_attr_host,
|
80
|
+
server.addresses.map do |ethers|
|
81
|
+
ethers[1].map do |ether|
|
82
|
+
ether["addr"]
|
83
|
+
end
|
84
|
+
end.flatten.join(",")
|
85
|
+
)
|
86
|
+
else
|
87
|
+
puts sprintf(" %-35s %-10s",
|
88
|
+
host.name,
|
89
|
+
"uncreated"
|
90
|
+
)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
rescue => e
|
95
|
+
print_exception(e)
|
96
|
+
end
|
97
|
+
no_commands do
|
98
|
+
|
99
|
+
def print_exception(e)
|
100
|
+
Pec::Logger.critical(e)
|
101
|
+
Pec::Logger.info("\t" + e.backtrace.join("\n\t"))
|
102
|
+
end
|
28
103
|
end
|
29
104
|
end
|
30
105
|
end
|
data/lib/pec/configure.rb
CHANGED
data/lib/pec/handler/base.rb
CHANGED
@@ -2,14 +2,8 @@ module Pec::Handler
|
|
2
2
|
class Base
|
3
3
|
class << self
|
4
4
|
attr_accessor :kind
|
5
|
-
|
6
|
-
|
7
|
-
define_method("fetch_#{name}", -> (host) {
|
8
|
-
unless resource = Pec.compute.send("#{name}s").find {|val|val.name == host.send(name)}
|
9
|
-
raise "not fond #{name} #{host.send(name)}"
|
10
|
-
end
|
11
|
-
resource
|
12
|
-
})
|
5
|
+
def build
|
6
|
+
raise "not defined method"
|
13
7
|
end
|
14
8
|
end
|
15
9
|
end
|
data/lib/pec/handler/flavor.rb
CHANGED
data/lib/pec/handler/image.rb
CHANGED
data/lib/pec/handler/networks.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Pec::Handler
|
2
|
-
class Networks < Base
|
2
|
+
class Networks < Base
|
3
3
|
self.kind = 'networks'
|
4
4
|
autoload :OptionBase, "pec/handler/networks/option_base"
|
5
5
|
autoload :IpAddress, "pec/handler/networks/ip_address"
|
6
6
|
autoload :AllowedAddressPairs, "pec/handler/networks/allowed_address_pairs"
|
7
|
-
|
7
|
+
|
8
8
|
class << self
|
9
9
|
NAME = 0
|
10
10
|
CONFIG = 1
|
@@ -22,7 +22,7 @@ module Pec::Handler
|
|
22
22
|
user_data << gen_user_data(network, port)
|
23
23
|
end
|
24
24
|
{
|
25
|
-
|
25
|
+
networks: ports.map {|port| { uuid: nil, port: port.id }},
|
26
26
|
user_data: {
|
27
27
|
'write_files' => user_data
|
28
28
|
}
|
@@ -40,17 +40,17 @@ module Pec::Handler
|
|
40
40
|
|
41
41
|
def create_port(host, network)
|
42
42
|
attribute = gen_port_attribute(host, network)
|
43
|
-
|
43
|
+
Yao::Port.create(attribute)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def gen_port_attribute(host, network)
|
47
47
|
ip = IP.new(network[CONFIG]['ip_address'])
|
48
|
-
subnet =
|
48
|
+
subnet = Yao::Subnet.list.find {|s|s.cidr == ip.network.to_s}
|
49
49
|
attribute = {
|
50
50
|
name: network[NAME],
|
51
51
|
network_id: subnet.network_id
|
52
52
|
}
|
53
|
-
|
53
|
+
|
54
54
|
attribute.merge!(
|
55
55
|
security_group(host)
|
56
56
|
) if host.security_group
|
@@ -66,7 +66,7 @@ module Pec::Handler
|
|
66
66
|
|
67
67
|
attribute
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def gen_user_data(network, port)
|
71
71
|
path = network[CONFIG]['path'] || "/etc/sysconfig/network-scripts/ifcfg-#{port.name}"
|
72
72
|
{
|
@@ -76,7 +76,7 @@ module Pec::Handler
|
|
76
76
|
'permissions' => "0644"
|
77
77
|
}
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def ifcfg_config(network, port)
|
81
81
|
base = {
|
82
82
|
"name" => port.name,
|
@@ -95,7 +95,7 @@ module Pec::Handler
|
|
95
95
|
# delete option column
|
96
96
|
Pec::Handler::Networks.constants.each do |c|
|
97
97
|
network[CONFIG].delete(Object.const_get("Pec::Handler::Networks::#{c}").kind)
|
98
|
-
end
|
98
|
+
end
|
99
99
|
|
100
100
|
base.merge!(
|
101
101
|
network[CONFIG]
|
@@ -105,7 +105,9 @@ module Pec::Handler
|
|
105
105
|
|
106
106
|
def security_group(host)
|
107
107
|
ids = host.security_group.map do |name|
|
108
|
-
|
108
|
+
sg = Yao::SecurityGroup.list.find {|sg| sg.name == name}
|
109
|
+
raise "security group #{name} is not found" unless sg
|
110
|
+
sg.id
|
109
111
|
end
|
110
112
|
{ security_groups: ids }
|
111
113
|
end
|
@@ -5,10 +5,10 @@ module Pec::Handler
|
|
5
5
|
class << self
|
6
6
|
def build(network)
|
7
7
|
ip = IP.new(network[1]['ip_address'])
|
8
|
-
subnet =
|
8
|
+
subnet = Yao::Subnet.list.find {|s|s.cidr == ip.network.to_s}
|
9
9
|
|
10
10
|
if ip.to_s != subnet.cidr
|
11
|
-
{
|
11
|
+
{
|
12
12
|
fixed_ips: [
|
13
13
|
{ subnet_id: subnet.id, ip_address: ip.to_addr}
|
14
14
|
]
|
data/lib/pec/init.rb
CHANGED
@@ -21,21 +21,12 @@ module Pec
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
params = %w(auth_url username api_key tenant).inject({}) do |user_input, c|
|
31
|
-
user_input["openstack_#{c}"] = thor.ask("openstack #{c}:")
|
32
|
-
user_input
|
33
|
-
end
|
34
|
-
|
35
|
-
thor.say("Configure Complete!", :blue) if open(File.expand_path("~/.fog"), "w") do |e|
|
36
|
-
YAML.dump({ "default" => params }, e)
|
37
|
-
end
|
38
|
-
end
|
24
|
+
def show_env_setting
|
25
|
+
thor = Thor.new
|
26
|
+
thor.say("please set env this paramater", :yellow)
|
27
|
+
puts " export OS_AUTH_URL=http://your_keystone_server:port/v2.0"
|
28
|
+
puts " export OS_USERNAME=your name"
|
29
|
+
puts " export OS_PASSWORD=your password"
|
39
30
|
end
|
40
31
|
end
|
41
32
|
end
|
data/lib/pec/sample.rb
CHANGED
@@ -8,10 +8,12 @@ module Pec
|
|
8
8
|
"tenant" => "your_tenant",
|
9
9
|
"image" => "centos-7",
|
10
10
|
"flavor" => "m1.small",
|
11
|
+
"allowed_address_pairs" => "nova",
|
11
12
|
"networks" => {
|
12
13
|
"eth0" => {
|
13
14
|
"bootproto" => "static",
|
14
15
|
"ip_address" => "10.0.0.0/24",
|
16
|
+
"allowed_address_pairs" => ["10.0.0.1"],
|
15
17
|
"gateway" => "10.0.0.254",
|
16
18
|
"dns1" => "10.0.0.10"
|
17
19
|
},
|
@@ -24,7 +26,7 @@ module Pec
|
|
24
26
|
},
|
25
27
|
"security_group" => [
|
26
28
|
"default",
|
27
|
-
"
|
29
|
+
"www_from_any"
|
28
30
|
],
|
29
31
|
"templates" => [
|
30
32
|
"web_server.yaml"
|
@@ -36,6 +38,7 @@ module Pec
|
|
36
38
|
}
|
37
39
|
}
|
38
40
|
end
|
41
|
+
|
39
42
|
def user_data
|
40
43
|
{
|
41
44
|
"hostname" => "pec",
|
data/lib/pec/version.rb
CHANGED
data/pec.gemspec
CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
spec.add_dependency 'thor', '~> 0.19.1'
|
21
|
-
spec.add_dependency '
|
21
|
+
spec.add_dependency 'yao', '>= 0.0.2'
|
22
22
|
spec.add_dependency 'ruby-ip', '~> 0.9.3'
|
23
|
-
spec.add_dependency 'activesupport', '~> 4.2.1'
|
24
23
|
spec.add_dependency 'colorator', '~> 0.1'
|
25
24
|
spec.add_development_dependency "bundler"
|
26
25
|
spec.add_development_dependency "rspec"
|
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.
|
4
|
+
version: 0.6.0
|
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-09-
|
11
|
+
date: 2015-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.19.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: yao
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.0.2
|
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:
|
40
|
+
version: 0.0.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: ruby-ip
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.9.3
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: activesupport
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 4.2.1
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 4.2.1
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: colorator
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,7 +131,6 @@ files:
|
|
145
131
|
- lib/pec.rb
|
146
132
|
- lib/pec/cli.rb
|
147
133
|
- lib/pec/configure.rb
|
148
|
-
- lib/pec/director.rb
|
149
134
|
- lib/pec/handler.rb
|
150
135
|
- lib/pec/handler/availability_zone.rb
|
151
136
|
- lib/pec/handler/base.rb
|
@@ -182,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
167
|
version: '0'
|
183
168
|
requirements: []
|
184
169
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.
|
170
|
+
rubygems_version: 2.2.2
|
186
171
|
signing_key:
|
187
172
|
specification_version: 4
|
188
173
|
summary: openstack vm booter.
|
data/lib/pec/director.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
module Pec
|
2
|
-
class Director
|
3
|
-
def self.make(host_name)
|
4
|
-
Pec.configure.each do |host|
|
5
|
-
next if host_name && host.name != host_name
|
6
|
-
Pec::Logger.info "make start #{host.name}"
|
7
|
-
Pec.compute.set_tenant(host.tenant)
|
8
|
-
Pec.neutron.set_tenant_patch(host.tenant)
|
9
|
-
|
10
|
-
attribute = { name: host.name}
|
11
|
-
host.keys.each do |k|
|
12
|
-
Pec::Handler.constants.each do |c|
|
13
|
-
if Object.const_get("Pec::Handler::#{c}").kind == k
|
14
|
-
attribute.deep_merge!(Object.const_get("Pec::Handler::#{c}").build(host))
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
attribute[:user_data] = "#cloud-config\n" + attribute[:user_data].to_yaml if attribute[:user_data]
|
20
|
-
Pec::Logger.info "create success! #{host.name}" if Pec.compute.servers.create(attribute)
|
21
|
-
end
|
22
|
-
|
23
|
-
rescue Excon::Errors::Error => e
|
24
|
-
excon_err_message(e)
|
25
|
-
rescue => e
|
26
|
-
Pec::Logger.critical(e)
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.destroy(host_name, options)
|
30
|
-
Pec.configure.each do |host|
|
31
|
-
next if host_name && host.name != host_name
|
32
|
-
Pec.compute.set_tenant(host.tenant)
|
33
|
-
|
34
|
-
server = Pec.compute.servers.find {|s|s.name == host.name}
|
35
|
-
unless server
|
36
|
-
Pec::Logger.notice "not be created #{host.name}"
|
37
|
-
next
|
38
|
-
end
|
39
|
-
|
40
|
-
if options[:force] || Thor.new.yes?("#{host.name}: Are you sure you want to destroy the '#{host.name}' VM? [y/N]")
|
41
|
-
Pec::Logger.info "#{host.name} is deleted!" if Pec.compute.servers.destroy(server.id)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
rescue Excon::Errors::Error => e
|
46
|
-
excon_err_message(e)
|
47
|
-
rescue => e
|
48
|
-
Pec::Logger.critical(e)
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.status(host_name)
|
52
|
-
Pec.configure.each do |host|
|
53
|
-
next if host_name && host.name != host_name
|
54
|
-
if server = Pec.compute.servers.find {|s|s.name == host.name}
|
55
|
-
puts sprintf(" %-35s %-10s %-10s %-10s %-10s %-35s %-48s",
|
56
|
-
host.name,
|
57
|
-
server.state,
|
58
|
-
Pec.identity.tenants.find_by_id(server.tenant_id),
|
59
|
-
Pec.compute.flavors.get(server.flavor['id']).name,
|
60
|
-
server.availability_zone,
|
61
|
-
server.os_ext_srv_attr_host,
|
62
|
-
server.addresses.map do |ethers|
|
63
|
-
ethers[1].map do |ether|
|
64
|
-
ether["addr"]
|
65
|
-
end
|
66
|
-
end.flatten.join(",")
|
67
|
-
)
|
68
|
-
else
|
69
|
-
puts sprintf(" %-35s %-10s",
|
70
|
-
host.name,
|
71
|
-
"uncreated"
|
72
|
-
)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
rescue Excon::Errors::Error => e
|
77
|
-
excon_err_message(e)
|
78
|
-
rescue => e
|
79
|
-
Pec::Logger.critical(e)
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.excon_err_message(e)
|
83
|
-
if e.response
|
84
|
-
JSON.parse(e.response[:body]).each { |e,m| Pec::Logger.critical("#{e}:#{m["message"]}") }
|
85
|
-
else
|
86
|
-
Pec::Logger.critical(e)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
module Fog
|
93
|
-
module Network
|
94
|
-
class OpenStack
|
95
|
-
class Real
|
96
|
-
def set_tenant_patch(tenant)
|
97
|
-
@openstack_must_reauthenticate = true
|
98
|
-
@openstack_tenant = tenant.to_s
|
99
|
-
authenticate
|
100
|
-
@path.sub!(/\/$/, '')
|
101
|
-
unless @path.match(SUPPORTED_VERSIONS)
|
102
|
-
@path = "/" + Fog::OpenStack.get_supported_version(SUPPORTED_VERSIONS,
|
103
|
-
@openstack_management_uri,
|
104
|
-
@auth_token,
|
105
|
-
@connection_options)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|