pec 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 35cad45133a8df40934711c27364efb26b8508a1
4
- data.tar.gz: 55cef3480870581c1b2eddc60fdfa805ce9216e5
3
+ metadata.gz: d01486180af33f819f339eb46e351d320590903c
4
+ data.tar.gz: f61c04dfb32b6e8c49095271c465026a5ffef0df
5
5
  SHA512:
6
- metadata.gz: de7ec22cd43e85a97ecf264875c5c021bd2c99529ad4c455ab70a72f9d967c2775817319b5e4b861fa2dacab2ecb1a0ab5f725376bac967e378cbd9f031312f8
7
- data.tar.gz: 7e34e2de84215bbf238a70eabeba9a23c2fd8363afbf21f423fc75424a2d4a3172954c5298bfd1a59a2e822697ffa510db90879475f31cf2be3bc0192788d418
6
+ metadata.gz: cd9c54bfc3e426c7db4134b07026a52ddd70997b3a6ef7789e3c08c139017360222f78ad90968239ba5006c1185f26c149a02334f2682af5486f4496feefd521
7
+ data.tar.gz: dc68e0627397e6a4624139d4377f7b6b8506f343aa79d8a829c0e9c6a585375a568b0ba7ce2bf2012cd33d51074cb7545a798285715c4ea01f7a649869c015c7
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
-
3
+ ENV['CODECLIMATE_REPO_TOKEN'] = "c969d1896316cbd26ab70d3b7fef4f4e168df83b849fa7f16a1885569c86f29c"
4
+ ENV['PEC_TEST'] = "test"
4
5
  RSpec::Core::RakeTask.new("spec")
5
6
  task :default => :spec
data/lib/pec.rb CHANGED
@@ -7,6 +7,7 @@ require "pec/errors"
7
7
  require "pec/init"
8
8
  require "pec/resource"
9
9
  require "pec/resource/openstack"
10
+ require "pec/resource/mock"
10
11
  require "pec/director"
11
12
  require "pec/director/helper"
12
13
  require "pec/director/make_director"
@@ -4,12 +4,9 @@ module Pec
4
4
  extend Query
5
5
  class << self
6
6
  def create(name, image_ref, flavor_ref, options)
7
-
8
7
  response = Pec::Resource.get.create_server(name, image_ref, flavor_ref, options)
9
-
10
- if response[:status] == 202
11
- puts "success create for server_name:#{name}".blue
12
- end
8
+ raise(Pec::Errors::Host, "server_name:#{name} response err status:#{response[:status]}") unless response[:status] == 202
9
+ puts "success create for server_name:#{name.to_s}".blue
13
10
 
14
11
  response.data[:body]["server"]["id"]
15
12
  end
@@ -23,9 +20,9 @@ module Pec
23
20
  raise(Pec::Errors::Host, "server_name:#{server_name} is not fond!") unless server
24
21
  response = Pec::Resource.get.delete_server(server["id"]) if server
25
22
 
26
- if response && response[:status] == 204
27
- puts "server_name:#{server_name} is deleted!".green
28
- end
23
+ raise(Pec::Errors::Host, "server_name:#{name} response err status:#{response[:status]}") unless response[:status] == 204
24
+ puts "server_name:#{server_name} is deleted!".green
25
+ true
29
26
  end
30
27
  end
31
28
  end
data/lib/pec/configure.rb CHANGED
@@ -4,7 +4,13 @@ module Pec
4
4
  include Enumerable
5
5
 
6
6
  def initialize(file_name)
7
- YAML.load_file(file_name).to_hash.each do |config|
7
+ if file_name.is_a?(Hash)
8
+ hash = file_name
9
+ else
10
+ hash = YAML.load_file(file_name).to_hash
11
+ end
12
+
13
+ hash.each do |config|
8
14
  host = Pec::Configure::Host.load(config)
9
15
  @configure ||= []
10
16
  @configure << host if host
@@ -13,7 +13,7 @@ module Pec
13
13
 
14
14
  def get_template(config)
15
15
  config.templates.inject({}) do |merge_template, template|
