diff --git a/README.md b/README.md index 38bc8a23..9b7d52eb 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,10 @@ information. It currently provides built-in configuration for Puppets' internal [vmpooler][vmpooler] hypervisor, [always-be-scheduling][always-be-scheduling] -hypervisor, static (non-provisioned) nodes, and is designed in a way that makes -it possible to easily add support for additional hypervisors -(any hypervisor type supported by [beaker][beaker]). +hypervisor, Vagrant with Virtualbox and Libvirt backend, +[Hetzner cloud](https://www.hetzner.com/cloud), static (non-provisioned) nodes, +and is designed in a way that makes it possible to easily add support for +additional hypervisors (any hypervisor type supported by [beaker][beaker]). To see the list of built-in hypervisors you can run: ``` diff --git a/lib/beaker-hostgenerator/hypervisor.rb b/lib/beaker-hostgenerator/hypervisor.rb index ca795fba..fc461bb6 100644 --- a/lib/beaker-hostgenerator/hypervisor.rb +++ b/lib/beaker-hostgenerator/hypervisor.rb @@ -45,7 +45,8 @@ def self.builtin_hypervisors() 'vagrant' => BeakerHostGenerator::Hypervisor::Vagrant, 'vagrant_libvirt' => BeakerHostGenerator::Hypervisor::Vagrant, 'docker' => BeakerHostGenerator::Hypervisor::Docker, - 'abs' => BeakerHostGenerator::Hypervisor::ABS + 'abs' => BeakerHostGenerator::Hypervisor::ABS, + 'hcloud' => BeakerHostGenerator::Hypervisor::Hcloud, } end @@ -114,3 +115,4 @@ def base_generate_node(node_info, base_config, bhg_version, *hypervisors) require 'beaker-hostgenerator/hypervisor/vagrant' require 'beaker-hostgenerator/hypervisor/docker' require 'beaker-hostgenerator/hypervisor/abs' +require 'beaker-hostgenerator/hypervisor/hcloud' diff --git a/lib/beaker-hostgenerator/hypervisor/hcloud.rb b/lib/beaker-hostgenerator/hypervisor/hcloud.rb new file mode 100644 index 00000000..1f0226be --- /dev/null +++ b/lib/beaker-hostgenerator/hypervisor/hcloud.rb @@ -0,0 +1,26 @@ +require 'beaker-hostgenerator/data' +require 'beaker-hostgenerator/hypervisor' + +module BeakerHostGenerator + module Hypervisor + + class Hcloud < BeakerHostGenerator::Hypervisor::Interface + include BeakerHostGenerator::Data + + def generate_node(node_info, base_config, bhg_version) + # split ostype into string and array + # ostype is ubuntu2204, debian10, rocky9 + os, version = node_info['ostype'].split(/(\D+)/).reject!(&:empty?) + base_config['image'] = case os + when 'ubuntu' + "#{os}-#{version[0, 2]}.#{version[2,2]}" + when 'centos' + version.to_i == 7 ? "#{os}-#{version}" : "#{os}-stream-#{version}" + else + "#{os}-#{version}" + end + return base_generate_node(node_info, base_config, bhg_version, :hcloud) + end + end + end +end diff --git a/test/fixtures/per-host-settings/hcloud-hypervisor.yaml b/test/fixtures/per-host-settings/hcloud-hypervisor.yaml new file mode 100644 index 00000000..7d8fcf1e --- /dev/null +++ b/test/fixtures/per-host-settings/hcloud-hypervisor.yaml @@ -0,0 +1,35 @@ +--- +arguments_string: --hypervisor hcloud centos7-64m-centos9-64m-debian11-64a-ubuntu2204-64a{hypervisor=hcloud} +environment_variables: {} +expected_hash: + HOSTS: + centos7-64-1: + image: centos-7 + platform: el-7-x86_64 + hypervisor: hcloud + roles: + - agent + - master + centos9-64-1: + image: centos-stream-9 + platform: el-9-x86_64 + hypervisor: hcloud + roles: + - agent + - master + debian11-64-1: + image: debian-11 + platform: debian-11-amd64 + hypervisor: hcloud + roles: + - agent + ubuntu2204-64-1: + image: ubuntu-22.04 + platform: ubuntu-22.04-amd64 + hypervisor: hcloud + roles: + - agent + CONFIG: + nfs_server: none + consoleport: 443 +expected_exception: