From: Jan Provaznik <jprovazn(a)redhat.com>
This fixes problem with MAC address in public address attribute, if MAC address
is set, we try fetch actual public_address directly through deltacloud api. To
fetch instance directly I had to add provider_instance_id where provider side
instance id is kept.
---
src/app/models/instance.rb | 15 +++++++++++++++
.../20110726072809_add_provider_instance_id.rb | 9 +++++++++
src/dbomatic/dbomatic | 14 +++++++++++++-
3 files changed, 37 insertions(+), 1 deletions(-)
create mode 100644 src/db/migrate/20110726072809_add_provider_instance_id.rb
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index f16b79d..4700660 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -340,6 +340,21 @@ class Instance < ActiveRecord::Base
[possibles, errors]
end
+ def public_addresses
+ # FIXME: detect MAC format properly
+ addr = read_attribute(:public_addresses)
+ if addr and addr =~ /\w\w:\w\w:\w\w:\w\w:\w\w:\w\w/
+ begin
+ client = provider_account.connect
+ self.public_addresses =
client.instance(provider_instance_id).public_addresses.first
+ save!
+ rescue
+ logger.error "failed to fetch public address for #{self.name}:
#{$!.message}"
+ end
+ end
+ read_attribute(:public_addresses)
+ end
+
named_scope :with_hardware_profile, lambda {
{:include => :hardware_profile}
}
diff --git a/src/db/migrate/20110726072809_add_provider_instance_id.rb
b/src/db/migrate/20110726072809_add_provider_instance_id.rb
new file mode 100644
index 0000000..7b68cba
--- /dev/null
+++ b/src/db/migrate/20110726072809_add_provider_instance_id.rb
@@ -0,0 +1,9 @@
+class AddProviderInstanceId < ActiveRecord::Migration
+ def self.up
+ add_column :instances, :provider_instance_id, :string
+ end
+
+ def self.down
+ remove_column :instances, :provider_instance_id
+ end
+end
diff --git a/src/dbomatic/dbomatic b/src/dbomatic/dbomatic
index 1c1a206..013be84 100755
--- a/src/dbomatic/dbomatic
+++ b/src/dbomatic/dbomatic
@@ -131,6 +131,8 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
@public_addresses = string
elsif @tag == "DeltacloudPrivateNetworkAddresses"
@private_addresses = string
+ elsif @tag == "DeltacloudProviderId"
+ @provider_instance_id = string
end
end
end
@@ -199,6 +201,15 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
@logger.info "update_instance_addresses completed for #{inst}"
end
+ def update_provider_instance_id(inst)
+ @logger.info "update_provider_instance_id for #{inst}, \
+ setting id: #{@provider_instance_id}"
+
+ inst.provider_instance_id = @provider_instance_id
+ inst.save!
+ @logger.info "update_provider_instance_id completed for #{inst}"
+ end
+
# Create a new entry for events which we have all the necessary data for
def end_element(element)
begin
@@ -211,9 +222,10 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
@logger.info "Instance #{inst} found, running update events"
update_instance_state_event(inst)
update_instance_addresses(inst)
+ update_provider_instance_id(inst)
@logger.info "Instance #{inst} update events completed"
end
- @tag = @event_type = @event_cmd = @event_time = @trigger_type = @grid_resource =
@execute_host = @hold_reason = @public_addresses = @private_addresses = nil
+ @tag = @event_type = @event_cmd = @event_time = @trigger_type = @grid_resource =
@execute_host = @hold_reason = @public_addresses = @private_addresses =
@provider_instance_id = nil
end
rescue Exception => e
@logger.error "#{e.backtrace.shift}: #{e.message}"
--
1.7.4.4