kytoon 1.2.4 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ * Mon Nov 26 2012 Dan Prince <dprince@redhat.com> - 1.2.5
2
+ - Libvirt: ping test instances to ensure they have IPs before
3
+ trying to configure hosts, etc.
4
+ - Generate server group IDs with using Time.now.to_f
5
+ which gives us millisecond accuracy. This should avoid ID
6
+ collisions which could occur if two groups were spun up
7
+ in the same second (thus causing image name collisions, etc)
8
+ - XenServer: Add 'cleanup_before_create' option to run instance
9
+ cleanup before creating a new group.
10
+
1
11
  * Thu Oct 8 2012 Dan Prince <dprince@redhat.com> - 1.2.4
2
12
  - XenServer: Delete VDI's that aren't in use during cleanup.
3
13
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.4
1
+ 1.2.5
@@ -2,6 +2,7 @@ require 'json'
2
2
  require 'kytoon/util'
3
3
  require 'rexml/document'
4
4
  require 'rexml/xpath'
5
+ require 'timeout'
5
6
 
6
7
  module Kytoon
7
8
 
@@ -36,7 +37,7 @@ class ServerGroup
36
37
  attr_accessor :use_sudo
37
38
 
38
39
  def initialize(options={})
39
- @id = options[:id] || Time.now.to_i
40
+ @id = options[:id] || Time.now.to_f
40
41
  @name = options[:name]
41
42
  @use_sudo = options[:use_sudo]
42
43
  @servers=[]
@@ -159,6 +160,7 @@ class ServerGroup
159
160
  puts "Copying hosts files..."
160
161
  #now that we have IP info copy hosts files into the servers
161
162
  sg.servers.each do |server|
163
+ ping_test(server['ip_address'])
162
164
  Kytoon::Util.remote_exec(%{
163
165
  cat > /etc/hosts <<-EOF_CAT
164
166
  #{hosts_file_data}
@@ -178,6 +180,31 @@ fi
178
180
  sg
179
181
  end
180
182
 
183
+ def self.default_ip_type()
184
+ ip_type = Util.load_configs['libvirt_ip_type'] || 4
185
+ ip_type.to_i
186
+ end
187
+
188
+ def self.ping_test(ip_addr)
189
+
190
+ ping_timeout = (Util.load_configs['libvirt_ping_timeout'] || 60).to_i
191
+
192
+ begin
193
+ ping = self.default_ip_type == 6 ? 'ping6' : 'ping'
194
+ ping_command = "#{ping} -c 1 #{ip_addr} > /dev/null 2>&1"
195
+ Timeout::timeout(ping_timeout) do
196
+ while(1) do
197
+ return true if system(ping_command)
198
+ end
199
+ end
200
+ rescue Timeout::Error => te
201
+ raise KytoonException, "Timeout pinging server: #{ping_command}"
202
+ end
203
+
204
+ return false
205
+
206
+ end
207
+
181
208
  def self.get(options={})
182
209
  id = options[:id]
183
210
  if id.nil? then
@@ -28,7 +28,7 @@ class ServerGroup
28
28
  attr_accessor :name
29
29
 
30
30
  def initialize(options={})
31
- @id = options[:id] || Time.now.to_i
31
+ @id = options[:id] || Time.now.to_f
32
32
  @name = options[:name]
33
33
  @servers=[]
34
34
  end
@@ -48,9 +48,10 @@ class ServerGroup
48
48
  attr_accessor :bridge
49
49
  attr_accessor :public_ip_bridge
50
50
  attr_accessor :dns_nameserver
51
+ attr_accessor :cleanup_before_create
51
52
 
52
53
  def initialize(options={})
53
- @id = options[:id] || Time.now.to_i
54
+ @id = options[:id] || Time.now.to_f
54
55
  @name = options[:name]
55
56
  @netmask = options[:netmask]
56
57
  @gateway = options[:gateway]
@@ -59,6 +60,7 @@ class ServerGroup
59
60
  @bridge = options[:bridge]
60
61
  @public_ip_bridge = options[:public_ip_bridge]
61
62
  @dns_nameserver = options[:dns_nameserver]
63
+ @cleanup_before_create = options[:cleanup_before_create]
62
64
  @gateway_ip = options[:gateway_ip]
63
65
  @gateway_ip = ENV['GATEWAY_IP'] if @gateway_ip.nil?
64
66
  raise ConfigException, "Please specify a GATEWAY_IP" if @gateway_ip.nil?
@@ -93,6 +95,7 @@ class ServerGroup
93
95
  :dns_nameserver => json_hash['dns_nameserver'],
94
96
  :network_type => json_hash['network_type'],
95
97
  :public_ip_bridge => json_hash['public_ip_bridge'],
98
+ :cleanup_before_create => json_hash['cleanup_before_create'],
96
99
  :bridge => json_hash['bridge']
97
100
  )
98
101
  json_hash["servers"].each do |server_hash|
@@ -145,6 +148,7 @@ class ServerGroup
145
148
  'gateway_ip' => @gateway_ip,
146
149
  'broadcast' => @broadcast,
147
150
  'dns_nameserver' => @dns_nameserver,
151
+ 'cleanup_before_create' => @cleanup_before_create,
148
152
  'network_type' => @network_type,
149
153
  'public_ip_bridge' => @public_ip_bridge,
150
154
  'bridge' => @bridge,
@@ -168,6 +172,7 @@ class ServerGroup
168
172
  end
169
173
 
170
174
  def self.create(sg)
175
+ ServerGroup.cleanup_instances(sg.gateway_ip) if sg.cleanup_before_create
171
176
  sg.cache_to_disk
172
177
  init_host(sg)
173
178
  status, host_ssh_public_key = Kytoon::Util.remote_exec(%{
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kytoon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.2.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-08 00:00:00.000000000 Z
12
+ date: 2012-11-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
@@ -289,7 +289,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
289
289
  version: '0'
290
290
  segments:
291
291
  - 0
292
- hash: 1786306078727391994
292
+ hash: 1238263257557128483
293
293
  required_rubygems_version: !ruby/object:Gem::Requirement
294
294
  none: false
295
295
  requirements: