Skip to content

Commit abbf573

Browse files
committed
fix: allow image based deployment without user-data
1 parent 068ad64 commit abbf573

3 files changed

Lines changed: 37 additions & 6 deletions

File tree

app/services/foreman_opentofu/opentofu_executer.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ def initialize(compute_resource, args = {})
99
@cr_attrs = args.to_h.with_indifferent_access
1010
@resource = @cr_attrs['resource']
1111
@host_name = @cr_attrs['name'] || 'test'
12+
@key_pair = @compute_resource.key_pair
1213
end
1314

1415
def run(mode = '')
@@ -122,6 +123,8 @@ def render_template(mode)
122123
host_name: @host_name,
123124
resource: @resource,
124125
dry_run: dry_run(mode),
126+
keygen: (mode == 'keygen'),
127+
ssh_key: @key_pair,
125128
user_data_filename: @user_data_filename,
126129
}
127130
scope = Foreman::Renderer.get_scope(source: template, variables: variables)

app/views/templates/provisioning/hetzner_provision_host.erb

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,21 @@ provider "hcloud" {
1515
<% if @resource %>
1616
<%= resource_block(@resource) %>
1717

18+
<% elsif @keygen %>
19+
<%- if @ssh_key.present? %>
20+
resource "hcloud_ssh_key" "deploy_key" {
21+
name = "<%= @ssh_key.name %>"
22+
public_key = "<%= @ssh_key.public_key %>"
23+
}
24+
<%- end %>
25+
1826
<% elsif !@dry_run %>
27+
<%- if @ssh_key.present? %>
28+
data "hcloud_ssh_key" "deploy_key" {
29+
name = "<%= @ssh_key.name %>"
30+
}
31+
<%- end %>
32+
1933
# Create a new server running debian
2034
resource "hcloud_server" "node1" {
2135
name = "<%= @host_name %>"
@@ -24,14 +38,18 @@ resource "hcloud_server" "node1" {
2438

2539
<%= vm_attributes(['name', 'image']) %>
2640

27-
<%- if @cr_attrs['image_id'].present? %>
28-
image = <%= @cr_attrs['image_id'] %>
41+
<%- if @cr_attrs['image_id'].present? %>
42+
image = <%= @cr_attrs['image_id'] %>
2943
<%- if @user_data_filename.present? %>
30-
user_data = "${file("<%= @user_data_filename %>")}"
44+
user_data = "${file("<%= @user_data_filename %>")}"
3145
<%- elsif @cr_attrs['user_data'].present? %>
32-
user_data = <%= @cr_attrs['user_data'] %>
33-
<%- end %>
46+
user_data = <%= @cr_attrs['user_data'] %>
47+
<%- elsif @ssh_key.present? %>
48+
ssh_keys = [
49+
data.hcloud_ssh_key.deploy_key.id
50+
]
3451
<%- end %>
52+
<%- end %>
3553

3654
<%= build_nics %>
3755

lib/foreman_opentofu/provider_types/hetzner.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
require "#{ForemanOpentofu::Engine.root}/app/services/foreman_opentofu/provider_type"
44

55
ForemanOpentofu::ProviderTypeManager.register('hetzner') do
6-
@capabilities = [:image, :power_status_only]
6+
@capabilities = [:image, :key_pair, :power_status_only]
77

88
def provided_attributes
99
{
@@ -95,6 +95,16 @@ def build_interfaces_attributes(networks)
9595
},
9696
output_path_postfix: 'images',
9797
} },
98+
{ name: 'available_ssh_keys', type: 'select',
99+
label: 'SSH-Deployment-Keys', options: {
100+
data_source: {
101+
name: 'hcloud_ssh_keys',
102+
},
103+
entity: {
104+
fingerprint: 'fingerprint',
105+
},
106+
output_path_postfix: 'ssh_keys',
107+
} },
98108
]
99109

100110
self.disk_renderer = proc do |_disk, index = 0|

0 commit comments

Comments
 (0)