From 0d6e8bfa11e2b20c4128f6b1fe03e06f7b9289be Mon Sep 17 00:00:00 2001 From: "toni.zamparetti" Date: Wed, 6 May 2026 11:05:20 -0300 Subject: [PATCH 01/16] Add info of VM snapshots limits in the resource tab --- .../com/cloud/configuration/Resource.java | 1 + .../apache/cloudstack/api/ApiConstants.java | 3 +++ .../user/resource/ListResourceLimitsCmd.java | 8 +++--- .../user/resource/UpdateResourceCountCmd.java | 5 ++-- .../api/response/AccountResponse.java | 27 +++++++++++++++++++ .../api/response/DomainResponse.java | 27 +++++++++++++++++++ .../api/response/ProjectResponse.java | 27 +++++++++++++++++++ .../ResourceLimitAndCountResponse.java | 6 +++++ .../META-INF/db/views/cloud.account_view.sql | 8 ++++++ .../META-INF/db/views/cloud.domain_view.sql | 8 ++++++ .../api/query/dao/AccountJoinDaoImpl.java | 8 ++++++ .../api/query/dao/DomainJoinDaoImpl.java | 8 ++++++ .../com/cloud/api/query/vo/AccountJoinVO.java | 14 ++++++++++ .../com/cloud/api/query/vo/DomainJoinVO.java | 20 ++++++++++++++ ui/public/locales/en.json | 1 + ui/public/locales/pt_BR.json | 1 + ui/src/components/view/ResourceCountUsage.vue | 2 +- 17 files changed, 168 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/com/cloud/configuration/Resource.java b/api/src/main/java/com/cloud/configuration/Resource.java index bf8fca9d9051..f9c2e52649a1 100644 --- a/api/src/main/java/com/cloud/configuration/Resource.java +++ b/api/src/main/java/com/cloud/configuration/Resource.java @@ -30,6 +30,7 @@ enum ResourceType { // Primary and Secondary storage are allocated_storage and n project("project", 5), network("network", 6), vpc("vpc", 7), + vm_snapshot("vm_snapshot", 12), cpu("cpu", 8), memory("memory", 9), primary_storage("primary_storage", 10), diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index daf1bdc705de..09b569a11da6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -763,6 +763,9 @@ public class ApiConstants { public static final String AUTO_MIGRATE = "automigrate"; public static final String GUID = "guid"; public static final String VM_SNAPSHOT_ENABELD = "vmsnapshotenabled"; + public static final String VM_SNAPSHOT_LIMIT = "vmsnapshotlimit"; + public static final String VM_SNAPSHOT_TOTAL = "vmsnapshottotal"; + public static final String VM_SNAPSHOT_AVAILABLE = "vmsnapshotavailable"; public static final String VSWITCH_TYPE_GUEST_TRAFFIC = "guestvswitchtype"; public static final String VSWITCH_TYPE_PUBLIC_TRAFFIC = "publicvswitchtype"; public static final String VSWITCH_NAME_GUEST_TRAFFIC = "guestvswitchname"; diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 7bae74c73a46..98993d9fd549 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -42,7 +42,7 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd @Parameter(name = ApiConstants.ID, type = CommandType.LONG, description = "Lists resource limits by ID.") private Long id; - @Parameter(name = ApiConstants.RESOURCE_TYPE, type = CommandType.INTEGER, description = "Type of resource. Values are 0, 1, 2, 3, 4, 6, 7, 8, 9, 10 and 11. " + @Parameter(name = ApiConstants.RESOURCE_TYPE, type = CommandType.INTEGER, description = "Type of resource. Values are 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11 and 12. " + "0 - Instance. Number of Instances a user can create. " + "1 - IP. Number of public IP addresses an account can own. " + "2 - Volume. Number of disk volumes an account can own. " @@ -54,7 +54,8 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd + "8 - CPU. Number of CPU an account can allocate for their resources. " + "9 - Memory. Amount of RAM an account can allocate for their resources. " + "10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. " - + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. ") + + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. " + + "12 - VmSnapshot. Number of VM snapshots an account can own.") private Integer resourceType; @Parameter(name = ApiConstants.RESOURCE_TYPE_NAME, type = CommandType.STRING, description = "Type of resource (wins over resourceType if both are provided). Values are: " @@ -69,7 +70,8 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd + "cpu - CPU. Number of CPU an account can allocate for their resources. " + "memory - Memory. Amount of RAM an account can allocate for their resources. " + "primary_storage - PrimaryStorage. Total primary storage space (in GiB) a user can use. " - + "secondary_storage - SecondaryStorage. Total secondary storage space (in GiB) a user can use. ") + + "secondary_storage - SecondaryStorage. Total secondary storage space (in GiB) a user can use. " + + "vm_snapshot - VmSnapshot. Number of VM snapshots an account can own.") private String resourceTypeName; @Parameter(name = ApiConstants.TAG, type = CommandType.STRING, description = "Tag for the resource type", since = "4.20.0") diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 123b0e48a74c..5901b56f4f4e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -60,7 +60,7 @@ public class UpdateResourceCountCmd extends BaseCmd { @Parameter(name = ApiConstants.RESOURCE_TYPE, type = CommandType.INTEGER, - description = "Type of resource to update. If specifies valid values are 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 and 11. If not specified will update all resource counts" + description = "Type of resource to update. If specifies valid values are 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 and 12. If not specified will update all resource counts" + "0 - Instance. Number of Instances a user can create. " + "1 - IP. Number of public IP addresses a user can own. " + "2 - Volume. Number of disk volumes a user can create. " @@ -72,7 +72,8 @@ public class UpdateResourceCountCmd extends BaseCmd { + "8 - CPU. Total number of CPU cores a user can use. " + "9 - Memory. Total Memory (in MB) a user can use. " + "10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. " - + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. ") + + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use." + + "12 - VmSnapshot. Number of VM snapshots a user can create.") private Integer resourceType; @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, entityType = ProjectResponse.class, description = "Update resource limits for project") diff --git a/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java index 22bc6c76fc3b..b75711ccd43c 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java @@ -127,6 +127,18 @@ public class AccountResponse extends BaseResponse implements ResourceLimitAndCou @Param(description = "The total number of Snapshots available for this Account") private String snapshotAvailable; + @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) + @Param(description = "the number of VM snapshots that can be stored by this account") + private String vmSnapshotLimit; + + @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) + @Param(description = "the number of VM snapshots stored by this account") + private Long vmSnapshotTotal; + + @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) + @Param(description = "the number of VM snapshots available for this account") + private String vmSnapshotAvailable; + @SerializedName("templatelimit") @Param(description = "The total number of Templates which can be created by this Account") private String templateLimit; @@ -386,6 +398,21 @@ public void setSnapshotAvailable(String snapshotAvailable) { this.snapshotAvailable = snapshotAvailable; } + @Override + public void setVmSnapshotLimit(String vmSnapshotLimit) { + this.vmSnapshotLimit = vmSnapshotLimit; + } + + @Override + public void setVmSnapshotTotal(Long vmSnapshotTotal) { + this.vmSnapshotTotal = vmSnapshotTotal; + } + + @Override + public void setVmSnapshotAvailable(String vmSnapshotAvailable) { + this.vmSnapshotAvailable = vmSnapshotAvailable; + } + @Override public void setTemplateLimit(String templateLimit) { this.templateLimit = templateLimit; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java index c848c67af467..a23a0debfb6e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java @@ -105,6 +105,18 @@ public class DomainResponse extends BaseResponseWithAnnotations implements Resou @SerializedName("snapshotavailable") @Param(description = "The total number of Snapshots available for this domain") private String snapshotAvailable; + @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) + @Param(description = "the number of VM snapshots that can be stored by this account") + private String vmSnapshotLimit; + + @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) + @Param(description = "the number of VM snapshots stored by this account") + private Long vmSnapshotTotal; + + @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) + @Param(description = "the number of VM snapshots available for this account") + private String vmSnapshotAvailable; + @SerializedName("templatelimit") @Param(description = "The total number of Templates which can be created by this domain") private String templateLimit; @@ -313,6 +325,21 @@ public void setSnapshotAvailable(String snapshotAvailable) { this.snapshotAvailable = snapshotAvailable; } + @Override + public void setVmSnapshotLimit(String vmSnapshotLimit) { + this.vmSnapshotLimit = vmSnapshotLimit; + } + + @Override + public void setVmSnapshotTotal(Long vmSnapshotTotal) { + this.vmSnapshotTotal = vmSnapshotTotal; + } + + @Override + public void setVmSnapshotAvailable(String vmSnapshotAvailable) { + this.vmSnapshotAvailable = vmSnapshotAvailable; + } + @Override public void setTemplateLimit(String templateLimit) { this.templateLimit = templateLimit; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java index ee40e9d39188..206bf0872933 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java @@ -188,6 +188,18 @@ public class ProjectResponse extends BaseResponse implements ResourceLimitAndCou @Param(description = "The total number of Snapshots available for this project", since = "4.2.0") private String snapshotAvailable; + @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) + @Param(description = "the number of VM snapshots that can be stored by this account") + private String vmSnapshotLimit; + + @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) + @Param(description = "the number of VM snapshots stored by this account") + private Long vmSnapshotTotal; + + @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) + @Param(description = "the number of VM snapshots available for this account") + private String vmSnapshotAvailable; + @SerializedName("templatelimit") @Param(description = "The total number of Templates which can be created by this project", since = "4.2.0") private String templateLimit; @@ -320,6 +332,21 @@ public void setSnapshotAvailable(String snapshotAvailable) { this.snapshotAvailable = snapshotAvailable; } + @Override + public void setVmSnapshotLimit(String vmSnapshotLimit) { + this.vmSnapshotLimit = vmSnapshotLimit; + } + + @Override + public void setVmSnapshotTotal(Long vmSnapshotTotal) { + this.vmSnapshotTotal = vmSnapshotTotal; + } + + @Override + public void setVmSnapshotAvailable(String vmSnapshotAvailable) { + this.vmSnapshotAvailable = vmSnapshotAvailable; + } + @Override public void setTemplateLimit(String templateLimit) { this.templateLimit = templateLimit; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java index f9e6df3a0386..30a013836138 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ResourceLimitAndCountResponse.java @@ -84,6 +84,12 @@ public interface ResourceLimitAndCountResponse { public void setSnapshotAvailable(String snapshotAvailable); + public void setVmSnapshotLimit(String vmSnapshotLimit); + + public void setVmSnapshotTotal(Long vmSnapshotTotal); + + public void setVmSnapshotAvailable(String vmSnapshotAvailable); + public void setTemplateLimit(String templateLimit); public void setTemplateTotal(Long templateTotal); diff --git a/engine/schema/src/main/resources/META-INF/db/views/cloud.account_view.sql b/engine/schema/src/main/resources/META-INF/db/views/cloud.account_view.sql index dc64380fb57b..dd491b8edc05 100644 --- a/engine/schema/src/main/resources/META-INF/db/views/cloud.account_view.sql +++ b/engine/schema/src/main/resources/META-INF/db/views/cloud.account_view.sql @@ -52,6 +52,8 @@ select `volumecount`.`count` AS `volumeTotal`, `snapshotlimit`.`max` AS `snapshotLimit`, `snapshotcount`.`count` AS `snapshotTotal`, + `vmsnapshotlimit`.`max` AS `vmSnapshotLimit`, + `vmsnapshotcount`.`count` AS `vmSnapshotTotal`, `templatelimit`.`max` AS `templateLimit`, `templatecount`.`count` AS `templateTotal`, `vpclimit`.`max` AS `vpcLimit`, @@ -112,6 +114,12 @@ from `cloud`.`resource_count` snapshotcount ON account.id = snapshotcount.account_id and snapshotcount.type = 'snapshot' left join + `cloud`.`resource_limit` vmsnapshotlimit ON account.id = vmsnapshotlimit.account_id + and vmsnapshotlimit.type = 'vm_snapshot' + left join + `cloud`.`resource_count` vmsnapshotcount ON account.id = vmsnapshotcount.account_id + and vmsnapshotcount.type = 'vm_snapshot' + left join `cloud`.`resource_limit` templatelimit ON account.id = templatelimit.account_id and templatelimit.type = 'template' left join diff --git a/engine/schema/src/main/resources/META-INF/db/views/cloud.domain_view.sql b/engine/schema/src/main/resources/META-INF/db/views/cloud.domain_view.sql index 201ece95023a..b5d478846585 100644 --- a/engine/schema/src/main/resources/META-INF/db/views/cloud.domain_view.sql +++ b/engine/schema/src/main/resources/META-INF/db/views/cloud.domain_view.sql @@ -43,6 +43,8 @@ select `volumecount`.`count` AS `volumeTotal`, `snapshotlimit`.`max` AS `snapshotLimit`, `snapshotcount`.`count` AS `snapshotTotal`, + `vmsnapshotlimit`.`max` AS `vmSnapshotLimit`, + `vmsnapshotcount`.`count` AS `vmSnapshotTotal`, `templatelimit`.`max` AS `templateLimit`, `templatecount`.`count` AS `templateTotal`, `vpclimit`.`max` AS `vpcLimit`, @@ -86,6 +88,12 @@ from `cloud`.`resource_count` snapshotcount ON domain.id = snapshotcount.domain_id and snapshotcount.type = 'snapshot' left join + `cloud`.`resource_limit` vmsnapshotlimit ON domain.id = vmsnapshotlimit.domain_id + and vmsnapshotlimit.type = 'vm_snapshot' + left join + `cloud`.`resource_count` vmsnapshotcount ON domain.id = vmsnapshotcount.domain_id + and vmsnapshotcount.type = 'vm_snapshot' + left join `cloud`.`resource_limit` templatelimit ON domain.id = templatelimit.domain_id and templatelimit.type = 'template' left join diff --git a/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java index 07b5c27438b0..f4e4e28db80e 100644 --- a/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java @@ -172,6 +172,14 @@ public void setResourceLimits(AccountJoinVO account, boolean fullView, ResourceL response.setSnapshotTotal(snapshotTotal); response.setSnapshotAvailable(snapshotAvail); + Long vmSnapshotLimit = ApiDBUtils.findCorrectResourceLimit(account.getVmSnapshotLimit(), account.getId(), ResourceType.vm_snapshot); + String vmSnapshotLimitDisplay = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit); + Long vmSnapshotTotal = (account.getVmSnapshotTotal() == null) ? 0 : account.getVmSnapshotTotal(); + String snapshotAvailable = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit - vmSnapshotTotal); + response.setVmSnapshotLimit(vmSnapshotLimitDisplay); + response.setVmSnapshotTotal(vmSnapshotTotal); + response.setVmSnapshotAvailable(snapshotAvailable); + Long templateLimit = ApiDBUtils.findCorrectResourceLimit(account.getTemplateLimit(), account.getId(), ResourceType.template); String templateLimitDisplay = (fullView || templateLimit == -1) ? Resource.UNLIMITED : String.valueOf(templateLimit); Long templateTotal = (account.getTemplateTotal() == null) ? 0 : account.getTemplateTotal(); diff --git a/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java index 9ad05d216a9e..027e3dc9a867 100644 --- a/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java @@ -151,6 +151,14 @@ public void setResourceLimits(DomainJoinVO domain, boolean fullView, ResourceLim response.setSnapshotTotal(snapshotTotal); response.setSnapshotAvailable(snapshotAvail); + Long vmSnapshotLimit = ApiDBUtils.findCorrectResourceLimitForDomain(domain.getVmSnapshotLimit(), ResourceType.vm_snapshot, domain.getId()); + String vmSnapshotLimitDisplay = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit); + Long vmSnapshotTotal = (domain.getVmSnapshotTotal() == null) ? 0 : domain.getVmSnapshotTotal(); + String vmSnapshotAvailable = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit - vmSnapshotTotal); + response.setVmSnapshotLimit(vmSnapshotLimitDisplay); + response.setVmSnapshotTotal(vmSnapshotTotal); + response.setVmSnapshotAvailable(vmSnapshotAvailable); + Long templateLimit = ApiDBUtils.findCorrectResourceLimitForDomain(domain.getTemplateLimit(), ResourceType.template, domain.getId()); String templateLimitDisplay = (fullView || templateLimit == -1) ? Resource.UNLIMITED : String.valueOf(templateLimit); Long templateTotal = (domain.getTemplateTotal() == null) ? 0 : domain.getTemplateTotal(); diff --git a/server/src/main/java/com/cloud/api/query/vo/AccountJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/AccountJoinVO.java index 0bd28d2af32d..fb57817add55 100644 --- a/server/src/main/java/com/cloud/api/query/vo/AccountJoinVO.java +++ b/server/src/main/java/com/cloud/api/query/vo/AccountJoinVO.java @@ -123,6 +123,12 @@ public class AccountJoinVO extends BaseViewVO implements InternalIdentity, Ident @Column(name = "snapshotTotal") private Long snapshotTotal; + @Column(name = "vmSnapshotLimit") + private Long vmSnapshotLimit; + + @Column(name = "vmSnapshotTotal") + private Long vmSnapshotTotal; + @Column(name = "templateLimit") private Long templateLimit; @@ -293,6 +299,10 @@ public Long getSnapshotTotal() { return snapshotTotal; } + public Long getVmSnapshotTotal() { + return vmSnapshotTotal; + } + public Long getTemplateTotal() { return templateTotal; } @@ -349,6 +359,10 @@ public Long getSnapshotLimit() { return snapshotLimit; } + public Long getVmSnapshotLimit() { + return vmSnapshotLimit; + } + public Long getTemplateLimit() { return templateLimit; } diff --git a/server/src/main/java/com/cloud/api/query/vo/DomainJoinVO.java b/server/src/main/java/com/cloud/api/query/vo/DomainJoinVO.java index e17eacd68fac..b1b5160f938f 100644 --- a/server/src/main/java/com/cloud/api/query/vo/DomainJoinVO.java +++ b/server/src/main/java/com/cloud/api/query/vo/DomainJoinVO.java @@ -100,6 +100,12 @@ public class DomainJoinVO extends BaseViewVO implements InternalIdentity, Identi @Column(name="snapshotTotal") private Long snapshotTotal; + @Column(name = "vmSnapshotLimit") + private Long vmSnapshotLimit; + + @Column(name = "vmSnapshotTotal") + private Long vmSnapshotTotal; + @Column(name="templateLimit") private Long templateLimit; @@ -311,8 +317,14 @@ public void setSnapshotTotal(Long snapshotTotal) { this.snapshotTotal = snapshotTotal; } + public Long getVmSnapshotTotal() { + return vmSnapshotTotal; + } + public void setVmSnapshotTotal(Long vmSnapshotTotal) { + this.vmSnapshotTotal = vmSnapshotTotal; + } public Long getTemplateTotal() { return templateTotal; @@ -433,6 +445,14 @@ public void setSnapshotLimit(Long snapshotLimit) { this.snapshotLimit = snapshotLimit; } + public Long getVmSnapshotLimit() { + return vmSnapshotLimit; + } + + + public void setVmSnapshotLimit(Long vmSnapshotLimit) { + this.vmSnapshotLimit = vmSnapshotLimit; + } public Long getTemplateLimit() { return templateLimit; diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 673f6da0ad11..36dadc5d374a 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -2505,6 +2505,7 @@ "label.vmlimit": "Instance limits", "label.vmname": "Instance name", "label.vms": "Instances", +"label.vmsnapshotlimit": "VM snapshot limits", "label.vmscheduleactions": "Actions", "label.vmstate": "Instance state", "label.vmtotal": "Total of Instances", diff --git a/ui/public/locales/pt_BR.json b/ui/public/locales/pt_BR.json index 1b51bc438e58..e93f9ee107b5 100644 --- a/ui/public/locales/pt_BR.json +++ b/ui/public/locales/pt_BR.json @@ -1750,6 +1750,7 @@ "label.vmlimit": "Limites de inst\u00e2ncias", "label.vmname": "Nome da VM", "label.vms": "VMs", +"label.vmsnapshotlimit": "Limite de snapshots de VM", "label.vmstate": "Estado da VM", "label.vmtotal": "VMs totais", "label.vmware.storage.policy": "Pol\u00edtica de armazenamento do VMWare", diff --git a/ui/src/components/view/ResourceCountUsage.vue b/ui/src/components/view/ResourceCountUsage.vue index dc0b4cada33f..da82068920f5 100644 --- a/ui/src/components/view/ResourceCountUsage.vue +++ b/ui/src/components/view/ResourceCountUsage.vue @@ -92,7 +92,7 @@ export default { return { usageList: [ 'vm', 'cpu', 'memory', 'primarystorage', 'volume', 'ip', 'network', - 'vpc', 'secondarystorage', 'snapshot', 'template', 'project' + 'vpc', 'secondarystorage', 'snapshot', 'vmsnapshot', 'template', 'project' ], taggedUsage: {}, tagData: {}, From d16b0db6dfcdabc7bf8ba7030ba228531bb33035 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 08:14:19 -0300 Subject: [PATCH 02/16] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../apache/cloudstack/api/response/ProjectResponse.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java index 206bf0872933..b13900cbdb9b 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java @@ -189,15 +189,16 @@ public class ProjectResponse extends BaseResponse implements ResourceLimitAndCou private String snapshotAvailable; @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) - @Param(description = "the number of VM snapshots that can be stored by this account") + @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) + @Param(description = "the number of VM snapshots that can be stored by this project") private String vmSnapshotLimit; @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) - @Param(description = "the number of VM snapshots stored by this account") + @Param(description = "the number of VM snapshots stored by this project") private Long vmSnapshotTotal; @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) - @Param(description = "the number of VM snapshots available for this account") + @Param(description = "the number of VM snapshots available for this project") private String vmSnapshotAvailable; @SerializedName("templatelimit") From ce2b8a86795ada10626d84860296934d796e8a82 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:28:12 -0300 Subject: [PATCH 03/16] Update api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java Co-authored-by: Fabricio Duarte --- .../org/apache/cloudstack/api/response/AccountResponse.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java index b75711ccd43c..849e763fbc48 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/AccountResponse.java @@ -128,15 +128,15 @@ public class AccountResponse extends BaseResponse implements ResourceLimitAndCou private String snapshotAvailable; @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) - @Param(description = "the number of VM snapshots that can be stored by this account") + @Param(description = "the number of Instance Snapshots that can be stored by this Account") private String vmSnapshotLimit; @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) - @Param(description = "the number of VM snapshots stored by this account") + @Param(description = "the number of Instance Snapshots stored by this Account") private Long vmSnapshotTotal; @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) - @Param(description = "the number of VM snapshots available for this account") + @Param(description = "the number of Instance Snapshots available for this Account") private String vmSnapshotAvailable; @SerializedName("templatelimit") From ff29371c11cc2306087a37aae88e66bacc1c8a19 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:28:35 -0300 Subject: [PATCH 04/16] Update api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java Co-authored-by: Fabricio Duarte --- .../java/org/apache/cloudstack/api/response/ProjectResponse.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java index b13900cbdb9b..b5a0082f362e 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java @@ -188,7 +188,6 @@ public class ProjectResponse extends BaseResponse implements ResourceLimitAndCou @Param(description = "The total number of Snapshots available for this project", since = "4.2.0") private String snapshotAvailable; - @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) @Param(description = "the number of VM snapshots that can be stored by this project") private String vmSnapshotLimit; From 945011a15a0cf3e5ab3b29fb48d3922d02ee5657 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:29:03 -0300 Subject: [PATCH 05/16] Update api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java Co-authored-by: Fabricio Duarte --- .../org/apache/cloudstack/api/response/ProjectResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java index b5a0082f362e..f946fe02ebe9 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java @@ -189,7 +189,7 @@ public class ProjectResponse extends BaseResponse implements ResourceLimitAndCou private String snapshotAvailable; @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) - @Param(description = "the number of VM snapshots that can be stored by this project") + @Param(description = "the number of Instance Snapshots that can be stored by this Project") private String vmSnapshotLimit; @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) From 81d515445bd9c496cbb79eaf883a706e2de6953f Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:43:02 -0300 Subject: [PATCH 06/16] Rename vm_snapshot to instance_snapshot --- api/src/main/java/com/cloud/configuration/Resource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/com/cloud/configuration/Resource.java b/api/src/main/java/com/cloud/configuration/Resource.java index f9c2e52649a1..89cfeb005a0c 100644 --- a/api/src/main/java/com/cloud/configuration/Resource.java +++ b/api/src/main/java/com/cloud/configuration/Resource.java @@ -30,7 +30,7 @@ enum ResourceType { // Primary and Secondary storage are allocated_storage and n project("project", 5), network("network", 6), vpc("vpc", 7), - vm_snapshot("vm_snapshot", 12), + instance_snapshot("instance_snapshot", 12), cpu("cpu", 8), memory("memory", 9), primary_storage("primary_storage", 10), From 0e2abab8f2d999232ab56c90571d93d20fe5ed4a Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:43:56 -0300 Subject: [PATCH 07/16] Change ResourceType from vm_snapshot to instance_snapshot --- .../main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java index 027e3dc9a867..0e111efe19a0 100644 --- a/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/DomainJoinDaoImpl.java @@ -151,7 +151,7 @@ public void setResourceLimits(DomainJoinVO domain, boolean fullView, ResourceLim response.setSnapshotTotal(snapshotTotal); response.setSnapshotAvailable(snapshotAvail); - Long vmSnapshotLimit = ApiDBUtils.findCorrectResourceLimitForDomain(domain.getVmSnapshotLimit(), ResourceType.vm_snapshot, domain.getId()); + Long vmSnapshotLimit = ApiDBUtils.findCorrectResourceLimitForDomain(domain.getVmSnapshotLimit(), ResourceType.instance_snapshot, domain.getId()); String vmSnapshotLimitDisplay = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit); Long vmSnapshotTotal = (domain.getVmSnapshotTotal() == null) ? 0 : domain.getVmSnapshotTotal(); String vmSnapshotAvailable = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit - vmSnapshotTotal); From 08acb335cb86799b305b1afc16da8eea379b9eb2 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:44:43 -0300 Subject: [PATCH 08/16] Update AccountJoinDaoImpl.java --- .../main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java index f4e4e28db80e..cd85b2e041b5 100644 --- a/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/AccountJoinDaoImpl.java @@ -172,7 +172,7 @@ public void setResourceLimits(AccountJoinVO account, boolean fullView, ResourceL response.setSnapshotTotal(snapshotTotal); response.setSnapshotAvailable(snapshotAvail); - Long vmSnapshotLimit = ApiDBUtils.findCorrectResourceLimit(account.getVmSnapshotLimit(), account.getId(), ResourceType.vm_snapshot); + Long vmSnapshotLimit = ApiDBUtils.findCorrectResourceLimit(account.getVmSnapshotLimit(), account.getId(), ResourceType.instance_snapshot); String vmSnapshotLimitDisplay = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit); Long vmSnapshotTotal = (account.getVmSnapshotTotal() == null) ? 0 : account.getVmSnapshotTotal(); String snapshotAvailable = (fullView || vmSnapshotLimit == -1) ? Resource.UNLIMITED : String.valueOf(vmSnapshotLimit - vmSnapshotTotal); From 4f9da750b13cf8c778a6dee9d1d35f200fea7342 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:06:42 -0300 Subject: [PATCH 09/16] Update en.json --- ui/public/locales/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 36dadc5d374a..087070dbe51a 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -2503,6 +2503,7 @@ "label.vmfs": "VMFS", "label.vmipaddress": "Instance IP address", "label.vmlimit": "Instance limits", +"label.maxvmsnapshot": "Max. VM snapshot", "label.vmname": "Instance name", "label.vms": "Instances", "label.vmsnapshotlimit": "VM snapshot limits", From 43c313503774ee5209d60feac26810a8963746ae Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:16:15 -0300 Subject: [PATCH 10/16] Update snapshot terminology in ListResourceLimitsCmd --- .../api/command/user/resource/ListResourceLimitsCmd.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 98993d9fd549..90465643e55f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -55,7 +55,7 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd + "9 - Memory. Amount of RAM an account can allocate for their resources. " + "10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. " + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. " - + "12 - VmSnapshot. Number of VM snapshots an account can own.") + + "12 - VmSnapshot. Number of instance snapshots an account can own.") private Integer resourceType; @Parameter(name = ApiConstants.RESOURCE_TYPE_NAME, type = CommandType.STRING, description = "Type of resource (wins over resourceType if both are provided). Values are: " @@ -71,7 +71,7 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd + "memory - Memory. Amount of RAM an account can allocate for their resources. " + "primary_storage - PrimaryStorage. Total primary storage space (in GiB) a user can use. " + "secondary_storage - SecondaryStorage. Total secondary storage space (in GiB) a user can use. " - + "vm_snapshot - VmSnapshot. Number of VM snapshots an account can own.") + + "instance_snapshot - InstanceSnapshot. Number of instance snapshots an account can own.") private String resourceTypeName; @Parameter(name = ApiConstants.TAG, type = CommandType.STRING, description = "Tag for the resource type", since = "4.20.0") From f4db9adc62b5a5956df91ec0b37a58657a743ebd Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:17:20 -0300 Subject: [PATCH 11/16] Fix typo in resource limits description --- .../api/command/user/resource/ListResourceLimitsCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java index 90465643e55f..15728c2f19d3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/ListResourceLimitsCmd.java @@ -55,7 +55,7 @@ public class ListResourceLimitsCmd extends BaseListProjectAndAccountResourcesCmd + "9 - Memory. Amount of RAM an account can allocate for their resources. " + "10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. " + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use. " - + "12 - VmSnapshot. Number of instance snapshots an account can own.") + + "12 - instanceSnapshot. Number of instance snapshots an account can own.") private Integer resourceType; @Parameter(name = ApiConstants.RESOURCE_TYPE_NAME, type = CommandType.STRING, description = "Type of resource (wins over resourceType if both are provided). Values are: " From cd04558c57ca74aff985bbb9fec47baf6521fb62 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:18:14 -0300 Subject: [PATCH 12/16] Update resource count description from VmSnapshot to InstanceSnapshot --- .../api/command/user/resource/UpdateResourceCountCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index 5901b56f4f4e..e46b7bb16bf5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -73,7 +73,7 @@ public class UpdateResourceCountCmd extends BaseCmd { + "9 - Memory. Total Memory (in MB) a user can use. " + "10 - PrimaryStorage. Total primary storage space (in GiB) a user can use. " + "11 - SecondaryStorage. Total secondary storage space (in GiB) a user can use." - + "12 - VmSnapshot. Number of VM snapshots a user can create.") + + "12 - InstanceSnapshot. Number of VM snapshots a user can create.") private Integer resourceType; @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, entityType = ProjectResponse.class, description = "Update resource limits for project") From e26e79e2da692190b5da63a8aa58ada41292aa63 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:20:10 -0300 Subject: [PATCH 13/16] Update VM snapshot descriptions to use 'Instance' --- .../org/apache/cloudstack/api/response/DomainResponse.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java index a23a0debfb6e..243785ac86e8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/DomainResponse.java @@ -106,15 +106,15 @@ public class DomainResponse extends BaseResponseWithAnnotations implements Resou private String snapshotAvailable; @SerializedName(ApiConstants.VM_SNAPSHOT_LIMIT) - @Param(description = "the number of VM snapshots that can be stored by this account") + @Param(description = "the number of Instance snapshots that can be stored by this account") private String vmSnapshotLimit; @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) - @Param(description = "the number of VM snapshots stored by this account") + @Param(description = "the number of Instance snapshots stored by this account") private Long vmSnapshotTotal; @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) - @Param(description = "the number of VM snapshots available for this account") + @Param(description = "the number of Instance snapshots available for this account") private String vmSnapshotAvailable; @SerializedName("templatelimit") @Param(description = "The total number of Templates which can be created by this domain") From 2275a30b775ec59f04754fc9496d9f5e44dca633 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:20:52 -0300 Subject: [PATCH 14/16] Update snapshot terminology in ProjectResponse --- .../org/apache/cloudstack/api/response/ProjectResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java index f946fe02ebe9..eb32f03e4cc5 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ProjectResponse.java @@ -193,11 +193,11 @@ public class ProjectResponse extends BaseResponse implements ResourceLimitAndCou private String vmSnapshotLimit; @SerializedName(ApiConstants.VM_SNAPSHOT_TOTAL) - @Param(description = "the number of VM snapshots stored by this project") + @Param(description = "the number of instance snapshots stored by this project") private Long vmSnapshotTotal; @SerializedName(ApiConstants.VM_SNAPSHOT_AVAILABLE) - @Param(description = "the number of VM snapshots available for this project") + @Param(description = "the number of Instance snapshots available for this project") private String vmSnapshotAvailable; @SerializedName("templatelimit") From aac59a2d99258a890346305b01ec79261ae5bd27 Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:29:56 -0300 Subject: [PATCH 15/16] Update labels for instance terminology in en.json --- ui/public/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 087070dbe51a..5adef7de4147 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -2503,10 +2503,10 @@ "label.vmfs": "VMFS", "label.vmipaddress": "Instance IP address", "label.vmlimit": "Instance limits", -"label.maxvmsnapshot": "Max. VM snapshot", +"label.maxvmsnapshot": "Max. Instance snapshot", "label.vmname": "Instance name", "label.vms": "Instances", -"label.vmsnapshotlimit": "VM snapshot limits", +"label.vmsnapshotlimit": "Instance snapshot limits", "label.vmscheduleactions": "Actions", "label.vmstate": "Instance state", "label.vmtotal": "Total of Instances", From b2e73348a5be1d0e89f66ac84b0d116bc182ffad Mon Sep 17 00:00:00 2001 From: Tonitzpp <134986282+Tonitzpp@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:30:55 -0300 Subject: [PATCH 16/16] Change VM snapshot limit label translation Updated translation for VM snapshot limit label. --- ui/public/locales/pt_BR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/public/locales/pt_BR.json b/ui/public/locales/pt_BR.json index e93f9ee107b5..31e43278ea77 100644 --- a/ui/public/locales/pt_BR.json +++ b/ui/public/locales/pt_BR.json @@ -1750,7 +1750,7 @@ "label.vmlimit": "Limites de inst\u00e2ncias", "label.vmname": "Nome da VM", "label.vms": "VMs", -"label.vmsnapshotlimit": "Limite de snapshots de VM", +"label.vmsnapshotlimit": "Limite de snapshots de inst\u00e2ncias", "label.vmstate": "Estado da VM", "label.vmtotal": "VMs totais", "label.vmware.storage.policy": "Pol\u00edtica de armazenamento do VMWare",