Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
6576538
Use importer pods for object-ref disk creation
Isteb4k May 19, 2026
d9abefc
Remove CDI DataVolume dependency
Isteb4k May 22, 2026
a1381d0
Merge branch 'main' into chore/remove-cdi
Isteb4k May 22, 2026
7642fca
Remove Bazel files from CDI importer source
Isteb4k May 22, 2026
29730f1
Clean up CDI importer artifact
Isteb4k May 22, 2026
75668ef
fix(ci): move package imports into import section in cdi-artifact wer…
Isteb4k May 22, 2026
0f768f0
fix(ci): add virtualDiskImporter digest to helm template validation f…
Isteb4k May 22, 2026
2fc7d3f
fix(controller): use upstream containerized-data-importer-api after C…
Isteb4k May 22, 2026
be518e0
fix(lint): satisfy golangci-lint after the CDI removal
Isteb4k May 22, 2026
8668dbf
fix(cdi-importer): replace github.com/docker/docker with a minimal st…
Isteb4k May 22, 2026
e89e9d8
chore(controller): regenerate vd source mocks to match moq v0.5.3 output
Isteb4k May 22, 2026
df6937f
fix(kube-api-rewriter): restore kubevirt core rewrite rules
Isteb4k May 22, 2026
239dea4
fix(storageprofile): keep CDI internal API group
Isteb4k May 22, 2026
364a8fb
fix(importer): shorten importer pod names
Isteb4k May 22, 2026
a05d2ee
refactor(cdi-artifact): flatten directory layout
Isteb4k May 22, 2026
8c54348
feat(import): report scaled import progress
Isteb4k May 22, 2026
c5b2220
fix(importer): give the cdi-importer pod a distinct name
Isteb4k May 22, 2026
453623f
fix(importer): clean up cdi-importer pod by its real name
Isteb4k May 22, 2026
354f4dc
refactor(disk): set protection finalizer at PVC creation, drop diskSe…
Isteb4k May 22, 2026
0009fcc
chore(disk): label scratch PVC and cdi-importer pod with quota-exclude
Isteb4k May 22, 2026
b257dcd
refactor(disk): centralize PVC import in PersistentVolumeClaimService
Isteb4k May 23, 2026
d9e99d4
refactor(pvc-importer): split import start and wait steps
Isteb4k May 25, 2026
80876a9
fix(cdi): clean up removed CDI resources on upgrade
Isteb4k May 26, 2026
06b16a1
fix(cdi): keep importer binary name for image build
Isteb4k May 26, 2026
9dacc9c
refactor(importer): rename cdi importer image to pvc importer
Isteb4k May 26, 2026
79e69b6
fix(cdi): keep CDI operator CRDs during cleanup
Isteb4k May 26, 2026
75f64c1
fix(e2e): recreate lost precreated CVIs
Isteb4k May 26, 2026
71046d1
fix(pvc-importer): use mounted block device path
Isteb4k May 26, 2026
31d1359
fix(cdi): keep rollback compatibility with main
Isteb4k May 26, 2026
add4ad4
fix(cdi): move cleanup to module hook
Isteb4k May 27, 2026
b95b230
fix(controller): resume pvc imports for existing targets
Isteb4k May 27, 2026
811ed0b
fix tests
Isteb4k Jun 17, 2026
ef050cb
fix
Isteb4k Jun 17, 2026
be39dd9
Merge remote-tracking branch 'origin/main' into chore/remove-cdi
Isteb4k Jun 17, 2026
a6d1d9b
test(e2e): expand block-device coverage and add cross-CSI provisionin…
Isteb4k Jun 17, 2026
078cbab
Merge remote-tracking branch 'origin/main' into chore/remove-cdi
Isteb4k Jun 17, 2026
1eceeaa
fix(rbac): grant virt-operator cdi.internal.virtualization permissions
Isteb4k Jun 17, 2026
097f2ac
fix
Isteb4k Jun 17, 2026
3189500
fix
Isteb4k Jun 17, 2026
ca654d0
fix
Isteb4k Jun 17, 2026
82abf93
fix
Isteb4k Jun 17, 2026
9fbb309
fix(import): stream live progress and guard it in e2e
Isteb4k Jun 18, 2026
b67b0ce
fix(lint): satisfy golangci-lint in virtualization-artifact and e2e
Isteb4k Jun 18, 2026
00b93a0
fix(progress): consistent format and stricter e2e timing guard
Isteb4k Jun 18, 2026
9b7fc55
fix(blockdevice): WFFC storage-class model, progress and quota guards
Isteb4k Jun 18, 2026
c2a61a4
fix(blockdevice): monotonic progress, terminating-ns condition, prech…
Isteb4k Jun 19, 2026
d122212
fix(blockdevice): atomic Pending->Provisioning progress, eager scrape…
Isteb4k Jun 19, 2026
4be6037
test(e2e/blockdevice): fail-fast observer invariants and stricter pro…
Isteb4k Jun 19, 2026
680608b
fix(vi): stream PVC import progress and size images from actual virtu…
Isteb4k Jun 19, 2026
209ae82
test(e2e/blockdevice): enforce progress observer contracts
Isteb4k Jun 19, 2026
8cc0139
fix(vi): bind smart-clone image PVCs
Isteb4k Jun 19, 2026
71b6c18
fix(blockdevice): align handler progress with observer contract
Isteb4k Jun 19, 2026
6bebed6
fix(blockdevice): align progress contracts
Isteb4k Jun 19, 2026
d2c4a78
fix(vi): prefer snapshot clone for PVC imports
Isteb4k Jun 19, 2026
b32ee04
feat(cdi): add PVC populator controller
Isteb4k Jun 20, 2026
c620c7f
fix(cdi): satisfy lint checks
Isteb4k Jun 20, 2026
c33d0cd
fix(populator): fail fast in e2e waits
Isteb4k Jun 20, 2026
9ff6b73
fix(populator): stabilize DVCR population
Isteb4k Jun 20, 2026
fa552a1
fix(populator): preserve DVCR PVC population semantics
Isteb4k Jun 20, 2026
0fb3661
fix(populator): unblock VirtualImage WFFC imports
Isteb4k Jun 20, 2026
826e663
fix(populator): implement host-assigned PVC cloning
Isteb4k Jun 21, 2026
aba419d
fix(controller): align PVC clone strategy with StorageProfile
Isteb4k Jun 22, 2026
35094ff
Merge branch 'main' into chore/remove-cdi
Isteb4k Jun 22, 2026
8cfa519
refactor(e2e): resolve WFFC and immediate StorageClasses from env
Isteb4k Jun 22, 2026
7becf77
Merge branch 'main' into chore/remove-cdi
Isteb4k Jun 22, 2026
1a310f8
fix(e2e): observers, StorageProfile GVR, quota and progress guards
Isteb4k Jun 22, 2026
2cea791
chore(lint): fix golangci-lint failures in artifact and e2e
Isteb4k Jun 22, 2026
939d871
feat(populator): event-driven reconcile and import lifecycle logs
Isteb4k Jun 22, 2026
700c810
feat(importer): report real host-assigned PVC import progress from ta…
Isteb4k Jun 22, 2026
acdd038
chore(cdi-artifact): add golangci-lint, unit tests and CI job
Isteb4k Jun 22, 2026
d5b56e4
fix(cdi-artifact): read IMPORTER_NBD_ENDPOINT as plain text
Isteb4k Jun 22, 2026
dedeacb
feat(cdi-artifact): use nbdcopy for host-assigned PVC clone
Isteb4k Jun 22, 2026
ee65095
test(e2e): re-enable VirtualDisk from VirtualImage on PVC spec
Isteb4k Jun 22, 2026
563bd08
test(e2e): relax progress checks for VD from VI on PVC
Isteb4k Jun 23, 2026
7edb744
fix(vi): auto-size PVC from image without false insufficient-size check
Isteb4k Jun 23, 2026
0fa1bcf
fix(vi): set status.format from PVC storage type, not source metadata
Isteb4k Jun 23, 2026
276fe7d
Merge branch 'main' into chore/remove-cdi
Isteb4k Jun 23, 2026
c39e5a1
test(e2e): derive expected image format from storage class volume mode
Isteb4k Jun 23, 2026
b8ed189
test(e2e): use default storage class for blockdevice creation
Isteb4k Jun 23, 2026
c2f69e1
fix(storage): use snapshot clone strategy for replicated PVCs
Isteb4k Jun 23, 2026
b9fc4e1
test(e2e): enable virtual disk snapshot creation scenario
Isteb4k Jun 23, 2026
31dd3eb
test(e2e): verify virtual image disks boot VMs
Isteb4k Jun 23, 2026
978a7c4
test(e2e): honor storage class override in precheck
Isteb4k Jun 23, 2026
3e76b0d
test(e2e): pin blockdevice VMs to source node
Isteb4k Jun 23, 2026
9968150
fix(storage): allow filesystem-backed image PVCs
Isteb4k Jun 24, 2026
474985a
test(e2e): verify iso installer screen over VNC
Isteb4k Jun 24, 2026
d294dee
Merge branch 'main' into chore/remove-cdi
Isteb4k Jun 24, 2026
fc7d535
fix: use kubevirt volume umount retries
Isteb4k Jun 24, 2026
163bd8d
fix: bust virt artifact cache
Isteb4k Jun 24, 2026
dbb9f93
test(e2e): clean up block device helpers
Isteb4k Jun 24, 2026
5307c42
fix: move virt artifact cache bust into shell stages
Isteb4k Jun 24, 2026
c4390ad
fix(kube-api-rewriter): restore VirtualMachineRestore rewrite rules
Isteb4k Jun 26, 2026
6c9c39b
fix: use StorageClass annotation to select VolumeSnapshotClass for PV…
Isteb4k Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/dev_module_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,33 @@ jobs:
task virtualization-controller:init
task virtualization-controller:test:unit

