Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
7ed0cec
Add pre-commit hook to validate dependabot.yml (#14107)
jbampton Oct 5, 2026
e6cd123
virtual router: Add route-maps to BGP peers for Routed Mode (#9964)
wido Oct 7, 2026
ed1db53
.github: Upgrade docker/login-action to fix ASF Allowlist failure (#1…
jbampton Oct 7, 2026
17294ca
dont show unathorized notification for prelogin (#14054)
sudo87 Oct 8, 2026
f03cffc
feature: instance boot group and readiness rules (#13907)
shwstppr Oct 8, 2026
68cff97
Upgrade Netris SDK version to 1.1.0 since 24.0 (#14365)
nvazquez Oct 9, 2026
5aa60ab
systemvmtemplate: bump to Debian 13 'trixie' and ACS 4.23
weizhouapache Mar 30, 2026
3d91402
pom.xml: update to systemvm template 4.23.0.0
weizhouapache Mar 30, 2026
0300e07
Update URL and ACS version
weizhouapache Oct 13, 2026
9c402d8
systemvmtemplate: fix build on Debian 13
weizhouapache Oct 13, 2026
a945a7c
Develocity integration (#14394)
GutoVeronezi Oct 14, 2026
d3f0700
Restore VMware-to-KVM migration changes from #13656 (#14256)
andrijapanicsb Oct 14, 2026
cad9138
engine-schema: use new systemvm template directory and file names
weizhouapache Oct 13, 2026
405cdf4
engine-schema: use new systemvm template names in metadata and export…
weizhouapache Oct 16, 2026
3308b7c
setup: update the Debian 13 templates, add build-acs-image.sh
weizhouapache Oct 19, 2026
06a9466
schema: set the guest OS of the built-in Debian 13 templates to Debia…
weizhouapache Oct 20, 2026
39a61c8
systemvm: create /etc/iproute2/rt_tables at bootstrap if it does not …
weizhouapache Oct 20, 2026
363dea6
marvin: use the shared public tiny template in the smoke tests
weizhouapache Oct 21, 2026
5ae335c
test_snapshots: register the template in the standalone backup class …
weizhouapache Oct 21, 2026
a069b16
systemvm: start and stop the cloud-init units of cloud-init 25.1
weizhouapache Oct 21, 2026
155a3cb
systemvmtemplate: install ntpsec instead of chrony
weizhouapache Oct 21, 2026
60ea381
systemvm: do not use the cgi module in the password server
weizhouapache Oct 21, 2026
7f86ab0
test_network_ipv6: accept the ICMPv6 code number in the nft rule
weizhouapache Oct 21, 2026
9e64d81
test_vpc_ipv6: accept the ICMPv6 code number in the nft rule
weizhouapache Oct 21, 2026
b8ad53f
build-acs-image.sh: install nfs-common in the Debian and Ubuntu images
weizhouapache Oct 21, 2026
9729c4f
smoke tests: use the Debian 13 built-in template on all hypervisors
weizhouapache Oct 22, 2026
54d8e6e
templates.sql: update the SHA-512 checksums of the Debian 13 built-in…
weizhouapache Oct 22, 2026
da04f21
templates.sql: use the 20261021-2638 Debian 13 images for the built-i…
weizhouapache Oct 22, 2026
9ee7048
systemvm: enable cloud-init when the system VM starts it on Debian 13
weizhouapache Oct 23, 2026
d823180
test_backup_recovery_nas: sync the guest after writing the marker files
weizhouapache Oct 23, 2026
4d1618e
systemvmtemplate: install isc-dhcp-client on Debian 13
weizhouapache Oct 23, 2026
34f800f
systemvmtemplate: prefer dhclient to dhcpcd in the cloud-init configu…
weizhouapache Oct 24, 2026
7eee672
systemvmtemplate: add the cloud-init settings of the CKS nodes to the…
weizhouapache Oct 24, 2026
4d0d651
build-acs-image.sh: add the Apache license header
weizhouapache Oct 26, 2026
fccbcbb
templates.sql: download the Debian 13 built-in templates from downloa…
weizhouapache Oct 26, 2026
a005111
Keep the template install path when a download fails without one
weizhouapache Oct 26, 2026
2a518d7
schema: deploy the built-in Debian 13 VMware template as is
weizhouapache Oct 26, 2026
30b40f3
Merge remote-tracking branch 'shapeblue/24-builtin-debian13-templates…
weizhouapache Oct 27, 2026
fc518e0
build-acs-image.sh: do not force PasswordAuthentication in sshd
weizhouapache Oct 26, 2026
4596ad4
schema: set the NIC and disk controller of the built-in Debian 13 VMw…
weizhouapache Oct 26, 2026
fcaf053
marvin: allow ssh login with password on the built-in template, use t…
weizhouapache Oct 26, 2026
2341262
templates.sql: use the rebuilt Debian 13 built-in templates (20261026…
weizhouapache Oct 27, 2026
463db81
systemvm: set the hostname without dbus if hostnamectl fails
weizhouapache Oct 28, 2026
b84b351
marvin: do not fail to deploy a VM from an ISO or as a normal user
weizhouapache Oct 27, 2026
fae0338
test: fix smoke test failures on xen/vmware (#13628)
weizhouapache Oct 23, 2026
fba819d
build-acs-image.sh: install xe-guest-utilities in the Debian and EL i…
weizhouapache Oct 29, 2026
045f6a4
build-acs-image.sh: run set-passwords and ssh on every boot
weizhouapache Oct 29, 2026
2a5ba6c
marvin: retry attach and detach volume until the XenServer PV drivers…
weizhouapache Oct 29, 2026
e7ab16e
test_primary_storage: use 512 MiB service offerings
weizhouapache Oct 29, 2026
7073eca
test_scale_vm: use a 4 GiB disk offering
weizhouapache Oct 29, 2026
23866cc
test_scale_vm: fix the tests on the Debian 13 built-in template
weizhouapache Oct 29, 2026
0f19003
templates.sql: update the checksums of the Debian 13 built-in templates
weizhouapache Oct 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,7 @@ jobs:
- name: Install Non-OSS
uses: ./.github/actions/install-nonoss
- name: Noredist Build
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
mvn -B -P developer,systemvm -Dsimulator -Dnoredist clean install -T$(nproc)
8 changes: 8 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ jobs:
git status
ipmitool -V
- name: Build with Maven
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
mvn -B -P developer,systemvm -Dsimulator clean install -DskipTests=true -T$(nproc)
- name: Archive artifacts
Expand Down Expand Up @@ -307,6 +309,8 @@ jobs:
mkdir -p ~/.m2/repository
tar -xzf /tmp/artifacts/m2-cloudstack.tar.gz -C ~/.m2/repository
- name: Setup Simulator Prerequisites
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
sudo python3 -m pip install --upgrade netaddr mysql-connector-python
python3 -m pip install --user --upgrade tools/marvin/dist/[mM]arvin-*.tar.gz
Expand All @@ -319,6 +323,8 @@ jobs:
find . | grep "src/main/java" | sed 's/\/java\//\/java /g' | awk '{print "--sourcefiles", $1, "\\"}' | sort | uniq >> jacoco-report.sh
echo "--xml jacoco-coverage.xml" >> jacoco-report.sh
- name: Start CloudStack Management Server with Simulator
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
export MAVEN_OPTS="-Xmx4096m -XX:MaxMetaspaceSize=800m -Djava.security.egd=file:/dev/urandom -javaagent:jacoco/lib/jacocoagent.jar=address=*,port=36320,output=tcpserver --add-opens=java.base/java.lang=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-opens=java.base/jdk.internal.reflect=ALL-UNNAMED"
echo -e "\nStarting simulator"
Expand All @@ -329,6 +335,8 @@ jobs:
echo -e "\nStarting Advanced Zone DataCenter deployment"
python3 tools/marvin/marvin/deployDataCenter.py -i setup/dev/advdualzone.cfg 2>&1 || true
- name: Run Integration Tests with Simulator
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
mkdir -p integration-test-results/smoke/misc
mkdir -p integration-test-results/component
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker-cloudstack-simulator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Login to Docker Registry
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
with:
registry: ${{ secrets.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USER }}
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/main-sonar-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,12 @@ jobs:
- name: Install Non-OSS
uses: ./.github/actions/install-nonoss
- name: Run Build and Tests with Coverage
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: mvn -B -T$(nproc) -P developer,systemvm,quality -Dsimulator -Dnoredist clean install
- name: Upload to SonarQube
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: mvn -B -P quality org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=apache_cloudstack -Dsonar.branch.name=${{ github.ref_name }}
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/rat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ jobs:
- name: Install Non-OSS
uses: ./.github/actions/install-nonoss
- name: RAT licence checks
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
mvn -P developer,systemvm -Dsimulator -Dnoredist -pl . org.apache.rat:apache-rat-plugin:0.18:check
- name: Rat Report
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/sonar-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,13 @@ jobs:
- name: Install Non-OSS
uses: ./.github/actions/install-nonoss
- name: Run Build and Tests with Coverage
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: mvn -B -T$(nproc) -P developer,systemvm,quality -Dsimulator -Dnoredist clean install
- name: Upload to SonarQube
if: github.repository == 'apache/cloudstack' && github.event.pull_request.head.repo.full_name == github.repository
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
PR_ID: ${{ github.event.pull_request.number }}
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ tools/marvin/marvin/cloudstackAPI/*
unittest
venv
waf-*
waf3-*

**/.mvn/.develocity*

# this ignores _all files starting with '.'. Don't do that!
#.*
Expand Down
50 changes: 50 additions & 0 deletions .mvn/develocity.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!--

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

-->

<develocity
xmlns="https://www.gradle.com/develocity-maven" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.gradle.com/develocity-maven https://www.gradle.com/schema/develocity-maven.xsd">
<server>
<url>https://develocity.apache.org</url>
<allowUntrusted>false</allowUntrusted>
</server>
<buildScan>
<backgroundBuildScanUpload>#{isFalse(env['GITHUB_ACTIONS'])}</backgroundBuildScanUpload>
<obfuscation>
<ipAddresses>#{{'0.0.0.0'}}</ipAddresses>
</obfuscation>
<publishing>
<onlyIf>
<![CDATA[authenticated]]>
</onlyIf>
</publishing>
</buildScan>
<buildCache>
<local>
<enabled>false</enabled>
</local>
<remote>
<enabled>false</enabled>
<storeEnabled>#{isTrue(env['GITHUB_ACTIONS'])}</storeEnabled>
</remote>
</buildCache>
</develocity>
34 changes: 34 additions & 0 deletions .mvn/extensions.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

-->

<extensions>
<extension>
<groupId>com.gradle</groupId>
<artifactId>develocity-maven-extension</artifactId>
<version>2.6.0</version>
</extension>
<extension>
<groupId>com.gradle</groupId>
<artifactId>common-custom-user-data-maven-extension</artifactId>
<version>2.4.0</version>
</extension>
</extensions>
7 changes: 7 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -216,3 +216,10 @@ repos:
types: [yaml]
files: \.ya?ml$
exclude: ^.*k8s-.*\.ya?ml$|^.github/workflows/.*\.lock\.ya?ml$
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 12e63946db2c5cfcc9030fac21c3883ba88c6ed8 # frozen: 0.38.0
hooks:
- id: check-dependabot
name: validate dependabot config
description: ensures the dependabot config file is valid
files: ^\.github/dependabot\.ya?ml$
19 changes: 19 additions & 0 deletions PendingReleaseNotes
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,25 @@ example.ver.1 > example.ver.2:
continue to snapshot live.

4.23.0.0 > 24.0.0:
* VMware-to-KVM import using VDDK can import powered-off VMware VMs directly
into Ceph RBD primary storage when forceconverttopool is enabled and the
selected KVM conversion host supports qemu RBD access and in-place virt-v2v
finalization. Hosts without in-place finalization support can still use the
staged VDDK flow, converting to temporary qcow2 storage before copying the
finalized disks into RBD.

* Linstor primary storage can now be the destination for VMware-to-KVM
imports in all three modes. Staged imports (virt-v2v to a temporary NFS
location) copy the converted disks into pre-created DRBD block devices
through the Linstor storage adaptor; the import host must be a LINSTOR
satellite connected to the destination pool. Direct VDDK imports with
forceconverttopool write each powered-off VMware disk over nbdkit/VDDK
straight into the DRBD device and finalize it with virt-v2v in place.
VMware CBT warm migrations replicate the initial full copy and all
incremental changed-block cycles directly into Linstor volumes and
finalize in place at cutover; the conversion host requires VDDK,
in-place virt-v2v support and access to the Linstor pool.

* KVM/Ceph: RBD volumes can now be encrypted at rest using native librbd
LUKS2 (<encryption format='luks2' engine='librbd'>), for both data disks
and root disks. Encryption is transparent to the guest and reuses the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,19 @@ public Property<Integer> getWorkers() {
*/
public static final Property<String> VDDK_TRANSPORTS = new Property<>("vddk.transports", null, String.class);

/**
* NBD-transport compression used between the VDDK and the VMware server for the
* agent-driven nbdkit full-disk copies (cold direct import and CBT initial full
* sync). Passed to the nbdkit vddk plugin as <code>compression=&lt;value&gt;</code>.
* Valid values: <code>none</code>, <code>zlib</code>, <code>fastlz</code>,
* <code>skipz</code> (nbdkit &ge; 1.24, vSphere &ge; 6.5). <code>fastlz</code>
* compresses both zero regions and real data at low CPU cost; <code>skipz</code>
* only elides zero blocks. Does not affect the staged virt-v2v conversion path.
* Data type: String.<br>
* Default value: <code>fastlz</code>
*/
public static final Property<String> VDDK_NBD_COMPRESSION = new Property<>("vddk.nbd.compression", "fastlz", String.class);

/**
* vCenter TLS certificate thumbprint used by virt-v2v VDDK mode, passed as <code>-io vddk-thumbprint=&lt;value&gt;</code>.
* If unset, the KVM host computes it at runtime from the vCenter endpoint.
Expand Down
14 changes: 14 additions & 0 deletions api/src/main/java/com/cloud/agent/api/to/RemoteInstanceTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public class RemoteInstanceTO implements Serializable {
private String datacenterName;
private String clusterName;
private String hostName;
private String vmwareMoref;

public RemoteInstanceTO() {
}
Expand Down Expand Up @@ -65,6 +66,11 @@ public RemoteInstanceTO(String instanceName, String instancePath, String vcenter
this.hostName = hostName;
}

public RemoteInstanceTO(String instanceName, String instancePath, String vcenterHost, String vcenterUsername, String vcenterPassword, String datacenterName, String clusterName, String hostName, String vmwareMoref) {
this(instanceName, instancePath, vcenterHost, vcenterUsername, vcenterPassword, datacenterName, clusterName, hostName);
this.vmwareMoref = vmwareMoref;
}

public Hypervisor.HypervisorType getHypervisorType() {
return this.hypervisorType;
}
Expand Down Expand Up @@ -100,4 +106,12 @@ public String getClusterName() {
public String getHostName() {
return hostName;
}

public String getVmwareMoref() {
return vmwareMoref;
}

public void setVmwareMoref(String vmwareMoref) {
this.vmwareMoref = vmwareMoref;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.agent.api.to;

import java.io.Serializable;

public class VmwareCbtChangedBlockRangeTO implements Serializable {

private String diskId;
private long startOffset;
private long length;

public VmwareCbtChangedBlockRangeTO() {
}

public VmwareCbtChangedBlockRangeTO(String diskId, long startOffset, long length) {
this.diskId = diskId;
this.startOffset = startOffset;
this.length = length;
}

public String getDiskId() {
return diskId;
}

public long getStartOffset() {
return startOffset;
}

public long getLength() {
return length;
}
}
Loading