Skip to content

Commit bf3f2a2

Browse files
authored
Merge branch 'main' into backup-vmsettings
2 parents 12ebe07 + b1851ba commit bf3f2a2

File tree

21 files changed

+343
-139
lines changed

21 files changed

+343
-139
lines changed

.asf.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ github:
5959
- abh1sar
6060
- rosi-shapeblue
6161
- sudo87
62+
- erikbocks
6263

6364
protected_branches: ~
6465

.github/workflows/ci.yml

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ permissions:
2929
jobs:
3030
build:
3131
if: github.repository == 'apache/cloudstack'
32-
runs-on: ubuntu-22.04
32+
runs-on: ubuntu-24.04
3333

3434
strategy:
3535
fail-fast: false
@@ -236,7 +236,25 @@ jobs:
236236
- name: Install Build Dependencies
237237
run: |
238238
sudo apt-get update
239-
sudo apt-get install -y git uuid-runtime genisoimage netcat ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
239+
sudo apt-get install -y git uuid-runtime genisoimage netcat-openbsd ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
240+
241+
- name: Setup IPMI Tool for CloudStack
242+
run: |
243+
# Create cloudstack-common directory if it doesn't exist
244+
sudo mkdir -p /usr/share/cloudstack-common
245+
246+
# Copy ipmitool to cloudstack-common directory if it doesn't exist
247+
if [ ! -f /usr/share/cloudstack-common/ipmitool ]; then
248+
sudo cp /usr/bin/ipmitool /usr/share/cloudstack-common/ipmitool
249+
sudo chmod 755 /usr/share/cloudstack-common/ipmitool
250+
fi
251+
252+
# Create ipmitool-C3 wrapper script
253+
sudo tee /usr/bin/ipmitool > /dev/null << 'EOF'
254+
#!/bin/bash
255+
/usr/share/cloudstack-common/ipmitool -C3 $@
256+
EOF
257+
sudo chmod 755 /usr/bin/ipmitool
240258
241259
- name: Install Python dependencies
242260
run: |
@@ -275,7 +293,7 @@ jobs:
275293
- name: Setup Simulator Prerequisites
276294
run: |
277295
sudo python3 -m pip install --upgrade netaddr mysql-connector-python
278-
python3 -m pip install --user --upgrade tools/marvin/dist/Marvin-*.tar.gz
296+
python3 -m pip install --user --upgrade tools/marvin/dist/[mM]arvin-*.tar.gz
279297
mvn -q -Pdeveloper -pl developer -Ddeploydb
280298
mvn -q -Pdeveloper -pl developer -Ddeploydb-simulator
281299

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,6 @@ public class ApiConstants {
535535
public static final String SHOW_CAPACITIES = "showcapacities";
536536
public static final String SHOW_REMOVED = "showremoved";
537537
public static final String SHOW_RESOURCE_ICON = "showicon";
538-
public static final String SHOW_COMPLETED = "showcompleted";
539538
public static final String SHOW_INACTIVE = "showinactive";
540539
public static final String SHOW_UNIQUE = "showunique";
541540
public static final String SIGNATURE = "signature";
@@ -585,6 +584,7 @@ public class ApiConstants {
585584
public static final String SUITABLE_FOR_VM = "suitableforvirtualmachine";
586585
public static final String SUPPORTS_STORAGE_SNAPSHOT = "supportsstoragesnapshot";
587586
public static final String TARGET_IQN = "targetiqn";
587+
public static final String TASKS_FILTER = "tasksfilter";
588588
public static final String TEMPLATE_FILTER = "templatefilter";
589589
public static final String TEMPLATE_ID = "templateid";
590590
public static final String TEMPLATE_IDS = "templateids";

api/src/main/java/org/apache/cloudstack/api/command/admin/vm/ListImportVMTasksCmd.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,8 @@ public class ListImportVMTasksCmd extends BaseListCmd {
7575
description = "Conversion host of the importing task")
7676
private Long convertHostId;
7777

78-
@Parameter(name = ApiConstants.LIST_ALL, type = CommandType.BOOLEAN, description = "Whether to list all import tasks.")
79-
private boolean listAll = false;
80-
81-
@Parameter(name = ApiConstants.SHOW_COMPLETED, type = CommandType.BOOLEAN, description = "Whether to list completed tasks.")
82-
private boolean showCompleted = false;
78+
@Parameter(name = ApiConstants.TASKS_FILTER, type = CommandType.STRING, description = "Filter tasks by state, valid options are: All, Running, Completed, Failed")
79+
private String tasksFilter;
8380

8481
public Long getZoneId() {
8582
return zoneId;
@@ -97,12 +94,8 @@ public Long getConvertHostId() {
9794
return convertHostId;
9895
}
9996

100-
public boolean isListAll() {
101-
return listAll;
102-
}
103-
104-
public boolean isShowCompleted() {
105-
return showCompleted;
97+
public String getTasksFilter() {
98+
return tasksFilter;
10699
}
107100

108101
@Override

api/src/main/java/org/apache/cloudstack/api/response/ImportVMTaskResponse.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ public class ImportVMTaskResponse extends BaseResponse {
5555
@Param(description = "the display name of the importing VM")
5656
private String displayName;
5757

58+
@SerializedName(ApiConstants.STATE)
59+
@Param(description = "the state of the importing VM task")
60+
private String state;
61+
5862
@SerializedName(ApiConstants.VCENTER)
5963
@Param(description = "the vcenter name of the importing VM task")
6064
private String vcenter;
@@ -242,4 +246,12 @@ public Date getLastUpdated() {
242246
public void setLastUpdated(Date lastUpdated) {
243247
this.lastUpdated = lastUpdated;
244248
}
249+
250+
public String getState() {
251+
return state;
252+
}
253+
254+
public void setState(String state) {
255+
this.state = state;
256+
}
245257
}

api/src/main/java/org/apache/cloudstack/vm/ImportVmTask.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,19 @@
2323

2424
public interface ImportVmTask extends Identity, InternalIdentity {
2525
enum Step {
26-
Prepare, CloningInstance, ConvertingInstance, Importing, Cleaning, Completed
26+
Prepare, CloningInstance, ConvertingInstance, Importing, Completed
27+
}
28+
29+
enum TaskState {
30+
Running, Completed, Failed;
31+
32+
public static TaskState getValue(String state) {
33+
for (TaskState s : TaskState.values()) {
34+
if (s.name().equalsIgnoreCase(state)) {
35+
return s;
36+
}
37+
}
38+
throw new IllegalArgumentException("Invalid task state: " + state);
39+
}
2740
}
2841
}

api/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ ImportVmTask createImportVMTaskRecord(DataCenter zone, Account owner, long userI
3434
void updateImportVMTaskStep(ImportVmTask importVMTaskVO, DataCenter zone, Account owner, Host convertHost,
3535
Host importHost, Long vmId, ImportVmTask.Step step);
3636

37-
boolean removeImportVMTask(long taskId);
37+
void updateImportVMTaskErrorState(ImportVmTask importVMTaskVO, ImportVmTask.TaskState state, String errorMsg);
3838
}

engine/schema/src/main/java/com/cloud/vm/ImportVMTaskVO.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ public ImportVMTaskVO() {
9393
@Column(name = "step")
9494
private Step step;
9595

96+
@Column(name = "state")
97+
private TaskState state;
98+
9699
@Column(name = "description")
97100
private String description;
98101

@@ -217,6 +220,14 @@ public void setStep(Step step) {
217220
this.step = step;
218221
}
219222

223+
public TaskState getState() {
224+
return state;
225+
}
226+
227+
public void setState(TaskState state) {
228+
this.state = state;
229+
}
230+
220231
public String getDescription() {
221232
return description;
222233
}

engine/schema/src/main/java/com/cloud/vm/dao/ImportVMTaskDao.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
//
1919
package com.cloud.vm.dao;
2020

21+
import com.cloud.utils.Pair;
2122
import com.cloud.utils.db.GenericDao;
2223
import com.cloud.vm.ImportVMTaskVO;
23-
24+
import org.apache.cloudstack.vm.ImportVmTask;
2425
import java.util.List;
2526

2627
public interface ImportVMTaskDao extends GenericDao<ImportVMTaskVO, Long> {
2728

28-
List<ImportVMTaskVO> listImportVMTasks(Long zoneId, Long accountId, String vcenter, Long convertHostId, boolean showCompleted);
29+
Pair<List<ImportVMTaskVO>, Integer> listImportVMTasks(Long zoneId, Long accountId, String vcenter, Long convertHostId,
30+
ImportVmTask.TaskState state, Long startIndex, Long pageSizeVal);
2931
}

engine/schema/src/main/java/com/cloud/vm/dao/ImportVMTaskDaoImpl.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
// under the License.
1717
package com.cloud.vm.dao;
1818

19+
import com.cloud.utils.Pair;
20+
import com.cloud.utils.db.Filter;
1921
import com.cloud.utils.db.GenericDaoBase;
2022
import com.cloud.utils.db.SearchBuilder;
2123
import com.cloud.utils.db.SearchCriteria;
2224
import com.cloud.vm.ImportVMTaskVO;
25+
import org.apache.cloudstack.vm.ImportVmTask;
2326
import org.apache.commons.lang3.StringUtils;
2427
import org.springframework.stereotype.Component;
2528

@@ -41,12 +44,14 @@ void init() {
4144
AllFieldsSearch.and("accountId", AllFieldsSearch.entity().getAccountId(), SearchCriteria.Op.EQ);
4245
AllFieldsSearch.and("vcenter", AllFieldsSearch.entity().getVcenter(), SearchCriteria.Op.EQ);
4346
AllFieldsSearch.and("convertHostId", AllFieldsSearch.entity().getConvertHostId(), SearchCriteria.Op.EQ);
47+
AllFieldsSearch.and("state", AllFieldsSearch.entity().getState(), SearchCriteria.Op.EQ);
4448
AllFieldsSearch.done();
4549
}
4650

4751

4852
@Override
49-
public List<ImportVMTaskVO> listImportVMTasks(Long zoneId, Long accountId, String vcenter, Long convertHostId, boolean showCompleted) {
53+
public Pair<List<ImportVMTaskVO>, Integer> listImportVMTasks(Long zoneId, Long accountId, String vcenter, Long convertHostId,
54+
ImportVmTask.TaskState state, Long startIndex, Long pageSizeVal) {
5055
SearchCriteria<ImportVMTaskVO> sc = AllFieldsSearch.create();
5156
if (zoneId != null) {
5257
sc.setParameters("zoneId", zoneId);
@@ -60,6 +65,10 @@ public List<ImportVMTaskVO> listImportVMTasks(Long zoneId, Long accountId, Strin
6065
if (convertHostId != null) {
6166
sc.setParameters("convertHostId", convertHostId);
6267
}
63-
return showCompleted ? listIncludingRemovedBy(sc) : listBy(sc);
68+
if (state != null) {
69+
sc.setParameters("state", state);
70+
}
71+
Filter filter = new Filter(ImportVMTaskVO.class, "created", false, startIndex, pageSizeVal);
72+
return searchAndCount(sc, filter);
6473
}
6574
}

0 commit comments

Comments
 (0)