16
- template.concat('.yaml') unless template.match(/.*\.yaml/)
16
+ template.to_s.concat('.yaml') unless template.to_s.match(/.*\.yaml/)
17
17
  raise(Pec::Errors::UserData, "template:#{template} is not fond!") unless FileTest.exist?("user_datas/#{template}")
18
18
  merge_template.merge!(YAML.load_file("user_datas/#{template}").to_hash)
19
19
  end if config.templates
data/lib/pec/director.rb CHANGED
@@ -5,7 +5,6 @@ class Director
5
5
  def execute(action, host_name, options=nil)
6
6
  config = Pec::Configure.new("Pec.yaml")
7
7
  director = assign_director(action, options)
8
-
9
8
  config.filter_by_host(host_name).each do |host|
10
9
  begin
11
10
  director.execute!(host) if director.do_it?(host)
@@ -5,13 +5,9 @@ module Pec
5
5
 
6
6
  def ports_assign(host)
7
7
  host.networks.map do |ether|
8
- begin
9
- ip = IP.new(ether.ip_address)
10
- rescue ArgumentError => e
11
- raise(Pec::Errors::Port, "ip:#{ether.ip_address} #{e}")
12
- end
8
+ ip = IP.new(ether.ip_address)
13
9
 
14
- port_subnet = Pec::Network::Subnet.fetch(ip.network.to_s)
10
+ port_subnet = Pec::Network::Subnet.fetch_by_cidr(ip.network.to_s)
15
11
  raise(Pec::Errors::Subnet, "subnet:#{ip.network.to_s} is not fond!") unless port_subnet
16
12
 
17
13
  port = Pec::Network::Port.assign(ether.name, ip, port_subnet, get_security_group_id(host.security_group))
@@ -20,6 +16,8 @@ module Pec
20
16
  puts "#{host.name}: assingn ip #{port.ip_address}".green
21
17
  port
22
18
  end if host.networks
19
+ rescue ArgumentError => e
20
+ raise(Pec::Errors::Port, "ip:#{ether.ip_address} #{e}")
23
21
  end
24
22
 
25
23
  def set_nics(options, ports)
@@ -25,11 +25,20 @@ module Pec
25
25
  options = set_security_group(security_group_ids)
26
26
  options = set_fixed_ip(options, subnet, ip)
27
27
  response = Pec::Resource.get.create_port(subnet["network_id"], options)
28
-
29
- raise(Pec::Errors::Port, "ip:#{ip.to_addr} is not created!") unless response
28
+ raise(Pec::Errors::Port, "ip:#{ip.to_addr} is not created!") unless response[:status] == 201
30
29
  append_assigned_ip(response)
30
+ port_from_response(response)
31
+ end
31
32
 
32
- response.data[:body]["port"]
33
+ def delete(ip)
34
+ target_port = fetch_by_ip(ip.to_addr)
35
+ response = Pec::Resource.get.delete_port(target_port["id"]) if target_port
36
+ raise(Pec::Errors::Host, "ip:#{ip.to_addr} response err status:#{response[:status]}") unless response[:status] == 204
37
+ true
38
+ end
39
+
40
+ def recreate(ip, subnet, security_group_ids)
41
+ create(ip, subnet, security_group_ids) if delete(ip)
33
42
  end
34
43
 
35
44
  def set_security_group(security_group_ids)
@@ -41,42 +50,53 @@ module Pec
41
50
  end
42
51
 
43
52
  def append_assigned_ip(response)
44
- @@use_ip_list << response.data[:body]["port"]["fixed_ips"][0]["ip_address"]
53
+ @@use_ip_list << ip_from_port(port_from_response(response))
45
54
  end
46
55
 
47
56
  def assigned_ip?(port)
48
- @@use_ip_list.include?(port["fixed_ips"][0]["ip_address"])
57
+ @@use_ip_list.include?(ip_from_port(port))
49
58
  end
50
59
 
51
60
  def get_free_port_ip(ip, subnet)
52
- port = fetch_free_port(subnet)
53
- port ? IP.new("#{port["fixed_ips"][0]["ip_address"]}/#{ip.pfxlen}") : ip
61
+ port = get_free_port(subnet)
62
+ port ? IP.new("#{ip_from_port(port)}/#{ip.pfxlen}") : ip
54
63
  end