cdi_artifact:
runs-on: ubuntu-22.04
name: cdi-artifact lint and unit tests
steps:
- name: Set up Go ${{ env.GO_VERSION }}
uses: actions/setup-go@v5
with:
go-version: "${{ env.GO_VERSION }}"

- name: Install Task
uses: go-task/setup-task@v2
with:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Install golangci-lint
run: |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v${{ env.GOLANGCI_LINT_VERSION}}
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH

- name: Run cdi-artifact lint and unit tests
run: task cdi-artifact:ci

test_scripts_js:
runs-on: ubuntu-22.04
name: Run JS unit tests
Expand Down
3 changes: 3 additions & 0 deletions Taskfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ includes:
gohooks:
taskfile: ./images/hooks
dir: ./images/hooks
cdi-artifact:
taskfile: ./images/cdi-artifact
dir: ./images/cdi-artifact
e2e:
taskfile: ./test/e2e
dir: ./test/e2e
Expand Down
5 changes: 5 additions & 0 deletions api/client/kubeclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ type Client interface {
VirtualMachines(namespace string) virtualizationv1alpha2.VirtualMachineInterface
VirtualImages(namespace string) virtualizationv1alpha2.VirtualImageInterface
VirtualDisks(namespace string) virtualizationv1alpha2.VirtualDiskInterface
VirtualDiskSnapshots(namespace string) virtualizationv1alpha2.VirtualDiskSnapshotInterface
VirtualMachineBlockDeviceAttachments(namespace string) virtualizationv1alpha2.VirtualMachineBlockDeviceAttachmentInterface
VirtualMachineIPAddresses(namespace string) virtualizationv1alpha2.VirtualMachineIPAddressInterface
VirtualMachineIPAddressLeases() virtualizationv1alpha2.VirtualMachineIPAddressLeaseInterface
Expand Down Expand Up @@ -96,6 +97,10 @@ func (c client) VirtualDisks(namespace string) virtualizationv1alpha2.VirtualDis
return c.virtClient.VirtualizationV1alpha2().VirtualDisks(namespace)
}

