mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 01:32:18 +02:00
Merge branch '4.20'
This commit is contained in:
commit
2eb80e0361
@ -50,6 +50,9 @@ public class SecurityGroupVMMapVO implements InternalIdentity {
|
||||
@Column(name = "ip4_address", table = "nics", insertable = false, updatable = false)
|
||||
private String guestIpAddress;
|
||||
|
||||
@Column(name = "ip6_address", table = "nics", insertable = false, updatable = false)
|
||||
private String guestIpv6Address;
|
||||
|
||||
@Column(name = "state", table = "vm_instance", insertable = false, updatable = false)
|
||||
private State vmState;
|
||||
|
||||
@ -77,6 +80,10 @@ public class SecurityGroupVMMapVO implements InternalIdentity {
|
||||
return guestIpAddress;
|
||||
}
|
||||
|
||||
public String getGuestIpv6Address() {
|
||||
return guestIpv6Address;
|
||||
}
|
||||
|
||||
public long getInstanceId() {
|
||||
return instanceId;
|
||||
}
|
||||
|
||||
@ -3875,10 +3875,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
||||
public synchronized String attachOrDetachISO(final Connect conn, final String vmName, String isoPath, final boolean isAttach, final Integer diskSeq) throws LibvirtException, URISyntaxException,
|
||||
InternalErrorException {
|
||||
final DiskDef iso = new DiskDef();
|
||||
if (isAttach && StringUtils.isNotBlank(isoPath) && isoPath.lastIndexOf("/") > 0) {
|
||||
if (isoPath.startsWith(getConfigPath() + "/" + ConfigDrive.CONFIGDRIVEDIR) && isoPath.contains(vmName)) {
|
||||
if (isAttach && StringUtils.isNotBlank(isoPath)) {
|
||||
if (isoPath.startsWith(getConfigPath() + "/" + ConfigDrive.CONFIGDRIVEDIR) || isoPath.contains(vmName)) {
|
||||
iso.defISODisk(isoPath, diskSeq, DiskDef.DiskType.FILE);
|
||||
} else {
|
||||
} else if (isoPath.lastIndexOf("/") > 0) {
|
||||
final int index = isoPath.lastIndexOf("/");
|
||||
final String path = isoPath.substring(0, index);
|
||||
final String name = isoPath.substring(index + 1);
|
||||
@ -3902,7 +3902,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
||||
cleanupDisk(disk);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -1018,7 +1018,7 @@ public final class LibvirtMigrateCommandWrapper extends CommandWrapper<MigrateCo
|
||||
Node sourceNode = diskChildNode;
|
||||
NamedNodeMap sourceNodeAttributes = sourceNode.getAttributes();
|
||||
Node sourceNodeAttribute = sourceNodeAttributes.getNamedItem("file");
|
||||
if ( sourceNodeAttribute.getNodeValue().contains(vmName)) {
|
||||
if (sourceNodeAttribute != null && sourceNodeAttribute.getNodeValue().contains(vmName)) {
|
||||
diskNode.removeChild(diskChildNode);
|
||||
Element newChildSourceNode = doc.createElement("source");
|
||||
newChildSourceNode.setAttribute("file", isoPath);
|
||||
|
||||
@ -322,17 +322,19 @@ public class KVMStoragePoolManager {
|
||||
String uuid = null;
|
||||
String sourceHost = "";
|
||||
StoragePoolType protocol = null;
|
||||
final String scheme = (storageUri.getScheme() != null) ? storageUri.getScheme().toLowerCase() : "";
|
||||
List<String> acceptedSchemes = List.of("nfs", "networkfilesystem", "filesystem");
|
||||
if (acceptedSchemes.contains(scheme)) {
|
||||
sourcePath = storageUri.getPath();
|
||||
sourcePath = sourcePath.replace("//", "/");
|
||||
sourceHost = storageUri.getHost();
|
||||
uuid = UUID.nameUUIDFromBytes(new String(sourceHost + sourcePath).getBytes()).toString();
|
||||
protocol = scheme.equals("filesystem") ? StoragePoolType.Filesystem: StoragePoolType.NetworkFilesystem;
|
||||
if (storageUri.getScheme() == null || !acceptedSchemes.contains(storageUri.getScheme().toLowerCase())) {
|
||||
throw new CloudRuntimeException("Empty or unsupported storage pool uri scheme");
|
||||
}
|
||||
|
||||
// secondary storage registers itself through here
|
||||
final String scheme = storageUri.getScheme().toLowerCase();
|
||||
sourcePath = storageUri.getPath();
|
||||
sourcePath = sourcePath.replace("//", "/");
|
||||
sourceHost = storageUri.getHost();
|
||||
uuid = UUID.nameUUIDFromBytes(new String(sourceHost + sourcePath).getBytes()).toString();
|
||||
protocol = scheme.equals("filesystem") ? StoragePoolType.Filesystem: StoragePoolType.NetworkFilesystem;
|
||||
|
||||
// storage registers itself through here
|
||||
return createStoragePool(uuid, sourceHost, 0, sourcePath, "", protocol, null, false);
|
||||
}
|
||||
|
||||
|
||||
@ -761,10 +761,9 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
||||
|
||||
@Override
|
||||
public KVMStoragePool createStoragePool(String name, String host, int port, String path, String userInfo, StoragePoolType type, Map<String, String> details, boolean isPrimaryStorage) {
|
||||
logger.info("Attempting to create storage pool " + name + " (" + type.toString() + ") in libvirt");
|
||||
|
||||
StoragePool sp = null;
|
||||
Connect conn = null;
|
||||
logger.info("Attempting to create storage pool {} ({}) in libvirt", name, type);
|
||||
StoragePool sp;
|
||||
Connect conn;
|
||||
try {
|
||||
conn = LibvirtConnection.getConnection();
|
||||
} catch (LibvirtException e) {
|
||||
|
||||
@ -40,7 +40,7 @@ public class VmMetricsStatsResponse extends BaseResponse {
|
||||
private String displayName;
|
||||
|
||||
@SerializedName("stats")
|
||||
@Param(description = "the list of VM stats")
|
||||
@Param(description = "the list of VM stats", responseObject = StatsResponse.class)
|
||||
private List<StatsResponse> stats;
|
||||
|
||||
public void setId(String id) {
|
||||
|
||||
@ -355,6 +355,9 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro
|
||||
String cidr = defaultNic.getIPv4Address();
|
||||
cidr = cidr + "/32";
|
||||
cidrs.add(cidr);
|
||||
if (defaultNic.getIPv6Address() != null) {
|
||||
cidrs.add(defaultNic.getIPv6Address() + "/64");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (rule.getAllowedSourceIpCidr() != null) {
|
||||
|
||||
@ -249,6 +249,9 @@ public class SecurityGroupManagerImpl2 extends SecurityGroupManagerImpl {
|
||||
//did a join with the nics table
|
||||
String cidr = ngmapVO.getGuestIpAddress() + "/32";
|
||||
cidrs.add(cidr);
|
||||
if (ngmapVO.getGuestIpv6Address() != null) {
|
||||
cidrs.add(ngmapVO.getGuestIpv6Address() + "/64");
|
||||
}
|
||||
}
|
||||
} else if (rule.getAllowedSourceIpCidr() != null) {
|
||||
cidrs.add(rule.getAllowedSourceIpCidr());
|
||||
|
||||
@ -18,13 +18,33 @@
|
||||
|
||||
STATUS=UNKNOWN
|
||||
|
||||
get_guest_nics() {
|
||||
python3 -c "
|
||||
import json
|
||||
data = json.load(open('/etc/cloudstack/ips.json'))
|
||||
for nic, objs in data.items():
|
||||
if isinstance(objs, list):
|
||||
for obj in objs:
|
||||
if obj.get('nw_type') == 'guest' and obj.get('add'):
|
||||
print(nic)
|
||||
"
|
||||
}
|
||||
|
||||
ROUTER_TYPE=$(cat /etc/cloudstack/cmdline.json | grep type | awk '{print $2;}' | sed -e 's/[,\"]//g')
|
||||
if [ "$ROUTER_TYPE" = "vpcrouter" ];then
|
||||
GUEST_NICS=$(get_guest_nics)
|
||||
if [ "$GUEST_NICS" = "" ];then
|
||||
echo "Status: ${STATUS}"
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$(systemctl is-active keepalived)" != "active" ]
|
||||
then
|
||||
echo "Status: FAULT"
|
||||
exit
|
||||
fi
|
||||
|
||||
ROUTER_TYPE=$(cat /etc/cloudstack/cmdline.json | grep type | awk '{print $2;}' | sed -e 's/[,\"]//g')
|
||||
if [ "$ROUTER_TYPE" = "router" ]
|
||||
then
|
||||
ROUTER_STATE=$(ip -4 addr show dev eth0 | grep inet | wc -l | xargs bash -c 'if [ $0 == 2 ]; then echo "PRIMARY"; else echo "BACKUP"; fi')
|
||||
|
||||
@ -228,7 +228,7 @@ export default {
|
||||
label: 'label.change.offering.for.volume',
|
||||
args: ['id', 'diskofferingid', 'size', 'miniops', 'maxiops', 'automigrate'],
|
||||
dataView: true,
|
||||
show: (record, store) => { return ['Allocated', 'Ready'].includes(record.state) && ['Admin'].includes(store.userInfo.roletype) },
|
||||
show: (record, store) => { return ['Allocated', 'Ready'].includes(record.state) },
|
||||
popup: true,
|
||||
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/ChangeOfferingForVolume.vue')))
|
||||
},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user