Sha256: 56112c9693cb9c6649bfa1ff72eed62c02ac7b21388df90e7726183e5dda4f29
Contents?: true
Size: 1.87 KB
Versions: 1
Compression:
Stored size: 1.87 KB
Contents
# frozen_string_literal: true require "hcloud" class Kraaken::Cloud::Hetzner < Kraaken::Cloud def provision(name, groups:) logger.with_progress(total: 100) do logger.info "Provisioning server #{name}" keys = client.ssh_keys user_data = config.load_template("cloud-config.yml", keys:) options = { name:, server_type: "cax41", image: "ubuntu-22.04", labels: {group: groups.join(".")}, location: "nbg1", networks: [client.networks.first.id], ssh_keys: keys.map(&:id), user_data: } logger.increment_progress by: 5 logger.info "Creating server" action, server = client.servers.create(**options) await_action action logger.increment_progress by: 10 server = await_startup server logger.info "Server started #{server.public_net.dig("ipv4", "ip")}" logger.increment_progress by: 10 logger.info "Regenrating ssh config" config.ssh.regenerate_config logger.increment_progress by: 5 sleep 10 logger.increment_progress by: 10 logger.info "Rebooting server after applying cloud-config" await_action server.reboot logger.increment_progress by: 10 prepare name end end def servers client.servers.map { Kraaken::Cloud::Server.new(name: _1.name, ip: _1.private_net.first&.ip, public_ip: _1.public_net.dig("ipv4", "ip"), status: _1.status) } end private def client @client ||= Hcloud::Client.new(token: config.credentials.password("hetzner")) end def await_action(action) while action.status == "running" sleep 2 action = client.actions.find(action.id) end end def await_startup(server) while server.status == "initializing" || server.status == "starting" || server.status == "off" sleep 3 server = client.servers.find(server.id) end server end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
kraaken-0.0.1 | lib/kraaken/cloud/hetzner.rb |