func (c client) VirtualDiskSnapshots(namespace string) virtualizationv1alpha2.VirtualDiskSnapshotInterface {
return c.virtClient.VirtualizationV1alpha2().VirtualDiskSnapshots(namespace)
}

func (c client) VirtualMachineBlockDeviceAttachments(namespace string) virtualizationv1alpha2.VirtualMachineBlockDeviceAttachmentInterface {
return c.virtClient.VirtualizationV1alpha2().VirtualMachineBlockDeviceAttachments(namespace)
}
Expand Down
3 changes: 1 addition & 2 deletions build/components/versions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ firmware:
libvirt: v10.9.0
edk2: stable202411
core:
3p-kubevirt: v1.6.2-v12n.49
3p-containerized-data-importer: v1.60.3-v12n.20
3p-kubevirt: fix/volume-umount-retries
distribution: 2.8.3
package:
acl: v2.3.1
Expand Down
748 changes: 0 additions & 748 deletions crds/embedded/datavolumes.yaml

This file was deleted.

155 changes: 155 additions & 0 deletions crds/embedded/storageprofiles.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
labels:
heritage: deckhouse
module: virtualization
app.kubernetes.io/component: virtualization-controller
name: internalvirtualizationstorageprofiles.cdi.internal.virtualization.deckhouse.io
spec:
group: cdi.internal.virtualization.deckhouse.io
names:
categories:
- intvirt
kind: InternalVirtualizationStorageProfile
listKind: InternalVirtualizationStorageProfileList
plural: internalvirtualizationstorageprofiles
shortNames:
- intvirtsp
singular: internalvirtualizationstorageprofile
scope: Cluster
versions:
- name: v1beta1
schema:
openAPIV3Schema:
description: StorageProfile provides storage capability recommendations
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: StorageProfileSpec defines specification for StorageProfile
properties:
claimPropertySets:
description: ClaimPropertySets is a provided set of properties applicable
to PVC
items:
description: ClaimPropertySet is a set of properties applicable
to PVC
properties:
accessModes:
description: |-
AccessModes contains the desired access modes the volume should have.
More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
items:
type: string
maxItems: 4
type: array
x-kubernetes-validations:
- message: Illegal AccessMode
rule: self.all(am, am in ['ReadWriteOnce', 'ReadOnlyMany',
'ReadWriteMany', 'ReadWriteOncePod'])
volumeMode:
description: |-
VolumeMode defines what type of volume is required by the claim.
Value of Filesystem is implied when not included in claim spec.
enum:
- Block
- Filesystem
type: string
required:
- accessModes
- volumeMode
type: object
maxItems: 8
type: array
cloneStrategy:
description: CloneStrategy defines the preferred method for cloning
a volume
type: string
dataImportCronSourceFormat:
description: DataImportCronSourceFormat defines the format of the
DataImportCron-created disk image sources
type: string
snapshotClass:
description: SnapshotClass is optional specific VolumeSnapshotClass
for CloneStrategySnapshot. If not set, a VolumeSnapshotClass is
chosen according to the provisioner.
type: string
type: object
status:
description: StorageProfileStatus provides the most recently observed
status of the StorageProfile
properties:
claimPropertySets:
description: ClaimPropertySets computed from the spec and detected
in the system
items:
description: ClaimPropertySet is a set of properties applicable
to PVC
properties:
accessModes:
description: |-
AccessModes contains the desired access modes the volume should have.
More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
items:
type: string
maxItems: 4
type: array
x-kubernetes-validations:
- message: Illegal AccessMode
rule: self.all(am, am in ['ReadWriteOnce', 'ReadOnlyMany',
'ReadWriteMany', 'ReadWriteOncePod'])
volumeMode:
description: |-
VolumeMode defines what type of volume is required by the claim.
Value of Filesystem is implied when not included in claim spec.
enum:
- Block
- Filesystem
type: string
required:
- accessModes
- volumeMode
type: object
maxItems: 8
type: array
cloneStrategy:
description: CloneStrategy defines the preferred method for cloning
a volume
type: string
dataImportCronSourceFormat:
description: DataImportCronSourceFormat defines the format of the
DataImportCron-created disk image sources
type: string
provisioner:
description: The Storage class provisioner plugin name
type: string
snapshotClass:
description: SnapshotClass is optional specific VolumeSnapshotClass
for CloneStrategySnapshot. If not set, a VolumeSnapshotClass is
chosen according to the provisioner.
type: string
storageClass:
description: The StorageClass name for which capabilities are defined
type: string
type: object
required:
- spec
type: object
served: true
storage: true
2 changes: 1 addition & 1 deletion crds/embedded/virtualmachines.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4461,7 +4461,7 @@ spec:
ready
type: boolean
restoreInProgress:
description: RestoreInProgress is the name of the VirtualMachineRestore
description: RestoreInProgress is the name of the restore operation
currently executing
type: string
runStrategy:
Expand Down
3 changes: 2 additions & 1 deletion images/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ Kubevirt is built as a single bundle as a virt-artifact. Then all necessary virt