55
64
 
56
- def delete(ip)
57
- target_port = fetch_by_ip(ip.to_addr)
58
- response = Pec::Resource.get.delete_port(target_port["id"]) if target_port
65
+ def fetch_by_ip(ip_addr)
66
+ list.find {|p| ip_from_port(p) == ip_addr }
59
67
  end
60
68
 
61
- def recreate(ip, subnet, security_group_ids)
62
- create(ip, subnet, security_group_ids) if delete(ip)
69
+ def port_from_response(response)
70
+ response.data[:body]["port"]
71
+ end
72
+
73
+ def ip_from_port(port)
74
+ port["fixed_ips"][0]["ip_address"]
75
+ end
76
+
77
+ def get_free_port(subnet)
78
+ list.find do |p|
79
+ same_subnet?(p, subnet) &&
80
+ unused?(p) &&
81
+ admin_state_up?(p) &&
82
+ !assigned_ip?(p)
83
+ end
63
84
  end
64
85
 
65
86
  def request_any_address?(ip, subnet)
66
87
  ip.to_s == subnet["cidr"]
67
88
  end
68
89
 
69
- def fetch_by_ip(ip_addr)
70
- list.find {|p| p["fixed_ips"][0]["ip_address"] == ip_addr }
90
+ def same_subnet?(port, subnet)
91
+ port["fixed_ips"][0]["subnet_id"] == subnet["id"]
71
92
  end
72
93
 
73
- def fetch_free_port(subnet)
74
- list.find do |p|
75
- p["fixed_ips"][0]["subnet_id"] == subnet["id"] &&
76
- p["device_owner"].empty? &&
77
- p["admin_state_up"] &&
78
- !assigned_ip?
79
- end
94
+ def unused?(port)
95
+ port["device_owner"].empty?
96
+ end
97
+
98
+ def admin_state_up?(port)
99
+ port["admin_state_up"]
80
100
  end
81
101
  end
82
102
  end
@@ -3,7 +3,7 @@ module Pec
3
3
  class Subnet
4
4
  extend Query
5
5
  class << self
6
- def fetch(cidr)
6
+ def fetch_by_cidr(cidr)
7
7
  subnet = list.find {|p| p["cidr"] == cidr }
8
8
  raise(Pec::Errors::Subnet, "cidr:#{cidr} is not fond!") unless subnet
9
9
  subnet
data/lib/pec/resource.rb CHANGED
@@ -9,6 +9,8 @@ module Pec
9
9
  raise(Pec::Errors::Resource, "Please be tenant is always set") unless @@_tenant
10
10
  unless ENV['PEC_TEST']
11
11
  @@_resource[@@_tenant] ||= Pec::Resource::OpenStack.new(@@_tenant)
12
+ else
13
+ @@_resource[@@_tenant] ||= Pec::Resource::Mock.new(@@_tenant)
12
14
  end
13
15
  end
14
16
 
