Skip to content

Commit 6f67d73

Browse files
committed
enhancement: add instance info as Libvirt metadata
1 parent 8f2735a commit 6f67d73

File tree

6 files changed

+531
-39
lines changed

6 files changed

+531
-39
lines changed
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package com.cloud.agent.api.to;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
public class VirtualMachineMetadataTO {
9+
// VM details
10+
private final String name;
11+
private final String internalName;
12+
private final String displayName;
13+
private final String instanceUuid;
14+
private final Integer cpuCores;
15+
private final Integer memory;
16+
private final Long created;
17+
private final Long started;
18+
19+
// Owner details
20+
private final String ownerDomainUuid;
21+
private final String ownerDomainName;
22+
private final String ownerAccountUuid;
23+
private final String ownerAccountName;
24+
private final String ownerProjectUuid;
25+
private final String ownerProjectName;
26+
27+
// Host and service offering
28+
private final String serviceOfferingName;
29+
private final List<String> serviceOfferingHostTags;
30+
31+
// zone, pod, and cluster details
32+
private final String zoneName;
33+
private final String zoneUuid;
34+
private final String podName;
35+
private final String podUuid;
36+
private final String clusterName;
37+
private final String clusterUuid;
38+
39+
// resource tags
40+
private final Map<String, String> resourceTags;
41+
42+
public VirtualMachineMetadataTO(
43+
String name, String internalName, String displayName, String instanceUuid, Integer cpuCores, Integer memory, Long created, Long started,
44+
String ownerDomainUuid, String ownerDomainName, String ownerAccountUuid, String ownerAccountName, String ownerProjectUuid, String ownerProjectName,
45+
String serviceOfferingName, List<String> serviceOfferingHostTags,
46+
String zoneName, String zoneUuid, String podName, String podUuid, String clusterName, String clusterUuid, Map<String, String> resourceTags) {
47+
/*
48+
* Something failed in the metadata shall not be a fatal error, the VM can still be started
49+
* Thus, the unknown fields just get an explicit "unknown" value so it can be fixed in case
50+
* there are bugs on some execution paths.
51+
* */
52+
53+
this.name = (name != null) ? name : "unknown";
54+
this.internalName = (internalName != null) ? internalName : "unknown";
55+
this.displayName = (displayName != null) ? displayName : "unknown";
56+
this.instanceUuid = (instanceUuid != null) ? instanceUuid : "unknown";
57+
this.cpuCores = (cpuCores != null) ? cpuCores : -1;
58+
this.memory = (memory != null) ? memory : -1;
59+
this.created = (created != null) ? created : 0;
60+
this.started = (started != null) ? started : 0;
61+
this.ownerDomainUuid = (ownerDomainUuid != null) ? ownerDomainUuid : "unknown";
62+
this.ownerDomainName = (ownerDomainName != null) ? ownerDomainName : "unknown";
63+
this.ownerAccountUuid = (ownerAccountUuid != null) ? ownerAccountUuid : "unknown";
64+
this.ownerAccountName = (ownerAccountName != null) ? ownerAccountName : "unknown";
65+
this.ownerProjectUuid = (ownerProjectUuid != null) ? ownerProjectUuid : "unknown";
66+
this.ownerProjectName = (ownerProjectName != null) ? ownerProjectName : "unknown";
67+
this.serviceOfferingName = (serviceOfferingName != null) ? serviceOfferingName : "unknown";
68+
this.serviceOfferingHostTags = (serviceOfferingHostTags != null) ? serviceOfferingHostTags : new ArrayList<>();
69+
this.zoneName = (zoneName != null) ? zoneName : "unknown";
70+
this.zoneUuid = (zoneUuid != null) ? zoneUuid : "unknown";
71+
this.podName = (podName != null) ? podName : "unknown";
72+
this.podUuid = (podUuid != null) ? podUuid : "unknown";
73+
this.clusterName = (clusterName != null) ? clusterName : "unknown";
74+
this.clusterUuid = (clusterUuid != null) ? clusterUuid : "unknown";
75+
76+
this.resourceTags = (resourceTags != null) ? resourceTags : new HashMap<>();
77+
}
78+
79+
public String getName() {
80+
return name;
81+
}
82+
83+
public String getInternalName() {
84+
return internalName;
85+
}
86+
87+
public String getDisplayName() {
88+
return displayName;
89+
}
90+
91+
public String getInstanceUuid() {
92+
return instanceUuid;
93+
}
94+
95+
public Integer getCpuCores() {
96+
return cpuCores;
97+
}
98+
99+
public Integer getMemory() {
100+
return memory;
101+
}
102+
103+
public Long getCreated() { return created; }
104+
105+
public Long getStarted() {
106+
return started;
107+
}
108+
109+
public String getOwnerDomainUuid() {
110+
return ownerDomainUuid;
111+
}
112+
113+
public String getOwnerDomainName() {
114+
return ownerDomainName;
115+
}
116+
117+
public String getOwnerAccountUuid() {
118+
return ownerAccountUuid;
119+
}
120+
121+
public String getOwnerAccountName() {
122+
return ownerAccountName;
123+
}
124+
125+
public String getOwnerProjectUuid() {
126+
return ownerProjectUuid;
127+
}
128+
129+
public String getOwnerProjectName() {
130+
return ownerProjectName;
131+
}
132+
133+
public String getserviceOfferingName() {
134+
return serviceOfferingName;
135+
}
136+
137+
public List<String> getserviceOfferingHostTags() {
138+
return serviceOfferingHostTags;
139+
}
140+
141+
public String getZoneName() {
142+
return zoneName;
143+
}
144+
145+
public String getZoneUuid() {
146+
return zoneUuid;
147+
}
148+
149+
public String getPodName() {
150+
return podName;
151+
}
152+
153+
public String getPodUuid() {
154+
return podUuid;
155+
}
156+
157+
public String getClusterName() {
158+
return clusterName;
159+
}
160+
161+
public String getClusterUuid() {
162+
return clusterUuid;
163+
}
164+
165+
public Map<String, String> getResourceTags() { return resourceTags; }
166+
}

