diff --git a/global/overlay/etc/puppet/cosmos-rules.yaml b/global/overlay/etc/puppet/cosmos-rules.yaml
index 19410eea..dc0bde18 100644
--- a/global/overlay/etc/puppet/cosmos-rules.yaml
+++ b/global/overlay/etc/puppet/cosmos-rules.yaml
@@ -20,6 +20,14 @@ jmp.komreg.net:
    konsulter:
    autoupdate:
 
+kvmfe-fre-3.komreg.net:
+   eid::cloudimage:
+      fe-fre-3.komreg.net:
+        mac: '52:54:20:01:00:01'
+	description: 'eid fre frontend'
+	cpus: '4'
+	memory: '4096'
+
 nic.komreg.net:
    sunet_iaas_cloud:
    autoupdate:
diff --git a/global/overlay/etc/puppet/modules/eid/manifests/cloudimage.pp b/global/overlay/etc/puppet/modules/eid/manifests/cloudimage.pp
new file mode 100644
index 00000000..8c9f8db2
--- /dev/null
+++ b/global/overlay/etc/puppet/modules/eid/manifests/cloudimage.pp
@@ -0,0 +1,65 @@
+# Wrapper with eid common settings for sunet::cloudimage
+class eid::cloudimage(
+  String           $mac,
+  String           $cpus        = '1',
+  String           $memory      = '1024',
+  String           $description = undef,
+  Boolean          $dhcp        = true,
+  Optional[String] $ip          = undef,
+  Optional[String] $netmask     = undef,
+  Optional[String] $gateway     = undef,
+  Optional[String] $ip6         = undef,
+  Optional[String] $netmask6    = '64',
+  Optional[String] $gateway6    = undef,
+  Optional[Array]  $resolver    = undef,
+  Array[String]    $search      = ['komreg.net'],
+  String           $bridge      = 'br0',
+  String           $size        = '40G',
+  String           $local_size  = '0',
+  String           $image_url   = 'https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img',
+) {
+  # This is a hack, use SSH keys from KVM host?
+  $ft_ssh_key = hiera('ssh_authorized_keys')['mariah+CA747E57@nordu.net']
+  $cloudimage_ssh_keys = [sprintf('%s %s %s', $ft_ssh_key['type'], $ft_ssh_key['key'], $ft_ssh_key['name'])]
+
+  $_v6_resolver = $ip6 ? {
+    undef   => undef,
+    default => ['2001:6b0:1e::14',
+                '2001:6b0:1e::99',
+                ],
+  }
+
+  $_resolver1 = pick($resolver, $_v6_resolver, 'NOT_SET')
+  $_resolver = $_resolver1 ? {
+    'NOT_SET' => undef,
+    default   => $_resolver1,
+  }
+
+  sunet::cloudimage { $name:
+    image_url   => $image_url,
+    ssh_keys    => $cloudimage_ssh_keys,
+    apt_dir     => '/etc/cosmos/apt',
+    disable_ec2 => true,
+    #
+    bridge      => $bridge,
+    dhcp        => $dhcp,
+    mac         => $mac,
+    ip          => $ip,
+    netmask     => $netmask,
+    gateway     => $gateway,
+    ip6         => $ip6,
+    netmask6    => $netmask6,
+    gateway6    => $gateway6,
+    resolver    => $_resolver,
+    search      => $search,
+    #
+    repo        => $::cosmos_repo_origin_url,
+    tagpattern  => $::cosmos_tag_pattern,
+    #
+    cpus        => $cpus,
+    memory      => $memory,
+    description => $description,
+    size        => $size,
+    local_size  => $local_size,
+  }
+}