@@ -0,0 +1,172 @@
1
+ module Pec
2
+ class Resource
3
+ class Mock
4
+ def initialize(tenant)
5
+ tenant_hash = { "openstack_tenant" => tenant }
6
+ end
7
+
8
+ def port_list
9
+ 1.upto(10).map do |c|
10
+ {
11
+ "id" => c,
12
+ "fixed_ips" => [
13
+ { "subnet_id" => c,
14
+ "ip_address" => "#{c}." * 3 + "#{c}"
15
+ }
16
+ ],
17
+ "network_id" => c,
18
+ "device_owner" => c % 2 == 0 ? c.to_s : "",
19
+ "admin_state_up" => c % 2 == 0 ? "True" : "False"
20
+ }
21
+ end
22
+ end
23
+
24
+ def subnet_list
25
+ 1.upto(10).map do |c|
26
+ {
27
+ "id" => c,
28
+ "cidr" => "#{c}." * 3 + "0/24",
29
+ "network_id" => c
30
+ }
31
+ end
32
+ end
33
+
34
+ def server_list
35
+ 10.upto(20).map do |c|
36
+ {
37
+ "id" => c,
38
+ "name" => c,
39
+ "status" => c %2 == 0 ? "Active" : "SHUTOFF"
40
+ }
41
+ end
42
+ end
43
+
44
+ def security_group_list
45
+ 1.upto(10).map do |c|
46
+ {
47
+ "id" => c,
48
+ "name" => c
49
+ }
50
+ end
51
+ end
52
+
53
+ def image_list
54
+ ref_list
55
+ end
56
+
57
+ def flavor_list
58
+ ref_list
59
+ end
60
+
61
+ def ref_list
62
+ 1.upto(10).map do |c|
63
+ {
64
+ "id" => c,
65
+ "name" => c,
66
+ "links" => [
67
+ "href" => c
68
+ ]
69
+ }
70
+ end
71
+
72
+ end
73
+
74
+ def tenant_list
75
+ 1.upto(10).map do |c|
76
+ {
77
+ "id" => c,
78
+ "name" => c
79
+ }
80
+ end
81
+ end
82
+
83
+ def create_server(name, image_ref, flavor_ref, options)
84
+ object = Object.new
85
+ object.set_value(name, 202)
86
+ object
87
+ end
88
+
89
+ def delete_server(server_id)
90
+ object = Object.new
91
+ object.set_value(server_id, 204)
92
+ object
93
+ end
94
+
95
+ def get_server_details(server_id)
96
+ if server_id.to_i % 2 == 0
97
+ {
98
+ "status" => "active",
99
+ "OS-EXT-SRV-ATTR:host" => "#{server_id}.compute.node",
100
+ "flavor" => {
101
+ "id" => server_id
102
+ },
103
+ "tenant_id" => server_id,
104
+ "addresses" => {
105
+ "test_net" => [
106
+ "addr" => server_id
107
+ ]
108
+ }
109
+ }
110
+ else
111
+ {
112
+ "status" => "uncreated",
113
+ "OS-EXT-SRV-ATTR:host" => "#{server_id}.compute.node",
114
+ "flavor" => {
115
+ "id" => server_id
116
+ },
117
+ "tenant_id" => server_id,
118
+ "addresses" => {
119
+ "test_net" => {
120
+ "addr" => server_id
121
+ }
122
+ }
123
+ }
124
+ end
125
+ end
126
+ def create_port(network_id, options)
127
+ object = Object.new
128
+ object.set_value(network_id, 201)
129
+ object
130
+ end
131
+
132
+ def delete_port(port_id)
133
+ object = Object.new
134
+ object.set_value(port_id, 204)
135
+ object
136
+ end
137
+ end
138
+ end
139
+ end
140
+ class Object
141
+ attr_reader :status
142
+ def set_value(value, status)
143
+ @value = value
144
+ @status = @value.to_i % 2 == 0 ? 999 : status
145
+ end
146
+
147
+ def [](key)
148
+ @status
149
+ end
150
+
151
+ def data
152
+ {
153
+ :body => {
154
+ "port" => {
155
+ "id" => @value,
156
+ "fixed_ips" => [
157
+ {
158
+ "subnet_id" => @value,
159
+ "ip_address" => "#{@value}." * 3 + "#{@value}"
160
+ }
161
+ ],
162
+ "network_id" => @value,
163
+ "device_owner" => @value.to_i % 2 == 0 ? @value : "",
164
+ "admin_state_up" => @value.to_i % 2 == 0 ? "True" : "False"
165
+ },
166
+ "server" => {
167
+ "id" => @value
168
+ }
169
+ }
170
+ }
171
+ end
172
+ end
data/lib/pec/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pec
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  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.2.6
4
+ version: 0.2.7
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-06-14 00:00:00.000000000 Z
11
+ date: 2015-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -166,6 +166,7 @@ files:
166
166
  - lib/pec/network/subnet.rb
167
167
  - lib/pec/query.rb
168
168
  - lib/pec/resource.rb
169
+ - lib/pec/resource/mock.rb
169
170
  - lib/pec/resource/openstack.rb
170
171
  - lib/pec/version.rb
171
172
  - pec.gemspec