class Hetzner::Server
Attributes
cluster_name[R]
hetzner_client[R]
Public Class Methods
new(hetzner_client:, cluster_name:)
click to toggle source
# File lib/hetzner/infra/server.rb, line 3 def initialize(hetzner_client:, cluster_name:) @hetzner_client = hetzner_client @cluster_name = cluster_name end
Public Instance Methods
create(location:, instance_type:, instance_id:, firewall_id:, network_id:, ssh_key_id:)
click to toggle source
# File lib/hetzner/infra/server.rb, line 8 def create(location:, instance_type:, instance_id:, firewall_id:, network_id:, ssh_key_id:) puts server_name = "#{cluster_name}-#{instance_type}-#{instance_id}" if server = find_server(server_name) puts "Server #{server_name} already exists, skipping." puts return server end puts "Creating server #{server_name}..." server_config = { name: server_name, location: location, image: "ubuntu-20.04", firewalls: [ { firewall: firewall_id } ], networks: [ network_id ], server_type: instance_type, ssh_keys: [ ssh_key_id ], user_data: user_data, labels: { cluster: cluster_name, role: (server_name =~ /master/ ? "master" : "worker") } } response = hetzner_client.post("/servers", server_config).body puts "...server #{server_name} created." puts JSON.parse(response)["server"] end
delete(server_name:)
click to toggle source
# File lib/hetzner/infra/server.rb, line 50 def delete(server_name:) if server = find_server(server_name) puts "Deleting server #{server_name}..." hetzner_client.delete "/servers", server["id"] puts "...server #{server_name} deleted." else puts "Server #{server_name} no longer exists, skipping." end end
Private Instance Methods
find_server(server_name)
click to toggle source
# File lib/hetzner/infra/server.rb, line 64 def find_server(server_name) hetzner_client.get("/servers")["servers"].detect{ |network| network["name"] == server_name } end
user_data()
click to toggle source
# File lib/hetzner/infra/server.rb, line 68 def user_data <<~EOS #cloud-config packages: - fail2ban runcmd: - sed -i 's/[#]*PermitRootLogin yes/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config - sed -i 's/[#]*PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config - systemctl restart sshd - systemctl stop systemd-resolved - systemctl disable systemd-resolved - rm /etc/resolv.conf - echo "nameserver 1.1.1.1" > /etc/resolv.conf - echo "nameserver 1.0.0.1" >> /etc/resolv.conf EOS end