https://github.com/kubevirt/kubevirt/blob/v1.3.1/BUILD.bazel#L215-L224

The same thing for cdi (cdi-artifact).
The CDI importer code used by virtual-disk-importer is vendored in
images/cdi-artifact and built from this repository.
7 changes: 0 additions & 7 deletions images/cdi-apiserver/mount-points.yaml

This file was deleted.

16 changes: 0 additions & 16 deletions images/cdi-apiserver/werf.inc.yaml

This file was deleted.

2 changes: 0 additions & 2 deletions images/cdi-artifact/.gitignore

This file was deleted.

104 changes: 104 additions & 0 deletions images/cdi-artifact/.golangci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# https://golangci-lint.run/usage/configuration/
version: "2"

run:
concurrency: 4
timeout: 10m

issues:
# Show all errors.
max-issues-per-linter: 0
max-same-issues: 0
exclude:
- "don't use an underscore in package name"

output:
sort-results: true

exclusions:
paths:
- "^staging/.*"
- "^zz_generated.*"

formatters:
enable:
- gci
- gofmt
- gofumpt
- goimports
settings:
gci:
sections:
- standard
- default
- prefix(kubevirt.io/containerized-data-importer/)
gofumpt:
extra-rules: true
goimports:
local-prefixes: kubevirt.io/containerized-data-importer/

