class Hetzner::SSHKey

Attributes

cluster_name[R]
hetzner_client[R]
ssh_key_path[R]

Public Class Methods

new(hetzner_client:, cluster_name:) click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 3
def initialize(hetzner_client:, cluster_name:)
  @hetzner_client = hetzner_client
  @cluster_name = cluster_name
end

Public Instance Methods

create(ssh_key_path:) click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 8
def create(ssh_key_path:)
  @ssh_key_path = ssh_key_path

  puts

  if ssh_key = find_ssh_key
    puts "SSH key already exists, skipping."
    puts
    return ssh_key["id"]
  end

  puts "Creating SSH key..."

  response = hetzner_client.post("/ssh_keys", ssh_key_config).body

  puts "...SSH key created."
  puts

  JSON.parse(response)["ssh_key"]["id"]
end
delete(ssh_key_path:) click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 29
def delete(ssh_key_path:)
  @ssh_key_path = ssh_key_path

  if ssh_key = find_ssh_key
    if ssh_key["name"] == cluster_name
      puts "Deleting ssh_key..."
      hetzner_client.delete("/ssh_keys", ssh_key["id"])
      puts "...ssh_key deleted."
    else
      puts "The SSH key existed before creating the cluster, so I won't delete it."
    end
  else
    puts "SSH key no longer exists, skipping."
  end

  puts
end

Private Instance Methods

find_ssh_key() click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 66
def find_ssh_key
  key = hetzner_client.get("/ssh_keys")["ssh_keys"].detect do |ssh_key|
    ssh_key["fingerprint"] == fingerprint
  end

  unless key
    key = hetzner_client.get("/ssh_keys")["ssh_keys"].detect do |ssh_key|
      ssh_key["name"] == cluster_name
    end
  end

  key
end
fingerprint() click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 62
def fingerprint
  @fingerprint ||= ::SSHKey.fingerprint(public_key)
end
public_key() click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 51
def public_key
  @public_key ||= File.read(ssh_key_path).chop
end
ssh_key_config() click to toggle source
# File lib/hetzner/infra/ssh_key.rb, line 55
def ssh_key_config
  {
    name: cluster_name,
    public_key: public_key
  }
end