Class: Renuo::Cli::Services::Hetzner::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/renuo/cli/services/hetzner.rb

Constant Summary collapse

BASE_URL =
"https://api.hetzner.cloud/v1/"

Instance Method Summary collapse

Constructor Details

#initialize(token) ⇒ Client

Returns a new instance of Client.



29
30
31
# File 'lib/renuo/cli/services/hetzner.rb', line 29

def initialize(token)
  @token = token
end

Instance Method Details

#get(resource) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/renuo/cli/services/hetzner.rb', line 52

def get(resource)
  uri = URI("#{BASE_URL}#{resource}")
  req = Net::HTTP::Get.new(uri)
  req["Authorization"] = "Bearer #{@token}"

  Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(req)
  end
end

#list_serversObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/renuo/cli/services/hetzner.rb', line 35

def list_servers
  response = get("servers")
  raise "Error fetching Hetzner servers: #{response.body}" unless response.is_a?(Net::HTTPSuccess)

  data = JSON.parse(response.body)
  data["servers"].map do |server|
    {
      id: server["id"],
      name: server["name"],
      status: server["status"],
      public_ip: server.dig("public_net", "ipv4", "ip"),
      private_ip: server.dig("private_net", 0, "ip"),
      fqdn: server.dig("public_net", "ipv4", "dns_ptr")
    }
  end
end