mirror of https://github.com/apache/cloudstack.git
Merge release branch 4.18 to main
* 4.18: server: Initial new vpnuser state (#8268) UI: Removed redundant IP Address Column when create Port forwarding rules (#8275) UI: Removed ICMP input fields for protocol number from ACL List rules modal (#8253) server: check if there are active nics before network GC (#8204)
This commit is contained in:
commit
d3cad4266a
|
|
@ -125,6 +125,9 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd {
|
|||
vpnResponse.setId(vpnUser.getUuid());
|
||||
vpnResponse.setUserName(vpnUser.getUsername());
|
||||
vpnResponse.setAccountName(account.getAccountName());
|
||||
// re-retrieve the vpnuser, as the call to `applyVpnUsers` might have changed the state
|
||||
vpnUser = _entityMgr.findById(VpnUser.class, getEntityId());
|
||||
vpnResponse.setState(vpnUser.getState().toString());
|
||||
|
||||
Domain domain = _entityMgr.findById(Domain.class, account.getDomainId());
|
||||
if (domain != null) {
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ public class VpnUsersResponse extends BaseResponse implements ControlledEntityRe
|
|||
private String projectName;
|
||||
|
||||
@SerializedName(ApiConstants.STATE)
|
||||
@Param(description = "the state of the Vpn User")
|
||||
@Param(description = "the state of the Vpn User, can be 'Add', 'Revoke' or 'Active'.")
|
||||
private String state;
|
||||
|
||||
public void setId(String id) {
|
||||
|
|
|
|||
|
|
@ -79,7 +79,9 @@ public interface NicDao extends GenericDao<NicVO, Long> {
|
|||
|
||||
List<NicVO> listByNetworkIdTypeAndGatewayAndBroadcastUri(long networkId, VirtualMachine.Type vmType, String gateway, URI broadcastUri);
|
||||
|
||||
int countNicsForStartingVms(long networkId);
|
||||
int countNicsForNonStoppedVms(long networkId);
|
||||
|
||||
int countNicsForNonStoppedRunningVrs(long networkId);
|
||||
|
||||
NicVO getControlNicForVM(long vmId);
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
|||
private GenericSearchBuilder<NicVO, String> IpSearch;
|
||||
private SearchBuilder<NicVO> NonReleasedSearch;
|
||||
private GenericSearchBuilder<NicVO, Integer> deviceIdSearch;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountByForStartingVms;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountByForNonStoppedVms;
|
||||
private SearchBuilder<NicVO> PeerRouterSearch;
|
||||
|
||||
@Inject
|
||||
|
|
@ -91,14 +91,16 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
|||
deviceIdSearch.and("instance", deviceIdSearch.entity().getInstanceId(), Op.EQ);
|
||||
deviceIdSearch.done();
|
||||
|
||||
CountByForStartingVms = createSearchBuilder(Integer.class);
|
||||
CountByForStartingVms.select(null, Func.COUNT, CountByForStartingVms.entity().getId());
|
||||
CountByForStartingVms.and("networkId", CountByForStartingVms.entity().getNetworkId(), Op.EQ);
|
||||
CountByForStartingVms.and("removed", CountByForStartingVms.entity().getRemoved(), Op.NULL);
|
||||
CountByForNonStoppedVms = createSearchBuilder(Integer.class);
|
||||
CountByForNonStoppedVms.select(null, Func.COUNT, CountByForNonStoppedVms.entity().getId());
|
||||
CountByForNonStoppedVms.and("vmType", CountByForNonStoppedVms.entity().getVmType(), Op.EQ);
|
||||
CountByForNonStoppedVms.and("vmTypeNEQ", CountByForNonStoppedVms.entity().getVmType(), Op.NEQ);
|
||||
CountByForNonStoppedVms.and("networkId", CountByForNonStoppedVms.entity().getNetworkId(), Op.EQ);
|
||||
CountByForNonStoppedVms.and("removed", CountByForNonStoppedVms.entity().getRemoved(), Op.NULL);
|
||||
SearchBuilder<VMInstanceVO> join1 = _vmDao.createSearchBuilder();
|
||||
join1.and("state", join1.entity().getState(), Op.EQ);
|
||||
CountByForStartingVms.join("vm", join1, CountByForStartingVms.entity().getInstanceId(), join1.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
CountByForStartingVms.done();
|
||||
join1.and("state", join1.entity().getState(), Op.IN);
|
||||
CountByForNonStoppedVms.join("vm", join1, CountByForNonStoppedVms.entity().getInstanceId(), join1.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
CountByForNonStoppedVms.done();
|
||||
|
||||
PeerRouterSearch = createSearchBuilder();
|
||||
PeerRouterSearch.and("instanceId", PeerRouterSearch.entity().getInstanceId(), Op.NEQ);
|
||||
|
|
@ -346,10 +348,21 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int countNicsForStartingVms(long networkId) {
|
||||
SearchCriteria<Integer> sc = CountByForStartingVms.create();
|
||||
public int countNicsForNonStoppedVms(long networkId) {
|
||||
SearchCriteria<Integer> sc = CountByForNonStoppedVms.create();
|
||||
sc.setParameters("networkId", networkId);
|
||||
sc.setJoinParameters("vm", "state", VirtualMachine.State.Starting);
|
||||
sc.setParameters("vmType", VirtualMachine.Type.User);
|
||||
sc.setJoinParameters("vm", "state", new Object[] {VirtualMachine.State.Starting, VirtualMachine.State.Running, VirtualMachine.State.Stopping, VirtualMachine.State.Migrating});
|
||||
List<Integer> results = customSearch(sc, null);
|
||||
return results.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countNicsForNonStoppedRunningVrs(long networkId) {
|
||||
SearchCriteria<Integer> sc = CountByForNonStoppedVms.create();
|
||||
sc.setParameters("networkId", networkId);
|
||||
sc.setParameters("vmTypeNEQ", VirtualMachine.Type.User);
|
||||
sc.setJoinParameters("vm", "state", new Object[] {VirtualMachine.State.Starting, VirtualMachine.State.Stopping, VirtualMachine.State.Migrating});
|
||||
List<Integer> results = customSearch(sc, null);
|
||||
return results.get(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2559,10 +2559,11 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi
|
|||
return false;
|
||||
}
|
||||
|
||||
//if the network has vms in Starting state (nics for those might not be allocated yet as Starting state also used when vm is being Created)
|
||||
//don't GC
|
||||
if (_nicDao.countNicsForStartingVms(networkId) > 0) {
|
||||
s_logger.debug("Network id=" + networkId + " is not ready for GC as it has vms that are Starting at the moment");
|
||||
// if the network has user vms in Starting/Stopping/Migrating/Running state, or VRs in Starting/Stopping/Migrating state, don't GC
|
||||
// The active nics count (nics_count in op_networks table) might be wrong due to some reasons, should check the state of vms as well.
|
||||
// (nics for Starting VMs might not be allocated yet as Starting state also used when vm is being Created)
|
||||
if (_nicDao.countNicsForNonStoppedVms(networkId) > 0 || _nicDao.countNicsForNonStoppedRunningVrs(networkId) > 0) {
|
||||
s_logger.debug("Network id=" + networkId + " is not ready for GC as it has vms that are not Stopped at the moment");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@
|
|||
<a-input v-model:value="form.protocolnumber" />
|
||||
</a-form-item>
|
||||
|
||||
<div v-if="['icmp', 'protocolnumber'].includes(form.protocol)">
|
||||
<div v-if="form.protocol === 'icmp'">
|
||||
<a-form-item :label="$t('label.icmptype')" ref="icmptype" name="icmptype">
|
||||
<a-input v-model:value="form.icmptype" :placeholder="$t('icmp.type.desc')" />
|
||||
</a-form-item>
|
||||
|
|
|
|||
|
|
@ -432,11 +432,6 @@ export default {
|
|||
title: this.$t('label.displayname'),
|
||||
dataIndex: 'displayname'
|
||||
},
|
||||
{
|
||||
title: this.$t('label.ip'),
|
||||
dataIndex: 'ip',
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
title: this.$t('label.account'),
|
||||
dataIndex: 'account'
|
||||
|
|
|
|||
Loading…
Reference in New Issue