diff --git a/hieradata/roles/infra/incus/node.yaml b/hieradata/roles/infra/incus/node.yaml index 720285e..d250eb1 100644 --- a/hieradata/roles/infra/incus/node.yaml +++ b/hieradata/roles/infra/incus/node.yaml @@ -135,9 +135,10 @@ zfs::datasets: mountpoint: '/data/incus' # manage incus -incus::cluster::members_lookup: true -incus::cluster::members_role: roles::infra::incus::node -incus::cluster::master: prodnxsr0009 +incus::init: true +incus::bridge: br10 +incus::server_port: 8443 +incus::server_addr: "%{hiera('networking_loopback0_ip')}" # add sysadmin to incus-admin group profiles::accounts::sysadmin::extra_groups: diff --git a/modules/incus/lib/facter/incus.rb b/modules/incus/lib/facter/incus.rb index e9639f6..585bd28 100644 --- a/modules/incus/lib/facter/incus.rb +++ b/modules/incus/lib/facter/incus.rb @@ -13,6 +13,6 @@ Facter.add(:incus) do next {} if incus_output.empty? # Return an empty fact if there's no output # Parse the output as YAML and return it - YAML.safe_load(incus_output) + YAML.safe_load(incus_output, permitted_classes: [Symbol, Time, Date]) end end diff --git a/modules/incus/manifests/init.pp b/modules/incus/manifests/init.pp index 0e7dc19..d681fb9 100644 --- a/modules/incus/manifests/init.pp +++ b/modules/incus/manifests/init.pp @@ -1,9 +1,14 @@ class incus ( - Array[String] $packages = [ + Array[String] $packages = [ 'incus', 'incus-tools', 'incus-client' ], + Boolean $cluster = false, + Boolean $init = true, + String $bridge = 'incusbr0', + Stdlib::Port $server_port = 8443, + Stdlib::IP::Address $server_addr = $facts['networking']['ip'], ) { package { $packages: @@ -32,4 +37,21 @@ class incus ( match => '^root:', notify => Service['incus'], } + + if $init { + file {'/root/incus.preseed.yaml': + ensure => file, + owner => root, + group => root, + content => template('incus/join_preseed.yaml.erb') + } + + exec { 'initiate_incus': + path => ['/bin', '/usr/bin', '/sbin', '/usr/sbin'], + command => 'cat /root/incus.preseed.yaml | incus admin init --preseed && touch /root/.incus_initialized', + refreshonly => true, + creates => '/root/.incus_initialized', + subscribe => File['/root/incus.preseed.yaml'], + } + } } diff --git a/modules/incus/templates/join_preseed.yaml.erb b/modules/incus/templates/join_preseed.yaml.erb index 9491b08..71026af 100644 --- a/modules/incus/templates/join_preseed.yaml.erb +++ b/modules/incus/templates/join_preseed.yaml.erb @@ -1,20 +1,18 @@ -config: {} +config: + core.https_address: <%= @server_fqdn %>:<%= @server_port %> networks: [] storage_pools: [] -profiles: [] +storage_volumes: [] +profiles: +- config: {} + description: "" + devices: + eth0: + name: eth0 + nictype: bridged + parent: <%= @bridge %> + type: nic + name: default + project: default projects: [] -cluster: - server_name: <%= @server_fqdn %> - enabled: true - member_config: - - entity: storage-pool - name: local - key: source - value: "" - description: '"source" property for storage pool "local"' - cluster_address: <%= @cluster_address %>:<%= @server_port %> - cluster_certificate: | - <%= @certificate %> - server_address: <%= @server_fqdn %>:<%= @server_port %> - cluster_token: <%= @cluster_token %> - cluster_certificate_path: "" +cluster: null