pec 0.2.6 → 0.2.7

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: 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