api/src/main/java/com/cloud/agent/api/to/VirtualMachineTO.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public class VirtualMachineTO {
8686
DeployAsIsInfoTO deployAsIsInfo;
8787
String metadataManufacturer;
8888
String metadataProductName;
89+
VirtualMachineMetadataTO metadata;
8990

9091
public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer speed, long minRam, long maxRam, BootloaderType bootloader,
9192
String os, boolean enableHA, boolean limitCpuUse, String vncPassword) {
@@ -447,6 +448,14 @@ public void setMetadataProductName(String metadataProductName) {
447448
this.metadataProductName = metadataProductName;
448449
}
449450

451+
public VirtualMachineMetadataTO getMetadata() {
452+
return metadata;
453+
}
454+
455+
public void setMetadata(VirtualMachineMetadataTO metadata) {
456+
this.metadata = metadata;
457+
}
458+
450459
@Override
451460
public String toString() {
452461
return String.format("VM {id: \"%s\", name: \"%s\", uuid: \"%s\", type: \"%s\"}", id, name, uuid, type);

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import javax.xml.parsers.DocumentBuilder;
5252
import javax.xml.parsers.ParserConfigurationException;
5353

54+
import com.cloud.agent.api.to.VirtualMachineMetadataTO;
5455
import org.apache.cloudstack.api.ApiConstants.IoDriverPolicy;
5556
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
5657
import org.apache.cloudstack.storage.command.browser.ListDataStoreObjectsCommand;
@@ -171,6 +172,7 @@
171172
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.WatchDogDef;
172173
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.WatchDogDef.WatchDogAction;
173174
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.WatchDogDef.WatchDogModel;
175+
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.MetadataDef;
174176
import com.cloud.hypervisor.kvm.resource.rolling.maintenance.RollingMaintenanceAgentExecutor;
175177
import com.cloud.hypervisor.kvm.resource.rolling.maintenance.RollingMaintenanceExecutor;
176178
import com.cloud.hypervisor.kvm.resource.rolling.maintenance.RollingMaintenanceServiceExecutor;
@@ -2628,9 +2630,19 @@ private void configureVM(VirtualMachineTO vmTO, LibvirtVMDef vm, Map<String, Str
26282630
vm.addComp(createClockDef(vmTO));
26292631
vm.addComp(createDevicesDef(vmTO, guest, vcpus, isUefiEnabled));
26302632

2633+
MetadataDef metaDef;
2634+
if ((metaDef = createMetadataDef(vmTO)) != null) {
2635+
vm.addComp(metaDef);
2636+
}
2637+
26312638
addExtraConfigsToVM(vmTO, vm, extraConfig);
26322639
}
26332640

2641+
protected MetadataDef createMetadataDef(VirtualMachineTO vmTO) {
2642+
VirtualMachineMetadataTO metadata = vmTO.getMetadata();
2643+
return (metadata != null) ? new MetadataDef(metadata) : null;
2644+
}
2645+
26342646
/**
26352647
* Adds extra configuration to User VM Domain XML before starting.
26362648
*/

0 commit comments

Comments
 (0)