On Wed, 2011-02-09 at 14:12 +0100, jprovazn(a)redhat.com wrote:
From: Jan Provaznik <jprovazn(a)redhat.com>
Instance SSH key name is now unique (had same name as cloud account key till
now)
---
src/app/models/instance.rb | 8 ++++++++
src/app/models/instance_key.rb | 2 ++
src/dbomatic/dbomatic | 5 +----
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index 1172998..281694a 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -187,6 +187,14 @@ class Instance < ActiveRecord::Base
end
end
+ def copy_cloud_account_key
+ return unless self.cloud_account and self.cloud_account.instance_key
+ new_key = InstanceKey.new(self.cloud_account.instance_key.attributes)
+ new_key.instance_key_owner = self
+ new_key.name = "#{self.name}_rsa_#{Time.now.to_f}"
+ new_key.save!
+ end
+
def self.get_user_instances_stats(user)
stats = {
:running_instances => 0,
diff --git a/src/app/models/instance_key.rb b/src/app/models/instance_key.rb
index 3ec3e51..d3d2892 100644
--- a/src/app/models/instance_key.rb
+++ b/src/app/models/instance_key.rb
@@ -27,6 +27,8 @@ class InstanceKey < ActiveRecord::Base
belongs_to :instance_key_owner, :polymorphic => true
+ # TODO: this is ec2 specific, create more general ProviderType model,
+ # this will have type, ssh_user, and optionally homedir fields.
REMOTE_USER = 'ec2-user'
REMOTE_HOME = '/home/ec2-user'
diff --git a/src/dbomatic/dbomatic b/src/dbomatic/dbomatic
index e021ff6..5f33aab 100755
--- a/src/dbomatic/dbomatic
+++ b/src/dbomatic/dbomatic
@@ -212,10 +212,7 @@ class CondorEventLog < Nokogiri::XML::SAX::Document
# FIXME: we are updating the instance_key_id here, but this is really not
# the right way or place to do this. This will have to be revisited when
# we come up with a real key management architecture
- new_key = InstanceKey.new(cloud_account.instance_key.attributes)
- new_key.instance_key_owner = inst
- new_key.save!
- inst.instance_key = new_key
+ inst.copy_cloud_account_key
inst.save!
end
Ok, this mostly works, but when I looked at the instance_keys table, I
saw that 2 entries were added for each instance I started, which should
not be. In my first attempt to use this, the key I downloaded did not
work, but in the second attempt it did. I suspect I got the wrong one
of the two entries on my first attempt. Perhaps the action of saving the
new key has not completed before some loops repeats? Do you see the
same behavior?
-j