Method: CM::Resource::AWS#update_keypair

Defined in:
lib/CM/resource/AWS.rb

#update_keypair(name, data) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/CM/resource/AWS.rb', line 143

def update_keypair(name, data)
  begin
    info('check_keypair', { :id => id, :name => parameters[:Name] })

    aws_keypair = fetch_keypair(name)
    private_key_file = aws_keypair[:file]
    update = false

    if File.exist?(private_key_file)
      local_keypair = `openssl pkcs8 -in #{private_key_file} -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c`.strip.sub(/^[^\s]+\s+/, '')

      if aws_keypair[:fingerprint] != local_keypair
        File.delete(private_key_file)
        update = true
      end
    else
      update = true
    end

    if update
      info('update_keypair', { :id => id, :name => parameters[:Name] })

      compute.delete_key_pair(name)
      create_keypair(name, data, true)
    end
  rescue => error
    myself.status = code.aws_request_failed
    raise error
  end
end