linters:
default: none
enable:
- asciicheck
- bidichk
- bodyclose
- contextcheck
- copyloopvar
- dogsled
- errcheck
- errname
- errorlint
- gocritic
- govet
- ineffassign
- misspell
- nolintlint
- reassign
- revive
- staticcheck
- testifylint
- unconvert
- unparam
- unused
- usetesting
- testableexamples
- thelper
- tparallel
- whitespace
- wastedassign
- importas
settings:
errcheck:
exclude-functions:
- "(*os.File).Close"
- "(*net.TCPConn).Close"
- "(io.ReadCloser).Close"
- "(net.Listener).Close"
- "(net.Conn).Close"
- "(*golang.org/x/crypto/ssh.Session).Close"
- "(*github.com/fsnotify/fsnotify.Watcher).Close"
staticcheck:
dot-import-whitelist:
- github.com/onsi/ginkgo/v2
- github.com/onsi/gomega
revive:
rules:
- name: dot-imports
disabled: true
- name: exported
disabled: true
- name: package-comments
disabled: true
nolintlint:
allow-no-explanation: [funlen, gocognit, lll]
require-explanation: true
require-specific: true
importas:
no-unaliased: true
no-extra-aliases: false
alias:
- pkg: k8s.io/api/core/v1
alias: corev1
- pkg: k8s.io/apimachinery/pkg/api/resource
alias: ""
Loading
Loading