diff --git a/api/src/main/java/org/apache/cloudstack/api/response/UnmanagedInstanceResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/UnmanagedInstanceResponse.java index 5167f1788ce..e866b19e1c1 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/UnmanagedInstanceResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/UnmanagedInstanceResponse.java @@ -43,6 +43,10 @@ public class UnmanagedInstanceResponse extends BaseResponse { @Param(description = "the ID of the host to which virtual machine belongs") private String hostId; + @SerializedName(ApiConstants.HOST_NAME) + @Param(description = "the name of the host to which virtual machine belongs") + private String hostName; + @SerializedName(ApiConstants.POWER_STATE) @Param(description = "the power state of the virtual machine") private String powerState; @@ -108,6 +112,14 @@ public class UnmanagedInstanceResponse extends BaseResponse { this.hostId = hostId; } + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + public String getPowerState() { return powerState; } diff --git a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java index 501ca632802..a470486b62c 100644 --- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java @@ -25,17 +25,6 @@ import java.util.Set; import javax.inject.Inject; -import com.cloud.agent.api.PrepareUnmanageVMInstanceAnswer; -import com.cloud.agent.api.PrepareUnmanageVMInstanceCommand; -import com.cloud.event.ActionEvent; -import com.cloud.exception.UnsupportedServiceException; -import com.cloud.storage.Snapshot; -import com.cloud.storage.SnapshotVO; -import com.cloud.storage.dao.SnapshotDao; -import com.cloud.vm.NicVO; -import com.cloud.vm.UserVmVO; -import com.cloud.vm.dao.UserVmDao; -import com.cloud.vm.snapshot.dao.VMSnapshotDao; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ResponseGenerator; @@ -59,12 +48,15 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.utils.volume.VirtualMachineDiskInfo; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.GetUnmanagedInstancesAnswer; import com.cloud.agent.api.GetUnmanagedInstancesCommand; +import com.cloud.agent.api.PrepareUnmanageVMInstanceAnswer; +import com.cloud.agent.api.PrepareUnmanageVMInstanceCommand; import com.cloud.capacity.CapacityManager; import com.cloud.configuration.Config; import com.cloud.configuration.Resource; @@ -75,6 +67,7 @@ import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlanner; import com.cloud.deploy.DeploymentPlanningManager; +import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; import com.cloud.exception.InsufficientAddressCapacityException; @@ -83,6 +76,7 @@ import com.cloud.exception.InsufficientVirtualNetworkCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.UnsupportedServiceException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status; @@ -103,6 +97,8 @@ import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.GuestOS; import com.cloud.storage.GuestOSHypervisor; +import com.cloud.storage.Snapshot; +import com.cloud.storage.SnapshotVO; import com.cloud.storage.StoragePool; import com.cloud.storage.VMTemplateStoragePoolVO; import com.cloud.storage.VMTemplateVO; @@ -112,6 +108,7 @@ import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.GuestOSDao; import com.cloud.storage.dao.GuestOSHypervisorDao; +import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VolumeDao; @@ -127,7 +124,9 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.DiskProfile; import com.cloud.vm.NicProfile; +import com.cloud.vm.NicVO; import com.cloud.vm.UserVmManager; +import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineManager; @@ -135,7 +134,9 @@ import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.VmDetailConstants; import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; +import com.cloud.vm.snapshot.dao.VMSnapshotDao; import com.google.common.base.Strings; import com.google.gson.Gson; @@ -243,6 +244,7 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { } if (host != null) { response.setHostId(host.getUuid()); + response.setHostName(host.getName()); } response.setPowerState(instance.getPowerState().toString()); response.setCpuCores(instance.getCpuCores()); @@ -1078,6 +1080,10 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { if (cluster.getHypervisorType() != Hypervisor.HypervisorType.VMware) { throw new InvalidParameterValueException(String.format("VM ingestion is currently not supported for hypervisor: %s", cluster.getHypervisorType().toString())); } + String keyword = cmd.getKeyword(); + if (StringUtils.isNotEmpty(keyword)) { + keyword = keyword.toLowerCase(); + } List hosts = resourceManager.listHostsInClusterByStatus(clusterId, Status.Up); List additionalNameFilters = getAdditionalNameFilters(cluster); List responses = new ArrayList<>(); @@ -1097,11 +1103,15 @@ public class UnmanagedVMsManagerImpl implements UnmanagedVMsManager { continue; } GetUnmanagedInstancesAnswer unmanagedInstancesAnswer = (GetUnmanagedInstancesAnswer) answer; - HashMap unmanagedInstances = new HashMap<>(); - unmanagedInstances.putAll(unmanagedInstancesAnswer.getUnmanagedInstances()); + HashMap unmanagedInstances = new HashMap<>(unmanagedInstancesAnswer.getUnmanagedInstances()); Set keys = unmanagedInstances.keySet(); for (String key : keys) { - responses.add(createUnmanagedInstanceResponse(unmanagedInstances.get(key), cluster, host)); + UnmanagedInstanceTO instance = unmanagedInstances.get(key); + if (StringUtils.isNotEmpty(keyword) && + !instance.getName().toLowerCase().contains(keyword)) { + continue; + } + responses.add(createUnmanagedInstanceResponse(instance, cluster, host)); } } ListResponse listResponses = new ListResponse<>(); diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 8c5e8ee7ca7..178f2550c56 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -219,6 +219,7 @@ "label.action.lock.account.processing": "Locking account....", "label.action.manage.cluster": "Manage Cluster", "label.action.manage.cluster.processing": "Managing Cluster....", +"label.action.import.export.instances":"Import-Export Instances", "label.action.migrate.instance": "Migrate Instance", "label.action.migrate.instance.processing": "Migrating Instance....", "label.action.migrate.router": "Migrate Router", @@ -276,6 +277,8 @@ "label.action.unmanage.cluster": "Unmanage Cluster", "label.action.unmanage.cluster.processing": "Unmanaging Cluster....", "label.action.unmanage.virtualmachine": "Unmanage VM", +"label.action.unmanage.instance": "Unmanage Instance", +"label.action.unmanage.instances": "Unmanage Instances", "label.action.update.offering.access": "Update Offering Access", "label.action.update.os.preference": "Update OS Preference", "label.action.update.os.preference.processing": "Updating OS Preference....", @@ -461,6 +464,8 @@ "label.asyncbackup": "Async Backup", "label.author.email": "Author e-mail", "label.author.name": "Author name", +"label.auto.assign.diskoffering.disk.size": "Automatically assign offering matching the disk size", +"label.auto.assign.random.ip": "Automatically assign a random IP address", "label.autoscale": "AutoScale", "label.autoscale.configuration.wizard": "AutoScale Configuration Wizard", "label.availability": "Availability", @@ -773,6 +778,7 @@ "label.disk.offering.access": "Disk offering access", "label.disk.offering.details": "Disk offering details", "label.disk.offerings": "Disk Offerings", +"label.disk.selection": "Disk Selection", "label.disk.size": "Disk Size", "label.disk.volume": "Disk Volume", "label.diskbytesreadrate": "Disk Read Rate (BPS)", @@ -1057,6 +1063,7 @@ "label.ikeversion": "IKE Version", "label.images": "Images", "label.import.backup.offering": "Import Backup Offering", +"label.import.instance": "Import Instance", "label.import.offering": "Import Offering", "label.import.role": "Import Role", "label.in.progress": "in progress", @@ -1301,6 +1308,7 @@ "label.manage.resources": "Manage Resources", "label.manage.vpn.user": "Manage VPN Users", "label.managedstate": "Managed State", +"label.managed.instances": "Managed Instances", "label.management": "Management", "label.management.ips": "Management IP Addresses", "label.management.server": "Management Server", @@ -1383,6 +1391,7 @@ "label.metrics.network.usage": "Network Usage", "label.metrics.network.write": "Write", "label.metrics.num.cpu.cores": "Cores", +"label.migrate.allowed": "Migrate Allowed", "label.migrate.data.from.image.store": "Migrate Data from Image store", "label.migrate.instance.to": "Migrate instance to", "label.migrate.instance.to.host": "Migrate instance to another host", @@ -1453,6 +1462,7 @@ "label.network.offering.display.text": "Network Offering Display Text", "label.network.offering.name": "Network Offering Name", "label.network.offerings": "Network Offerings", +"label.network.selection": "Network Selection", "label.network.service.providers": "Network Service Providers", "label.networkcidr": "Network CIDR", "label.networkdevicetype": "Type", @@ -1493,6 +1503,7 @@ "label.nfscachepath": "Path", "label.nfscachezoneid": "Zone", "label.nfsserver": "NFS Server", +"label.nic": "NIC", "label.nicadaptertype": "NIC adapter type", "label.nicira.controller.address": "Controller Address", "label.nicira.nvp.details": "Nicira NVP details", @@ -1844,6 +1855,7 @@ "label.rolename": "Role", "label.roles": "Roles", "label.roletype": "Role Type", +"label.rootdisk": "ROOT disk", "label.rootdisksize": "Root disk size (GB)", "label.root.certificate": "Root certificate", "label.root.disk.offering": "Root Disk Offering", @@ -2133,6 +2145,8 @@ "label.templatesubject": "Subject", "label.templatetotal": "Template", "label.templatetype": "Template Type", +"label.template.temporary.import": "Use a temporary template for import", +"label.template.select.existing": "Select an existing template", "label.tftp.dir": "TFTP Directory", "label.tftpdir": "Tftp root directory", "label.theme.default": "Default Theme", @@ -2151,6 +2165,7 @@ "label.to": "to", "label.token": "Token", "label.token.for.dashboard.login": "Token for dashboard login can be retrieved using following command", +"label.tools": "Tools", "label.total": "Total", "label.total.hosts": "Total Hosts", "label.total.memory": "Total Memory", @@ -2177,6 +2192,9 @@ "label.unit": "Usage Unit", "label.unknown": "Unknown", "label.unlimited": "Unlimited", +"label.unmanage.instance": "Unmanage Instance", +"label.unmanaged.instance": "Unmanaged Instance", +"label.unmanaged.instances": "Unmanaged Instances", "label.untagged": "Untagged", "label.update.instance.group": "Update Instance Group", "label.update.physical.network": "Update Physical Network", @@ -2487,7 +2505,10 @@ "message.action.stop.router": "All services provided by this virtual router will be interrupted. Please confirm that you want to stop this router.", "message.action.stop.systemvm": "Please confirm that you want to stop this system VM.", "message.action.unmanage.cluster": "Please confirm that you want to unmanage the cluster.", +"message.action.unmanage.instance": "Please confirm that you want to unmanage the instance.", +"message.action.unmanage.instances": "Please confirm that you want to unmanage the instances.", "message.action.unmanage.virtualmachine": "Please confirm that you want to unmanage the virtual machine.", +"message.action.unmanage.virtualmachines": "Please confirm that you want to unmanage the virtual machines.", "message.action.vmsnapshot.create": "Please confirm that you want to take a snapshot of this instance.
Please notice that the instance will be paused during the snapshoting, and resumed after snapshotting, if it runs on KVM.", "message.action.vmsnapshot.delete": "Please confirm that you want to delete this VM snapshot.
Please notice that the instance will be paused before the snapshot deletion, and resumed after deletion, if it runs on KVM.", "message.action.vmsnapshot.revert": "Revert VM snapshot", @@ -2786,6 +2807,7 @@ "message.enabling.zone.dots": "Enabling zone...", "message.enter.seperated.list.multiple.cidrs": "Please enter a comma separated list of CIDRs if more than one", "message.enter.token": "Please enter the token that you were given in your invite e-mail.", +"message.enter.valid.nic.ip": "Please enter a valid IP address for NIC", "message.error.access.key": "Please enter Access Key", "message.error.add.guest.network": "Either IPv4 fields or IPv6 fields need to be filled when adding a guest network", "message.error.add.secondary.ipaddress": "There was an error adding the secondary IP Address", @@ -2917,6 +2939,7 @@ "message.guestnetwork.state.shutdown": "Indicates the network configuration is being destroyed", "message.host.dedicated": "Host Dedicated", "message.host.dedication.released": "Host dedication released", +"message.desc.importexportinstancewizard": "Import and export instances to/from an existing VMware zone.

This feature only applies Cloudstack VMware zones. By choosing to Manage an instance, CloudStack takes over the orchestration of that instance. The instance is left running and not physically moved. Unmanaging instances, removes CloudStack ability to mange them (but they are left running and not destroyed)", "message.info.cloudian.console": "Cloudian Management Console should open in another window", "message.installwizard.click.retry": "Click the button to retry launch.", "message.installwizard.copy.whatisacluster": "A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Virtual machine instances (VMs) can be live-migrated from one host to another within the same cluster, without interrupting service to the user. A cluster is the third-largest organizational unit within a CloudStack™; deployment. Clusters are contained within pods, and pods are contained within zones.

CloudStack™; allows multiple clusters in a cloud deployment, but for a Basic Installation, we only need one cluster.", @@ -2952,10 +2975,13 @@ "message.installwizard.tooltip.configureguesttraffic.guestnetmask": "The netmask in use on the subnet that the guests should use", "message.installwizard.tooltip.configureguesttraffic.gueststartip": "The range of IP addresses that will be available for allocation to guests in this zone. If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.", "message.installwizard.tooltip.configureguesttraffic.name": "A name for your network", -"message.instance.scaled.up.confirm": "Do you really want to scale Up your instance ?", +"message.instances.managed": "Instances or VMs controlled by CloudStack", +"message.instances.scaled.up.confirm": "Do you really want to scale Up your instance ?", +"message.instances.unmanaged": "Instances or VMs not controlled by CloudStack", "message.instancewizard.notemplates": "You do not have any templates available; please add a compatible template, and re-launch the instance wizard.", "message.interloadbalance.not.return.elementid": "error: listInternalLoadBalancerElements API doesn't return Internal LB Element Id", "message.ip.address.changed": "Your IP addresses may have changed; would you like to refresh the listing? Note that in this case the details pane will close.", +"message.ip.address.changes.effect.after.vm.restart": "IP address changes takes effect only after VM restart.", "message.iso.desc": "Disc image containing data or bootable media for OS", "message.join.project": "You have now joined a project. Please switch to Project view to see the project.", "message.kubeconfig.cluster.not.available": "Kubernetes cluster kubeconfig not available currently", @@ -3037,6 +3063,7 @@ "message.pending.projects.2": "To view, please go to the projects section, then select invitations from the drop-down.", "message.please.add.at.lease.one.traffic.range": "Please add at least one traffic range.", "message.please.confirm.remove.ssh.key.pair": "Please confirm that you want to remove this SSH Key Pair", +"message.please.enter.valid.value": "Please enter a valid value", "message.please.enter.value": "Please enter values", "message.please.proceed": "Please proceed to the next step.", "message.please.select.a.configuration.for.your.zone": "Please select a configuration for your zone.", @@ -3110,10 +3137,12 @@ "message.select.a.zone": "A zone typically corresponds to a single datacenter. Multiple zones help make the cloud more reliable by providing physical isolation and redundancy.", "message.select.affinity.groups": "Please select any affinity groups you want this VM to belong to:", "message.select.destination.image.stores": "Please select Image Store(s) to which data is to be migrated to", +"message.select.disk.offering": "Please select a disk offering for disk", "message.select.instance": "Please select an instance.", "message.select.iso": "Please select an ISO for your new virtual instance.", "message.select.item": "Please select an item.", "message.select.migration.policy": "Please select a migration Policy", +"message.select.nic.network": "Please select a network for NIC", "message.select.security.groups": "Please select security group(s) for your new VM", "message.select.template": "Please select a template for your new virtual instance.", "message.select.tier": "Please select a tier", @@ -3184,6 +3213,7 @@ "message.success.edit.acl": "Successfully edited ACL rule", "message.success.edit.rule": "Successfully edited rule", "message.success.enable.saml.auth": "Successfully enabled SAML Authorization", +"message.success.import.instance": "Successfully imported instance", "message.success.migrate.volume": "Successfully migrated volume", "message.success.migrating": "Migration completed successfully for", "message.success.move.acl.order": "Successfully moved ACL rule", @@ -3213,6 +3243,7 @@ "message.success.upload.iso.description": "This ISO file has been uploaded. Please check its status in the Images > ISOs menu", "message.success.upload.template.description": "This template file has been uploaded. Please check its status at Templates menu", "message.success.upload.volume.description": "This Volume has been uploaded. Please check its status in the Volumes menu", +"message.success.unmanage.instance": "Successfully unmanaged instance", "message.suspend.project": "Are you sure you want to suspend this project?", "message.sussess.discovering.feature": "Discovered all available features!", "message.switch.to": "Switched to", @@ -3221,6 +3252,7 @@ "message.template.copying": "Template is being copied.", "message.template.desc": "OS image that can be used to boot VMs", "message.template.iso": "Please select a template or ISO to continue", +"message.template.import.vm.temporary": "If a temporary template is used, reset VM operation will not work after import.", "message.tier.required": "Tier is required", "message.tooltip.dns.1": "Name of a DNS server for use by VMs in the zone. The public IP addresses for the zone must have a route to this server.", "message.tooltip.dns.2": "A second DNS server name for use by VMs in the zone. The public IP addresses for the zone must have a route to this server.", diff --git a/ui/src/components/CheckBoxInputPair.vue b/ui/src/components/CheckBoxInputPair.vue new file mode 100644 index 00000000000..fee6f4d52ea --- /dev/null +++ b/ui/src/components/CheckBoxInputPair.vue @@ -0,0 +1,117 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + + + + diff --git a/ui/src/components/CheckBoxSelectPair.vue b/ui/src/components/CheckBoxSelectPair.vue index ec6c6fa16c8..29035e6b7d7 100644 --- a/ui/src/components/CheckBoxSelectPair.vue +++ b/ui/src/components/CheckBoxSelectPair.vue @@ -16,26 +16,39 @@ // under the License. @@ -44,6 +57,10 @@ export default { name: 'CheckBoxSelectPair', props: { + layout: { + type: String, + default: 'horizontal' + }, resourceKey: { type: String, required: true @@ -56,6 +73,10 @@ export default { type: String, default: '' }, + defaultCheckBoxValue: { + type: Boolean, + default: false + }, selectOptions: { type: Array, required: true @@ -67,12 +88,30 @@ export default { selectDecorator: { type: String, default: '' + }, + reversed: { + type: Boolean, + default: false } }, data () { return { checked: false, - selectedOption: '' + selectedOption: null + } + }, + created () { + this.checked = this.defaultCheckBoxValue + }, + computed: { + selectSource () { + return this.selectOptions.map(item => { + var option = { ...item } + if (!('id' in option)) { + option.id = option.name + } + return option + }) } }, methods: { @@ -80,30 +119,18 @@ export default { return array !== null && array !== undefined && Array.isArray(array) && array.length > 0 }, getSelectInitialValue () { - const provider = this.selectOptions?.filter(x => x.enabled)?.[0]?.name || '' - this.handleSelectChange(provider) - return provider + const initialValue = this.selectSource?.filter(x => x.enabled !== false)?.[0]?.id || '' + this.handleSelectChange(initialValue) + return initialValue }, handleCheckChange (e) { this.checked = e.target.checked - this.$emit('handle-checkpair-change', this.resourceKey, this.checked, '') + this.$emit('handle-checkselectpair-change', this.resourceKey, this.checked, this.selectedOption) }, handleSelectChange (val) { this.selectedOption = val - this.$emit('handle-checkpair-change', this.resourceKey, this.checked, val) + this.$emit('handle-checkselectpair-change', this.resourceKey, this.checked, this.selectedOption) } } } - - diff --git a/ui/src/components/view/InfoCard.vue b/ui/src/components/view/InfoCard.vue index b2a8dd3328c..57f8e6669cb 100644 --- a/ui/src/components/view/InfoCard.vue +++ b/ui/src/components/view/InfoCard.vue @@ -280,7 +280,7 @@ :key="eth.id" style="margin-left: -24px; margin-top: 5px;"> eth{{ index }} {{ eth.ipaddress }} - ({{ eth.networkname }}) + ({{ eth.networkname }}) {{ $t('label.default') }} @@ -311,7 +311,7 @@ type="environment" @click="$message.success(`${$t('label.copied.clipboard')} : ${ ipaddress }`)" v-clipboard:copy="ipaddress" /> - {{ ipaddress }} + {{ ipaddress }} {{ ipaddress }} @@ -329,7 +329,7 @@
{{ $t('label.project') }}
- {{ resource.project || resource.projectname || resource.projectid }} + {{ resource.project || resource.projectname || resource.projectid }} {{ resource.projectname }}
@@ -412,10 +412,10 @@
- {{ resource.isoname || resource.isoid }} + {{ resource.isodisplaytext || resource.isoname || resource.isoid }}
- {{ resource.templatename || resource.templateid }} + {{ resource.templatedisplaytext || resource.templatename || resource.templateid }}
@@ -423,7 +423,7 @@
{{ $t('label.serviceofferingname') }}
- {{ resource.serviceofferingname || resource.serviceofferingid }} + {{ resource.serviceofferingname || resource.serviceofferingid }} {{ resource.serviceofferingname || resource.serviceofferingid }} {{ resource.serviceofferingname || resource.serviceofferingid }}
@@ -432,21 +432,21 @@
{{ $t('label.diskoffering') }}
- {{ resource.diskofferingname || resource.diskofferingid }} + {{ resource.diskofferingname || resource.diskofferingid }} {{ resource.diskofferingname || resource.diskofferingid }}
{{ $t('label.backupofferingid') }}
- {{ resource.backupofferingname || resource.backupofferingid }} + {{ resource.backupofferingname || resource.backupofferingid }} {{ resource.backupofferingname || resource.backupofferingid }}
{{ $t('label.networkofferingid') }}
- {{ resource.networkofferingname || resource.networkofferingid }} + {{ resource.networkofferingname || resource.networkofferingid }} {{ resource.networkofferingname || resource.networkofferingid }}
@@ -454,7 +454,7 @@
{{ $t('label.vpcoffering') }}
- {{ resource.vpcofferingname || resource.vpcofferingid }} + {{ resource.vpcofferingname || resource.vpcofferingid }} {{ resource.vpcofferingname || resource.vpcofferingid }}
@@ -462,7 +462,7 @@
{{ $t('label.storagepool') }}
- {{ resource.storage || resource.storageid }} + {{ resource.storage || resource.storageid }} {{ resource.storage || resource.storageid }} {{ resource.storagetype }} @@ -473,7 +473,7 @@
{{ $t('label.hostname') }}
- {{ resource.hostname || resource.hostid }} + {{ resource.hostname || resource.hostid }} {{ resource.hostname || resource.hostid }}
@@ -481,7 +481,7 @@
{{ $t('label.clusterid') }}
- {{ resource.clustername || resource.cluster || resource.clusterid }} + {{ resource.clustername || resource.cluster || resource.clusterid }} {{ resource.clustername || resource.cluster || resource.clusterid }}
@@ -489,7 +489,7 @@
{{ $t('label.podid') }}
- {{ resource.podname || resource.pod || resource.podid }} + {{ resource.podname || resource.pod || resource.podid }} {{ resource.podname || resource.pod || resource.podid }}
@@ -497,7 +497,7 @@
{{ $t('label.zone') }}
- {{ resource.zone || resource.zonename || resource.zoneid }} + {{ resource.zone || resource.zonename || resource.zoneid }} {{ resource.zone || resource.zonename || resource.zoneid }}
@@ -508,7 +508,7 @@