diff --git a/.web-docs/components/builder/clone/README.md b/.web-docs/components/builder/clone/README.md index 1245b686..c3b3da92 100644 --- a/.web-docs/components/builder/clone/README.md +++ b/.web-docs/components/builder/clone/README.md @@ -472,6 +472,9 @@ Example: This cannot work with virtio disks. +- `skip_replication` (bool) - Exclude disk from replication jobs. + Defaults to false. + diff --git a/.web-docs/components/builder/iso/README.md b/.web-docs/components/builder/iso/README.md index 154e9c8b..e90f38ab 100644 --- a/.web-docs/components/builder/iso/README.md +++ b/.web-docs/components/builder/iso/README.md @@ -634,6 +634,9 @@ Example: This cannot work with virtio disks. +- `skip_replication` (bool) - Exclude disk from replication jobs. + Defaults to false. + diff --git a/builder/proxmox/common/config.go b/builder/proxmox/common/config.go index bf02eb14..2ffa6add 100644 --- a/builder/proxmox/common/config.go +++ b/builder/proxmox/common/config.go @@ -386,6 +386,9 @@ type diskConfig struct { // // This cannot work with virtio disks. SSD bool `mapstructure:"ssd"` + // Exclude disk from replication jobs. + // Defaults to false. + SkipReplication bool `mapstructure:"skip_replication"` } // Set the efidisk storage options. diff --git a/builder/proxmox/common/config.hcl2spec.go b/builder/proxmox/common/config.hcl2spec.go index fd0e1b9e..4de0b8dd 100644 --- a/builder/proxmox/common/config.hcl2spec.go +++ b/builder/proxmox/common/config.hcl2spec.go @@ -354,6 +354,7 @@ type FlatdiskConfig struct { ExcludeFromBackup *bool `mapstructure:"exclude_from_backup" cty:"exclude_from_backup" hcl:"exclude_from_backup"` Discard *bool `mapstructure:"discard" cty:"discard" hcl:"discard"` SSD *bool `mapstructure:"ssd" cty:"ssd" hcl:"ssd"` + SkipReplication *bool `mapstructure:"skip_replication" cty:"skip_replication" hcl:"skip_replication"` } // FlatMapstructure returns a new FlatdiskConfig. @@ -379,6 +380,7 @@ func (*FlatdiskConfig) HCL2Spec() map[string]hcldec.Spec { "exclude_from_backup": &hcldec.AttrSpec{Name: "exclude_from_backup", Type: cty.Bool, Required: false}, "discard": &hcldec.AttrSpec{Name: "discard", Type: cty.Bool, Required: false}, "ssd": &hcldec.AttrSpec{Name: "ssd", Type: cty.Bool, Required: false}, + "skip_replication": &hcldec.AttrSpec{Name: "skip_replication", Type: cty.Bool, Required: false}, } return s } diff --git a/builder/proxmox/common/step_start_vm.go b/builder/proxmox/common/step_start_vm.go index f54d8b1a..c1d9d0cb 100644 --- a/builder/proxmox/common/step_start_vm.go +++ b/builder/proxmox/common/step_start_vm.go @@ -465,6 +465,10 @@ func generateProxmoxDisks(disks []diskConfig, isos []ISOsConfig, cloneSourceDisk if disks[idx].ExcludeFromBackup { backup = false } + replicate := true + if disks[idx].SkipReplication { + replicate = false + } switch disks[idx].Type { case "ide": @@ -478,6 +482,7 @@ func generateProxmoxDisks(disks []diskConfig, isos []ISOsConfig, cloneSourceDisk Discard: disks[idx].Discard, EmulateSSD: disks[idx].SSD, Backup: backup, + Replicate: replicate, }, } for { @@ -518,6 +523,7 @@ func generateProxmoxDisks(disks []diskConfig, isos []ISOsConfig, cloneSourceDisk EmulateSSD: disks[idx].SSD, IOThread: disks[idx].IOThread, Backup: backup, + Replicate: replicate, }, } for { @@ -551,6 +557,7 @@ func generateProxmoxDisks(disks []diskConfig, isos []ISOsConfig, cloneSourceDisk Discard: disks[idx].Discard, EmulateSSD: disks[idx].SSD, Backup: backup, + Replicate: replicate, }, } for { @@ -584,6 +591,7 @@ func generateProxmoxDisks(disks []diskConfig, isos []ISOsConfig, cloneSourceDisk Discard: disks[idx].Discard, IOThread: disks[idx].IOThread, Backup: backup, + Replicate: replicate, }, } for { diff --git a/builder/proxmox/common/step_start_vm_test.go b/builder/proxmox/common/step_start_vm_test.go index 76bd2f06..06f4969e 100644 --- a/builder/proxmox/common/step_start_vm_test.go +++ b/builder/proxmox/common/step_start_vm_test.go @@ -594,6 +594,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { EmulateSSD: false, IOThread: false, Backup: true, + Replicate: true, }, }, }, @@ -633,6 +634,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { EmulateSSD: false, IOThread: true, Backup: true, + Replicate: true, }, }, }, @@ -672,6 +674,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, }, @@ -711,6 +714,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, }, @@ -748,6 +752,83 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: false, + Replicate: true, + }, + }, + }, + }, + }, + { + "skip disk replication", + []diskConfig{ + { + Type: "virtio", + StoragePool: "local-lvm", + Size: "10G", + CacheMode: "none", + DiskFormat: "qcow2", + IOThread: true, + Discard: false, + SSD: false, + SkipReplication: true, + }, + }, + []ISOsConfig{}, + []string{}, + false, + &proxmox.QemuStorages{ + Ide: &proxmox.QemuIdeDisks{}, + Sata: &proxmox.QemuSataDisks{}, + Scsi: &proxmox.QemuScsiDisks{}, + VirtIO: &proxmox.QemuVirtIODisks{ + Disk_0: &proxmox.QemuVirtIOStorage{ + Disk: &proxmox.QemuVirtIODisk{ + SizeInKibibytes: 10485760, + Storage: "local-lvm", + Cache: proxmox.QemuDiskCache("none"), + Format: proxmox.QemuDiskFormat("qcow2"), + Discard: false, + IOThread: true, + Backup: true, + Replicate: false, + }, + }, + }, + }, + }, + { + "do not skip disk replication", + []diskConfig{ + { + Type: "virtio", + StoragePool: "local-lvm", + Size: "10G", + CacheMode: "none", + DiskFormat: "qcow2", + IOThread: true, + Discard: false, + SSD: false, + SkipReplication: false, + }, + }, + []ISOsConfig{}, + []string{}, + false, + &proxmox.QemuStorages{ + Ide: &proxmox.QemuIdeDisks{}, + Sata: &proxmox.QemuSataDisks{}, + Scsi: &proxmox.QemuScsiDisks{}, + VirtIO: &proxmox.QemuVirtIODisks{ + Disk_0: &proxmox.QemuVirtIOStorage{ + Disk: &proxmox.QemuVirtIODisk{ + SizeInKibibytes: 10485760, + Storage: "local-lvm", + Cache: proxmox.QemuDiskCache("none"), + Format: proxmox.QemuDiskFormat("qcow2"), + Discard: false, + IOThread: true, + Backup: true, + Replicate: true, }, }, }, @@ -1118,6 +1199,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, Disk_1: &proxmox.QemuIdeStorage{ @@ -1128,6 +1210,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, }, @@ -1140,6 +1223,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, Disk_1: &proxmox.QemuSataStorage{ @@ -1150,6 +1234,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, }, @@ -1163,6 +1248,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, Disk_1: &proxmox.QemuScsiStorage{ @@ -1174,6 +1260,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, }, @@ -1187,6 +1274,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, Disk_1: &proxmox.QemuVirtIOStorage{ @@ -1198,6 +1286,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, }, @@ -1273,6 +1362,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, Disk_1: &proxmox.QemuIdeStorage{ @@ -1283,6 +1373,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, Disk_2: &proxmox.QemuIdeStorage{ @@ -1293,6 +1384,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, }, @@ -1305,6 +1397,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, Disk_1: &proxmox.QemuSataStorage{ @@ -1315,6 +1408,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Format: proxmox.QemuDiskFormat("qcow2"), Discard: false, Backup: true, + Replicate: true, }, }, Disk_2: &proxmox.QemuSataStorage{ @@ -1336,6 +1430,7 @@ func TestGenerateProxmoxDisks(t *testing.T) { Discard: false, IOThread: true, Backup: true, + Replicate: true, }, }, }, diff --git a/docs-partials/builder/proxmox/common/diskConfig-not-required.mdx b/docs-partials/builder/proxmox/common/diskConfig-not-required.mdx index 7e880550..c419b19e 100644 --- a/docs-partials/builder/proxmox/common/diskConfig-not-required.mdx +++ b/docs-partials/builder/proxmox/common/diskConfig-not-required.mdx @@ -41,4 +41,7 @@ This cannot work with virtio disks. +- `skip_replication` (bool) - Exclude disk from replication jobs. + Defaults to false. +