From 13a98dd196c8b0f86e4fb68db357df41767535f9 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Fri, 17 Apr 2015 18:47:23 +0530 Subject: [PATCH 001/314] CLOUDSTACK-8601. VMFS storage added as local storage can be re-added as shared storage. Fail addition of a VMFS shared storage pool in case it has already been added as local storage in CS. --- .../exception/StorageConflictException.java | 27 +++++++++++++++++++ .../agent/api/ModifyStoragePoolAnswer.java | 9 +++++++ .../api/storage/HypervisorHostListener.java | 4 ++- .../datastore/db/PrimaryDataStoreDao.java | 2 ++ .../datastore/db/PrimaryDataStoreDaoImpl.java | 16 +++++++++++ .../provider/DefaultHostListener.java | 16 ++++++++++- .../vmware/resource/VmwareResource.java | 3 +++ ...oudStackPrimaryDataStoreLifeCycleImpl.java | 7 +++++ .../src/com/cloud/storage/StorageManager.java | 3 ++- .../com/cloud/storage/StorageManagerImpl.java | 3 ++- .../utils/exception/CSExceptionErrorCode.java | 1 + 11 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 api/src/com/cloud/exception/StorageConflictException.java diff --git a/api/src/com/cloud/exception/StorageConflictException.java b/api/src/com/cloud/exception/StorageConflictException.java new file mode 100644 index 00000000000..2006d591621 --- /dev/null +++ b/api/src/com/cloud/exception/StorageConflictException.java @@ -0,0 +1,27 @@ +// 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. +package com.cloud.exception; + +public class StorageConflictException extends ManagementServerException { + + private static final long serialVersionUID = -294905017911859479L; + + public StorageConflictException(String message) { + super(message); + } + +} diff --git a/core/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java b/core/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java index c5c6215a917..b92bb720823 100644 --- a/core/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java +++ b/core/src/com/cloud/agent/api/ModifyStoragePoolAnswer.java @@ -26,6 +26,7 @@ import com.cloud.storage.template.TemplateProp; public class ModifyStoragePoolAnswer extends Answer { StoragePoolInfo poolInfo; Map templateInfo; + String localDatastoreName = null; protected ModifyStoragePoolAnswer() { } @@ -55,4 +56,12 @@ public class ModifyStoragePoolAnswer extends Answer { this.templateInfo = templateInfo; } + public String getLocalDatastoreName() { + return localDatastoreName; + } + + public void setLocalDatastoreName(String localDatastoreName) { + this.localDatastoreName = localDatastoreName; + } + } diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java index 8db4101ffc0..82ba8b6105b 100644 --- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/HypervisorHostListener.java @@ -18,8 +18,10 @@ */ package org.apache.cloudstack.engine.subsystem.api.storage; +import com.cloud.exception.StorageConflictException; + public interface HypervisorHostListener { - boolean hostConnect(long hostId, long poolId); + boolean hostConnect(long hostId, long poolId) throws StorageConflictException; boolean hostDisconnected(long hostId, long poolId); } diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java index 39395458822..d265da15de2 100644 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java @@ -117,4 +117,6 @@ public interface PrimaryDataStoreDao extends GenericDao { List findZoneWideStoragePoolsByHypervisor(long dataCenterId, HypervisorType hypervisorType); List findLocalStoragePoolsByHostAndTags(long hostId, String[] tags); + + List listLocalStoragePoolByPath(long datacenterId, String path); } diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java index d3c29f70d6a..a614261ebb5 100644 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java @@ -53,6 +53,7 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase protected final SearchBuilder DcPodSearch; protected final SearchBuilder DcPodAnyClusterSearch; protected final SearchBuilder DeleteLvmSearch; + protected final SearchBuilder DcLocalStorageSearch; protected final GenericSearchBuilder StatusCountSearch; @Inject @@ -115,6 +116,11 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase StatusCountSearch.select(null, Func.COUNT, null); StatusCountSearch.done(); + DcLocalStorageSearch = createSearchBuilder(); + DcLocalStorageSearch.and("datacenterId", DcLocalStorageSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); + DcLocalStorageSearch.and("path", DcLocalStorageSearch.entity().getPath(), SearchCriteria.Op.EQ); + DcLocalStorageSearch.and("scope", DcLocalStorageSearch.entity().getScope(), SearchCriteria.Op.EQ); + DcLocalStorageSearch.done(); } @Override @@ -195,6 +201,16 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase return findOneBy(sc); } + @Override + public List listLocalStoragePoolByPath(long datacenterId, String path) { + SearchCriteria sc = DcLocalStorageSearch.create(); + sc.setParameters("path", path); + sc.setParameters("datacenterId", datacenterId); + sc.setParameters("scope", ScopeType.HOST); + + return listBy(sc); + } + @Override public List listBy(long datacenterId, Long podId, Long clusterId, ScopeType scope) { if (clusterId != null) { diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java index e77d5489cb6..89af0765fdb 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultHostListener.java @@ -18,6 +18,8 @@ */ package org.apache.cloudstack.storage.datastore.provider; +import java.util.List; + import javax.inject.Inject; import org.apache.log4j.Logger; @@ -32,6 +34,7 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.ModifyStoragePoolAnswer; import com.cloud.agent.api.ModifyStoragePoolCommand; import com.cloud.alert.AlertManager; +import com.cloud.exception.StorageConflictException; import com.cloud.storage.DataStoreRole; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolHostVO; @@ -52,7 +55,7 @@ public class DefaultHostListener implements HypervisorHostListener { PrimaryDataStoreDao primaryStoreDao; @Override - public boolean hostConnect(long hostId, long poolId) { + public boolean hostConnect(long hostId, long poolId) throws StorageConflictException { StoragePool pool = (StoragePool)this.dataStoreMgr.getDataStore(poolId, DataStoreRole.Primary); ModifyStoragePoolCommand cmd = new ModifyStoragePoolCommand(true, pool); final Answer answer = agentMgr.easySend(hostId, cmd); @@ -71,6 +74,17 @@ public class DefaultHostListener implements HypervisorHostListener { assert (answer instanceof ModifyStoragePoolAnswer) : "Well, now why won't you actually return the ModifyStoragePoolAnswer when it's ModifyStoragePoolCommand? Pool=" + pool.getId() + "Host=" + hostId; ModifyStoragePoolAnswer mspAnswer = (ModifyStoragePoolAnswer)answer; + if (mspAnswer.getLocalDatastoreName() != null && pool.isShared()) { + String datastoreName = mspAnswer.getLocalDatastoreName(); + List localStoragePools = this.primaryStoreDao.listLocalStoragePoolByPath(pool.getDataCenterId(), datastoreName); + for (StoragePoolVO localStoragePool : localStoragePools) { + if (datastoreName.equals(localStoragePool.getPath())) { + s_logger.warn("Storage pool: " + pool.getId() + " has already been added as local storage: " + localStoragePool.getName()); + throw new StorageConflictException("Cannot add shared storage pool: " + pool.getId() + " because it has already been added as local storage:" + + localStoragePool.getName()); + } + } + } StoragePoolHostVO poolHost = storagePoolHostDao.findByPoolHost(pool.getId(), hostId); if (poolHost == null) { diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 5701ee96a12..f550d867547 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -3413,6 +3413,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa long available = summary.getFreeSpace(); Map tInfo = new HashMap(); ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd, capacity, available, tInfo); + if (cmd.getAdd() && pool.getType() == StoragePoolType.VMFS) { + answer.setLocalDatastoreName(morDatastore.getValue()); + } return answer; } catch (Throwable e) { if (e instanceof RemoteException) { diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java index 38e9d9c9d0c..be128f7f957 100644 --- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java +++ b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java @@ -49,6 +49,7 @@ import com.cloud.agent.api.DeleteStoragePoolCommand; import com.cloud.agent.api.StoragePoolInfo; import com.cloud.alert.AlertManager; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.StorageConflictException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; @@ -410,6 +411,9 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore try { storageMgr.connectHostToSharedPool(h.getId(), primarystore.getId()); poolHosts.add(h); + } catch (StorageConflictException se) { + primaryDataStoreDao.expunge(primarystore.getId()); + throw new CloudRuntimeException("Storage has already been added as local storage"); } catch (Exception e) { s_logger.warn("Unable to establish a connection between " + h + " and " + primarystore, e); } @@ -434,6 +438,9 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore try { storageMgr.connectHostToSharedPool(host.getId(), dataStore.getId()); poolHosts.add(host); + } catch (StorageConflictException se) { + primaryDataStoreDao.expunge(dataStore.getId()); + throw new CloudRuntimeException("Storage has already been added as local storage to host: " + host.getName()); } catch (Exception e) { s_logger.warn("Unable to establish a connection between " + host + " and " + dataStore, e); } diff --git a/server/src/com/cloud/storage/StorageManager.java b/server/src/com/cloud/storage/StorageManager.java index eebbf7fa123..5487e2ec17f 100644 --- a/server/src/com/cloud/storage/StorageManager.java +++ b/server/src/com/cloud/storage/StorageManager.java @@ -29,6 +29,7 @@ import com.cloud.agent.api.StoragePoolInfo; import com.cloud.agent.manager.Commands; import com.cloud.capacity.CapacityVO; import com.cloud.exception.ConnectionException; +import com.cloud.exception.StorageConflictException; import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; import com.cloud.hypervisor.Hypervisor.HypervisorType; @@ -99,7 +100,7 @@ public interface StorageManager extends StorageService { boolean registerHostListener(String providerUuid, HypervisorHostListener listener); - void connectHostToSharedPool(long hostId, long poolId) throws StorageUnavailableException; + void connectHostToSharedPool(long hostId, long poolId) throws StorageUnavailableException, StorageConflictException; void createCapacityEntry(long poolId); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 2c70b170dc3..ba39e1f0fa8 100644 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -129,6 +129,7 @@ import com.cloud.exception.OperationTimedoutException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.StorageConflictException; import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; import com.cloud.host.HostVO; @@ -943,7 +944,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C } @Override - public void connectHostToSharedPool(long hostId, long poolId) throws StorageUnavailableException { + public void connectHostToSharedPool(long hostId, long poolId) throws StorageUnavailableException, StorageConflictException { StoragePool pool = (StoragePool)_dataStoreMgr.getDataStore(poolId, DataStoreRole.Primary); assert (pool.isShared()) : "Now, did you actually read the name of this method?"; s_logger.debug("Adding pool " + pool.getName() + " to host " + hostId); diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java index 2837ccbfbfc..62af14e6033 100644 --- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java +++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java @@ -68,6 +68,7 @@ public class CSExceptionErrorCode { ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4395); ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540); ExceptionErrorCodeMap.put("com.cloud.exception.RequestLimitException", 4545); + ExceptionErrorCodeMap.put("com.cloud.exception.StorageConflictException", 4550); // Have a special error code for ServerApiException when it is // thrown in a standalone manner when failing to detect any of the above From 780816ee9f9461f1eaa6bc5133354f99b06cd208 Mon Sep 17 00:00:00 2001 From: Hiroki Ohashi Date: Thu, 2 Oct 2014 17:21:06 +0900 Subject: [PATCH 002/314] CLOUDSTACK-7539: [S3] Parallel deployment makes reference count of a cache in nfs secondary staging store negative(-1) --- .../manager/StorageCacheManagerImpl.java | 97 +++++++++++++++++-- 1 file changed, 89 insertions(+), 8 deletions(-) diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java index 3a502d12ae0..6be35812b12 100644 --- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java +++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.Date; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -40,6 +41,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; import org.apache.cloudstack.engine.subsystem.api.storage.Scope; import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager; @@ -60,6 +62,8 @@ import com.cloud.utils.db.QueryBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.agent.api.to.DataObjectType; + public class StorageCacheManagerImpl implements StorageCacheManager, Manager { private static final Logger s_logger = Logger.getLogger(StorageCacheManagerImpl.class); @Inject @@ -78,6 +82,9 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { int workers; ScheduledExecutorService executors; int cacheReplaceMentInterval; + private static final Object templateLock = new Object(); + private static final Object volumeLock = new Object(); + private static final Object snapshotLock = new Object(); @Override public DataStore getCacheStorage(Scope scope) { @@ -216,15 +223,82 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { @Override public DataObject createCacheObject(DataObject data, DataStore store) { - DataObjectInStore obj = objectInStoreMgr.findObject(data, store); - if (obj != null && obj.getState() == ObjectInDataStoreStateMachine.State.Ready) { - s_logger.debug("there is already one in the cache store"); - DataObject dataObj = objectInStoreMgr.get(data, store); - dataObj.incRefCount(); - return dataObj; - } + DataObject objOnCacheStore; + final Object lock; + final DataObjectType type = data.getType(); + final String typeName; + final DataStoreRole role = store.getRole(); + final long storeId = store.getId(); + final long dataId = data.getId(); - DataObject objOnCacheStore = store.create(data); + /* + * Make sure any thread knows own lock type. + */ + if (type == DataObjectType.TEMPLATE) { + lock = templateLock; + typeName = "template"; + } else if (type == DataObjectType.VOLUME) { + lock = volumeLock; + typeName = "volume"; + } else if (type == DataObjectType.SNAPSHOT) { + lock = snapshotLock; + typeName = "snapshot"; + } else { + String msg = "unsupported DataObject comes, then can't acquire correct lock object"; + throw new CloudRuntimeException(msg); + } + s_logger.debug("check " + typeName + " cache entry(id: " + dataId + ") on store(id: " + storeId + ")"); + + synchronized (lock) { + DataObjectInStore obj = objectInStoreMgr.findObject(data, store); + if (obj != null) { + State st = obj.getState(); + + long miliSeconds = 10000; + long timeoutSeconds = 3600; + long timeoutMiliSeconds = timeoutSeconds * 1000; + Date now = new Date(); + long expiredEpoch = now.getTime() + timeoutMiliSeconds; + Date expiredDate = new Date(expiredEpoch); + + /* + * Waiting for completion of cache copy. + */ + while (st == ObjectInDataStoreStateMachine.State.Allocated || + st == ObjectInDataStoreStateMachine.State.Creating || + st == ObjectInDataStoreStateMachine.State.Copying) { + + /* + * Threads must release lock within waiting for cache copy and + * must be waken up at completion. + */ + s_logger.debug("waiting cache copy completion type: " + typeName + ", id: " + obj.getObjectId() + ", lock: " + lock.hashCode()); + try { + lock.wait(miliSeconds); + } catch (InterruptedException e) {} + s_logger.debug("waken up"); + + now = new Date(); + if (now.after(expiredDate)) { + String msg = "Waiting time exceeds timeout limit(" + timeoutSeconds + " s)"; + throw new CloudRuntimeException(msg); + } + + obj = objectInStoreMgr.findObject(data, store); + st = obj.getState(); + } + + if (st == ObjectInDataStoreStateMachine.State.Ready) { + s_logger.debug("there is already one in the cache store"); + DataObject dataObj = objectInStoreMgr.get(data, store); + dataObj.incRefCount(); + return dataObj; + } + } + + s_logger.debug("create " + typeName + " cache entry(id: " + dataId + ") on store(id: " + storeId + ")"); + objOnCacheStore = store.create(data); + } AsyncCallFuture future = new AsyncCallFuture(); CopyCommandResult result = null; @@ -251,6 +325,13 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { if (result == null) { objOnCacheStore.processEvent(Event.OperationFailed); } + synchronized (lock) { + /* + * Wake up all threads waiting for cache copy. + */ + s_logger.debug("wake up all waiting threads(lock: " + lock.hashCode() + ")"); + lock.notifyAll(); + } } return null; } From c3d28e1b96163b62c9f56931eef3f1dc0a4784a4 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 11:07:57 +0200 Subject: [PATCH 003/314] CLOUDSTACK-7539: no return in synchronised block --- .../manager/StorageCacheManagerImpl.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java index 6be35812b12..48e8af6cb03 100644 --- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java +++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java @@ -223,7 +223,7 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { @Override public DataObject createCacheObject(DataObject data, DataStore store) { - DataObject objOnCacheStore; + DataObject objOnCacheStore = null; final Object lock; final DataObjectType type = data.getType(); final String typeName; @@ -249,6 +249,7 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { } s_logger.debug("check " + typeName + " cache entry(id: " + dataId + ") on store(id: " + storeId + ")"); + DataObject existingDataObj = null; synchronized (lock) { DataObjectInStore obj = objectInStoreMgr.findObject(data, store); if (obj != null) { @@ -292,12 +293,22 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { s_logger.debug("there is already one in the cache store"); DataObject dataObj = objectInStoreMgr.get(data, store); dataObj.incRefCount(); - return dataObj; + existingDataObj = dataObj; } } - s_logger.debug("create " + typeName + " cache entry(id: " + dataId + ") on store(id: " + storeId + ")"); - objOnCacheStore = store.create(data); + if(existingDataObj == null) { + s_logger.debug("create " + typeName + " cache entry(id: " + dataId + ") on store(id: " + storeId + ")"); + objOnCacheStore = store.create(data); + } + lock.notifyAll(); + } + if (existingDataObj != null) { + return existingDataObj; + } + if (objOnCacheStore == null) { + s_logger.error("create " + typeName + " cache entry(id: " + dataId + ") on store(id: " + storeId + ") failed"); + return null; } AsyncCallFuture future = new AsyncCallFuture(); From d1f76a2a84c531a73285630c4f6283dc17143f82 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Mon, 13 Jul 2015 17:26:00 +0200 Subject: [PATCH 004/314] CLOUDSTACK-8628: kvm: Disable Fencing when no NFS storage pools are present On NFS we write a heartbeat, but without those we can not safely fence off a host. If we fence without knowing about a heartbeat we can cause a split-brain situation. Signed-off-by: Wido den Hollander --- .../resource/wrapper/LibvirtFenceCommandWrapper.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java index 8fdf46bffe4..cb313dfa899 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtFenceCommandWrapper.java @@ -48,6 +48,18 @@ public final class LibvirtFenceCommandWrapper extends CommandWrapper pools = monitor.getStoragePools(); + + /** + * We can only safely fence off hosts when we use NFS + * On NFS primary storage pools hosts continuesly write + * a heartbeat. Disable Fencing Off for hosts without NFS + */ + if (pools.size() == 0) { + String logline = "No NFS storage pools found. No way to safely fence " + command.getVmName() + " on host " + command.getHostGuid(); + s_logger.warn(logline); + return new FenceAnswer(command, false, logline); + } + final KVMHAChecker ha = new KVMHAChecker(pools, command.getHostIp()); final Future future = executors.submit(ha); From fbe3b04a43ff7380a6874a2c331f372aa59ccf3d Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 16 Jul 2015 16:15:20 +0200 Subject: [PATCH 005/314] CLOUDSTACK-8628: Send an alert when fencing a KVM host failed Also change the logging a bit so that you get useful logs when not running on DEBUG level Signed-off-by: Wido den Hollander This closes #580 --- server/src/com/cloud/ha/KVMFencer.java | 26 +++++++++++++-------- server/test/com/cloud/ha/KVMFencerTest.java | 22 +++++++++++++++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/server/src/com/cloud/ha/KVMFencer.java b/server/src/com/cloud/ha/KVMFencer.java index 7392dffc3e3..b5834efe91a 100644 --- a/server/src/com/cloud/ha/KVMFencer.java +++ b/server/src/com/cloud/ha/KVMFencer.java @@ -26,6 +26,7 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; +import com.cloud.alert.AlertManager; import com.cloud.agent.api.FenceAnswer; import com.cloud.agent.api.FenceCommand; import com.cloud.exception.AgentUnavailableException; @@ -48,6 +49,8 @@ public class KVMFencer extends AdapterBase implements FenceBuilder { @Inject AgentManager _agentMgr; @Inject + AlertManager _alertMgr; + @Inject ResourceManager _resourceMgr; @Override @@ -75,18 +78,22 @@ public class KVMFencer extends AdapterBase implements FenceBuilder { @Override public Boolean fenceOff(VirtualMachine vm, Host host) { if (host.getHypervisorType() != HypervisorType.KVM && host.getHypervisorType() != HypervisorType.LXC) { - s_logger.debug("Don't know how to fence non kvm hosts " + host.getHypervisorType()); + s_logger.warn("Don't know how to fence non kvm hosts " + host.getHypervisorType()); return null; } List hosts = _resourceMgr.listAllHostsInCluster(host.getClusterId()); FenceCommand fence = new FenceCommand(vm, host); + int i = 0; for (HostVO h : hosts) { if (h.getHypervisorType() == HypervisorType.KVM || h.getHypervisorType() == HypervisorType.LXC) { if (h.getStatus() != Status.Up) { continue; } + + i++; + if (h.getId() == host.getId()) { continue; } @@ -94,14 +101,10 @@ public class KVMFencer extends AdapterBase implements FenceBuilder { try { answer = (FenceAnswer)_agentMgr.send(h.getId(), fence); } catch (AgentUnavailableException e) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable"); - } + s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } catch (OperationTimedoutException e) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Moving on to the next host because " + h.toString() + " is unavailable"); - } + s_logger.info("Moving on to the next host because " + h.toString() + " is unavailable"); continue; } if (answer != null && answer.getResult()) { @@ -110,9 +113,12 @@ public class KVMFencer extends AdapterBase implements FenceBuilder { } } - if (s_logger.isDebugEnabled()) { - s_logger.debug("Unable to fence off " + vm.toString() + " on " + host.toString()); - } + _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), + "Unable to fence off host: " + host.getId(), + "Fencing off host " + host.getId() + " did not succeed after asking " + i + " hosts. " + + "Check Agent logs for more information."); + + s_logger.error("Unable to fence off " + vm.toString() + " on " + host.toString()); return false; } diff --git a/server/test/com/cloud/ha/KVMFencerTest.java b/server/test/com/cloud/ha/KVMFencerTest.java index cdd13b6b606..da120af5edb 100644 --- a/server/test/com/cloud/ha/KVMFencerTest.java +++ b/server/test/com/cloud/ha/KVMFencerTest.java @@ -31,6 +31,7 @@ import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import com.cloud.agent.AgentManager; +import com.cloud.alert.AlertManager; import com.cloud.agent.api.FenceAnswer; import com.cloud.agent.api.FenceCommand; import com.cloud.exception.AgentUnavailableException; @@ -50,6 +51,8 @@ public class KVMFencerTest { @Mock AgentManager agentManager; @Mock + AlertManager alertMgr; + @Mock ResourceManager resourceManager; KVMFencer fencer; @@ -58,6 +61,7 @@ public class KVMFencerTest { public void setup() { fencer = new KVMFencer(); fencer._agentMgr = agentManager; + fencer._alertMgr = alertMgr; fencer._hostDao = hostDao; fencer._resourceMgr = resourceManager; } @@ -67,6 +71,8 @@ public class KVMFencerTest { HostVO host = Mockito.mock(HostVO.class); Mockito.when(host.getClusterId()).thenReturn(1l); Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.KVM); + Mockito.when(host.getDataCenterId()).thenReturn(1l); + Mockito.when(host.getPodId()).thenReturn(1l); Mockito.when(host.getStatus()).thenReturn(Status.Up); Mockito.when(host.getId()).thenReturn(1l); VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); @@ -80,6 +86,8 @@ public class KVMFencerTest { HostVO host = Mockito.mock(HostVO.class); Mockito.when(host.getClusterId()).thenReturn(1l); Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.KVM); + Mockito.when(host.getDataCenterId()).thenReturn(1l); + Mockito.when(host.getPodId()).thenReturn(1l); Mockito.when(host.getStatus()).thenReturn(Status.Down); Mockito.when(host.getId()).thenReturn(1l); VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); @@ -94,12 +102,16 @@ public class KVMFencerTest { Mockito.when(host.getClusterId()).thenReturn(1l); Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(host.getStatus()).thenReturn(Status.Up); + Mockito.when(host.getDataCenterId()).thenReturn(1l); + Mockito.when(host.getPodId()).thenReturn(1l); Mockito.when(host.getId()).thenReturn(1l); HostVO secondHost = Mockito.mock(HostVO.class); Mockito.when(secondHost.getClusterId()).thenReturn(1l); Mockito.when(secondHost.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(secondHost.getStatus()).thenReturn(Status.Up); + Mockito.when(secondHost.getDataCenterId()).thenReturn(1l); + Mockito.when(secondHost.getPodId()).thenReturn(1l); Mockito.when(host.getId()).thenReturn(2l); VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); @@ -118,12 +130,16 @@ public class KVMFencerTest { Mockito.when(host.getClusterId()).thenReturn(1l); Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(host.getStatus()).thenReturn(Status.Up); + Mockito.when(host.getDataCenterId()).thenReturn(1l); + Mockito.when(host.getPodId()).thenReturn(1l); Mockito.when(host.getId()).thenReturn(1l); HostVO secondHost = Mockito.mock(HostVO.class); Mockito.when(secondHost.getClusterId()).thenReturn(1l); Mockito.when(secondHost.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(secondHost.getStatus()).thenReturn(Status.Up); + Mockito.when(secondHost.getDataCenterId()).thenReturn(1l); + Mockito.when(secondHost.getPodId()).thenReturn(1l); Mockito.when(host.getId()).thenReturn(2l); VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); @@ -141,12 +157,16 @@ public class KVMFencerTest { Mockito.when(host.getClusterId()).thenReturn(1l); Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(host.getStatus()).thenReturn(Status.Up); + Mockito.when(host.getDataCenterId()).thenReturn(1l); + Mockito.when(host.getPodId()).thenReturn(1l); Mockito.when(host.getId()).thenReturn(1l); HostVO secondHost = Mockito.mock(HostVO.class); Mockito.when(secondHost.getClusterId()).thenReturn(1l); Mockito.when(secondHost.getHypervisorType()).thenReturn(HypervisorType.KVM); Mockito.when(secondHost.getStatus()).thenReturn(Status.Up); + Mockito.when(secondHost.getDataCenterId()).thenReturn(1l); + Mockito.when(secondHost.getPodId()).thenReturn(1l); Mockito.when(host.getId()).thenReturn(2l); VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); @@ -165,6 +185,8 @@ public class KVMFencerTest { Mockito.when(host.getHypervisorType()).thenReturn(HypervisorType.Any); Mockito.when(host.getStatus()).thenReturn(Status.Down); Mockito.when(host.getId()).thenReturn(1l); + Mockito.when(host.getDataCenterId()).thenReturn(1l); + Mockito.when(host.getPodId()).thenReturn(1l); VirtualMachine virtualMachine = Mockito.mock(VirtualMachine.class); Mockito.when(resourceManager.listAllHostsInCluster(1l)).thenReturn(Collections.singletonList(host)); From 8849d506cbc18f69d4ca644eb35344a7043ae3f7 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Thu, 16 Jul 2015 16:48:43 +0200 Subject: [PATCH 006/314] coverity 1116718: neglected jarinputstream when no entry found Signed-off-by: Daan Hoogland --- .../serializer/OnwireClassRegistry.java | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java b/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java index 46e5965d665..77269f3a21e 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java @@ -32,7 +32,6 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; -import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; @@ -156,28 +155,27 @@ public class OnwireClassRegistry { static Set> getFromJARFile(String jar, String packageName) throws IOException, ClassNotFoundException { Set> classes = new HashSet>(); - JarInputStream jarFile = new JarInputStream(new FileInputStream(jar)); - JarEntry jarEntry; - do { - jarEntry = jarFile.getNextJarEntry(); - if (jarEntry != null) { - String className = jarEntry.getName(); - if (className.endsWith(".class")) { - className = stripFilenameExtension(className); - if (className.startsWith(packageName)) { - try { - Class clz = Class.forName(className.replace('/', '.')); - classes.add(clz); - } catch (ClassNotFoundException | NoClassDefFoundError e) { - s_logger.warn("Unable to load class from jar file", e); + try (JarInputStream jarFile = new JarInputStream(new FileInputStream(jar));) { + JarEntry jarEntry; + do { + jarEntry = jarFile.getNextJarEntry(); + if (jarEntry != null) { + String className = jarEntry.getName(); + if (className.endsWith(".class")) { + className = stripFilenameExtension(className); + if (className.startsWith(packageName)) { + try { + Class clz = Class.forName(className.replace('/', '.')); + classes.add(clz); + } catch (ClassNotFoundException | NoClassDefFoundError e) { + s_logger.warn("Unable to load class from jar file", e); + } } } } - } - } while (jarEntry != null); - - IOUtils.closeQuietly(jarFile); - return classes; + } while (jarEntry != null); + return classes; + } } static String stripFilenameExtension(String file) { From f15eaec254efadc12091dfd45af09629a72f9a49 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Thu, 16 Jul 2015 16:51:02 +0200 Subject: [PATCH 007/314] coverity 1116759: possible null-pointer before indexOf-call move the if-block inside the next, guarded one Signed-off-by: Daan Hoogland This closes #600 --- .../framework/serializer/OnwireClassRegistry.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java b/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java index 77269f3a21e..872e49c2af5 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java @@ -106,10 +106,10 @@ public class OnwireClassRegistry { if (resources != null) { while (resources.hasMoreElements()) { String filePath = resources.nextElement().getFile(); - // WINDOWS HACK - if (filePath.indexOf("%20") > 0) - filePath = filePath.replaceAll("%20", " "); if (filePath != null) { + // WINDOWS HACK + if (filePath.indexOf("%20") > 0) + filePath = filePath.replaceAll("%20", " "); if ((filePath.indexOf("!") > 0) && (filePath.indexOf(".jar") > 0)) { String jarPath = filePath.substring(0, filePath.indexOf("!")).substring(filePath.indexOf(":") + 1); // WINDOWS HACK From e92e800930c66ed14a3f3623ac394e4d7410da58 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Thu, 16 Jul 2015 16:21:00 +0200 Subject: [PATCH 008/314] coverity 1116696: iprange adding code cleaned Signed-off-by: Daan Hoogland --- .../dc/dao/DataCenterIpAddressDaoImpl.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java index 9bc373f8f3e..ca79eedd529 100644 --- a/engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java +++ b/engine/schema/src/com/cloud/dc/dao/DataCenterIpAddressDaoImpl.java @@ -116,7 +116,6 @@ public class DataCenterIpAddressDaoImpl extends GenericDaoBase Date: Thu, 16 Jul 2015 16:29:06 +0200 Subject: [PATCH 009/314] coverity 1116711: findLostHost trivial try-with-resource inserted Signed-off-by: Daan Hoogland --- .../src/com/cloud/host/dao/HostDaoImpl.java | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java b/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java index f1567ee51ea..8342f1fcf77 100644 --- a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java +++ b/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java @@ -740,32 +740,21 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao @DB @Override public List findLostHosts(long timeout) { - TransactionLegacy txn = TransactionLegacy.currentTxn(); - PreparedStatement pstmt = null; List result = new ArrayList(); - ResultSet rs = null; - try { - String sql = + String sql = "select h.id from host h left join cluster c on h.cluster_id=c.id where h.mgmt_server_id is not null and h.last_ping < ? and h.status in ('Up', 'Updating', 'Disconnected', 'Connecting') and h.type not in ('ExternalFirewall', 'ExternalLoadBalancer', 'TrafficMonitor', 'SecondaryStorage', 'LocalSecondaryStorage', 'L2Networking') and (h.cluster_id is null or c.managed_state = 'Managed') ;"; - pstmt = txn.prepareStatement(sql); + try ( + TransactionLegacy txn = TransactionLegacy.currentTxn(); + PreparedStatement pstmt = txn.prepareStatement(sql);) { pstmt.setLong(1, timeout); - rs = pstmt.executeQuery(); - while (rs.next()) { - long id = rs.getLong(1); //ID column - result.add(findById(id)); + try (ResultSet rs = pstmt.executeQuery();) { + while (rs.next()) { + long id = rs.getLong(1); //ID column + result.add(findById(id)); + } } - } catch (Exception e) { + } catch (SQLException e) { s_logger.warn("Exception: ", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } return result; } From 03b076cd1bc7c0c4bac23c7741f884878f4a708a Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 11:32:44 +0200 Subject: [PATCH 010/314] coverity 1116668: conditionally close ds provided connection Signed-off-by: Daan Hoogland This closes #599 --- framework/db/src/com/cloud/utils/db/Merovingian2.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/framework/db/src/com/cloud/utils/db/Merovingian2.java b/framework/db/src/com/cloud/utils/db/Merovingian2.java index 0c76fb5886d..fe0b24d4dd9 100644 --- a/framework/db/src/com/cloud/utils/db/Merovingian2.java +++ b/framework/db/src/com/cloud/utils/db/Merovingian2.java @@ -71,7 +71,15 @@ public class Merovingian2 extends StandardMBean implements MerovingianMBean { _concierge = new ConnectionConcierge("LockMaster", conn, true); } catch (SQLException e) { s_logger.error("Unable to get a new db connection", e); - throw new CloudRuntimeException("Unable to initialize a connection to the database for locking purposes: ", e); + throw new CloudRuntimeException("Unable to initialize a connection to the database for locking purposes", e); + } finally { + if (_concierge == null && conn != null) { + try { + conn.close(); + } catch (SQLException e) { + s_logger.debug("closing connection failed after everything else.", e); + } + } } } From a6f17b33e8bbaaf47ec664eea47687c1ef4a5dfd Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 13:35:37 +0200 Subject: [PATCH 011/314] style: leading space removed This closes #189 --- .../component/test_escalation_listTemplateDomainAdmin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/integration/component/test_escalation_listTemplateDomainAdmin.py b/test/integration/component/test_escalation_listTemplateDomainAdmin.py index 58e1c3b3385..5c52c062c15 100644 --- a/test/integration/component/test_escalation_listTemplateDomainAdmin.py +++ b/test/integration/component/test_escalation_listTemplateDomainAdmin.py @@ -1,4 +1,3 @@ - # 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 From 4ef40e215afc51612726ce79bdf3b40561b5def6 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 14:57:51 +0200 Subject: [PATCH 012/314] style: empty line removed This closes #229 --- test/integration/testpaths/testpath_snapshot_limits.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/integration/testpaths/testpath_snapshot_limits.py b/test/integration/testpaths/testpath_snapshot_limits.py index a8dfb399b21..a99f053e66d 100644 --- a/test/integration/testpaths/testpath_snapshot_limits.py +++ b/test/integration/testpaths/testpath_snapshot_limits.py @@ -63,7 +63,6 @@ class TestStorageSnapshotsLimits(cloudstackTestCase): return try: - # Create an account cls.account = Account.create( cls.apiclient, From 2f0813aa3ecd0f99815b5ecd4e9cd40dc165a097 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 19 Jul 2015 14:47:05 +0200 Subject: [PATCH 013/314] coverity 1288575: replace all close with try-with-resource not strictly necessary in all but one case. done consequently. --- .../cloud/upgrade/dao/Upgrade450to451.java | 132 ++++++------------ 1 file changed, 41 insertions(+), 91 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java index d56db8563c3..b49939fc7c7 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade450to451.java @@ -17,13 +17,6 @@ package com.cloud.upgrade.dao; -import com.cloud.utils.crypt.DBEncryptionUtil; -import com.cloud.utils.db.TransactionLegacy; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.script.Script; -import org.apache.log4j.Logger; -import org.jasypt.exceptions.EncryptionOperationNotPossibleException; - import java.io.File; import java.io.UnsupportedEncodingException; import java.sql.Connection; @@ -33,6 +26,13 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; +import org.jasypt.exceptions.EncryptionOperationNotPossibleException; + +import com.cloud.utils.crypt.DBEncryptionUtil; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; + public class Upgrade450to451 implements DbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade450to451.class); @@ -80,50 +80,30 @@ public class Upgrade450to451 implements DbUpgrade { } private void encryptKeyInKeyStore(Connection conn) { - PreparedStatement selectStatement = null; - ResultSet selectResultSet = null; - PreparedStatement updateStatement = null; - try { - selectStatement = conn.prepareStatement("SELECT ks.id, ks.key FROM cloud.keystore ks WHERE ks.key IS NOT null"); - selectResultSet = selectStatement.executeQuery(); + try ( + PreparedStatement selectStatement = conn.prepareStatement("SELECT ks.id, ks.key FROM cloud.keystore ks WHERE ks.key IS NOT null"); + ResultSet selectResultSet = selectStatement.executeQuery(); + ) { while (selectResultSet.next()) { Long keyId = selectResultSet.getLong(1); String preSharedKey = selectResultSet.getString(2); - updateStatement = conn.prepareStatement("UPDATE cloud.keystore ks SET ks.key = ? WHERE ks.id = ?"); - updateStatement.setString(1, DBEncryptionUtil.encrypt(preSharedKey)); - updateStatement.setLong(2, keyId); - updateStatement.executeUpdate(); - updateStatement.close(); + try (PreparedStatement updateStatement = conn.prepareStatement("UPDATE cloud.keystore ks SET ks.key = ? WHERE ks.id = ?");) { + updateStatement.setString(1, DBEncryptionUtil.encrypt(preSharedKey)); + updateStatement.setLong(2, keyId); + updateStatement.executeUpdate(); + } } } catch (SQLException e) { throw new CloudRuntimeException("Exception while encrypting key column in keystore table", e); - } finally { - if (selectResultSet != null) - try { - selectResultSet.close(); - } catch (SQLException e) { - } - if (selectStatement != null) - try { - selectStatement.close(); - } catch (SQLException e) { - } - if (updateStatement != null) - try { - updateStatement.close(); - } catch (SQLException e) { - } } s_logger.debug("Done encrypting keystore's key column"); } private void encryptIpSecPresharedKeysOfRemoteAccessVpn(Connection conn) { - PreparedStatement selectStatement = null; - PreparedStatement updateStatement = null; - ResultSet resultSet = null; - try { - selectStatement = conn.prepareStatement("SELECT id, ipsec_psk FROM `cloud`.`remote_access_vpn`"); - resultSet = selectStatement.executeQuery(); + try ( + PreparedStatement selectStatement = conn.prepareStatement("SELECT id, ipsec_psk FROM `cloud`.`remote_access_vpn`"); + ResultSet resultSet = selectStatement.executeQuery(); + ) { while (resultSet.next()) { Long rowId = resultSet.getLong(1); String preSharedKey = resultSet.getString(2); @@ -132,92 +112,62 @@ public class Upgrade450to451 implements DbUpgrade { } catch (EncryptionOperationNotPossibleException ignored) { s_logger.debug("The ipsec_psk preshared key id=" + rowId + "in remote_access_vpn is not encrypted, encrypting it."); } - updateStatement = conn.prepareStatement("UPDATE `cloud`.`remote_access_vpn` SET ipsec_psk=? WHERE id=?"); - updateStatement.setString(1, DBEncryptionUtil.encrypt(preSharedKey)); - updateStatement.setLong(2, rowId); - updateStatement.executeUpdate(); - updateStatement.close(); + try (PreparedStatement updateStatement = conn.prepareStatement("UPDATE `cloud`.`remote_access_vpn` SET ipsec_psk=? WHERE id=?");) { + updateStatement.setString(1, DBEncryptionUtil.encrypt(preSharedKey)); + updateStatement.setLong(2, rowId); + updateStatement.executeUpdate(); + } } } catch (SQLException e) { throw new CloudRuntimeException("Unable to update the remote_access_vpn's preshared key ipsec_psk column", e); - } finally { - try { - if (resultSet != null) { - resultSet.close(); - } - if ((selectStatement != null) && (!selectStatement.isClosed())) { - selectStatement.close(); - } - if ((updateStatement != null) && (!updateStatement.isClosed())) - updateStatement.close(); - } catch (SQLException e) { - } } s_logger.debug("Done encrypting remote_access_vpn's ipsec_psk column"); } private void encryptStoragePoolUserInfo(Connection conn) { List listOfStatements = new ArrayList(); - try { - PreparedStatement preparedStatement = conn.prepareStatement("SELECT id, user_info FROM `cloud`.`storage_pool` WHERE user_info IS NOT NULL"); - listOfStatements.add(preparedStatement); - ResultSet resultSet = preparedStatement.executeQuery(); + try ( + PreparedStatement selectStatement = conn.prepareStatement("SELECT id, user_info FROM `cloud`.`storage_pool` WHERE user_info IS NOT NULL"); + ResultSet resultSet = selectStatement.executeQuery(); + ) { while (resultSet.next()) { long id = resultSet.getLong(1); String userInfo = resultSet.getString(2); String encryptedUserInfo = DBEncryptionUtil.encrypt(userInfo); - preparedStatement = conn.prepareStatement("UPDATE `cloud`.`storage_pool` SET user_info=? WHERE id=?"); - listOfStatements.add(preparedStatement); - if (encryptedUserInfo == null) - preparedStatement.setNull(1, 12); - else { - preparedStatement.setBytes(1, encryptedUserInfo.getBytes("UTF-8")); + try (PreparedStatement preparedStatement = conn.prepareStatement("UPDATE `cloud`.`storage_pool` SET user_info=? WHERE id=?");) { + listOfStatements.add(preparedStatement); + if (encryptedUserInfo == null) + preparedStatement.setNull(1, 12); + else { + preparedStatement.setBytes(1, encryptedUserInfo.getBytes("UTF-8")); + } + preparedStatement.setLong(2, id); + preparedStatement.executeUpdate(); } - preparedStatement.setLong(2, id); - preparedStatement.executeUpdate(); - preparedStatement.close(); } } catch (SQLException e) { throw new CloudRuntimeException("Unable encrypt storage pool user info ", e); } catch (UnsupportedEncodingException e) { throw new CloudRuntimeException("Unable encrypt storage pool user info ", e); - } finally { - TransactionLegacy.closePstmts(listOfStatements); } s_logger.debug("Done encrypting storage_pool's user_info column"); } private void updateUserVmDetailsWithNicAdapterType(Connection conn) { - PreparedStatement insertPstmt = null; - try { - insertPstmt = conn.prepareStatement("INSERT INTO `cloud`.`user_vm_details`(vm_id,name,value,display) select v.id as vm_id, details.name, details.value, details.display from `cloud`.`vm_instance` as v, `cloud`.`vm_template_details` as details where v.removed is null and v.vm_template_id=details.template_id and details.name='nicAdapter' and details.template_id in (select id from `cloud`.`vm_template` where hypervisor_type = 'vmware') and v.id not in (select vm_id from `cloud`.`user_vm_details` where name='nicAdapter');"); + try (PreparedStatement insertPstmt = conn.prepareStatement("INSERT INTO `cloud`.`user_vm_details`(vm_id,name,value,display) select v.id as vm_id, details.name, details.value, details.display from `cloud`.`vm_instance` as v, `cloud`.`vm_template_details` as details where v.removed is null and v.vm_template_id=details.template_id and details.name='nicAdapter' and details.template_id in (select id from `cloud`.`vm_template` where hypervisor_type = 'vmware') and v.id not in (select vm_id from `cloud`.`user_vm_details` where name='nicAdapter');");) { insertPstmt.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Failed to update user_vm_details table with nicAdapter entries by copying from vm_template_detail table", e); - } finally { - try { - if (insertPstmt != null) - insertPstmt.close(); - } catch (SQLException e) { - } } s_logger.debug("Done. Updated user_vm_details table with nicAdapter entries by copying from vm_template_detail table. This affects only VM/templates with hypervisor_type as VMware."); } private void upgradeVMWareLocalStorage(Connection conn) { - PreparedStatement updatePstmt = null; - try { - updatePstmt = conn.prepareStatement("UPDATE storage_pool SET pool_type='VMFS',host_address=@newaddress WHERE (@newaddress:=concat('VMFS datastore: ', path)) IS NOT NULL AND scope = 'HOST' AND pool_type = 'LVM' AND id IN (SELECT * FROM (SELECT storage_pool.id FROM storage_pool,cluster WHERE storage_pool.cluster_id = cluster.id AND cluster.hypervisor_type='VMware') AS t);"); + try (PreparedStatement updatePstmt = conn.prepareStatement("UPDATE storage_pool SET pool_type='VMFS',host_address=@newaddress WHERE (@newaddress:=concat('VMFS datastore: ', path)) IS NOT NULL AND scope = 'HOST' AND pool_type = 'LVM' AND id IN (SELECT * FROM (SELECT storage_pool.id FROM storage_pool,cluster WHERE storage_pool.cluster_id = cluster.id AND cluster.hypervisor_type='VMware') AS t);");) { updatePstmt.executeUpdate(); + s_logger.debug("Done, upgraded VMWare local storage pool type to VMFS and host_address to the VMFS format"); } catch (SQLException e) { throw new CloudRuntimeException("Unable to upgrade VMWare local storage pool type", e); - } finally { - try { - if (updatePstmt != null) - updatePstmt.close(); - } catch (SQLException e) { - } - s_logger.debug("Done, upgraded VMWare local storage pool type to VMFS and host_address to the VMFS format"); } } } From 538d6630db1395a320b5d539aa06dd77e6e76da9 Mon Sep 17 00:00:00 2001 From: Gaurav Aradhye Date: Wed, 15 Jul 2015 11:15:47 +0530 Subject: [PATCH 014/314] CLOUDSTACK-8632: Unable to revert snapshot on XenServer --- .../testpaths/testpath_revert_snap.py | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 test/integration/testpaths/testpath_revert_snap.py diff --git a/test/integration/testpaths/testpath_revert_snap.py b/test/integration/testpaths/testpath_revert_snap.py new file mode 100644 index 00000000000..0c143604553 --- /dev/null +++ b/test/integration/testpaths/testpath_revert_snap.py @@ -0,0 +1,160 @@ +# 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. +""" Test cases for Verifying revert snapshot +""" +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase +from marvin.lib.utils import (cleanup_resources, + validateList) +from marvin.lib.base import (Account, + ServiceOffering, + Snapshot, + VmSnapshot, + VirtualMachine, + ) +from marvin.lib.common import (get_domain, + get_zone, + get_template, + list_volumes, + ) + + +class TestUnableToRevertSnapshot(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + testClient = super(TestUnableToRevertSnapshot, cls).getClsTestClient() + cls.apiclient = testClient.getApiClient() + cls.testdata = testClient.getParsedTestDataConfig() + + cls.hypervisor = cls.testClient.getHypervisorInfo() + # Get Zone, Domain and templates + cls.domain = get_domain(cls.apiclient) + cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests()) + + cls.template = get_template( + cls.apiclient, + cls.zone.id, + cls.testdata["ostype"]) + + cls._cleanup = [] + + try: + + cls.skiptest = False + + if cls.hypervisor.lower() not in ['xenserver']: + cls.skiptest = True + return + # Create an account + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + + # Create user api client of the account + cls.userapiclient = testClient.getUserApiClient( + UserName=cls.account.name, + DomainName=cls.account.domain + ) + # Create Service offering + cls.service_offering = ServiceOffering.create( + cls.apiclient, + cls.testdata["service_offering"], + ) + + cls._cleanup = [ + cls.account, + cls.service_offering, + ] + except Exception as e: + cls.tearDownClass() + raise e + return + + @classmethod + def tearDownClass(cls): + try: + cleanup_resources(cls.apiclient, cls._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + + def setUp(self): + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + self.cleanup = [] + if self.skiptest: + self.skipTest("This test is to be checked on xenserver only Hence, skip for %s" % self.hypervisor) + + def tearDown(self): + try: + cleanup_resources(self.apiclient, self.cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return + + @attr(tags=["advanced", "basic"]) + def test_01_check_revert_snapshot(self): + """ Test revert snapshot on XenServer + + # 1. Deploy a VM. + # 2. Take VM snapshot. + # 3. Verify that volume snapshot fails with error + can not create volume snapshot for VM with VM-snapshot + + """ + # Step 1 + # Create VM on cluster wide + vm = VirtualMachine.create( + self.userapiclient, + self.testdata["small"], + templateid=self.template.id, + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering.id, + zoneid=self.zone.id, + ) + volumes_cluster_list = list_volumes( + self.apiclient, + virtualmachineid=vm.id, + type='ROOT', + listall=True + ) + + volume_list_validation = validateList(volumes_cluster_list) + + self.assertNotEqual( + len(volume_list_validation), + 0, + "Check if volume gets attached properly" + ) + root_volume = volumes_cluster_list[0] + + #Step 2 + vm_snap = VmSnapshot.create(self.apiclient, + vm.id) + + volume_list_validation = validateList(vm_snap) + + #Step 3 + with self.assertRaises(Exception): + Snapshot.create( + self.apiclient, + root_volume.id) + + return From 837486a43c211b6d3c0d1c33d8a690ca74b27a28 Mon Sep 17 00:00:00 2001 From: Priti Sarap Date: Wed, 15 Jul 2015 12:12:36 +0530 Subject: [PATCH 015/314] CLOUDSTACK-8632: Unable to revert snapshot on XenServer --- test/integration/testpaths/testpath_revert_snap.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/integration/testpaths/testpath_revert_snap.py b/test/integration/testpaths/testpath_revert_snap.py index 0c143604553..11db8c5e1dd 100644 --- a/test/integration/testpaths/testpath_revert_snap.py +++ b/test/integration/testpaths/testpath_revert_snap.py @@ -32,7 +32,6 @@ from marvin.lib.common import (get_domain, list_volumes, ) - class TestUnableToRevertSnapshot(cloudstackTestCase): @classmethod From faaf6b1f9891ad073ed69345d69b727a463fbca7 Mon Sep 17 00:00:00 2001 From: Priti Sarap Date: Wed, 15 Jul 2015 14:12:10 +0530 Subject: [PATCH 016/314] CLOUDSTACK-8636: Verify failure of creation of Custom disk offering with disksize parameter -Modified list validation of volume list This closes #590 --- test/integration/testpaths/testpath_revert_snap.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/integration/testpaths/testpath_revert_snap.py b/test/integration/testpaths/testpath_revert_snap.py index 11db8c5e1dd..8026f343919 100644 --- a/test/integration/testpaths/testpath_revert_snap.py +++ b/test/integration/testpaths/testpath_revert_snap.py @@ -31,6 +31,7 @@ from marvin.lib.common import (get_domain, get_template, list_volumes, ) +from marvin.codes import PASS class TestUnableToRevertSnapshot(cloudstackTestCase): @@ -118,7 +119,6 @@ class TestUnableToRevertSnapshot(cloudstackTestCase): """ # Step 1 - # Create VM on cluster wide vm = VirtualMachine.create( self.userapiclient, self.testdata["small"], @@ -137,11 +137,13 @@ class TestUnableToRevertSnapshot(cloudstackTestCase): volume_list_validation = validateList(volumes_cluster_list) - self.assertNotEqual( - len(volume_list_validation), - 0, - "Check if volume gets attached properly" + self.assertEqual( + volume_list_validation[0], + PASS, + "Event list validation failed due to %s" % + volume_list_validation[2] ) + root_volume = volumes_cluster_list[0] #Step 2 From b4006081623a447c172f77008d44678aac49adc8 Mon Sep 17 00:00:00 2001 From: nitt10prashant Date: Wed, 15 Jul 2015 18:33:00 +0530 Subject: [PATCH 017/314] CLOUDSTACK-8639:fixing calculation mistakes in component/test_ss_domain_limits.py This closes #595 --- test/integration/component/test_ss_domain_limits.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/integration/component/test_ss_domain_limits.py b/test/integration/component/test_ss_domain_limits.py index 2591d2f42a9..0d9138ad659 100644 --- a/test/integration/component/test_ss_domain_limits.py +++ b/test/integration/component/test_ss_domain_limits.py @@ -559,7 +559,9 @@ class TestDeleteAccount(cloudstackTestCase): self.assertFalse(result[0], result[1]) self.assertTrue(result[2], "Resource count does not match") - expectedCount *= 2 + self.templateSize = int((int(templates[0].size)*2) / (1024**3)) + + expectedCount = self.templateSize result = isDomainResourceCountEqualToExpectedCount( self.apiclient, self.parent_domain.id, expectedCount, RESOURCE_SECONDARY_STORAGE) From 4e57cc62d0838f74b09f06d741c9b7cf532abd56 Mon Sep 17 00:00:00 2001 From: Rajani Karuturi Date: Mon, 20 Jul 2015 17:56:54 +0530 Subject: [PATCH 018/314] CLOUDSTACK-8596 ability to query nested groups for Microsoft AD added a new configuration to select the appropriate ldap implementation incase of microsoft AD enabled nested querying of group members moved LdapUserManager to an interface and added separate implementations for openLdap and microsoft AD Added unit tests --- .../cloudstack/ldap/spring-ldap-context.xml | 2 +- .../ldap/ADLdapUserManagerImpl.java | 81 ++++++ .../cloudstack/ldap/LdapConfiguration.java | 16 +- .../cloudstack/ldap/LdapManagerImpl.java | 19 +- .../cloudstack/ldap/LdapUserManager.java | 239 ++---------------- .../ldap/LdapUserManagerFactory.java | 55 ++++ .../ldap/OpenLdapUserManagerImpl.java | 233 +++++++++++++++++ .../ldap/ADLdapUserManagerImplSpec.groovy | 70 +++++ .../ldap/LdapConfigurationSpec.groovy | 98 ++++--- .../ldap/LdapCreateAccountCmdSpec.groovy | 2 +- .../ldap/LdapManagerImplSpec.groovy | 110 ++++++-- .../ldap/LdapUserManagerFactorySpec.groovy | 56 ++++ ....groovy => OpenLdapUserManagerSpec.groovy} | 27 +- 13 files changed, 708 insertions(+), 300 deletions(-) create mode 100644 plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java create mode 100644 plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java create mode 100644 plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java create mode 100644 plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy create mode 100644 plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy rename plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/{LdapUserManagerSpec.groovy => OpenLdapUserManagerSpec.groovy} (92%) diff --git a/plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml b/plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml index 34a2befe971..8ae4009367f 100644 --- a/plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml +++ b/plugins/user-authenticators/ldap/resources/META-INF/cloudstack/ldap/spring-ldap-context.xml @@ -30,7 +30,7 @@ - + diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java new file mode 100644 index 00000000000..e5e20c54fb2 --- /dev/null +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java @@ -0,0 +1,81 @@ +/* + * 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. + */ +package org.apache.cloudstack.ldap; + +import java.util.ArrayList; +import java.util.List; + +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.SearchControls; +import javax.naming.directory.SearchResult; +import javax.naming.ldap.LdapContext; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +public class ADLdapUserManagerImpl extends OpenLdapUserManagerImpl implements LdapUserManager { + public static final Logger s_logger = Logger.getLogger(ADLdapUserManagerImpl.class.getName()); + + @Override + public List getUsersInGroup(String groupName, LdapContext context) throws NamingException { + final SearchControls searchControls = new SearchControls(); + searchControls.setSearchScope(_ldapConfiguration.getScope()); + searchControls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); + + String basedn = _ldapConfiguration.getBaseDn(); + if (StringUtils.isBlank(basedn)) { + throw new IllegalArgumentException("ldap basedn is not configured"); + } + + if (StringUtils.isBlank(groupName)) { + throw new IllegalArgumentException("ldap group name cannot be blank"); + } + + NamingEnumeration results = context.search(basedn, generateADGroupSearchFilter(groupName), searchControls); + final List users = new ArrayList(); + while (results.hasMoreElements()) { + final SearchResult result = results.nextElement(); + users.add(createUser(result)); + } + return users; + } + + private String generateADGroupSearchFilter(String groupName) { + final StringBuilder userObjectFilter = new StringBuilder(); + userObjectFilter.append("(objectClass="); + userObjectFilter.append(_ldapConfiguration.getUserObject()); + userObjectFilter.append(")"); + + final StringBuilder memberOfFilter = new StringBuilder(); + String groupCnName = _ldapConfiguration.getCommonNameAttribute() + "=" +groupName + "," + _ldapConfiguration.getBaseDn(); + memberOfFilter.append("(memberOf:1.2.840.113556.1.4.1941:="); + memberOfFilter.append(groupCnName); + memberOfFilter.append(")"); + + final StringBuilder result = new StringBuilder(); + result.append("(&"); + result.append(userObjectFilter); + result.append(memberOfFilter); + result.append(")"); + + s_logger.debug("group search filter = " + result); + return result.toString(); + } +} diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java index c171ebfcc0b..f247f40001e 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java @@ -21,12 +21,12 @@ import java.util.List; import javax.inject.Inject; import javax.naming.directory.SearchControls; -import org.apache.cloudstack.api.command.LdapListConfigurationCmd; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import com.cloud.utils.Pair; +import org.apache.cloudstack.ldap.dao.LdapConfigurationDao; public class LdapConfiguration implements Configurable{ private final static String factory = "com.sun.jndi.ldap.LdapCtxFactory"; @@ -36,6 +36,8 @@ public class LdapConfiguration implements Configurable{ private static final ConfigKey ldapPageSize = new ConfigKey(Integer.class, "ldap.request.page.size", "Advanced", "1000", "page size sent to ldap server on each request to get user", true, ConfigKey.Scope.Global, 1); + private static final ConfigKey ldapProvider = new ConfigKey(String.class, "ldap.provider", "Advanced", "openldap", "ldap provider ex:openldap, microsoftad", + true, ConfigKey.Scope.Global, null); private final static int scope = SearchControls.SUBTREE_SCOPE; @@ -43,14 +45,14 @@ public class LdapConfiguration implements Configurable{ private ConfigurationDao _configDao; @Inject - private LdapManager _ldapManager; + private LdapConfigurationDao _ldapConfigurationDao; public LdapConfiguration() { } - public LdapConfiguration(final ConfigurationDao configDao, final LdapManager ldapManager) { + public LdapConfiguration(final ConfigurationDao configDao, final LdapConfigurationDao ldapConfigurationDao) { _configDao = configDao; - _ldapManager = ldapManager; + _ldapConfigurationDao = ldapConfigurationDao; } public String getAuthentication() { @@ -94,7 +96,7 @@ public class LdapConfiguration implements Configurable{ public String getProviderUrl() { final String protocol = getSSLStatus() == true ? "ldaps://" : "ldap://"; - final Pair, Integer> result = _ldapManager.listConfigurations(new LdapListConfigurationCmd(_ldapManager)); + final Pair, Integer> result = _ldapConfigurationDao.searchConfigurations(null, 0); final StringBuilder providerUrls = new StringBuilder(); String delim = ""; for (final LdapConfigurationVO resource : result.first()) { @@ -165,6 +167,8 @@ public class LdapConfiguration implements Configurable{ return ldapPageSize.value(); } + public String getLdapProvider() { return ldapProvider.value();} + @Override public String getConfigComponentName() { return LdapConfiguration.class.getSimpleName(); @@ -172,6 +176,6 @@ public class LdapConfiguration implements Configurable{ @Override public ConfigKey[] getConfigKeys() { - return new ConfigKey[] {ldapReadTimeout, ldapPageSize}; + return new ConfigKey[] {ldapReadTimeout, ldapPageSize, ldapProvider}; } } \ No newline at end of file diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManagerImpl.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManagerImpl.java index dfd39a3c7c1..8e912b8b030 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManagerImpl.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapManagerImpl.java @@ -57,17 +57,22 @@ public class LdapManagerImpl implements LdapManager, LdapValidator { private LdapContextFactory _ldapContextFactory; @Inject - private LdapUserManager _ldapUserManager; + private LdapConfiguration _ldapConfiguration; + + @Inject LdapUserManagerFactory _ldapUserManagerFactory; + public LdapManagerImpl() { super(); } - public LdapManagerImpl(final LdapConfigurationDao ldapConfigurationDao, final LdapContextFactory ldapContextFactory, final LdapUserManager ldapUserManager) { + public LdapManagerImpl(final LdapConfigurationDao ldapConfigurationDao, final LdapContextFactory ldapContextFactory, final LdapUserManagerFactory ldapUserManagerFactory, + final LdapConfiguration ldapConfiguration) { super(); _ldapConfigurationDao = ldapConfigurationDao; _ldapContextFactory = ldapContextFactory; - _ldapUserManager = ldapUserManager; + _ldapUserManagerFactory = ldapUserManagerFactory; + _ldapConfiguration = ldapConfiguration; } @Override @@ -173,7 +178,7 @@ public class LdapManagerImpl implements LdapManager, LdapValidator { context = _ldapContextFactory.createBindContext(); final String escapedUsername = LdapUtils.escapeLDAPSearchFilter(username); - return _ldapUserManager.getUser(escapedUsername, context); + return _ldapUserManagerFactory.getInstance(_ldapConfiguration.getLdapProvider()).getUser(escapedUsername, context); } catch (NamingException | IOException e) { s_logger.debug("ldap Exception: ",e); @@ -188,7 +193,7 @@ public class LdapManagerImpl implements LdapManager, LdapValidator { LdapContext context = null; try { context = _ldapContextFactory.createBindContext(); - return _ldapUserManager.getUsers(context); + return _ldapUserManagerFactory.getInstance(_ldapConfiguration.getLdapProvider()).getUsers(context); } catch (NamingException | IOException e) { s_logger.debug("ldap Exception: ",e); throw new NoLdapUserMatchingQueryException("*"); @@ -202,7 +207,7 @@ public class LdapManagerImpl implements LdapManager, LdapValidator { LdapContext context = null; try { context = _ldapContextFactory.createBindContext(); - return _ldapUserManager.getUsersInGroup(groupName, context); + return _ldapUserManagerFactory.getInstance(_ldapConfiguration.getLdapProvider()).getUsersInGroup(groupName, context); } catch (NamingException | IOException e) { s_logger.debug("ldap NamingException: ",e); throw new NoLdapUserMatchingQueryException("groupName=" + groupName); @@ -230,7 +235,7 @@ public class LdapManagerImpl implements LdapManager, LdapValidator { try { context = _ldapContextFactory.createBindContext(); final String escapedUsername = LdapUtils.escapeLDAPSearchFilter(username); - return _ldapUserManager.getUsers("*" + escapedUsername + "*", context); + return _ldapUserManagerFactory.getInstance(_ldapConfiguration.getLdapProvider()).getUsers("*" + escapedUsername + "*", context); } catch (NamingException | IOException e) { s_logger.debug("ldap Exception: ",e); throw new NoLdapUserMatchingQueryException(username); diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java index 654a601a476..28fc74e947b 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java @@ -1,227 +1,40 @@ -// 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. +/* + * 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. + */ package org.apache.cloudstack.ldap; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import javax.inject.Inject; -import javax.naming.NamingEnumeration; import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.SearchControls; -import javax.naming.directory.SearchResult; -import javax.naming.ldap.Control; import javax.naming.ldap.LdapContext; -import javax.naming.ldap.PagedResultsControl; -import javax.naming.ldap.PagedResultsResponseControl; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.log4j.Logger; +public interface LdapUserManager { -public class LdapUserManager { - private static final Logger s_logger = Logger.getLogger(LdapUserManager.class.getName()); + public LdapUser getUser(final String username, final LdapContext context) throws NamingException, IOException; - @Inject - private LdapConfiguration _ldapConfiguration; + public List getUsers(final LdapContext context) throws NamingException, IOException; - public LdapUserManager() { - } + public List getUsers(final String username, final LdapContext context) throws NamingException, IOException; - public LdapUserManager(final LdapConfiguration ldapConfiguration) { - _ldapConfiguration = ldapConfiguration; - } + public List getUsersInGroup(String groupName, LdapContext context) throws NamingException; - private LdapUser createUser(final SearchResult result) throws NamingException { - final Attributes attributes = result.getAttributes(); + public List searchUsers(final LdapContext context) throws NamingException, IOException; - final String username = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getUsernameAttribute()); - final String email = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getEmailAttribute()); - final String firstname = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getFirstnameAttribute()); - final String lastname = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getLastnameAttribute()); - final String principal = result.getNameInNamespace(); - - String domain = principal.replace("cn=" + LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getCommonNameAttribute()) + ",", ""); - domain = domain.replace("," + _ldapConfiguration.getBaseDn(), ""); - domain = domain.replace("ou=", ""); - - return new LdapUser(username, email, firstname, lastname, principal, domain); - } - - private String generateSearchFilter(final String username) { - final StringBuilder userObjectFilter = new StringBuilder(); - userObjectFilter.append("(objectClass="); - userObjectFilter.append(_ldapConfiguration.getUserObject()); - userObjectFilter.append(")"); - - final StringBuilder usernameFilter = new StringBuilder(); - usernameFilter.append("("); - usernameFilter.append(_ldapConfiguration.getUsernameAttribute()); - usernameFilter.append("="); - usernameFilter.append((username == null ? "*" : username)); - usernameFilter.append(")"); - - final StringBuilder memberOfFilter = new StringBuilder(); - if (_ldapConfiguration.getSearchGroupPrinciple() != null) { - memberOfFilter.append("(memberof="); - memberOfFilter.append(_ldapConfiguration.getSearchGroupPrinciple()); - memberOfFilter.append(")"); - } - - final StringBuilder result = new StringBuilder(); - result.append("(&"); - result.append(userObjectFilter); - result.append(usernameFilter); - result.append(memberOfFilter); - result.append(")"); - - return result.toString(); - } - - private String generateGroupSearchFilter(final String groupName) { - final StringBuilder groupObjectFilter = new StringBuilder(); - groupObjectFilter.append("(objectClass="); - groupObjectFilter.append(_ldapConfiguration.getGroupObject()); - groupObjectFilter.append(")"); - - final StringBuilder groupNameFilter = new StringBuilder(); - groupNameFilter.append("("); - groupNameFilter.append(_ldapConfiguration.getCommonNameAttribute()); - groupNameFilter.append("="); - groupNameFilter.append((groupName == null ? "*" : groupName)); - groupNameFilter.append(")"); - - final StringBuilder result = new StringBuilder(); - result.append("(&"); - result.append(groupObjectFilter); - result.append(groupNameFilter); - result.append(")"); - - return result.toString(); - } - - public LdapUser getUser(final String username, final LdapContext context) throws NamingException, IOException { - List result = searchUsers(username, context); - if (result!= null && result.size() == 1) { - return result.get(0); - } else { - throw new NamingException("No user found for username " + username); - } - } - - public List getUsers(final LdapContext context) throws NamingException, IOException { - return getUsers(null, context); - } - - public List getUsers(final String username, final LdapContext context) throws NamingException, IOException { - List users = searchUsers(username, context); - - if (CollectionUtils.isNotEmpty(users)) { - Collections.sort(users); - } - return users; - } - - public List getUsersInGroup(String groupName, LdapContext context) throws NamingException { - String attributeName = _ldapConfiguration.getGroupUniqueMemeberAttribute(); - final SearchControls controls = new SearchControls(); - controls.setSearchScope(_ldapConfiguration.getScope()); - controls.setReturningAttributes(new String[] {attributeName}); - - NamingEnumeration result = context.search(_ldapConfiguration.getBaseDn(), generateGroupSearchFilter(groupName), controls); - - final List users = new ArrayList(); - //Expecting only one result which has all the users - if (result.hasMoreElements()) { - Attribute attribute = result.nextElement().getAttributes().get(attributeName); - NamingEnumeration values = attribute.getAll(); - - while (values.hasMoreElements()) { - String userdn = String.valueOf(values.nextElement()); - try{ - users.add(getUserForDn(userdn, context)); - } catch (NamingException e){ - s_logger.info("Userdn: " + userdn + " Not Found:: Exception message: " + e.getMessage()); - } - } - } - - Collections.sort(users); - - return users; - } - - private LdapUser getUserForDn(String userdn, LdapContext context) throws NamingException { - final SearchControls controls = new SearchControls(); - controls.setSearchScope(_ldapConfiguration.getScope()); - controls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); - - NamingEnumeration result = context.search(userdn, "(objectClass=" + _ldapConfiguration.getUserObject() + ")", controls); - if (result.hasMoreElements()) { - return createUser(result.nextElement()); - } else { - throw new NamingException("No user found for dn " + userdn); - } - } - - public List searchUsers(final LdapContext context) throws NamingException, IOException { - return searchUsers(null, context); - } - - public List searchUsers(final String username, final LdapContext context) throws NamingException, IOException { - - final SearchControls searchControls = new SearchControls(); - - searchControls.setSearchScope(_ldapConfiguration.getScope()); - searchControls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); - - String basedn = _ldapConfiguration.getBaseDn(); - if (StringUtils.isBlank(basedn)) { - throw new IllegalArgumentException("ldap basedn is not configured"); - } - byte[] cookie = null; - int pageSize = _ldapConfiguration.getLdapPageSize(); - context.setRequestControls(new Control[]{new PagedResultsControl(pageSize, Control.NONCRITICAL)}); - final List users = new ArrayList(); - NamingEnumeration results; - do { - results = context.search(basedn, generateSearchFilter(username), searchControls); - while (results.hasMoreElements()) { - final SearchResult result = results.nextElement(); - users.add(createUser(result)); - } - Control[] contextControls = context.getResponseControls(); - if (contextControls != null) { - for (Control control : contextControls) { - if (control instanceof PagedResultsResponseControl) { - PagedResultsResponseControl prrc = (PagedResultsResponseControl) control; - cookie = prrc.getCookie(); - } - } - } else { - s_logger.info("No controls were sent from the ldap server"); - } - context.setRequestControls(new Control[] {new PagedResultsControl(pageSize, cookie, Control.CRITICAL)}); - } while (cookie != null); - - return users; - } -} \ No newline at end of file + public List searchUsers(final String username, final LdapContext context) throws NamingException, IOException; +} diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java new file mode 100644 index 00000000000..35652fb8f30 --- /dev/null +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java @@ -0,0 +1,55 @@ +/* + * 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. + */ +package org.apache.cloudstack.ldap; + +import org.apache.log4j.Logger; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +public class LdapUserManagerFactory implements ApplicationContextAware { + public static final Logger s_logger = Logger.getLogger(LdapUserManagerFactory.class.getName()); + + private static LdapUserManager adUserManager; + private static LdapUserManager openLdapUserManager; + + static ApplicationContext applicationCtx; + + public LdapUserManager getInstance(String id) { + if ("microsoftad".equalsIgnoreCase(id)) { + if (adUserManager == null) { + adUserManager = new ADLdapUserManagerImpl(); + applicationCtx.getAutowireCapableBeanFactory().autowireBeanProperties(adUserManager, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + } + return adUserManager; + } + //defaults to opendldap + if (openLdapUserManager == null) { + openLdapUserManager = new OpenLdapUserManagerImpl(); + applicationCtx.getAutowireCapableBeanFactory().autowireBeanProperties(openLdapUserManager, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + } + return openLdapUserManager; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + applicationCtx = applicationContext; + } +} diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java new file mode 100644 index 00000000000..11e6bcfc92a --- /dev/null +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/OpenLdapUserManagerImpl.java @@ -0,0 +1,233 @@ +// 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. +package org.apache.cloudstack.ldap; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.inject.Inject; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.SearchControls; +import javax.naming.directory.SearchResult; +import javax.naming.ldap.Control; +import javax.naming.ldap.LdapContext; +import javax.naming.ldap.PagedResultsControl; +import javax.naming.ldap.PagedResultsResponseControl; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +public class OpenLdapUserManagerImpl implements LdapUserManager { + private static final Logger s_logger = Logger.getLogger(OpenLdapUserManagerImpl.class.getName()); + + @Inject + protected LdapConfiguration _ldapConfiguration; + + public OpenLdapUserManagerImpl() { + } + + public OpenLdapUserManagerImpl(final LdapConfiguration ldapConfiguration) { + _ldapConfiguration = ldapConfiguration; + } + + protected LdapUser createUser(final SearchResult result) throws NamingException { + final Attributes attributes = result.getAttributes(); + + final String username = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getUsernameAttribute()); + final String email = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getEmailAttribute()); + final String firstname = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getFirstnameAttribute()); + final String lastname = LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getLastnameAttribute()); + final String principal = result.getNameInNamespace(); + + String domain = principal.replace("cn=" + LdapUtils.getAttributeValue(attributes, _ldapConfiguration.getCommonNameAttribute()) + ",", ""); + domain = domain.replace("," + _ldapConfiguration.getBaseDn(), ""); + domain = domain.replace("ou=", ""); + + return new LdapUser(username, email, firstname, lastname, principal, domain); + } + + private String generateSearchFilter(final String username) { + final StringBuilder userObjectFilter = new StringBuilder(); + userObjectFilter.append("(objectClass="); + userObjectFilter.append(_ldapConfiguration.getUserObject()); + userObjectFilter.append(")"); + + final StringBuilder usernameFilter = new StringBuilder(); + usernameFilter.append("("); + usernameFilter.append(_ldapConfiguration.getUsernameAttribute()); + usernameFilter.append("="); + usernameFilter.append((username == null ? "*" : username)); + usernameFilter.append(")"); + + final StringBuilder memberOfFilter = new StringBuilder(); + if (_ldapConfiguration.getSearchGroupPrinciple() != null) { + memberOfFilter.append("(memberof="); + memberOfFilter.append(_ldapConfiguration.getSearchGroupPrinciple()); + memberOfFilter.append(")"); + } + + final StringBuilder result = new StringBuilder(); + result.append("(&"); + result.append(userObjectFilter); + result.append(usernameFilter); + result.append(memberOfFilter); + result.append(")"); + + return result.toString(); + } + + private String generateGroupSearchFilter(final String groupName) { + final StringBuilder groupObjectFilter = new StringBuilder(); + groupObjectFilter.append("(objectClass="); + groupObjectFilter.append(_ldapConfiguration.getGroupObject()); + groupObjectFilter.append(")"); + + final StringBuilder groupNameFilter = new StringBuilder(); + groupNameFilter.append("("); + groupNameFilter.append(_ldapConfiguration.getCommonNameAttribute()); + groupNameFilter.append("="); + groupNameFilter.append((groupName == null ? "*" : groupName)); + groupNameFilter.append(")"); + + final StringBuilder result = new StringBuilder(); + result.append("(&"); + result.append(groupObjectFilter); + result.append(groupNameFilter); + result.append(")"); + + return result.toString(); + } + + @Override + public LdapUser getUser(final String username, final LdapContext context) throws NamingException, IOException { + List result = searchUsers(username, context); + if (result!= null && result.size() == 1) { + return result.get(0); + } else { + throw new NamingException("No user found for username " + username); + } + } + + @Override + public List getUsers(final LdapContext context) throws NamingException, IOException { + return getUsers(null, context); + } + + @Override + public List getUsers(final String username, final LdapContext context) throws NamingException, IOException { + List users = searchUsers(username, context); + + if (CollectionUtils.isNotEmpty(users)) { + Collections.sort(users); + } + return users; + } + + @Override + public List getUsersInGroup(String groupName, LdapContext context) throws NamingException { + String attributeName = _ldapConfiguration.getGroupUniqueMemeberAttribute(); + final SearchControls controls = new SearchControls(); + controls.setSearchScope(_ldapConfiguration.getScope()); + controls.setReturningAttributes(new String[] {attributeName}); + + NamingEnumeration result = context.search(_ldapConfiguration.getBaseDn(), generateGroupSearchFilter(groupName), controls); + + final List users = new ArrayList(); + //Expecting only one result which has all the users + if (result.hasMoreElements()) { + Attribute attribute = result.nextElement().getAttributes().get(attributeName); + NamingEnumeration values = attribute.getAll(); + + while (values.hasMoreElements()) { + String userdn = String.valueOf(values.nextElement()); + try{ + users.add(getUserForDn(userdn, context)); + } catch (NamingException e){ + s_logger.info("Userdn: " + userdn + " Not Found:: Exception message: " + e.getMessage()); + } + } + } + + Collections.sort(users); + + return users; + } + + private LdapUser getUserForDn(String userdn, LdapContext context) throws NamingException { + final SearchControls controls = new SearchControls(); + controls.setSearchScope(_ldapConfiguration.getScope()); + controls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); + + NamingEnumeration result = context.search(userdn, "(objectClass=" + _ldapConfiguration.getUserObject() + ")", controls); + if (result.hasMoreElements()) { + return createUser(result.nextElement()); + } else { + throw new NamingException("No user found for dn " + userdn); + } + } + + @Override + public List searchUsers(final LdapContext context) throws NamingException, IOException { + return searchUsers(null, context); + } + + @Override + public List searchUsers(final String username, final LdapContext context) throws NamingException, IOException { + + final SearchControls searchControls = new SearchControls(); + + searchControls.setSearchScope(_ldapConfiguration.getScope()); + searchControls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); + + String basedn = _ldapConfiguration.getBaseDn(); + if (StringUtils.isBlank(basedn)) { + throw new IllegalArgumentException("ldap basedn is not configured"); + } + byte[] cookie = null; + int pageSize = _ldapConfiguration.getLdapPageSize(); + context.setRequestControls(new Control[]{new PagedResultsControl(pageSize, Control.NONCRITICAL)}); + final List users = new ArrayList(); + NamingEnumeration results; + do { + results = context.search(basedn, generateSearchFilter(username), searchControls); + while (results.hasMoreElements()) { + final SearchResult result = results.nextElement(); + users.add(createUser(result)); + } + Control[] contextControls = context.getResponseControls(); + if (contextControls != null) { + for (Control control : contextControls) { + if (control instanceof PagedResultsResponseControl) { + PagedResultsResponseControl prrc = (PagedResultsResponseControl) control; + cookie = prrc.getCookie(); + } + } + } else { + s_logger.info("No controls were sent from the ldap server"); + } + context.setRequestControls(new Control[] {new PagedResultsControl(pageSize, cookie, Control.CRITICAL)}); + } while (cookie != null); + + return users; + } +} \ No newline at end of file diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy new file mode 100644 index 00000000000..6fafa3edf22 --- /dev/null +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/ADLdapUserManagerImplSpec.groovy @@ -0,0 +1,70 @@ +/* + * 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. + */ +package groovy.org.apache.cloudstack.ldap + +import org.apache.cloudstack.ldap.ADLdapUserManagerImpl +import org.apache.cloudstack.ldap.LdapConfiguration +import spock.lang.Shared + +import javax.naming.directory.SearchControls +import javax.naming.ldap.LdapContext + +class ADLdapUserManagerImplSpec extends spock.lang.Specification { + + @Shared + ADLdapUserManagerImpl adLdapUserManager; + + @Shared + LdapConfiguration ldapConfiguration; + + def setup() { + adLdapUserManager = new ADLdapUserManagerImpl(); + ldapConfiguration = Mock(LdapConfiguration); + adLdapUserManager._ldapConfiguration = ldapConfiguration; + } + + def "test generate AD search filter"() { + ldapConfiguration.getUserObject() >> "user" + ldapConfiguration.getCommonNameAttribute() >> "CN" + ldapConfiguration.getBaseDn() >> "DC=cloud,DC=citrix,DC=com" + + def result = adLdapUserManager.generateADGroupSearchFilter(group); + expect: + assert result.contains("memberOf:1.2.840.113556.1.4.1941:=") + result == "(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=" + group + ",DC=cloud,DC=citrix,DC=com))" + where: + group << ["dev", "dev-hyd"] + } + + def "test getUsersInGroup null group"() { + ldapConfiguration.getScope() >> SearchControls.SUBTREE_SCOPE + ldapConfiguration.getReturnAttributes() >> ["username", "firstname", "lastname", "email"] + ldapConfiguration.getBaseDn() >>> [null, null, "DC=cloud,DC=citrix,DC=com"] + + LdapContext context = Mock(LdapContext); + + when: + def result = adLdapUserManager.getUsersInGroup(group, context) + then: + thrown(IllegalArgumentException) + where: + group << [null, "group", null] + + } +} diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy index adc3463afde..a4cf3c2878b 100644 --- a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy @@ -25,6 +25,7 @@ import org.apache.cloudstack.framework.config.impl.ConfigurationVO import org.apache.cloudstack.ldap.LdapConfiguration import org.apache.cloudstack.ldap.LdapConfigurationVO import org.apache.cloudstack.ldap.LdapManager +import org.apache.cloudstack.ldap.dao.LdapConfigurationDao import org.apache.cxf.common.util.StringUtils import javax.naming.directory.SearchControls @@ -33,8 +34,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def "Test that getAuthentication returns none"() { given: "We have a ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get authentication is called" String authentication = ldapConfiguration.getAuthentication() then: "none should be returned" @@ -44,8 +45,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def "Test that getAuthentication returns simple"() { given: "We have a configDao, LdapManager and LdapConfiguration with bind principle and password set" def configDao = Mock(ConfigurationDao) - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) configDao.getValue("ldap.bind.password") >> "password" configDao.getValue("ldap.bind.principal") >> "cn=rmurphy,dc=cloudstack,dc=org" when: "Get authentication is called" @@ -58,8 +59,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have a ConfigDao, LdapManager and ldapConfiguration with a baseDn value set." def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.basedn") >> "dc=cloudstack,dc=org" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get basedn is called" String baseDn = ldapConfiguration.getBaseDn(); then: "The set baseDn should be returned" @@ -70,8 +71,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "Given that we have a ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.email.attribute") >> "mail" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get Email Attribute is called" String emailAttribute = ldapConfiguration.getEmailAttribute() then: "mail should be returned" @@ -81,8 +82,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def "Test that getFactory returns com.sun.jndi.ldap.LdapCtxFactory"() { given: "We have a ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get Factory is scalled" String factory = ldapConfiguration.getFactory(); then: "com.sun.jndi.ldap.LdapCtxFactory is returned" @@ -93,8 +94,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have a ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.firstname.attribute") >> "givenname" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get firstname attribute is called" String firstname = ldapConfiguration.getFirstnameAttribute() then: "givennam should be returned" @@ -105,8 +106,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have a ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.lastname.attribute") >> "sn" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get Lastname Attribute is scalled " String lastname = ldapConfiguration.getLastnameAttribute() then: "sn should be returned" @@ -120,8 +121,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { configDao.getValue("ldap.lastname.attribute") >> "sn" configDao.getValue("ldap.username.attribute") >> "uid" configDao.getValue("ldap.email.attribute") >> "mail" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get return attributes is called" String[] returnAttributes = ldapConfiguration.getReturnAttributes() then: "An array containing uid, mail, givenname, sn and cn is returned" @@ -131,8 +132,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def "Test that getScope returns SearchControls.SUBTREE_SCOPE"() { given: "We have ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get scope is called" int scope = ldapConfiguration.getScope() then: "SearchControls.SUBTRE_SCOPE should be returned" @@ -143,8 +144,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.username.attribute") >> "uid" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get Username Attribute is called" String usernameAttribute = ldapConfiguration.getUsernameAttribute() then: "uid should be returned" @@ -155,8 +156,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have a ConfigDao, LdapManager and LdapConfiguration" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.user.object") >> "inetOrgPerson" - def ldapManager = Mock(LdapManager) - def ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + def ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "Get user object is called" String userObject = ldapConfiguration.getUserObject() then: "inetOrgPerson is returned" @@ -166,14 +167,14 @@ class LdapConfigurationSpec extends spock.lang.Specification { def "Test that providerUrl successfully returns a URL when a configuration is available"() { given: "We have a ConfigDao, LdapManager, LdapConfiguration" def configDao = Mock(ConfigurationDao) - def ldapManager = Mock(LdapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) List ldapConfigurationList = new ArrayList() ldapConfigurationList.add(new LdapConfigurationVO("localhost", 389)) Pair, Integer> result = new Pair, Integer>(); result.set(ldapConfigurationList, ldapConfigurationList.size()) - ldapManager.listConfigurations(_) >> result + ldapConfigurationDao.searchConfigurations(_,_) >> result - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "A request is made to get the providerUrl" String providerUrl = ldapConfiguration.getProviderUrl() @@ -186,8 +187,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have a ConfigDao with a value for ldap.search.group.principle and an LdapConfiguration" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.search.group.principle") >> "cn=cloudstack,cn=users,dc=cloudstack,dc=org" - def ldapManager = Mock(LdapManager) - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "A request is made to get the search group principle" String result = ldapConfiguration.getSearchGroupPrinciple(); @@ -200,8 +201,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { given: "We have a ConfigDao with a value for truststore password" def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.truststore.password") >> "password" - def ldapManager = Mock(LdapManager) - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "A request is made to get the truststore password" String result = ldapConfiguration.getTrustStorePassword() @@ -215,8 +216,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.truststore") >> "/tmp/ldap.ts" configDao.getValue("ldap.truststore.password") >> "password" - def ldapManager = Mock(LdapManager) - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManager) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) when: "A request is made to get the status of SSL" boolean result = ldapConfiguration.getSSLStatus(); @@ -230,8 +231,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.group.object") >> groupObject - def ldapManger = Mock(LdapManager) - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManger) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) def expectedResult = groupObject == null ? "groupOfUniqueNames" : groupObject def result = ldapConfiguration.getGroupObject() @@ -246,8 +247,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { def configDao = Mock(ConfigurationDao) configDao.getValue("ldap.group.user.uniquemember") >> groupObject - def ldapManger = Mock(LdapManager) - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManger) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) def expectedResult = groupObject == null ? "uniquemember" : groupObject def result = ldapConfiguration.getGroupUniqueMemeberAttribute() @@ -268,8 +269,8 @@ class LdapConfigurationSpec extends spock.lang.Specification { configDepotImpl.global() >> configDao ConfigKey.init(configDepotImpl) - def ldapManger = Mock(LdapManager) - LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapManger) + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) def expected = timeout == null ? 1000 : timeout.toLong() //1000 is the default value @@ -280,4 +281,27 @@ class LdapConfigurationSpec extends spock.lang.Specification { timeout << ["1000000", "1000", null] } + def "Test getLdapProvider()"() { + given: "We have configdao for ldap group object" + def configDao = Mock(ConfigurationDao) + ConfigurationVO configurationVo = new ConfigurationVO("ldap.read.timeout", LdapConfiguration.ldapProvider); + configurationVo.setValue(provider) + configDao.findById("ldap.provider") >> configurationVo + + def configDepotImpl = Mock(ConfigDepotImpl) + configDepotImpl.global() >> configDao + ConfigKey.init(configDepotImpl) + + def ldapConfigurationDao = Mock(LdapConfigurationDao) + LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) + + def expected = provider == null ? "openldap" : provider //"openldap" is the default value + + def result = ldapConfiguration.getLdapProvider() + expect: + result == expected + where: + provider << ["openldap", "microsoftad", null, "xyz"] + } + } diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy index c57cc7872df..1f17e704f52 100644 --- a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapCreateAccountCmdSpec.groovy @@ -57,7 +57,7 @@ class LdapCreateAccountCmdSpec extends spock.lang.Specification { AccountService accountService = Mock(AccountService) def ldapCreateAccountCmd = Spy(LdapCreateAccountCmd, constructorArgs: [ldapManager, accountService]) ldapCreateAccountCmd.getCurrentContext() >> Mock(CallContext) - ldapCreateAccountCmd.createCloudstackUserAccount(_) >> null + ldapCreateAccountCmd.createCloudstackUserAccount(_, _, _) >> null when: "Cloudstack fail to create the user" ldapCreateAccountCmd.execute() then: "An exception is thrown" diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy index ee317206854..4c62a4eb67e 100644 --- a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapManagerImplSpec.groovy @@ -41,8 +41,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext() >> { throw new NoLdapUserMatchingQueryException() } - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for a user but there is a bind issue" ldapManager.getUser("rmurphy") then: "an exception is thrown" @@ -54,8 +57,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext() >> { throw new NamingException() } - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for a group of users but there is a bind issue" ldapManager.getUsers() then: "An exception is thrown" @@ -67,8 +73,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext() >> { throw new NamingException() } - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for users" ldapManager.searchUsers("rmurphy") then: "An exception is thrown" @@ -80,7 +89,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A ldap configuration response is generated" def result = ldapManager.createLdapConfigurationResponse(new LdapConfigurationVO("localhost", 389)) then: "the result of the response should match the given LdapConfigurationVO" @@ -93,7 +105,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A ldap user response is generated" def result = ldapManager.createLdapUserResponse(new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,ou=engineering,dc=cloudstack,dc=org", "engineering")) @@ -111,11 +126,14 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext() >> null List users = new ArrayList<>(); users.add(new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,dc=cloudstack,dc=org", null)) ldapUserManager.getUsers(_) >> users; - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for a group of users" def result = ldapManager.getUsers() then: "A list greater than 0 is returned" @@ -127,9 +145,12 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext() >> null ldapUserManager.getUser(_, _) >> new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,dc=cloudstack,dc=org", null) - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for a user" def result = ldapManager.getUser("rmurphy") then: "The user is returned" @@ -145,7 +166,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "The context is closed" def context = Mock(InitialLdapContext) ldapManager.closeContext(context) @@ -159,7 +183,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapContextFactory = Mock(LdapContextFactory) ldapContextFactory.createUserContext(_, _) >> { throw new NamingException() } def ldapUserManager = Mock(LdapUserManager) - def ldapManager = Spy(LdapManagerImpl, constructorArgs: [ldapConfigurationDao, ldapContextFactory, ldapUserManager]) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapConfiguration = Mock(LdapConfiguration) + def ldapManager = Spy(LdapManagerImpl, constructorArgs: [ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration]) ldapManager.getUser(_) >> { new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,dc=cloudstack,dc=org", null) } when: "The user attempts to authenticate with a bad password" def result = ldapManager.canAuthenticate("rmurphy", "password") @@ -172,7 +199,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) - def ldapManager = Spy(LdapManagerImpl, constructorArgs: [ldapConfigurationDao, ldapContextFactory, ldapUserManager]) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapConfiguration = Mock(LdapConfiguration) + def ldapManager = Spy(LdapManagerImpl, constructorArgs: [ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration]) ldapManager.getUser(_) >> { throw new NamingException() } when: "The user attempts to authenticate and the user is not found" def result = ldapManager.canAuthenticate("rmurphy", "password") @@ -185,8 +215,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapConfigurationDao.findByHostname(_) >> null - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A ldap configuration that doesn't exist is deleted" ldapManager.deleteConfiguration("localhost") then: "A exception is thrown" @@ -198,7 +231,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "The context is closed" def context = Mock(InitialLdapContext) context.close() >> { throw new NamingException() } @@ -213,7 +249,10 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapContextFactory = Mock(LdapContextFactory) ldapContextFactory.createUserContext(_, _) >> null def ldapUserManager = Mock(LdapUserManager) - def ldapManager = Spy(LdapManagerImpl, constructorArgs: [ldapConfigurationDao, ldapContextFactory, ldapUserManager]) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapManager = Spy(LdapManagerImpl, constructorArgs: [ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration]) ldapManager.getUser(_) >> { new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,dc=cloudstack,dc=org", null) } when: "A user authenticates" def result = ldapManager.canAuthenticate("rmurphy", "password") @@ -226,13 +265,16 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapConfiguration = Mock(LdapConfiguration) ldapConfigurationDao.findByHostname(_) >> { def configuration = new LdapConfigurationVO("localhost", 389) configuration.setId(0); return configuration; } ldapConfigurationDao.remove(_) >> null - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A ldap configuration is deleted" def result = ldapManager.deleteConfiguration("localhost") then: "The deleted configuration is returned" @@ -245,13 +287,16 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapConfiguration = Mock(LdapConfiguration) ldapContextFactory.createBindContext() >> null; List users = new ArrayList(); users.add(new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,ou=engineering,dc=cloudstack,dc=org", "engineering")) ldapUserManager.getUsers(_, _) >> users; - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for users" def result = ldapManager.searchUsers("rmurphy"); then: "A list of atleast 1 is returned" @@ -263,9 +308,12 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext(_) >> null ldapConfigurationDao.persist(_) >> null - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A ldap configuration is added" def result = ldapManager.addConfiguration("localhost", 389) then: "the resulting object contain the given hostname and port" @@ -278,8 +326,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext(_) >> { throw new NamingException() } - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A configuration is added that can not be binded" ldapManager.addConfiguration("localhost", 389) then: "An exception is thrown" @@ -291,8 +342,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapConfigurationDao.findByHostname(_) >> new LdapConfigurationVO("localhost", 389) - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "a configuration that already exists is added" ldapManager.addConfiguration("localhost", 389) then: "An exception is thrown" @@ -318,8 +372,11 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager + def ldapConfiguration = Mock(LdapConfiguration) final List> cmdList = supportedLdapCommands() - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "Get commands is called" def result = ldapManager.getCommands() then: "it must return all the commands" @@ -332,12 +389,15 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager List ldapConfigurationList = new ArrayList() ldapConfigurationList.add(new LdapConfigurationVO("localhost", 389)) Pair, Integer> configurations = new Pair, Integer>(); configurations.set(ldapConfigurationList, ldapConfigurationList.size()) ldapConfigurationDao.searchConfigurations(_, _) >> configurations - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A request for configurations is made" def result = ldapManager.listConfigurations(new LdapListConfigurationCmd()) then: "Then atleast 1 ldap configuration is returned" @@ -349,12 +409,15 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager List ldapConfigurationList = new ArrayList() ldapConfigurationList.add(new LdapConfigurationVO("localhost", 389)) Pair, Integer> configurations = new Pair, Integer>(); configurations.set(ldapConfigurationList, ldapConfigurationList.size()) ldapConfigurationDao.searchConfigurations(_, _) >> configurations - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "A request to find out is ldap enabled" def result = ldapManager.isLdapEnabled(); then: "true is returned because a configuration was found" @@ -366,11 +429,14 @@ class LdapManagerImplSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDaoImpl) def ldapContextFactory = Mock(LdapContextFactory) def ldapUserManager = Mock(LdapUserManager) + def ldapUserManagerFactory = Mock(LdapUserManagerFactory) + def ldapConfiguration = Mock(LdapConfiguration) + ldapUserManagerFactory.getInstance(_) >> ldapUserManager ldapContextFactory.createBindContext() >> null List users = new ArrayList<>(); users.add(new LdapUser("rmurphy", "rmurphy@test.com", "Ryan", "Murphy", "cn=rmurphy,dc=cloudstack,dc=org", "engineering")) ldapUserManager.getUsersInGroup("engineering", _) >> users; - def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManager) + def ldapManager = new LdapManagerImpl(ldapConfigurationDao, ldapContextFactory, ldapUserManagerFactory, ldapConfiguration) when: "We search for a group of users" def result = ldapManager.getUsersInGroup("engineering") then: "A list greater of size one is returned" diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy new file mode 100644 index 00000000000..7615f9d5305 --- /dev/null +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy @@ -0,0 +1,56 @@ +/* + * 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. + */ +package groovy.org.apache.cloudstack.ldap + +import org.apache.cloudstack.ldap.ADLdapUserManagerImpl +import org.apache.cloudstack.ldap.LdapUserManagerFactory +import org.apache.cloudstack.ldap.OpenLdapUserManagerImpl +import org.springframework.beans.factory.config.AutowireCapableBeanFactory +import org.springframework.context.ApplicationContext +import spock.lang.Shared + +class LdapUserManagerFactorySpec extends spock.lang.Specification { + + @Shared + def LdapUserManagerFactory ldapUserManagerFactory; + + def setupSpec() { + ldapUserManagerFactory = new LdapUserManagerFactory(); + ApplicationContext applicationContext = Mock(ApplicationContext); + AutowireCapableBeanFactory autowireCapableBeanFactory = Mock(AutowireCapableBeanFactory); + applicationContext.getAutowireCapableBeanFactory() >> autowireCapableBeanFactory; + ldapUserManagerFactory.setApplicationContext(applicationContext); + } + + def "Test getInstance() from factory"() { + def result = ldapUserManagerFactory.getInstance(id); + + def expected; + if(id == "microsoftad") { + expected = ADLdapUserManagerImpl.class; + } else { + expected = OpenLdapUserManagerImpl.class; + } + + expect: + assert result.class.is(expected) + where: + id << ["openldap", "microsoftad", null, "xyz"] + } +} diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerSpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy similarity index 92% rename from plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerSpec.groovy rename to plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy index d1f3667b8c6..cb08c8fd47c 100644 --- a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerSpec.groovy +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/OpenLdapUserManagerSpec.groovy @@ -18,6 +18,7 @@ package groovy.org.apache.cloudstack.ldap import org.apache.cloudstack.ldap.LdapConfiguration import org.apache.cloudstack.ldap.LdapUserManager +import org.apache.cloudstack.ldap.OpenLdapUserManagerImpl import spock.lang.Shared import javax.naming.NamingException @@ -29,7 +30,7 @@ import javax.naming.directory.SearchResult import javax.naming.ldap.InitialLdapContext import javax.naming.ldap.LdapContext -class LdapUserManagerSpec extends spock.lang.Specification { +class OpenLdapUserManagerSpec extends spock.lang.Specification { @Shared private def ldapConfiguration @@ -184,7 +185,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { given: "We have attributes, a search and a user manager" def attributes = createUserAttributes(username, email, firstname, lastname) def search = createSearchResult(attributes) - def userManager = new LdapUserManager(ldapConfiguration) + def userManager = new OpenLdapUserManagerImpl(ldapConfiguration) def result = userManager.createUser(search) expect: "The crated user the data supplied from LDAP" @@ -199,7 +200,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "Test successfully returning a list from get users"() { given: "We have a LdapUserManager" - def userManager = new LdapUserManager(ldapConfiguration) + def userManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "A request for users is made" def result = userManager.getUsers(username, createContext()) @@ -211,7 +212,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "Test successfully returning a list from get users when no username is given"() { given: "We have a LdapUserManager" - def userManager = new LdapUserManager(ldapConfiguration) + def userManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "Get users is called without a username" def result = userManager.getUsers(createContext()) @@ -222,7 +223,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "Test successfully returning a ldap user from searchUsers"() { given: "We have a LdapUserManager" - def userManager = new LdapUserManager(ldapConfiguration) + def userManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "We search for users" def result = userManager.searchUsers(createContext()) @@ -234,7 +235,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "Test successfully returning an Ldap user from a get user request"() { given: "We have a LdapUserMaanger" - def userManager = new LdapUserManager(ldapConfiguration) + def userManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "A request for a user is made" def result = userManager.getUser(username, createContext()) @@ -255,7 +256,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def context = Mock(LdapContext) context.search(_, _, _) >> searchUsersResults; - def userManager = new LdapUserManager(ldapConfiguration) + def userManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "a get user request is made and no user is found" def result = userManager.getUser(username, context) @@ -266,14 +267,14 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "Test that a newly created Ldap User Manager is not null"() { given: "You have created a new Ldap user manager object" - def result = new LdapUserManager(); + def result = new OpenLdapUserManagerImpl(); expect: "The result is not null" result != null } def "test successful generateGroupSearchFilter"() { given: "ldap user manager and ldap config" - def ldapUserManager = new LdapUserManager(ldapConfiguration) + def ldapUserManager = new OpenLdapUserManagerImpl(ldapConfiguration) def groupName = varGroupName == null ? "*" : varGroupName def expectedResult = "(&(objectClass=groupOfUniqueNames)(cn=" + groupName + "))"; @@ -286,7 +287,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "test successful getUsersInGroup one user"() { given: "ldap user manager and ldap config" - def ldapUserManager = new LdapUserManager(ldapConfiguration) + def ldapUserManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "A request for users is made" def result = ldapUserManager.getUsersInGroup("engineering", createGroupSearchContextOneUser()) @@ -296,7 +297,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "test successful getUsersInGroup no user"() { given: "ldap user manager and ldap config" - def ldapUserManager = new LdapUserManager(ldapConfiguration) + def ldapUserManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "A request for users is made" def result = ldapUserManager.getUsersInGroup("engineering", createGroupSearchContextNoUser()) @@ -306,7 +307,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { def "test successful getUserForDn"() { given: "ldap user manager and ldap config" - def ldapUserManager = new LdapUserManager(ldapConfiguration) + def ldapUserManager = new OpenLdapUserManagerImpl(ldapConfiguration) when: "A request for users is made" def result = ldapUserManager.getUserForDn("cn=Ryan Murphy,ou=engineering,dc=cloudstack,dc=org", createContext()) @@ -324,7 +325,7 @@ class LdapUserManagerSpec extends spock.lang.Specification { given: "ldap configuration where basedn is not set" def ldapconfig = Mock(LdapConfiguration) ldapconfig.getBaseDn() >> null - def ldapUserManager = new LdapUserManager(ldapconfig) + def ldapUserManager = new OpenLdapUserManagerImpl(ldapconfig) when: "A request for search users is made" def result = ldapUserManager.searchUsers(new InitialLdapContext()) From 367e2ab71e7f7e78898ec7135ee140c6c8107cc8 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 20 Jul 2015 14:44:25 +0200 Subject: [PATCH 019/314] coverity 1225199: vmware dc upgrade --- .../cloud/upgrade/dao/Upgrade410to420.java | 131 ++++++++---------- 1 file changed, 56 insertions(+), 75 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java index 7e7f7b7d36c..18f84f97b7e 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java @@ -846,94 +846,75 @@ public class Upgrade410to420 implements DbUpgrade { } private void updateNonLegacyZones(Connection conn, List zones) { - PreparedStatement clustersQuery = null; - PreparedStatement clusterDetailsQuery = null; - PreparedStatement pstmt = null; - ResultSet clusters = null; - ResultSet clusterDetails = null; - ResultSet dcInfo = null; try { for (Long zoneId : zones) { s_logger.debug("Discovered non-legacy zone " + zoneId + ". Processing the zone to associate with VMware datacenter."); // All clusters in a non legacy zone will belong to the same VMware DC, hence pick the first cluster - clustersQuery = conn.prepareStatement("select id from `cloud`.`cluster` where removed is NULL AND data_center_id=?"); - clustersQuery.setLong(1, zoneId); - clusters = clustersQuery.executeQuery(); - clusters.next(); - Long clusterId = clusters.getLong("id"); + try (PreparedStatement clustersQuery = conn.prepareStatement("select id from `cloud`.`cluster` where removed is NULL AND data_center_id=?");) { + clustersQuery.setLong(1, zoneId); + try (ResultSet clusters = clustersQuery.executeQuery();) { + clusters.next(); + Long clusterId = clusters.getLong("id"); - // Get VMware datacenter details from cluster_details table - String user = null; - String password = null; - String url = null; - clusterDetailsQuery = conn.prepareStatement("select name, value from `cloud`.`cluster_details` where cluster_id=?"); - clusterDetailsQuery.setLong(1, clusterId); - clusterDetails = clusterDetailsQuery.executeQuery(); - while (clusterDetails.next()) { - String key = clusterDetails.getString(1); - String value = clusterDetails.getString(2); - if (key.equalsIgnoreCase("username")) { - user = value; - } else if (key.equalsIgnoreCase("password")) { - password = value; - } else if (key.equalsIgnoreCase("url")) { - url = value; + // Get VMware datacenter details from cluster_details table + String user = null; + String password = null; + String url = null; + try (PreparedStatement clusterDetailsQuery = conn.prepareStatement("select name, value from `cloud`.`cluster_details` where cluster_id=?");) { + clusterDetailsQuery.setLong(1, clusterId); + try (ResultSet clusterDetails = clusterDetailsQuery.executeQuery();) { + while (clusterDetails.next()) { + String key = clusterDetails.getString(1); + String value = clusterDetails.getString(2); + if (key.equalsIgnoreCase("username")) { + user = value; + } else if (key.equalsIgnoreCase("password")) { + password = value; + } else if (key.equalsIgnoreCase("url")) { + url = value; + } + } + String[] tokens = url.split("/"); // url format - http://vcenter/dc/cluster + String vc = tokens[2]; + String dcName = tokens[3]; + String guid = dcName + "@" + vc; + + try (PreparedStatement insertVmWareDC = conn + .prepareStatement("INSERT INTO `cloud`.`vmware_data_center` (uuid, name, guid, vcenter_host, username, password) values(?, ?, ?, ?, ?, ?)");) { + insertVmWareDC.setString(1, UUID.randomUUID().toString()); + insertVmWareDC.setString(2, dcName); + insertVmWareDC.setString(3, guid); + insertVmWareDC.setString(4, vc); + insertVmWareDC.setString(5, user); + insertVmWareDC.setString(6, password); + insertVmWareDC.executeUpdate(); + } + try (PreparedStatement selectVmWareDC = conn.prepareStatement("SELECT id FROM `cloud`.`vmware_data_center` where guid=?");) { + selectVmWareDC.setString(1, guid); + try (ResultSet vmWareDcInfo = selectVmWareDC.executeQuery();) { + Long vmwareDcId = -1L; + if (vmWareDcInfo.next()) { + vmwareDcId = vmWareDcInfo.getLong("id"); + } + + try (PreparedStatement insertMapping = conn + .prepareStatement("INSERT INTO `cloud`.`vmware_data_center_zone_map` (zone_id, vmware_data_center_id) values(?, ?)");) { + insertMapping.setLong(1, zoneId); + insertMapping.setLong(2, vmwareDcId); + insertMapping.executeUpdate(); + } + } + } + } + } } } - String[] tokens = url.split("/"); // url format - http://vcenter/dc/cluster - String vc = tokens[2]; - String dcName = tokens[3]; - String guid = dcName + "@" + vc; - - pstmt = conn.prepareStatement("INSERT INTO `cloud`.`vmware_data_center` (uuid, name, guid, vcenter_host, username, password) values(?, ?, ?, ?, ?, ?)"); - pstmt.setString(1, UUID.randomUUID().toString()); - pstmt.setString(2, dcName); - pstmt.setString(3, guid); - pstmt.setString(4, vc); - pstmt.setString(5, user); - pstmt.setString(6, password); - pstmt.executeUpdate(); - - pstmt = conn.prepareStatement("SELECT id FROM `cloud`.`vmware_data_center` where guid=?"); - pstmt.setString(1, guid); - dcInfo = pstmt.executeQuery(); - Long vmwareDcId = -1L; - if (dcInfo.next()) { - vmwareDcId = dcInfo.getLong("id"); - } - - pstmt = conn.prepareStatement("INSERT INTO `cloud`.`vmware_data_center_zone_map` (zone_id, vmware_data_center_id) values(?, ?)"); - pstmt.setLong(1, zoneId); - pstmt.setLong(2, vmwareDcId); - pstmt.executeUpdate(); } } catch (SQLException e) { String msg = "Unable to update non legacy zones." + e.getMessage(); s_logger.error(msg); throw new CloudRuntimeException(msg, e); - } finally { - try { - if (clustersQuery != null) { - clustersQuery.close(); - } - if (clusterDetails != null) { - clusterDetails.close(); - } - if (clusterDetailsQuery != null) { - clusterDetailsQuery.close(); - } - if (clusters != null) { - clusters.close(); - } - if (dcInfo != null) { - dcInfo.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } From ae5fe7b5fb48d318e0fbae15636d0fd025dcdd47 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 20 Jul 2015 15:05:57 +0200 Subject: [PATCH 020/314] coverity 1212194: reuse of prepared statements in try-block and of course have them autoclosed --- .../cloud/upgrade/dao/Upgrade420to421.java | 124 ++++++------------ 1 file changed, 41 insertions(+), 83 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java index 2f0ae29ca7a..192855219d4 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java @@ -71,104 +71,62 @@ public class Upgrade420to421 implements DbUpgrade { private void updateOverprovisioningPerVm(Connection conn) { - PreparedStatement pstmt1 = null; - PreparedStatement pstmt2 = null; - PreparedStatement pstmt3 = null; - ResultSet result1 = null; - ResultSet result2 = null; - // Get cpu overprovisioning factor from global setting and update user vm details table for all the vms if factor > 1 - try { - pstmt1 = conn.prepareStatement("select value from `cloud`.`configuration` where name='cpu.overprovisioning.factor'"); - result1 = pstmt1.executeQuery(); + try (PreparedStatement selectConfiguration = conn.prepareStatement("select value from `cloud`.`configuration` where name=?");) { String cpuoverprov = "1"; - if(result1.next()){ - cpuoverprov = result1.getString(1); + selectConfiguration.setString(1, "cpu.overprovisioning.factor"); + try (ResultSet configData = selectConfiguration.executeQuery()) { + if (configData.next()) { + cpuoverprov = configData.getString(1); + } } - result1.close(); - pstmt1.close(); - - pstmt1 = conn.prepareStatement("select value from `cloud`.`configuration` where name='mem.overprovisioning.factor'"); - result1 = pstmt1.executeQuery(); String memoverprov = "1"; - if(result1.next()){ - memoverprov = result1.getString(1); + selectConfiguration.setString(1, "mem.overprovisioning.factor"); + try (ResultSet configData = selectConfiguration.executeQuery()) { + if (configData.next()) { + memoverprov = configData.getString(1); + } } - result1.close(); - pstmt1.close(); - // Need to populate only when overprovisioning factor doesn't pre exist. s_logger.debug("Starting updating user_vm_details with cpu/memory overprovisioning factors"); - pstmt2 = conn.prepareStatement("select id, hypervisor_type from `cloud`.`vm_instance` where removed is null and id not in (select vm_id from `cloud`.`user_vm_details` where name='cpuOvercommitRatio')"); - pstmt3 = conn.prepareStatement("INSERT IGNORE INTO cloud.user_vm_details (vm_id, name, value) VALUES (?, ?, ?)"); - result2 = pstmt2.executeQuery(); - while (result2.next()) { - String hypervisor_type = result2.getString(2); - if (hypervisor_type.equalsIgnoreCase(Hypervisor.HypervisorType.VMware.name())) { - //For cpu - pstmt3.setLong(1, result2.getLong(1)); - pstmt3.setString(2, "cpuOvercommitRatio"); - pstmt3.setString(3, cpuoverprov); - pstmt3.executeUpdate(); + try ( + PreparedStatement pstmt2 = conn + .prepareStatement("select id, hypervisor_type from `cloud`.`vm_instance` where removed is null and id not in (select vm_id from `cloud`.`user_vm_details` where name='cpuOvercommitRatio')"); + PreparedStatement pstmt3 = conn.prepareStatement("INSERT IGNORE INTO cloud.user_vm_details (vm_id, name, value) VALUES (?, ?, ?)"); + ResultSet result2 = pstmt2.executeQuery();) { + while (result2.next()) { + String hypervisor_type = result2.getString(2); + if (hypervisor_type.equalsIgnoreCase(Hypervisor.HypervisorType.VMware.name())) { + //For cpu + pstmt3.setLong(1, result2.getLong(1)); + pstmt3.setString(2, "cpuOvercommitRatio"); + pstmt3.setString(3, cpuoverprov); + pstmt3.executeUpdate(); + // For memory + pstmt3.setLong(1, result2.getLong(1)); + pstmt3.setString(2, "memoryOvercommitRatio"); + pstmt3.setString(3, memoverprov); // memory overprovisioning was used to reserve memory in case of VMware. + pstmt3.executeUpdate(); + } else { + //For cpu + pstmt3.setLong(1, result2.getLong(1)); + pstmt3.setString(2, "cpuOvercommitRatio"); + pstmt3.setString(3, cpuoverprov); + pstmt3.executeUpdate(); - // For memory - pstmt3.setLong(1, result2.getLong(1)); - pstmt3.setString(2, "memoryOvercommitRatio"); - pstmt3.setString(3, memoverprov); // memory overprovisioning was used to reserve memory in case of VMware. - pstmt3.executeUpdate(); - } else { - //For cpu - pstmt3.setLong(1, result2.getLong(1)); - pstmt3.setString(2, "cpuOvercommitRatio"); - pstmt3.setString(3, cpuoverprov); - pstmt3.executeUpdate(); - - // For memory - pstmt3.setLong(1, result2.getLong(1)); - pstmt3.setString(2, "memoryOvercommitRatio"); - pstmt3.setString(3, "1"); // memory overprovisioning didn't exist earlier. - pstmt3.executeUpdate(); + // For memory + pstmt3.setLong(1, result2.getLong(1)); + pstmt3.setString(2, "memoryOvercommitRatio"); + pstmt3.setString(3, "1"); // memory overprovisioning didn't exist earlier. + pstmt3.executeUpdate(); + } } } s_logger.debug("Done updating user_vm_details with cpu/memory overprovisioning factors"); - } catch (SQLException e) { throw new CloudRuntimeException("Unable to update cpu/memory overprovisioning factors", e); - } finally { - try { - if (pstmt1 != null && !pstmt1.isClosed()) { - pstmt1.close(); - } - } catch (SQLException e) { - } - try { - if (pstmt2 != null && !pstmt2.isClosed()) { - pstmt2.close(); - } - } catch (SQLException e) { - } - try { - if (pstmt3 != null && !pstmt3.isClosed()) { - pstmt3.close(); - } - } catch (SQLException e) { - } - try { - if (result1 != null) { - result1.close(); - } - } catch (SQLException e) { - } - try { - if (result2 != null) { - result2.close(); - } - }catch (SQLException e){ - - } } - } private void upgradeResourceCount(Connection conn) { From 822ea9c7875f1e0da1813c4812e4c4a32971ba9a Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 21 Jul 2015 17:42:41 +0200 Subject: [PATCH 021/314] CLOUDSTACK-8658: make initializer static instead of default Signed-off-by: wilderrodrigues --- utils/src/com/cloud/utils/StringUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/src/com/cloud/utils/StringUtils.java b/utils/src/com/cloud/utils/StringUtils.java index 73b49fc9249..1dc0f9f1500 100644 --- a/utils/src/com/cloud/utils/StringUtils.java +++ b/utils/src/com/cloud/utils/StringUtils.java @@ -35,7 +35,7 @@ public class StringUtils { private static Charset preferredACSCharset; - { + static { String preferredCharset = "UTF-8"; if (Charset.isSupported(preferredCharset)) { preferredACSCharset = Charset.forName(preferredCharset); From 2982fcf6158e10a2996ba2e48b9678184dd453e7 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 21 Jul 2015 22:46:43 +0200 Subject: [PATCH 022/314] CLOUDSTACK-8658: test default platform charset Signed-off-by: wilderrodrigues This closes #612 --- utils/test/com/cloud/utils/StringUtilsTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/utils/test/com/cloud/utils/StringUtilsTest.java b/utils/test/com/cloud/utils/StringUtilsTest.java index 5a90300e654..58b8b90d19a 100644 --- a/utils/test/com/cloud/utils/StringUtilsTest.java +++ b/utils/test/com/cloud/utils/StringUtilsTest.java @@ -21,6 +21,7 @@ package com.cloud.utils; import static org.junit.Assert.assertEquals; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; @@ -29,6 +30,16 @@ import junit.framework.Assert; import org.junit.Test; public class StringUtilsTest { + @Test + public void testGetPrefferedCharset() { + assertEquals(StringUtils.getPreferredCharset(),Charset.forName("UTF-8")); + } + + @Test + public void testGetDefaultCharset() { + assertEquals(StringUtils.getPreferredCharset(),Charset.defaultCharset()); + } + @Test public void testCleanPasswordFromJsonObjectAtEnd() { String input = "{\"foo\":\"bar\",\"password\":\"test\"}"; From d42173a1a31043cf88909434a82f641a5fc36bf3 Mon Sep 17 00:00:00 2001 From: Rajani Karuturi Date: Wed, 22 Jul 2015 16:31:28 +0530 Subject: [PATCH 023/314] reverting gmaven version to 1.3 the changes in commit ec32ea30f7b3e5351e661786955d9fa0929047bd changed gmaven version in ldap plugin which broke running the spock tests from command line. Hence reverting the change until we fix it with the new version. --- plugins/user-authenticators/ldap/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/user-authenticators/ldap/pom.xml b/plugins/user-authenticators/ldap/pom.xml index d24a5be5ab3..22cdeb722d6 100644 --- a/plugins/user-authenticators/ldap/pom.xml +++ b/plugins/user-authenticators/ldap/pom.xml @@ -24,7 +24,7 @@ org.codehaus.gmaven gmaven-plugin - 1.5 + 1.3 1.7 From ab7c9e409826dfe6afca7f9b075920caa6b65c9b Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Tue, 21 Jul 2015 14:28:38 +0530 Subject: [PATCH 024/314] CLOUDSTACK-8655: [Browser Based Upload Volume] Partially uploaded volumes are not getting destroyed as part of storage GC As part of volume sync, that runs during of SSVM start-up, the volume_store_ref entry was getting deleted. Volume GC relies on this entry to move volume to destroyed state. Since the entry was getting deleted, GC thread never moved the volume from UploadError/UploadAbandoned to Destroyed. Fix is to not remove the volume_store_ref entry as part of volume sync and let GC thread handle the clean up. This closes #611 --- .../storage/volume/VolumeObject.java | 3 +- .../component/test_browse_volumes.py | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java index e8518704d9e..5bf49a9a813 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeObject.java @@ -333,11 +333,10 @@ public class VolumeObject implements VolumeInfo { } finally { // in case of OperationFailed, expunge the entry if (event == ObjectInDataStoreStateMachine.Event.OperationFailed && - (volumeVO.getState() != Volume.State.Copying && volumeVO.getState() != Volume.State.Uploaded)) { + (volumeVO.getState() != Volume.State.Copying && volumeVO.getState() != Volume.State.Uploaded && volumeVO.getState() != Volume.State.UploadError)) { objectInStoreMgr.deleteIfNotReady(this); } } - } @Override diff --git a/test/integration/component/test_browse_volumes.py b/test/integration/component/test_browse_volumes.py index 4c153517a3f..12aa037d57a 100644 --- a/test/integration/component/test_browse_volumes.py +++ b/test/integration/component/test_browse_volumes.py @@ -2678,6 +2678,34 @@ class TestBrowseUploadVolume(cloudstackTestCase): return + @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false") + def test_browser_upload_volume_incomplete(self): + """ + Test browser based incomplete volume upload, followed by SSVM destroy. Volume should go to UploadAbandoned/Error state and get cleaned up. + """ + try: + self.debug("========================= Test browser based incomplete volume upload ========================") + + #Only register volume, without uploading + cmd = getUploadParamsForVolume.getUploadParamsForVolumeCmd() + cmd.zoneid = self.zone.id + cmd.format = self.uploadvolumeformat + cmd.name = self.volname + self.account.name + (random.choice(string.ascii_uppercase)) + cmd.account = self.account.name + cmd.domainid = self.domain.id + upload_volume_response = self.apiclient.getUploadParamsForVolume(cmd) + + #Destroy SSVM, and wait for new one to start + self.destroy_ssvm() + + #Verify that the volume is cleaned up as part of sync-up during new SSVM start + self.validate_uploaded_volume(upload_volume_response.id, 'UploadAbandoned') + + except Exception as e: + self.fail("Exceptione occurred : %s" % e) + return + + @classmethod def tearDownClass(self): try: From 8875d7ae15e05cc2c9110e98354520011fc32d08 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 20 Jul 2015 15:14:51 +0200 Subject: [PATCH 025/314] CLOUDSTACK-7539: coverity regression dead local store Signed-off-by: wilderrodrigues This closes #610 --- .../storage/cache/manager/StorageCacheManagerImpl.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java index 48e8af6cb03..eca841eb0d0 100644 --- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java +++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java @@ -20,10 +20,10 @@ package org.apache.cloudstack.storage.cache.manager; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Random; -import java.util.Date; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -41,8 +41,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; -import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event; +import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; import org.apache.cloudstack.engine.subsystem.api.storage.Scope; import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager; import org.apache.cloudstack.framework.async.AsyncCallFuture; @@ -52,6 +52,7 @@ import org.apache.cloudstack.storage.cache.allocator.StorageCacheAllocator; import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager; import org.apache.cloudstack.storage.datastore.db.ImageStoreVO; +import com.cloud.agent.api.to.DataObjectType; import com.cloud.configuration.Config; import com.cloud.storage.DataStoreRole; import com.cloud.utils.NumbersUtil; @@ -62,8 +63,6 @@ import com.cloud.utils.db.QueryBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.agent.api.to.DataObjectType; - public class StorageCacheManagerImpl implements StorageCacheManager, Manager { private static final Logger s_logger = Logger.getLogger(StorageCacheManagerImpl.class); @Inject @@ -227,7 +226,6 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { final Object lock; final DataObjectType type = data.getType(); final String typeName; - final DataStoreRole role = store.getRole(); final long storeId = store.getId(); final long dataId = data.getId(); From 59d7bc3573b713371882b68b0e7a887650ed227a Mon Sep 17 00:00:00 2001 From: wilderrodrigues Date: Wed, 22 Jul 2015 13:24:44 +0200 Subject: [PATCH 026/314] CLOUDSTACK-8660 - Formatting test and utility classes Signed-off-by: wilderrodrigues --- utils/src/com/cloud/utils/StringUtils.java | 128 ++++++++-------- .../test/com/cloud/utils/StringUtilsTest.java | 140 +++++++++--------- 2 files changed, 134 insertions(+), 134 deletions(-) diff --git a/utils/src/com/cloud/utils/StringUtils.java b/utils/src/com/cloud/utils/StringUtils.java index 1dc0f9f1500..d1225c5f2d4 100644 --- a/utils/src/com/cloud/utils/StringUtils.java +++ b/utils/src/com/cloud/utils/StringUtils.java @@ -36,7 +36,7 @@ public class StringUtils { private static Charset preferredACSCharset; static { - String preferredCharset = "UTF-8"; + final String preferredCharset = "UTF-8"; if (Charset.isSupported(preferredCharset)) { preferredACSCharset = Charset.forName(preferredCharset); } else { @@ -48,16 +48,16 @@ public class StringUtils { return preferredACSCharset; } - public static String join(Iterable iterable, String delim) { - StringBuilder sb = new StringBuilder(); + public static String join(final Iterable iterable, final String delim) { + final StringBuilder sb = new StringBuilder(); if (iterable != null) { - Iterator iter = iterable.iterator(); + final Iterator iter = iterable.iterator(); if (iter.hasNext()) { - Object next = iter.next(); + final Object next = iter.next(); sb.append(next.toString()); } while (iter.hasNext()) { - Object next = iter.next(); + final Object next = iter.next(); sb.append(delim + next.toString()); } } @@ -68,7 +68,7 @@ public class StringUtils { return org.apache.commons.lang.StringUtils.join(components, delimiter); } - public static boolean isNotBlank(String str) { + public static boolean isNotBlank(final String str) { if (str != null && str.trim().length() > 0) { return true; } @@ -78,8 +78,8 @@ public class StringUtils { public static String cleanupTags(String tags) { if (tags != null) { - String[] tokens = tags.split(","); - StringBuilder t = new StringBuilder(); + final String[] tokens = tags.split(","); + final StringBuilder t = new StringBuilder(); for (int i = 0; i < tokens.length; i++) { t.append(tokens[i].trim()).append(","); } @@ -94,11 +94,11 @@ public class StringUtils { * @param tags * @return List of tags */ - public static List csvTagsToList(String tags) { - List tagsList = new ArrayList(); + public static List csvTagsToList(final String tags) { + final List tagsList = new ArrayList(); if (tags != null) { - String[] tokens = tags.split(","); + final String[] tokens = tags.split(","); for (int i = 0; i < tokens.length; i++) { tagsList.add(tokens[i].trim()); } @@ -113,8 +113,8 @@ public class StringUtils { * @return String containing a comma separated list of tags */ - public static String listToCsvTags(List tagsList) { - StringBuilder tags = new StringBuilder(); + public static String listToCsvTags(final List tagsList) { + final StringBuilder tags = new StringBuilder(); if (tagsList.size() > 0) { for (int i = 0; i < tagsList.size(); i++) { tags.append(tagsList.get(i)); @@ -127,12 +127,12 @@ public class StringUtils { return tags.toString(); } - public static String getExceptionStackInfo(Throwable e) { - StringBuffer sb = new StringBuffer(); + public static String getExceptionStackInfo(final Throwable e) { + final StringBuffer sb = new StringBuffer(); sb.append(e.toString()).append("\n"); - StackTraceElement[] elemnents = e.getStackTrace(); - for (StackTraceElement element : elemnents) { + final StackTraceElement[] elemnents = e.getStackTrace(); + for (final StackTraceElement element : elemnents) { sb.append(element.getClassName()).append("."); sb.append(element.getMethodName()).append("("); sb.append(element.getFileName()).append(":"); @@ -143,15 +143,15 @@ public class StringUtils { return sb.toString(); } - public static String unicodeEscape(String s) { - StringBuilder sb = new StringBuilder(); + public static String unicodeEscape(final String s) { + final StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if ((c >> 7) > 0) { + final char c = s.charAt(i); + if (c >> 7 > 0) { sb.append("\\u"); - sb.append(hexChar[(c >> 12) & 0xF]); // append the hex character for the left-most 4-bits - sb.append(hexChar[(c >> 8) & 0xF]); // hex for the second group of 4-bits from the left - sb.append(hexChar[(c >> 4) & 0xF]); // hex for the third group + sb.append(hexChar[c >> 12 & 0xF]); // append the hex character for the left-most 4-bits + sb.append(hexChar[c >> 8 & 0xF]); // hex for the second group of 4-bits from the left + sb.append(hexChar[c >> 4 & 0xF]); // hex for the third group sb.append(hexChar[c & 0xF]); // hex for the last group, e.g., the right most 4-bits } else { sb.append(c); @@ -160,12 +160,12 @@ public class StringUtils { return sb.toString(); } - public static String getMaskedPasswordForDisplay(String password) { + public static String getMaskedPasswordForDisplay(final String password) { if (password == null || password.isEmpty()) { return "*"; } - StringBuffer sb = new StringBuffer(); + final StringBuffer sb = new StringBuffer(); sb.append(password.charAt(0)); for (int i = 1; i < password.length(); i++) { sb.append("*"); @@ -187,14 +187,14 @@ public class StringUtils { private static final Pattern REGEX_REDUNDANT_AND = Pattern.compile("(&|%26)(&|%26)+"); // Responsible for stripping sensitive content from request and response strings - public static String cleanString(String stringToClean) { + public static String cleanString(final String stringToClean) { String cleanResult = ""; if (stringToClean != null) { cleanResult = REGEX_PASSWORD_QUERYSTRING.matcher(stringToClean).replaceAll(""); cleanResult = REGEX_PASSWORD_JSON.matcher(cleanResult).replaceAll(""); - Matcher detailsMatcher = REGEX_PASSWORD_DETAILS.matcher(cleanResult); + final Matcher detailsMatcher = REGEX_PASSWORD_DETAILS.matcher(cleanResult); while (detailsMatcher.find()) { - Matcher detailsIndexMatcher = REGEX_PASSWORD_DETAILS_INDEX.matcher(detailsMatcher.group()); + final Matcher detailsIndexMatcher = REGEX_PASSWORD_DETAILS_INDEX.matcher(detailsMatcher.group()); if (detailsIndexMatcher.find()) { cleanResult = cleanDetails(cleanResult, detailsIndexMatcher.group()); } @@ -203,9 +203,9 @@ public class StringUtils { return cleanResult; } - public static String cleanDetails(String stringToClean, String detailsIndexSting) { + public static String cleanDetails(final String stringToClean, final String detailsIndexSting) { String cleanResult = stringToClean; - for (String log : stringToClean.split("&|%26")) { + for (final String log : stringToClean.split("&|%26")) { if (log.contains(detailsIndexSting)) { cleanResult = cleanResult.replace(log, ""); } @@ -214,7 +214,7 @@ public class StringUtils { return cleanResult; } - public static boolean areTagsEqual(String tags1, String tags2) { + public static boolean areTagsEqual(final String tags1, final String tags2) { if (tags1 == null && tags2 == null) { return true; } @@ -229,28 +229,28 @@ public class StringUtils { final String delimiter = ","; - List lstTags1 = new ArrayList(); - String[] aTags1 = tags1.split(delimiter); + final List lstTags1 = new ArrayList(); + final String[] aTags1 = tags1.split(delimiter); - for (String tag1 : aTags1) { + for (final String tag1 : aTags1) { lstTags1.add(tag1.toLowerCase()); } - List lstTags2 = new ArrayList(); - String[] aTags2 = tags2.split(delimiter); + final List lstTags2 = new ArrayList(); + final String[] aTags2 = tags2.split(delimiter); - for (String tag2 : aTags2) { + for (final String tag2 : aTags2) { lstTags2.add(tag2.toLowerCase()); } return lstTags1.containsAll(lstTags2) && lstTags2.containsAll(lstTags1); } - public static String stripControlCharacters(String s) { + public static String stripControlCharacters(final String s) { return StringUtilities.stripControls(s); } - public static int formatForOutput(String text, int start, int columns, char separator) { + public static int formatForOutput(final String text, final int start, final int columns, final char separator) { if (start >= text.length()) { return -1; } @@ -259,24 +259,24 @@ public class StringUtils { if (end > text.length()) { end = text.length(); } - String searchable = text.substring(start, end); - int found = searchable.lastIndexOf(separator); + final String searchable = text.substring(start, end); + final int found = searchable.lastIndexOf(separator); return found > 0 ? found : end - start; } - public static Map stringToMap(String s) { - Map map = new HashMap(); - String[] elements = s.split(";"); - for (String parts : elements) { - String[] keyValue = parts.split(":"); + public static Map stringToMap(final String s) { + final Map map = new HashMap(); + final String[] elements = s.split(";"); + for (final String parts : elements) { + final String[] keyValue = parts.split(":"); map.put(keyValue[0], keyValue[1]); } return map; } - public static String mapToString(Map map) { + public static String mapToString(final Map map) { String s = ""; - for (Map.Entry entry : map.entrySet()) { + for (final Map.Entry entry : map.entrySet()) { s += entry.getKey() + ":" + entry.getValue() + ";"; } if (s.length() > 0) { @@ -285,25 +285,25 @@ public class StringUtils { return s; } - public static List applyPagination(List originalList, Long startIndex, Long pageSizeVal) { + public static List applyPagination(final List originalList, final Long startIndex, final Long pageSizeVal) { // Most likely pageSize will never exceed int value, and we need integer to partition the listToReturn - boolean applyPagination = startIndex != null && pageSizeVal != null + final boolean applyPagination = startIndex != null && pageSizeVal != null && startIndex <= Integer.MAX_VALUE && startIndex >= Integer.MIN_VALUE && pageSizeVal <= Integer.MAX_VALUE && pageSizeVal >= Integer.MIN_VALUE; - List listWPagination = null; - if (applyPagination) { - listWPagination = new ArrayList<>(); - int index = startIndex.intValue() == 0 ? 0 : startIndex.intValue() / pageSizeVal.intValue(); - List> partitions = StringUtils.partitionList(originalList, pageSizeVal.intValue()); - if (index < partitions.size()) { - listWPagination = partitions.get(index); - } - } - return listWPagination; + List listWPagination = null; + if (applyPagination) { + listWPagination = new ArrayList<>(); + final int index = startIndex.intValue() == 0 ? 0 : startIndex.intValue() / pageSizeVal.intValue(); + final List> partitions = StringUtils.partitionList(originalList, pageSizeVal.intValue()); + if (index < partitions.size()) { + listWPagination = partitions.get(index); + } + } + return listWPagination; } - private static List> partitionList(List originalList, int chunkSize) { - List> listOfChunks = new ArrayList>(); + private static List> partitionList(final List originalList, final int chunkSize) { + final List> listOfChunks = new ArrayList>(); for (int i = 0; i < originalList.size() / chunkSize; i++) { listOfChunks.add(originalList.subList(i * chunkSize, i * chunkSize + chunkSize)); } diff --git a/utils/test/com/cloud/utils/StringUtilsTest.java b/utils/test/com/cloud/utils/StringUtilsTest.java index 58b8b90d19a..7671cffb9fb 100644 --- a/utils/test/com/cloud/utils/StringUtilsTest.java +++ b/utils/test/com/cloud/utils/StringUtilsTest.java @@ -32,7 +32,7 @@ import org.junit.Test; public class StringUtilsTest { @Test public void testGetPrefferedCharset() { - assertEquals(StringUtils.getPreferredCharset(),Charset.forName("UTF-8")); + assertEquals(StringUtils.getPreferredCharset(), Charset.forName("UTF-8")); } @Test @@ -42,91 +42,91 @@ public class StringUtilsTest { @Test public void testCleanPasswordFromJsonObjectAtEnd() { - String input = "{\"foo\":\"bar\",\"password\":\"test\"}"; + final String input = "{\"foo\":\"bar\",\"password\":\"test\"}"; //TODO: It would be nice to clean up the regex in question to not //have to return the trailing comma in the expected string below - String expected = "{\"foo\":\"bar\",}"; - String result = StringUtils.cleanString(input); + final String expected = "{\"foo\":\"bar\",}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromJsonObjectInMiddle() { - String input = "{\"foo\":\"bar\",\"password\":\"test\",\"test\":\"blah\"}"; - String expected = "{\"foo\":\"bar\",\"test\":\"blah\"}"; - String result = StringUtils.cleanString(input); + final String input = "{\"foo\":\"bar\",\"password\":\"test\",\"test\":\"blah\"}"; + final String expected = "{\"foo\":\"bar\",\"test\":\"blah\"}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromJsonObjectAlone() { - String input = "{\"password\":\"test\"}"; - String expected = "{}"; - String result = StringUtils.cleanString(input); + final String input = "{\"password\":\"test\"}"; + final String expected = "{}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromJsonObjectAtStart() { - String input = "{\"password\":\"test\",\"test\":\"blah\"}"; - String expected = "{\"test\":\"blah\"}"; - String result = StringUtils.cleanString(input); + final String input = "{\"password\":\"test\",\"test\":\"blah\"}"; + final String expected = "{\"test\":\"blah\"}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromJsonObjectWithMultiplePasswords() { - String input = "{\"description\":\"foo\"}],\"password\":\"bar\",\"nic\":[{\"password\":\"bar2\",\"id\":\"1\"}]}"; - String expected = "{\"description\":\"foo\"}],\"nic\":[{\"id\":\"1\"}]}"; - String result = StringUtils.cleanString(input); + final String input = "{\"description\":\"foo\"}],\"password\":\"bar\",\"nic\":[{\"password\":\"bar2\",\"id\":\"1\"}]}"; + final String expected = "{\"description\":\"foo\"}],\"nic\":[{\"id\":\"1\"}]}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromRequestString() { - String input = "username=foo&password=bar&url=foobar"; - String expected = "username=foo&url=foobar"; - String result = StringUtils.cleanString(input); + final String input = "username=foo&password=bar&url=foobar"; + final String expected = "username=foo&url=foobar"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromEncodedRequestString() { - String input = "name=SS1&provider=SMB&zoneid=5a60af2b-3025-4f2a-9ecc-8e33bf2b94e3&url=cifs%3A%2F%2F10.102.192.150%2FSMB-Share%2Fsowmya%2Fsecondary%3Fuser%3Dsowmya%26password%3DXXXXX%40123%26domain%3DBLR"; - String expected = "name=SS1&provider=SMB&zoneid=5a60af2b-3025-4f2a-9ecc-8e33bf2b94e3&url=cifs%3A%2F%2F10.102.192.150%2FSMB-Share%2Fsowmya%2Fsecondary%3Fuser%3Dsowmya%26domain%3DBLR"; - String result = StringUtils.cleanString(input); + final String input = "name=SS1&provider=SMB&zoneid=5a60af2b-3025-4f2a-9ecc-8e33bf2b94e3&url=cifs%3A%2F%2F10.102.192.150%2FSMB-Share%2Fsowmya%2Fsecondary%3Fuser%3Dsowmya%26password%3DXXXXX%40123%26domain%3DBLR"; + final String expected = "name=SS1&provider=SMB&zoneid=5a60af2b-3025-4f2a-9ecc-8e33bf2b94e3&url=cifs%3A%2F%2F10.102.192.150%2FSMB-Share%2Fsowmya%2Fsecondary%3Fuser%3Dsowmya%26domain%3DBLR"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromRequestStringWithMultiplePasswords() { - String input = "username=foo&password=bar&url=foobar&password=bar2&test=4"; - String expected = "username=foo&url=foobar&test=4"; - String result = StringUtils.cleanString(input); + final String input = "username=foo&password=bar&url=foobar&password=bar2&test=4"; + final String expected = "username=foo&url=foobar&test=4"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromRequestStringMatchedAtEndSingleQuote() { - String input = "'username=foo&password=bar'"; - String expected = "'username=foo'"; - String result = StringUtils.cleanString(input); + final String input = "'username=foo&password=bar'"; + final String expected = "'username=foo'"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromRequestStringMatchedAtEndDoubleQuote() { - String input = "\"username=foo&password=bar\""; - String expected = "\"username=foo\""; - String result = StringUtils.cleanString(input); + final String input = "\"username=foo&password=bar\""; + final String expected = "\"username=foo\""; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanPasswordFromRequestStringMatchedAtMiddleDoubleQuote() { - String input = "\"username=foo&password=bar&goo=sdf\""; - String expected = "\"username=foo&goo=sdf\""; - String result = StringUtils.cleanString(input); + final String input = "\"username=foo&password=bar&goo=sdf\""; + final String expected = "\"username=foo&goo=sdf\""; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @@ -138,101 +138,101 @@ public class StringUtilsTest { @Test public void testCleanSecretkeyFromJsonObjectAtEnd() { - String input = "{\"foo\":\"bar\",\"secretkey\":\"test\"}"; + final String input = "{\"foo\":\"bar\",\"secretkey\":\"test\"}"; // TODO: It would be nice to clean up the regex in question to not // have to return the trailing comma in the expected string below - String expected = "{\"foo\":\"bar\",}"; - String result = StringUtils.cleanString(input); + final String expected = "{\"foo\":\"bar\",}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanSecretkeyFromJsonObjectInMiddle() { - String input = "{\"foo\":\"bar\",\"secretkey\":\"test\",\"test\":\"blah\"}"; - String expected = "{\"foo\":\"bar\",\"test\":\"blah\"}"; - String result = StringUtils.cleanString(input); + final String input = "{\"foo\":\"bar\",\"secretkey\":\"test\",\"test\":\"blah\"}"; + final String expected = "{\"foo\":\"bar\",\"test\":\"blah\"}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanSecretkeyFromJsonObjectAlone() { - String input = "{\"secretkey\":\"test\"}"; - String expected = "{}"; - String result = StringUtils.cleanString(input); + final String input = "{\"secretkey\":\"test\"}"; + final String expected = "{}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanSecretkeyFromJsonObjectAtStart() { - String input = "{\"secretkey\":\"test\",\"test\":\"blah\"}"; - String expected = "{\"test\":\"blah\"}"; - String result = StringUtils.cleanString(input); + final String input = "{\"secretkey\":\"test\",\"test\":\"blah\"}"; + final String expected = "{\"test\":\"blah\"}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanSecretkeyFromJsonObjectWithMultiplePasswords() { - String input = "{\"description\":\"foo\"}],\"secretkey\":\"bar\",\"nic\":[{\"secretkey\":\"bar2\",\"id\":\"1\"}]}"; - String expected = "{\"description\":\"foo\"}],\"nic\":[{\"id\":\"1\"}]}"; - String result = StringUtils.cleanString(input); + final String input = "{\"description\":\"foo\"}],\"secretkey\":\"bar\",\"nic\":[{\"secretkey\":\"bar2\",\"id\":\"1\"}]}"; + final String expected = "{\"description\":\"foo\"}],\"nic\":[{\"id\":\"1\"}]}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanAccesskeyFromJsonObjectAtEnd() { - String input = "{\"foo\":\"bar\",\"accesskey\":\"test\"}"; + final String input = "{\"foo\":\"bar\",\"accesskey\":\"test\"}"; // TODO: It would be nice to clean up the regex in question to not // have to return the trailing comma in the expected string below - String expected = "{\"foo\":\"bar\",}"; - String result = StringUtils.cleanString(input); + final String expected = "{\"foo\":\"bar\",}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanAccesskeyFromJsonObjectInMiddle() { - String input = "{\"foo\":\"bar\",\"accesskey\":\"test\",\"test\":\"blah\"}"; - String expected = "{\"foo\":\"bar\",\"test\":\"blah\"}"; - String result = StringUtils.cleanString(input); + final String input = "{\"foo\":\"bar\",\"accesskey\":\"test\",\"test\":\"blah\"}"; + final String expected = "{\"foo\":\"bar\",\"test\":\"blah\"}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanAccesskeyFromJsonObjectAlone() { - String input = "{\"accesskey\":\"test\"}"; - String expected = "{}"; - String result = StringUtils.cleanString(input); + final String input = "{\"accesskey\":\"test\"}"; + final String expected = "{}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanAccesskeyFromJsonObjectAtStart() { - String input = "{\"accesskey\":\"test\",\"test\":\"blah\"}"; - String expected = "{\"test\":\"blah\"}"; - String result = StringUtils.cleanString(input); + final String input = "{\"accesskey\":\"test\",\"test\":\"blah\"}"; + final String expected = "{\"test\":\"blah\"}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanAccesskeyFromJsonObjectWithMultiplePasswords() { - String input = "{\"description\":\"foo\"}],\"accesskey\":\"bar\",\"nic\":[{\"accesskey\":\"bar2\",\"id\":\"1\"}]}"; - String expected = "{\"description\":\"foo\"}],\"nic\":[{\"id\":\"1\"}]}"; - String result = StringUtils.cleanString(input); + final String input = "{\"description\":\"foo\"}],\"accesskey\":\"bar\",\"nic\":[{\"accesskey\":\"bar2\",\"id\":\"1\"}]}"; + final String expected = "{\"description\":\"foo\"}],\"nic\":[{\"id\":\"1\"}]}"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanAccesskeyFromRequestString() { - String input = "username=foo&accesskey=bar&url=foobar"; - String expected = "username=foo&url=foobar"; - String result = StringUtils.cleanString(input); + final String input = "username=foo&accesskey=bar&url=foobar"; + final String expected = "username=foo&url=foobar"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } @Test public void testCleanSecretkeyFromRequestString() { - String input = "username=foo&secretkey=bar&url=foobar"; - String expected = "username=foo&url=foobar"; - String result = StringUtils.cleanString(input); + final String input = "username=foo&secretkey=bar&url=foobar"; + final String expected = "username=foo&url=foobar"; + final String result = StringUtils.cleanString(input); assertEquals(result, expected); } From 245c976ad03bc7a8b91a44878ddfe8e30c734d5a Mon Sep 17 00:00:00 2001 From: wilderrodrigues Date: Wed, 22 Jul 2015 13:37:43 +0200 Subject: [PATCH 027/314] CLOUDSTACK-8660 - Adding a method to check if UTF-8 is supported - Changing the test to call isUtf8Supported() before checking if the preferred charset is actually UTF-8 Signed-off-by: wilderrodrigues --- utils/src/com/cloud/utils/StringUtils.java | 10 +++++++--- .../test/com/cloud/utils/StringUtilsTest.java | 19 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/utils/src/com/cloud/utils/StringUtils.java b/utils/src/com/cloud/utils/StringUtils.java index d1225c5f2d4..02a616b93a9 100644 --- a/utils/src/com/cloud/utils/StringUtils.java +++ b/utils/src/com/cloud/utils/StringUtils.java @@ -34,11 +34,11 @@ public class StringUtils { private static final char[] hexChar = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; private static Charset preferredACSCharset; + private static final String UTF8 = "UTF-8"; static { - final String preferredCharset = "UTF-8"; - if (Charset.isSupported(preferredCharset)) { - preferredACSCharset = Charset.forName(preferredCharset); + if (isUtf8Supported()) { + preferredACSCharset = Charset.forName(UTF8); } else { preferredACSCharset = Charset.defaultCharset(); } @@ -48,6 +48,10 @@ public class StringUtils { return preferredACSCharset; } + public static boolean isUtf8Supported() { + return Charset.isSupported(UTF8); + } + public static String join(final Iterable iterable, final String delim) { final StringBuilder sb = new StringBuilder(); if (iterable != null) { diff --git a/utils/test/com/cloud/utils/StringUtilsTest.java b/utils/test/com/cloud/utils/StringUtilsTest.java index 7671cffb9fb..a9eeac752a4 100644 --- a/utils/test/com/cloud/utils/StringUtilsTest.java +++ b/utils/test/com/cloud/utils/StringUtilsTest.java @@ -20,24 +20,29 @@ package com.cloud.utils; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; -import junit.framework.Assert; - import org.junit.Test; public class StringUtilsTest { + @Test - public void testGetPrefferedCharset() { - assertEquals(StringUtils.getPreferredCharset(), Charset.forName("UTF-8")); + public void testGetPreferredCharset() { + final boolean ifUtf8Supported = StringUtils.isUtf8Supported(); + if (ifUtf8Supported) { + assertEquals(StringUtils.getPreferredCharset(), Charset.forName("UTF-8")); + } else { + assertNotEquals(StringUtils.getPreferredCharset(), Charset.forName("UTF-8")); + } } @Test public void testGetDefaultCharset() { - assertEquals(StringUtils.getPreferredCharset(),Charset.defaultCharset()); + assertEquals(StringUtils.getPreferredCharset(), Charset.defaultCharset()); } @Test @@ -238,7 +243,7 @@ public class StringUtilsTest { @Test public void listToCsvTags() { - Assert.assertEquals("a,b,c", StringUtils.listToCsvTags(Arrays.asList("a","b", "c"))); - Assert.assertEquals("", StringUtils.listToCsvTags(new ArrayList())); + assertEquals("a,b,c", StringUtils.listToCsvTags(Arrays.asList("a","b", "c"))); + assertEquals("", StringUtils.listToCsvTags(new ArrayList())); } } From d632d6312b99f8dbd75f8185a4c1e54c7f3e8d05 Mon Sep 17 00:00:00 2001 From: wilderrodrigues Date: Wed, 22 Jul 2015 16:27:56 +0200 Subject: [PATCH 028/314] CLOUDSTACK-8660 - Adding new StringUtils.getDefaultCharset() in order to wrap the Charset equivalet method. - This test was added in order to cover the new StringUtils.getDefaultCharset(). - One cannot be sure that StringUtils.getPreferredCharset() will always be equals to Charset.defaultCharset() Signed-off-by: wilderrodrigues This closes #616 --- utils/src/com/cloud/utils/StringUtils.java | 4 ++++ utils/test/com/cloud/utils/StringUtilsTest.java | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/utils/src/com/cloud/utils/StringUtils.java b/utils/src/com/cloud/utils/StringUtils.java index 02a616b93a9..76f7806befc 100644 --- a/utils/src/com/cloud/utils/StringUtils.java +++ b/utils/src/com/cloud/utils/StringUtils.java @@ -52,6 +52,10 @@ public class StringUtils { return Charset.isSupported(UTF8); } + public static Charset getDefaultCharset() { + return Charset.defaultCharset(); + } + public static String join(final Iterable iterable, final String delim) { final StringBuilder sb = new StringBuilder(); if (iterable != null) { diff --git a/utils/test/com/cloud/utils/StringUtilsTest.java b/utils/test/com/cloud/utils/StringUtilsTest.java index a9eeac752a4..3619ede84b2 100644 --- a/utils/test/com/cloud/utils/StringUtilsTest.java +++ b/utils/test/com/cloud/utils/StringUtilsTest.java @@ -42,7 +42,11 @@ public class StringUtilsTest { @Test public void testGetDefaultCharset() { - assertEquals(StringUtils.getPreferredCharset(), Charset.defaultCharset()); + // Is this test irrelevant? Is wrapping the Charset.defaultCharset() too much? + // This test was added in order to cover the new StringUtils.getDefaultCharset(). + // One cannot be sure that StringUtils.getPreferredCharset() will always be + // equals to Charset.defaultCharset() + assertEquals(StringUtils.getDefaultCharset(), Charset.defaultCharset()); } @Test From 2e79c628e052ebdaf782458cfe4c4ef6e95545c6 Mon Sep 17 00:00:00 2001 From: Boris Schrijver Date: Wed, 22 Jul 2015 12:50:54 +0200 Subject: [PATCH 029/314] CLOUDSTACK-8649: Fixed unnecessary double url decoding in registerSSHKeyPair. Signed-off-by: wilderrodrigues This closes #615 --- server/src/com/cloud/server/ManagementServerImpl.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 781c915b123..bd2afa326db 100644 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -16,9 +16,7 @@ // under the License. package com.cloud.server; -import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; -import java.net.URLDecoder; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -3625,11 +3623,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe final String name = cmd.getName(); String key = cmd.getPublicKey(); - try { - key = URLDecoder.decode(key, "UTF-8"); - } catch (final UnsupportedEncodingException e) { - s_logger.warn("key decoding tried invain: " + e.getLocalizedMessage()); - } + final String publicKey = getPublicKeyFromKeyKeyMaterial(key); final String fingerprint = getFingerprint(publicKey); From 4705d75d4a7fd58def45ec3e70ed5118e0334cf7 Mon Sep 17 00:00:00 2001 From: Frank Louwers Date: Fri, 17 Jul 2015 15:33:07 +0200 Subject: [PATCH 030/314] CLOUDSTACK-8650: Fix securitygroups ingress FW for protocol any and 0.0.0.0/0 Change way 0.0.0.0/0 + all is handles, as per feedback in Slack channel Signed-off-by: wilderrodrigues --- scripts/vm/network/security_group.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py index 7279518c43d..c4a67536942 100755 --- a/scripts/vm/network/security_group.py +++ b/scripts/vm/network/security_group.py @@ -860,8 +860,10 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif for ip in ips: execute("iptables -I " + vmchain + " -p icmp --icmp-type " + range + " " + direction + " " + ip + " -j "+ action) - if allow_any and protocol != 'all': - if protocol != 'icmp': + if allow_any + if protocol == 'all': + execute("iptables -I " + vmchain + " -m state --state NEW " + direction + " 0.0.0.0/0 -j "+action) + elif protocol != 'icmp': execute("iptables -I " + vmchain + " -p " + protocol + " -m " + protocol + " --dport " + range + " -m state --state NEW -j "+ action) else: range = start + "/" + end From d8f37c5e173f90a35864ca5186ed045e9f0adaff Mon Sep 17 00:00:00 2001 From: Frank Louwers Date: Wed, 22 Jul 2015 17:15:32 +0200 Subject: [PATCH 031/314] Sorry about the typo Signed-off-by: wilderrodrigues This closes #601 --- scripts/vm/network/security_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py index c4a67536942..31984d2e87e 100755 --- a/scripts/vm/network/security_group.py +++ b/scripts/vm/network/security_group.py @@ -860,7 +860,7 @@ def add_network_rules(vm_name, vm_id, vm_ip, signature, seqno, vmMac, rules, vif for ip in ips: execute("iptables -I " + vmchain + " -p icmp --icmp-type " + range + " " + direction + " " + ip + " -j "+ action) - if allow_any + if allow_any: if protocol == 'all': execute("iptables -I " + vmchain + " -m state --state NEW " + direction + " 0.0.0.0/0 -j "+action) elif protocol != 'icmp': From 96cf0325e2b9542c18fde6f2c4f7191e6406cdb6 Mon Sep 17 00:00:00 2001 From: Rajani Karuturi Date: Thu, 23 Jul 2015 15:21:59 +0530 Subject: [PATCH 032/314] CLOUDSTACK-8596 addressed review comments In LdapUserManagerFactory moved the beans to a map used a Enum for LdapProvider and made the corresponding changes in LdapConfiguration and the callers. --- .../ldap/ADLdapUserManagerImpl.java | 15 ++++---- .../cloudstack/ldap/LdapConfiguration.java | 11 +++++- .../cloudstack/ldap/LdapUserManager.java | 4 ++ .../ldap/LdapUserManagerFactory.java | 37 ++++++++++++------- .../ldap/LdapConfigurationSpec.groovy | 6 ++- .../ldap/LdapUserManagerFactorySpec.groovy | 5 ++- 6 files changed, 52 insertions(+), 26 deletions(-) diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java index e5e20c54fb2..50f1fa00092 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/ADLdapUserManagerImpl.java @@ -32,21 +32,22 @@ import org.apache.log4j.Logger; public class ADLdapUserManagerImpl extends OpenLdapUserManagerImpl implements LdapUserManager { public static final Logger s_logger = Logger.getLogger(ADLdapUserManagerImpl.class.getName()); + private static final String MICROSOFT_AD_NESTED_MEMBERS_FILTER = "memberOf:1.2.840.113556.1.4.1941"; @Override public List getUsersInGroup(String groupName, LdapContext context) throws NamingException { - final SearchControls searchControls = new SearchControls(); - searchControls.setSearchScope(_ldapConfiguration.getScope()); - searchControls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); + if (StringUtils.isBlank(groupName)) { + throw new IllegalArgumentException("ldap group name cannot be blank"); + } String basedn = _ldapConfiguration.getBaseDn(); if (StringUtils.isBlank(basedn)) { throw new IllegalArgumentException("ldap basedn is not configured"); } - if (StringUtils.isBlank(groupName)) { - throw new IllegalArgumentException("ldap group name cannot be blank"); - } + final SearchControls searchControls = new SearchControls(); + searchControls.setSearchScope(_ldapConfiguration.getScope()); + searchControls.setReturningAttributes(_ldapConfiguration.getReturnAttributes()); NamingEnumeration results = context.search(basedn, generateADGroupSearchFilter(groupName), searchControls); final List users = new ArrayList(); @@ -65,7 +66,7 @@ public class ADLdapUserManagerImpl extends OpenLdapUserManagerImpl implements Ld final StringBuilder memberOfFilter = new StringBuilder(); String groupCnName = _ldapConfiguration.getCommonNameAttribute() + "=" +groupName + "," + _ldapConfiguration.getBaseDn(); - memberOfFilter.append("(memberOf:1.2.840.113556.1.4.1941:="); + memberOfFilter.append("(" + MICROSOFT_AD_NESTED_MEMBERS_FILTER + ":="); memberOfFilter.append(groupCnName); memberOfFilter.append(")"); diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java index f247f40001e..a64899af296 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapConfiguration.java @@ -167,7 +167,16 @@ public class LdapConfiguration implements Configurable{ return ldapPageSize.value(); } - public String getLdapProvider() { return ldapProvider.value();} + public LdapUserManager.Provider getLdapProvider() { + LdapUserManager.Provider provider; + try { + provider = LdapUserManager.Provider.valueOf(ldapProvider.value().toUpperCase()); + } catch (IllegalArgumentException ex) { + //openldap is the default + provider = LdapUserManager.Provider.OPENLDAP; + } + return provider; + } @Override public String getConfigComponentName() { diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java index 28fc74e947b..c1bfe742616 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManager.java @@ -26,6 +26,10 @@ import javax.naming.ldap.LdapContext; public interface LdapUserManager { + public enum Provider { + MICROSOFTAD, OPENLDAP; + } + public LdapUser getUser(final String username, final LdapContext context) throws NamingException, IOException; public List getUsers(final LdapContext context) throws NamingException, IOException; diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java index 35652fb8f30..b7414c7c250 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java @@ -24,28 +24,37 @@ import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import java.util.HashMap; +import java.util.Map; + public class LdapUserManagerFactory implements ApplicationContextAware { + + public static final Logger s_logger = Logger.getLogger(LdapUserManagerFactory.class.getName()); - private static LdapUserManager adUserManager; - private static LdapUserManager openLdapUserManager; + private static Map ldapUserManagerMap = new HashMap<>(); static ApplicationContext applicationCtx; - public LdapUserManager getInstance(String id) { - if ("microsoftad".equalsIgnoreCase(id)) { - if (adUserManager == null) { - adUserManager = new ADLdapUserManagerImpl(); - applicationCtx.getAutowireCapableBeanFactory().autowireBeanProperties(adUserManager, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + public LdapUserManager getInstance(LdapUserManager.Provider provider) { + LdapUserManager ldapUserManager; + if (provider == LdapUserManager.Provider.MICROSOFTAD) { + ldapUserManager = ldapUserManagerMap.get(LdapUserManager.Provider.MICROSOFTAD); + if (ldapUserManager == null) { + ldapUserManager = new ADLdapUserManagerImpl(); + applicationCtx.getAutowireCapableBeanFactory().autowireBeanProperties(ldapUserManager, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + ldapUserManagerMap.put(LdapUserManager.Provider.MICROSOFTAD, ldapUserManager); + } + } else { + //defaults to opendldap + ldapUserManager = ldapUserManagerMap.get(LdapUserManager.Provider.OPENLDAP); + if (ldapUserManager == null) { + ldapUserManager = new OpenLdapUserManagerImpl(); + applicationCtx.getAutowireCapableBeanFactory().autowireBeanProperties(ldapUserManager, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); + ldapUserManagerMap.put(LdapUserManager.Provider.OPENLDAP, ldapUserManager); } - return adUserManager; } - //defaults to opendldap - if (openLdapUserManager == null) { - openLdapUserManager = new OpenLdapUserManagerImpl(); - applicationCtx.getAutowireCapableBeanFactory().autowireBeanProperties(openLdapUserManager, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true); - } - return openLdapUserManager; + return ldapUserManager; } @Override diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy index a4cf3c2878b..4f93adff435 100644 --- a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapConfigurationSpec.groovy @@ -25,6 +25,7 @@ import org.apache.cloudstack.framework.config.impl.ConfigurationVO import org.apache.cloudstack.ldap.LdapConfiguration import org.apache.cloudstack.ldap.LdapConfigurationVO import org.apache.cloudstack.ldap.LdapManager +import org.apache.cloudstack.ldap.LdapUserManager import org.apache.cloudstack.ldap.dao.LdapConfigurationDao import org.apache.cxf.common.util.StringUtils @@ -295,13 +296,14 @@ class LdapConfigurationSpec extends spock.lang.Specification { def ldapConfigurationDao = Mock(LdapConfigurationDao) LdapConfiguration ldapConfiguration = new LdapConfiguration(configDao, ldapConfigurationDao) - def expected = provider == null ? "openldap" : provider //"openldap" is the default value + def expected = provider.equalsIgnoreCase("microsoftad") ? LdapUserManager.Provider.MICROSOFTAD : LdapUserManager.Provider.OPENLDAP //"openldap" is the default value def result = ldapConfiguration.getLdapProvider() expect: + println "asserting for provider configuration: " + provider result == expected where: - provider << ["openldap", "microsoftad", null, "xyz"] + provider << ["openldap", "microsoftad", "", " ", "xyz", "MicrosoftAd", "OpenLdap", "MicrosoftAD"] } } diff --git a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy index 7615f9d5305..ca423d3e630 100644 --- a/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy +++ b/plugins/user-authenticators/ldap/test/groovy/org/apache/cloudstack/ldap/LdapUserManagerFactorySpec.groovy @@ -19,6 +19,7 @@ package groovy.org.apache.cloudstack.ldap import org.apache.cloudstack.ldap.ADLdapUserManagerImpl +import org.apache.cloudstack.ldap.LdapUserManager import org.apache.cloudstack.ldap.LdapUserManagerFactory import org.apache.cloudstack.ldap.OpenLdapUserManagerImpl import org.springframework.beans.factory.config.AutowireCapableBeanFactory @@ -42,7 +43,7 @@ class LdapUserManagerFactorySpec extends spock.lang.Specification { def result = ldapUserManagerFactory.getInstance(id); def expected; - if(id == "microsoftad") { + if(id == LdapUserManager.Provider.MICROSOFTAD) { expected = ADLdapUserManagerImpl.class; } else { expected = OpenLdapUserManagerImpl.class; @@ -51,6 +52,6 @@ class LdapUserManagerFactorySpec extends spock.lang.Specification { expect: assert result.class.is(expected) where: - id << ["openldap", "microsoftad", null, "xyz"] + id << [LdapUserManager.Provider.MICROSOFTAD, LdapUserManager.Provider.OPENLDAP, null] } } From 1f09b8c3bfdfee559d1735c8796daae16bf19e74 Mon Sep 17 00:00:00 2001 From: Maneesha P Date: Thu, 23 Jul 2015 00:45:00 +0530 Subject: [PATCH 033/314] Fixed Coverity issue "Dereference null return value" added a not null check and a CloudRuntimeException in case of null Signed-off-by: Rajani Karuturi This closes #617 --- .../wrapper/LibvirtBackupSnapshotCommandWrapper.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java index 25da0468dea..ad33945498a 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtBackupSnapshotCommandWrapper.java @@ -171,7 +171,11 @@ public final class LibvirtBackupSnapshotCommandWrapper extends CommandWrapper Date: Wed, 15 Jul 2015 11:04:32 +0200 Subject: [PATCH 034/314] CLOUDSTACK-8580 Users are now able to view, expunge and recover their vm's themselves. Two configuration options are added to allow this behaviour on a global or per account scale. Configuration options default to false. Signed-off-by: wilderrodrigues This closes #593 --- .../api/command/user/vm/DestroyVMCmd.java | 4 ++-- .../apache/cloudstack/query/QueryService.java | 5 +++++ client/tomcatconf/commands.properties.in | 4 ++-- .../com/cloud/api/query/QueryManagerImpl.java | 17 ++++++++++++++--- server/src/com/cloud/vm/UserVmManager.java | 3 +++ .../src/com/cloud/vm/UserVmManagerImpl.java | 19 +++++++++++++------ 6 files changed, 39 insertions(+), 13 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index 3de0e4f72d7..f23e03a1437 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -40,7 +40,7 @@ import com.cloud.user.Account; import com.cloud.uservm.UserVm; import com.cloud.vm.VirtualMachine; -@APICommand(name = "destroyVirtualMachine", description = "Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject = UserVmResponse.class, responseView = ResponseView.Restricted, entityType = {VirtualMachine.class}, +@APICommand(name = "destroyVirtualMachine", description = "Destroys a virtual machine.", responseObject = UserVmResponse.class, responseView = ResponseView.Restricted, entityType = {VirtualMachine.class}, requestHasSensitiveInfo = false, responseHasSensitiveInfo = true) public class DestroyVMCmd extends BaseAsyncCmd { @@ -59,7 +59,7 @@ public class DestroyVMCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.EXPUNGE, type = CommandType.BOOLEAN, - description = "If true is passed, the vm is expunged immediately. False by default. Parameter can be passed to the call by ROOT/Domain admin only", + description = "If true is passed, the vm is expunged immediately. False by default.", since = "4.2.1") private Boolean expunge; diff --git a/api/src/org/apache/cloudstack/query/QueryService.java b/api/src/org/apache/cloudstack/query/QueryService.java index 0cf05a643f1..1a5ac11b299 100644 --- a/api/src/org/apache/cloudstack/query/QueryService.java +++ b/api/src/org/apache/cloudstack/query/QueryService.java @@ -71,6 +71,7 @@ import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.cloudstack.framework.config.ConfigKey; import com.cloud.exception.PermissionDeniedException; @@ -80,6 +81,10 @@ import com.cloud.exception.PermissionDeniedException; */ public interface QueryService { + // Config keys + static final ConfigKey AllowUserViewDestroyedVM = new ConfigKey("Advanced", Boolean.class, "allow.user.view.destroyed.vm", "false", + "Determines whether users can view their destroyed or expunging vm ", true, ConfigKey.Scope.Account); + ListResponse searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException; ListResponse searchForEvents(ListEventsCmd cmd); diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 29752c62995..c32ecc4bdfb 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -82,8 +82,8 @@ scaleVirtualMachine=15 assignVirtualMachine=7 migrateVirtualMachine=1 migrateVirtualMachineWithVolume=1 -recoverVirtualMachine=7 -expungeVirtualMachine=7 +recoverVirtualMachine=15 +expungeVirtualMachine=15 getVirtualMachineUserData=15 #### snapshot commands diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index 8c304b99347..6994b27327b 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -103,6 +103,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreCapabilities; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState; +import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.query.QueryService; import org.apache.log4j.Logger; @@ -223,7 +225,7 @@ import com.cloud.vm.dao.UserVmDetailsDao; @Component @Local(value = {QueryService.class}) -public class QueryManagerImpl extends ManagerBase implements QueryService { +public class QueryManagerImpl extends ManagerBase implements QueryService, Configurable { public static final Logger s_logger = Logger.getLogger(QueryManagerImpl.class); @@ -979,8 +981,8 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { sc.setParameters("hypervisorType", hypervisor); } - // Don't show Destroyed and Expunging vms to the end user - if (!isAdmin) { + // Don't show Destroyed and Expunging vms to the end user if the AllowUserViewDestroyedVM flag is not set. + if (!isAdmin && !AllowUserViewDestroyedVM.valueIn(caller.getAccountId())) { sc.setParameters("stateNIN", "Destroyed", "Expunging"); } @@ -3685,4 +3687,13 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { return resourceDetailResponse; } + @Override + public String getConfigComponentName() { + return QueryService.class.getSimpleName(); + } + + @Override + public ConfigKey[] getConfigKeys() { + return new ConfigKey[] {AllowUserViewDestroyedVM}; + } } diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java index 324547f47ea..5d9a6614f2c 100644 --- a/server/src/com/cloud/vm/UserVmManager.java +++ b/server/src/com/cloud/vm/UserVmManager.java @@ -42,8 +42,11 @@ import com.cloud.utils.Pair; */ public interface UserVmManager extends UserVmService { static final String EnableDynamicallyScaleVmCK = "enable.dynamic.scale.vm"; + static final String AllowUserExpungeRecoverVmCK ="allow.user.expunge.recover.vm"; static final ConfigKey EnableDynamicallyScaleVm = new ConfigKey("Advanced", Boolean.class, EnableDynamicallyScaleVmCK, "false", "Enables/Disables dynamically scaling a vm", true, ConfigKey.Scope.Zone); + static final ConfigKey AllowUserExpungeRecoverVm = new ConfigKey("Advanced", Boolean.class, AllowUserExpungeRecoverVmCK, "false", + "Determines whether users can expunge or recover their vm", true, ConfigKey.Scope.Account); static final int MAX_USER_DATA_LENGTH_BYTES = 2048; diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index b9c5350f236..a3f4b82c77d 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1705,6 +1705,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir final Long vmId = cmd.getId(); Account caller = CallContext.current().getCallingAccount(); + final Long userId = caller.getAccountId(); // Verify input parameters final UserVmVO vm = _vmDao.findById(vmId); @@ -1713,8 +1714,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir throw new InvalidParameterValueException("unable to find a virtual machine with id " + vmId); } - // check permissions - _accountMgr.checkAccess(caller, null, true, vm); + // When trying to expunge, permission is denied when the caller is not an admin and the AllowUserExpungeRecoverVm is false for the caller. + if (!_accountMgr.isAdmin(userId) && !AllowUserExpungeRecoverVm.valueIn(userId)) { + throw new PermissionDeniedException("Recovering a vm can only be done by an Admin. Or when the allow.user.expunge.recover.vm key is set."); + } if (vm.getRemoved() != null) { if (s_logger.isDebugEnabled()) { @@ -2404,8 +2407,9 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir long vmId = cmd.getId(); boolean expunge = cmd.getExpunge(); - if (!_accountMgr.isAdmin(ctx.getCallingAccount().getId()) && expunge) { - throw new PermissionDeniedException("Parameter " + ApiConstants.EXPUNGE + " can be passed by Admin only"); + // When trying to expunge, permission is denied when the caller is not an admin and the AllowUserExpungeRecoverVm is false for the caller. + if (expunge && !_accountMgr.isAdmin(ctx.getCallingAccount().getId()) && !AllowUserExpungeRecoverVm.valueIn(cmd.getEntityOwnerId())) { + throw new PermissionDeniedException("Parameter " + ApiConstants.EXPUNGE + " can be passed by Admin only. Or when the allow.user.expunge.recover.vm key is set."); } UserVm destroyedVm = destroyVm(vmId); @@ -4072,7 +4076,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir throw ex; } - _accountMgr.checkAccess(caller, null, true, vm); + // When trying to expunge, permission is denied when the caller is not an admin and the AllowUserExpungeRecoverVm is false for the caller. + if (!_accountMgr.isAdmin(userId) && !AllowUserExpungeRecoverVm.valueIn(userId)) { + throw new PermissionDeniedException("Expunging a vm can only be done by an Admin. Or when the allow.user.expunge.recover.vm key is set."); + } boolean status; @@ -5292,7 +5299,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir @Override public ConfigKey[] getConfigKeys() { - return new ConfigKey[] {EnableDynamicallyScaleVm, VmIpFetchWaitInterval, VmIpFetchTrialMax, VmIpFetchThreadPoolMax}; + return new ConfigKey[] {EnableDynamicallyScaleVm, AllowUserExpungeRecoverVm, VmIpFetchWaitInterval, VmIpFetchTrialMax, VmIpFetchThreadPoolMax}; } @Override From 090db05821a100ead24dee90658d5b0a863a8682 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Thu, 23 Jul 2015 17:57:51 +0530 Subject: [PATCH 035/314] CLOUDSTACK-8666: Put host in Alert state only after alert.wait timeout Instead of putting the host to Alert state immediately, the investigators should be allowed to run for some time based on alert.wait global config. At the end of this interval if the host state still cannot be determined then put the host in Alert. Also updated some of the log messages. This closes #621 --- .../cloud/agent/manager/AgentManagerImpl.java | 32 +++++++++++-------- .../cloud/ha/HighAvailabilityManagerImpl.java | 2 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java index 64aaf48ae87..a38fd0881c2 100644 --- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -824,25 +824,30 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl /* OK, we are going to the bad status, let's see what happened */ s_logger.info("Investigating why host " + hostId + " has disconnected with event " + event); - final Status determinedState = investigate(attache); + Status determinedState = investigate(attache); // if state cannot be determined do nothing and bail out if (determinedState == null) { - s_logger.warn("Agent state cannot be determined, do nothing"); - return false; + if (((System.currentTimeMillis() >> 10) - host.getLastPinged()) > AlertWait.value()) { + s_logger.warn("Agent " + hostId + " state cannot be determined for more than " + AlertWait + "(" + AlertWait.value() + ") seconds, will go to Alert state"); + determinedState = Status.Alert; + } else { + s_logger.warn("Agent " + hostId + " state cannot be determined, do nothing"); + return false; + } } final Status currentStatus = host.getStatus(); - s_logger.info("The state determined is " + determinedState); + s_logger.info("The agent " + hostId + " state determined is " + determinedState); if (determinedState == Status.Down) { - s_logger.error("Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs"); + String message = "Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs"; + s_logger.error(message); if (host.getType() != Host.Type.SecondaryStorage && host.getType() != Host.Type.ConsoleProxy) { - _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host disconnected, " + host.getId(), - "Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs"); + _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host down, " + host.getId(), message); } event = Status.Event.HostDown; } else if (determinedState == Status.Up) { - /* Got ping response from host, bring it back*/ + /* Got ping response from host, bring it back */ s_logger.info("Agent is determined to be up and running"); agentStatusTransitTo(host, Status.Event.Ping, _nodeId); return false; @@ -850,10 +855,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl s_logger.warn("Agent is disconnected but the host is still up: " + host.getId() + "-" + host.getName()); if (currentStatus == Status.Disconnected) { if ((System.currentTimeMillis() >> 10) - host.getLastPinged() > AlertWait.value()) { - s_logger.warn("Host " + host.getId() + " has been disconnected pass the time it should be disconnected."); + s_logger.warn("Host " + host.getId() + " has been disconnected past the wait time it should be disconnected."); event = Status.Event.WaitedTooLong; } else { - s_logger.debug("Host has been determined to be disconnected but it hasn't passed the wait time yet."); + s_logger.debug("Host " + host.getId() + " has been determined to be disconnected but it hasn't passed the wait time yet."); return false; } } else if (currentStatus == Status.Up) { @@ -862,7 +867,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName(); if (host.getType() != Host.Type.SecondaryStorage && host.getType() != Host.Type.ConsoleProxy) { _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host disconnected, " + hostDesc, - "If the agent for host [" + hostDesc + "] is not restarted within " + AlertWait + " seconds, HA will begin on the VMs"); + "If the agent for host [" + hostDesc + "] is not restarted within " + AlertWait + " seconds, host will go to Alert state"); } event = Status.Event.AgentDisconnected; } @@ -872,11 +877,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl final HostPodVO podVO = _podDao.findById(host.getPodId()); final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName(); _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host in ALERT state, " + hostDesc, - "In availability zone " + host.getDataCenterId() + ", " + host.getId() + "-" + host.getName() - + " disconnect due to event " + event + ", ms can't determine the host status" ); + "In availability zone " + host.getDataCenterId() + ", host is in alert state: " + host.getId() + "-" + host.getName()); } } else { - s_logger.debug("The next status of Agent " + host.getId() + " is not Alert, no need to investigate what happened"); + s_logger.debug("The next status of agent " + host.getId() + " is not Alert, no need to investigate what happened"); } } handleDisconnectWithoutInvestigation(attache, event, true, true); diff --git a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java index 1ecdfcdc17c..0a179a099e7 100644 --- a/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java +++ b/server/src/com/cloud/ha/HighAvailabilityManagerImpl.java @@ -220,7 +220,7 @@ public class HighAvailabilityManagerImpl extends ManagerBase implements HighAvai } } - return Status.Alert; + return hostState; } @Override From ac9c2a224a78f413945e25fd7cf23364fbef00b5 Mon Sep 17 00:00:00 2001 From: Rajani Karuturi Date: Fri, 24 Jul 2015 14:52:53 +0530 Subject: [PATCH 036/314] fixed finbugs issue due to PR #609 applicationCtx need not be static as the bean is singleton This closes #622 --- .../org/apache/cloudstack/ldap/LdapUserManagerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java index b7414c7c250..f796ce23b4e 100644 --- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java +++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapUserManagerFactory.java @@ -34,7 +34,7 @@ public class LdapUserManagerFactory implements ApplicationContextAware { private static Map ldapUserManagerMap = new HashMap<>(); - static ApplicationContext applicationCtx; + private ApplicationContext applicationCtx; public LdapUserManager getInstance(LdapUserManager.Provider provider) { LdapUserManager ldapUserManager; @@ -46,7 +46,7 @@ public class LdapUserManagerFactory implements ApplicationContextAware { ldapUserManagerMap.put(LdapUserManager.Provider.MICROSOFTAD, ldapUserManager); } } else { - //defaults to opendldap + //defaults to openldap ldapUserManager = ldapUserManagerMap.get(LdapUserManager.Provider.OPENLDAP); if (ldapUserManager == null) { ldapUserManager = new OpenLdapUserManagerImpl(); From 554f5f9fbbedaeb8c14519d423c042375002d976 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Fri, 17 Jul 2015 15:16:35 +0200 Subject: [PATCH 037/314] CLOUDSTACK-8648: Do not configure the ImageFormat Processor when fetching filesize It will throw an exception and that's needed. Also, make the log show about which file we are talking about Signed-off-by: Wido den Hollander Signed-off-by: Pierre-Luc Dion --- .../storage/resource/NfsSecondaryStorageResource.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java index a529b879ff1..5c361edaf67 100644 --- a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java +++ b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java @@ -860,10 +860,9 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S return file.length(); } - processor.configure("template processor", new HashMap()); return processor.getVirtualSize(file); } catch (Exception e) { - s_logger.warn("Failed to get virtual size, returning file size instead:", e); + s_logger.warn("Failed to get virtual size of file " + file.getPath() + ", returning file size instead: ", e); return file.length(); } From 9dbc99c6083ac833045713403f794bf3506065b1 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Thu, 23 Jul 2015 23:39:02 +0200 Subject: [PATCH 038/314] CLOUDSTACK-8648: Pass the proper storage layer when configuring Signed-off-by: Pierre-Luc Dion --- .../storage/resource/NfsSecondaryStorageResource.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java index 5c361edaf67..be5969104fd 100644 --- a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java +++ b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java @@ -860,6 +860,9 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S return file.length(); } + Map params = new HashMap(); + params.put(StorageLayer.InstanceConfigKey, _storage); + processor.configure("template processor", params); return processor.getVirtualSize(file); } catch (Exception e) { s_logger.warn("Failed to get virtual size of file " + file.getPath() + ", returning file size instead: ", e); From f8ef13c5e6fe833c923dbcda9d0e61381ded3de5 Mon Sep 17 00:00:00 2001 From: Sudhansu Date: Fri, 13 Mar 2015 17:48:47 +0530 Subject: [PATCH 039/314] BUG-ID: CLOUDSTACK-8483 - Private template not visible in project added new 'projectId' parameter in createTemplate command and based current user, account and projectid decide the owner of the template. Signed-off-by: Pierre-Luc Dion --- .../user/template/CreateTemplateCmd.java | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index 7be7e62ee52..ae9205fc480 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -20,6 +20,14 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.apache.cloudstack.acl.SecurityChecker; +import org.apache.cloudstack.api.response.GuestOSResponse; +import org.apache.cloudstack.api.response.SnapshotResponse; +import org.apache.cloudstack.api.response.TemplateResponse; +import org.apache.cloudstack.api.response.UserVmResponse; +import org.apache.cloudstack.api.response.VolumeResponse; +import org.apache.cloudstack.api.response.ProjectResponse; + import org.apache.log4j.Logger; import org.apache.cloudstack.api.APICommand; @@ -30,11 +38,6 @@ import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ResponseObject.ResponseView; import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.GuestOSResponse; -import org.apache.cloudstack.api.response.SnapshotResponse; -import org.apache.cloudstack.api.response.TemplateResponse; -import org.apache.cloudstack.api.response.UserVmResponse; -import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.context.CallContext; import com.cloud.event.EventTypes; @@ -124,6 +127,9 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { description = "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory") protected Boolean isDynamicallyScalable; + @Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, entityType = ProjectResponse.class, description = "create template for the project") + private Long projectId; + // /////////////////////////////////////////////////// // ///////////////// Accessors /////////////////////// // /////////////////////////////////////////////////// @@ -215,33 +221,39 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { if (volumeId != null) { Volume volume = _entityMgr.findById(Volume.class, volumeId); if (volume != null) { - accountId = volume.getAccountId(); + _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.UseEntry, false, volume); } else { throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); } } else { Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId); if (snapshot != null) { - accountId = snapshot.getAccountId(); + _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.UseEntry, false, snapshot); } else { throw new InvalidParameterValueException("Unable to find snapshot by id=" + snapshotId); } } - Account account = _accountService.getAccount(accountId); - //Can create templates for enabled projects/accounts only - if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { - Project project = _projectService.findByProjectAccountId(accountId); - if (project.getState() != Project.State.Active) { - PermissionDeniedException ex = - new PermissionDeniedException("Can't add resources to the specified project id in state=" + project.getState() + " as it's no longer active"); - ex.addProxyObject(project.getUuid(), "projectId"); + if(projectId != null){ + final Project project = _projectService.getProject(projectId); + if (project != null) { + if (project.getState() == Project.State.Active) { + Account projectAccount= _accountService.getAccount(project.getProjectAccountId()); + _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.UseEntry, false, projectAccount); + return project.getProjectAccountId(); + } else { + final PermissionDeniedException ex = + new PermissionDeniedException("Can't add resources to the project with specified projectId in state=" + project.getState() + + " as it's no longer active"); + ex.addProxyObject(project.getUuid(), "projectId"); + throw ex; + } + } else { + throw new InvalidParameterValueException("Unable to find project by id"); } - } else if (account.getState() == Account.State.disabled) { - throw new PermissionDeniedException("The owner of template is disabled: " + account); } - return accountId; + return CallContext.current().getCallingAccount().getId(); } @Override @@ -267,7 +279,7 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { public void create() throws ResourceAllocationException { VirtualMachineTemplate template = null; //TemplateOwner should be the caller https://issues.citrite.net/browse/CS-17530 - template = _templateService.createPrivateTemplateRecord(this, CallContext.current().getCallingAccount()); + template = _templateService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId())); if (template != null) { setEntityId(template.getId()); setEntityUuid(template.getUuid()); From fd17e47e152f161d4d5a66b102dc8832c8858607 Mon Sep 17 00:00:00 2001 From: Sudhansu Date: Fri, 13 Mar 2015 17:48:47 +0530 Subject: [PATCH 040/314] BUG-ID: CLOUDSTACK-8483 - Private template not visible in project added new 'projectId' parameter in createTemplate command and based current user, account and projectid decide the owner of the template. Signed-off-by: Pierre-Luc Dion --- .../api/command/user/template/CreateTemplateCmd.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index ae9205fc480..c8d6ce338c2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -217,18 +217,18 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { public long getEntityOwnerId() { Long volumeId = getVolumeId(); Long snapshotId = getSnapshotId(); - Long accountId = null; + Account callingAccount = CallContext.current().getCallingAccount(); if (volumeId != null) { Volume volume = _entityMgr.findById(Volume.class, volumeId); if (volume != null) { - _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.UseEntry, false, volume); + _accountService.checkAccess(callingAccount, SecurityChecker.AccessType.UseEntry, false, volume); } else { throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId); } } else { Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId); if (snapshot != null) { - _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.UseEntry, false, snapshot); + _accountService.checkAccess(callingAccount, SecurityChecker.AccessType.UseEntry, false, snapshot); } else { throw new InvalidParameterValueException("Unable to find snapshot by id=" + snapshotId); } @@ -239,7 +239,7 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { if (project != null) { if (project.getState() == Project.State.Active) { Account projectAccount= _accountService.getAccount(project.getProjectAccountId()); - _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.UseEntry, false, projectAccount); + _accountService.checkAccess(callingAccount, SecurityChecker.AccessType.UseEntry, false, projectAccount); return project.getProjectAccountId(); } else { final PermissionDeniedException ex = @@ -253,7 +253,7 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd { } } - return CallContext.current().getCallingAccount().getId(); + return callingAccount.getId(); } @Override From 7f7026ace59d96e7d38270ec4a2fe1a7076d0e87 Mon Sep 17 00:00:00 2001 From: sanjeev Date: Tue, 14 Jul 2015 17:24:58 +0530 Subject: [PATCH 041/314] CLOUDSTACK-8634: Made changes to test_security_group.py test suite to support EIP Signed-off-by: Pierre-Luc Dion --- .../component/test_security_groups.py | 257 +++++++++++------- 1 file changed, 164 insertions(+), 93 deletions(-) diff --git a/test/integration/component/test_security_groups.py b/test/integration/component/test_security_groups.py index f132e3a7ced..f1ac0b6ad58 100755 --- a/test/integration/component/test_security_groups.py +++ b/test/integration/component/test_security_groups.py @@ -27,7 +27,8 @@ from marvin.lib.base import (Account, VirtualMachine, SecurityGroup, Router, - Host) + Host, + Network) from marvin.lib.common import (get_domain, get_zone, get_template, @@ -528,6 +529,12 @@ class TestRevokeIngressRule(cloudstackTestCase): return + def revokeSGRule(self, sgid): + cmd = revokeSecurityGroupIngress.revokeSecurityGroupIngressCmd() + cmd.id = sgid + self.apiclient.revokeSecurityGroupIngress(cmd) + return + @attr(tags=["sg", "eip", "advancedsg"]) def test_01_revokeIngressRule(self): """Test revoke ingress rule @@ -605,11 +612,21 @@ class TestRevokeIngressRule(cloudstackTestCase): self.debug("Revoking ingress rule for sec group ID: %s for ssh access" % security_group.id) - # Revoke Security group to SSH to VM - security_group.revoke( + security_groups = SecurityGroup.list( self.apiclient, - id=ssh_rule["ruleid"] + account=self.account.name, + domainid=self.account.domainid, + listall=True ) + self.assertEqual( + validateList(security_groups)[0], + PASS, + "Security groups list validation failed" + ) + for sg in security_groups: + if not sg.ingressrule: + continue + self.revokeSGRule(sg.ingressrule[0].ruleid) # SSH Attempt to VM should fail with self.assertRaises(Exception): @@ -617,7 +634,8 @@ class TestRevokeIngressRule(cloudstackTestCase): SshClient(self.virtual_machine.ssh_ip, self.virtual_machine.ssh_port, self.virtual_machine.username, - self.virtual_machine.password + self.virtual_machine.password, + retries=5 ) return @@ -1490,32 +1508,45 @@ class TestIngressRule(cloudstackTestCase): security_group.id, self.account.name )) - result = security_group.revoke( + #skip revoke and ping tests in case of EIP/ELB zone + vm_res = VirtualMachine.list( self.apiclient, - id=icmp_rule["ruleid"] + id=self.virtual_machine.id ) - self.debug("Revoke ingress rule result: %s" % result) - time.sleep(self.testdata["sleep"]) - # User should not be able to ping VM - try: - self.debug("Trying to ping VM %s" % self.virtual_machine.ssh_ip) - if platform_type == 'windows': - result = subprocess.call( - ['ping', '-n', '1', self.virtual_machine.ssh_ip]) - else: - result = subprocess.call( - ['ping', '-c 1', self.virtual_machine.ssh_ip]) - - self.debug("Ping result: %s" % result) - # if ping successful, then result should be 0 - self.assertNotEqual( - result, - 0, - "Check if ping is successful or not" + self.assertEqual(validateList(vm_res)[0], PASS, "invalid vm response") + vm_nw = Network.list( + self.apiclient, + id=vm_res[0].nic[0].networkid + ) + self.assertEqual(validateList(vm_nw)[0], PASS, "invalid network response") + vm_nw_off = vm_nw[0].networkofferingname + if vm_nw_off != "DefaultSharedNetscalerEIPandELBNetworkOffering": + result = security_group.revoke( + self.apiclient, + id=icmp_rule["ruleid"] ) - except Exception as e: - self.fail("Ping failed for ingress rule ID: %s, %s" - % (icmp_rule["ruleid"], e)) + self.debug("Revoke ingress rule result: %s" % result) + time.sleep(self.testdata["sleep"]) + # User should not be able to ping VM + try: + self.debug("Trying to ping VM %s" % self.virtual_machine.ssh_ip) + if platform_type == 'windows': + result = subprocess.call( + ['ping', '-n', '1', self.virtual_machine.ssh_ip]) + else: + result = subprocess.call( + ['ping', '-c 1', self.virtual_machine.ssh_ip]) + + self.debug("Ping result: %s" % result) + # if ping successful, then result should be 0 + self.assertNotEqual( + result, + 0, + "Check if ping is successful or not" + ) + except Exception as e: + self.fail("Ping failed for ingress rule ID: %s, %s" + % (icmp_rule["ruleid"], e)) return @attr(tags=["sg", "eip", "advancedsg"]) @@ -1754,6 +1785,12 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): self.debug(response) return + def revokeSGRule(self, sgid): + cmd = revokeSecurityGroupIngress.revokeSecurityGroupIngressCmd() + cmd.id = sgid + self.apiclient.revokeSecurityGroupIngress(cmd) + return + @attr(tags=["sg", "eip", "advancedsg"]) def test_ingress_rules_specific_IP_set(self): """Test ingress rules for specific IP set @@ -1803,18 +1840,20 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, - securitygroupids=[defaultSecurityGroup.id] + securitygroupids=[defaultSecurityGroup.id], + mode=self.testdata['mode'] ) - + self.cleanup.append(virtual_machine_1) virtual_machine_2 = VirtualMachine.create( self.apiclient, self.testdata["virtual_machine"], accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, - securitygroupids=[defaultSecurityGroup.id] + securitygroupids=[defaultSecurityGroup.id], + mode=self.testdata['mode'] ) - + self.cleanup.append(virtual_machine_2) try: SshClient( virtual_machine_1.ssh_ip, @@ -1823,9 +1862,10 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): virtual_machine_1.password ) except Exception as e: + self.revokeSGRule(ingress_rule.ingressrule[0].ruleid) self.fail("SSH Access failed for %s: %s" % (virtual_machine_1.ipaddress, e) - ) + ) try: SshClient( @@ -1835,42 +1875,66 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): virtual_machine_2.password ) except Exception as e: + self.revokeSGRule(ingress_rule.ingressrule[0].ruleid) self.fail("SSH Access failed for %s: %s" % (virtual_machine_2.ipaddress, e) - ) + ) + try: + sshClient = SshClient( + self.mgtSvrDetails["mgtSvrIp"], + 22, + self.mgtSvrDetails["user"], + self.mgtSvrDetails["passwd"] + ) + except Exception as e: + self.revokeSGRule(ingress_rule.ingressrule[0].ruleid) + self.fail("SSH Access failed for %s: %s" % + (self.mgtSvrDetails["mgtSvrIp"], e) + ) + response = sshClient.execute("ssh %s@%s -v" % + (virtual_machine_1.username, + virtual_machine_1.ssh_ip)) + self.debug("Response is :%s" % response) - sshClient = SshClient( - self.mgtSvrDetails["mgtSvrIp"], - 22, - self.mgtSvrDetails["user"], - self.mgtSvrDetails["passwd"] + self.assertTrue("connection established" in str(response).lower(), + "SSH to VM at %s failed from external machine ip %s other than test machine" % + (virtual_machine_1.ssh_ip, + self.mgtSvrDetails["mgtSvrIp"])) + + response = sshClient.execute("ssh %s@%s -v" % + (virtual_machine_2.username, + virtual_machine_2.ssh_ip)) + self.debug("Response is :%s" % response) + + self.assertTrue("connection established" in str(response).lower(), + "SSH to VM at %s failed from external machine ip %s other than test machine" % + (virtual_machine_2.ssh_ip, + self.mgtSvrDetails["mgtSvrIp"])) + virtual_machine_3 = VirtualMachine.create( + self.apiclient, + self.testdata["virtual_machine"], + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering.id, + securitygroupids=[defaultSecurityGroup.id], + mode=self.testdata['mode'] ) - - response = sshClient.execute("ssh %s@%s -v" % - (virtual_machine_1.username, - virtual_machine_1.ssh_ip)) - self.debug("Response is :%s" % response) - - self.assertTrue("connection established" in str(response).lower(), - "SSH to VM at %s failed from external machine ip %s other than test machine" % - (virtual_machine_1.ssh_ip, - self.mgtSvrDetails["mgtSvrIp"])) - - response = sshClient.execute("ssh %s@%s -v" % - (virtual_machine_2.username, - virtual_machine_2.ssh_ip)) - self.debug("Response is :%s" % response) - - self.assertTrue("connection established" in str(response).lower(), - "SSH to VM at %s failed from external machine ip %s other than test machine" % - (virtual_machine_2.ssh_ip, - self.mgtSvrDetails["mgtSvrIp"])) - - - cmd = revokeSecurityGroupIngress.revokeSecurityGroupIngressCmd() - cmd.id = ingress_rule.ingressrule[0].ruleid - self.apiclient.revokeSecurityGroupIngress(cmd) - + self.cleanup.append(virtual_machine_3) + security_groups = SecurityGroup.list( + self.apiclient, + account=self.account.name, + domainid=self.account.domainid, + listall=True + ) + self.assertEqual( + validateList(security_groups)[0], + PASS, + "Security groups list validation failed" + ) + for sg in security_groups: + if not sg.ingressrule: + continue + self.revokeSGRule(sg.ingressrule[0].ruleid) localMachineIpAddress = self.getLocalMachineIpAddress() cidr = localMachineIpAddress + "/32" @@ -1882,16 +1946,6 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): cmd.endport = 22 cmd.cidrlist = cidr ingress_rule = self.apiclient.authorizeSecurityGroupIngress(cmd) - - virtual_machine_3 = VirtualMachine.create( - self.apiclient, - self.testdata["virtual_machine"], - accountid=self.account.name, - domainid=self.account.domainid, - serviceofferingid=self.service_offering.id, - securitygroupids=[defaultSecurityGroup.id] - ) - if self.testdata["configurableData"]["setHostConfigurationForIngressRule"]: self.setHostConfiguration() time.sleep(180) @@ -1905,28 +1959,28 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): virtual_machine_3.ssh_port, virtual_machine_3.username, virtual_machine_3.password - ) + ) except Exception as e: self.fail("SSH Access failed for %s: %s" % (virtual_machine_3.ssh_ip, e) - ) + ) sshClient = SshClient( - self.mgtSvrDetails["mgtSvrIp"], - 22, - self.mgtSvrDetails["user"], - self.mgtSvrDetails["passwd"] + self.mgtSvrDetails["mgtSvrIp"], + 22, + self.mgtSvrDetails["user"], + self.mgtSvrDetails["passwd"] ) response = sshClient.execute("ssh %s@%s -v" % - (virtual_machine_3.username, - virtual_machine_3.ssh_ip)) + (virtual_machine_3.username, + virtual_machine_3.ssh_ip)) self.debug("Response is :%s" % response) self.assertFalse("connection established" in str(response).lower(), - "SSH to VM at %s succeeded from external machine ip %s other than test machine" % - (virtual_machine_3.ssh_ip, - self.mgtSvrDetails["mgtSvrIp"])) + "SSH to VM at %s succeeded from external machine ip %s other than test machine" % + (virtual_machine_3.ssh_ip, + self.mgtSvrDetails["mgtSvrIp"])) return @attr(tags=["sg", "eip", "advancedsg"]) @@ -1978,18 +2032,20 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, - securitygroupids=[defaultSecurityGroup.id] + securitygroupids=[defaultSecurityGroup.id], + mode=self.testdata['mode'] ) - + self.cleanup.append(virtual_machine_1) virtual_machine_2 = VirtualMachine.create( self.apiclient, self.testdata["virtual_machine"], accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, - securitygroupids=[defaultSecurityGroup.id] + securitygroupids=[defaultSecurityGroup.id], + mode=self.testdata['mode'] ) - + self.cleanup.append(virtual_machine_2) try: SshClient( virtual_machine_1.ssh_ip, @@ -2066,9 +2122,10 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, - securitygroupids=[security_group.id] + securitygroupids=[security_group.id], + mode=self.testdata['mode'] ) - + self.cleanup.append(virtual_machine_3) if self.testdata["configurableData"]["setHostConfigurationForIngressRule"]: self.setHostConfiguration() time.sleep(180) @@ -2087,7 +2144,21 @@ class TestIngressRuleSpecificIpSet(cloudstackTestCase): self.fail("SSH Access failed for %s: %s" % (virtual_machine_3.ssh_ip, e) ) - + security_groups = SecurityGroup.list( + self.apiclient, + account=self.account.name, + domainid=self.account.domainid, + listall=True + ) + self.assertEqual( + validateList(security_groups)[0], + PASS, + "Security groups list validation failed" + ) + for sg in security_groups: + if sg.id == security_group.id or not sg.ingressrule: + continue + self.revokeSGRule(sg.ingressrule[0].ruleid) sshClient = SshClient( self.mgtSvrDetails["mgtSvrIp"], 22, From 31b486d38aa300dc39e50ca3294d6d6fa21a08f5 Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Sun, 26 Jul 2015 10:40:50 -0400 Subject: [PATCH 042/314] dummy commit to close PR: close #620, close #606, close #334, close #586 --- CONTRIBUTING.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 95d7a854ee5..c4ad1974eb6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -105,4 +105,3 @@ $ git checkout master $ git branch -D feature_x $ git push origin :feature_x ``` - From 9c9e902e5ca6e5f5ac5fcb186d28963d5571eb3e Mon Sep 17 00:00:00 2001 From: Priti Sarap Date: Thu, 23 Jul 2015 15:08:35 +0530 Subject: [PATCH 043/314] CLOUDSTACK-8664: Verify if queryAsyncJobResult api return jobinstanceid This closes #619 --- .../testpaths/testpath_queryAsyncJobResult.py | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 test/integration/testpaths/testpath_queryAsyncJobResult.py diff --git a/test/integration/testpaths/testpath_queryAsyncJobResult.py b/test/integration/testpaths/testpath_queryAsyncJobResult.py new file mode 100644 index 00000000000..c4249654383 --- /dev/null +++ b/test/integration/testpaths/testpath_queryAsyncJobResult.py @@ -0,0 +1,133 @@ +# 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. +""" Test case to check if queryAsyncJobResult returns jobinstanceid +""" +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase +from marvin.lib.utils import (cleanup_resources) +from marvin.lib.base import (Account, + ServiceOffering, + VirtualMachine, + ) +from marvin.lib.common import (get_domain, + get_zone, + get_template, + ) + +from marvin.cloudstackAPI import queryAsyncJobResult + + +class TestJobinstanceid(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + testClient = super(TestJobinstanceid, cls).getClsTestClient() + cls.apiclient = testClient.getApiClient() + cls.testdata = testClient.getParsedTestDataConfig() + + cls.hypervisor = cls.testClient.getHypervisorInfo() + # Get Zone, Domain and templates + cls.domain = get_domain(cls.apiclient) + cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests()) + + cls.template = get_template( + cls.apiclient, + cls.zone.id, + cls.testdata["ostype"]) + + cls._cleanup = [] + + try: + + # Create an account + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + # Create user api client of the account + cls.userapiclient = testClient.getUserApiClient( + UserName=cls.account.name, + DomainName=cls.account.domain + ) + + # Create Service offering + cls.service_offering = ServiceOffering.create( + cls.apiclient, + cls.testdata["service_offering"], + ) + + cls._cleanup = [ + cls.account, + cls.service_offering, + ] + except Exception as e: + cls.tearDownClass() + raise e + return + + @classmethod + def tearDownClass(cls): + try: + cleanup_resources(cls.apiclient, cls._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + + def setUp(self): + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + self.cleanup = [] + + def tearDown(self): + try: + cleanup_resources(self.apiclient, self.cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return + + @attr(tags=["advanced", "basic"], required_hardware="false") + def test_queryAsyncJobResult_jobinstanceid(self): + """ Test queryAsyncJobResult api return jobinstanceid + + # 1. Deploy a VM + # 2. Call queryAsyncJobResult API with jobid of previous step + # 3. Verify that queryAsyncJobResult returns jobinstanceid + + """ + # Step 1 + + vm = VirtualMachine.create( + self.userapiclient, + self.testdata["small"], + templateid=self.template.id, + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering.id, + zoneid=self.zone.id, + ) + + # Step 2 + cmd = queryAsyncJobResult.queryAsyncJobResultCmd() + cmd.jobid = vm.jobid + result = self.apiclient.queryAsyncJobResult(cmd) + + # Step 3 + self.assertTrue( + "jobinstanceid" in dir(result), + "Check if jobinstanceid is returned by queryAsyncJobResult API") + + return From 66f5163426c5df86414d0b63d526015a683a892a Mon Sep 17 00:00:00 2001 From: Priti Sarap Date: Wed, 22 Jul 2015 12:54:46 +0530 Subject: [PATCH 044/314] CLOUDSTACK-8659: Verify presentation of volume id in description of events table for 'SNAPSHOT.CREATE' type This closes #613 --- .../testpaths/testpath_uuid_event.py | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 test/integration/testpaths/testpath_uuid_event.py diff --git a/test/integration/testpaths/testpath_uuid_event.py b/test/integration/testpaths/testpath_uuid_event.py new file mode 100644 index 00000000000..29ec4497d74 --- /dev/null +++ b/test/integration/testpaths/testpath_uuid_event.py @@ -0,0 +1,196 @@ +# 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. + +""" Test cases to verify presentation of volume id in events table + for 'SNAPSHOT.CREATE' type. +""" + +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase +from marvin.lib.utils import (cleanup_resources, + validateList) +from marvin.lib.base import (Account, + ServiceOffering, + Snapshot, + VirtualMachine, + Configurations + ) +from marvin.lib.common import (get_domain, + get_zone, + get_template, + list_volumes, + ) + +from marvin.codes import PASS + + +class TestVerifyEventsTable(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + testClient = super(TestVerifyEventsTable, cls).getClsTestClient() + cls.apiclient = testClient.getApiClient() + cls.testdata = testClient.getParsedTestDataConfig() + + cls.hypervisor = cls.testClient.getHypervisorInfo() + # Get Zone, Domain and templates + cls.domain = get_domain(cls.apiclient) + cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests()) + + cls.template = get_template( + cls.apiclient, + cls.zone.id, + cls.testdata["ostype"]) + + cls._cleanup = [] + + try: + + cls.unsupportedHypervisor = False + if cls.hypervisor.lower() in ['hyperv', 'lxc', 'kvm']: + if cls.hypervisor.lower() == 'kvm': + configs = Configurations.list( + cls.apiclient, + name='kvm.snapshot.enabled' + ) + + if configs[0].value == "false": + cls.unsupportedHypervisor = True + else: + cls.unsupportedHypervisor = True + + return + # Create an account + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + + # Create user api client of the account + cls.userapiclient = testClient.getUserApiClient( + UserName=cls.account.name, + DomainName=cls.account.domain + ) + # Create Service offering + cls.service_offering = ServiceOffering.create( + cls.apiclient, + cls.testdata["service_offering"], + ) + + cls._cleanup = [ + cls.account, + cls.service_offering, + ] + except Exception as e: + cls.tearDownClass() + raise e + return + + @classmethod + def tearDownClass(cls): + try: + cleanup_resources(cls.apiclient, cls._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + + def setUp(self): + + self.cleanup = [] + if self.unsupportedHypervisor: + self.skipTest( + "snapshots are not supported on %s" % + self.hypervisor.lower()) + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + + def tearDown(self): + try: + cleanup_resources(self.apiclient, self.cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return + + @attr(tags=["advanced", "basic"], required_hardware="false") + def test_01_verify_events_table(self): + """ Test events table + + # 1. Deploy a VM. + # 2. Take VM snapshot. + # 3. Verify that events table records UUID of the volume in descrption + instead of volume ID + """ + # Step 1 + # Create VM + vm = VirtualMachine.create( + self.userapiclient, + self.testdata["small"], + templateid=self.template.id, + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering.id, + zoneid=self.zone.id, + ) + volumes_list = list_volumes( + self.apiclient, + virtualmachineid=vm.id, + type='ROOT', + listall=True + ) + + volume_list_validation = validateList(volumes_list) + self.assertEqual( + volume_list_validation[0], + PASS, + "volume list validation failed due to %s" % + volume_list_validation[2] + ) + root_volume = volumes_list[0] + + # Step 2 + # Create snapshot of root volume + snapshot = Snapshot.create( + self.apiclient, + root_volume.id) + + self.assertNotEqual( + len(snapshot), + 0, + "Check if snapshot gets created properly" + ) + + # Step 3 + qresultset = self.dbclient.execute( + "select description from event where type='SNAPSHOT.CREATE' AND \ + description like '%%%s%%'" % root_volume.id) + + event_validation_result = validateList(qresultset) + + self.assertEqual( + event_validation_result[0], + PASS, + "event list validation failed due to %s" % + event_validation_result[2] + ) + + self.assertNotEqual( + len(qresultset), + 0, + "Check if events table records UUID of the volume" + ) + + return From 488ee88ae8453ad5029758020847aa09f9cd8ebc Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 15:36:56 +0200 Subject: [PATCH 045/314] coverity 1147049: buffered file reader resource guard Signed-off-by: Daan Hoogland --- core/src/com/cloud/storage/template/VmdkProcessor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/com/cloud/storage/template/VmdkProcessor.java b/core/src/com/cloud/storage/template/VmdkProcessor.java index 6903b74a674..929157e5dcb 100644 --- a/core/src/com/cloud/storage/template/VmdkProcessor.java +++ b/core/src/com/cloud/storage/template/VmdkProcessor.java @@ -86,9 +86,10 @@ public class VmdkProcessor extends AdapterBase implements Processor { long virtualSize = 0; String templateFileFullPath = templatePath.endsWith(File.separator) ? templatePath : templatePath + File.separator; templateFileFullPath += templateName.endsWith(ImageFormat.VMDK.getFileExtension()) ? templateName : templateName + "." + ImageFormat.VMDK.getFileExtension(); - try { - FileReader fileReader = new FileReader(templateFileFullPath); - BufferedReader bufferedReader = new BufferedReader(fileReader); + try ( + FileReader fileReader = new FileReader(templateFileFullPath); + BufferedReader bufferedReader = new BufferedReader(fileReader); + ) { Pattern regex = Pattern.compile("(RW|RDONLY|NOACCESS) (\\d+) (FLAT|SPARSE|ZERO|VMFS|VMFSSPARSE|VMFSDRM|VMFSRAW)"); String line = null; while((line = bufferedReader.readLine()) != null) { @@ -99,7 +100,6 @@ public class VmdkProcessor extends AdapterBase implements Processor { break; } } - bufferedReader.close(); } catch(FileNotFoundException ex) { String msg = "Unable to open file '" + templateFileFullPath + "' " + ex.toString(); s_logger.error(msg); From 8b350c37bd7b35234829c4709565eb339d99c2d5 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 15:47:39 +0200 Subject: [PATCH 046/314] coverity 1133705: output writer close Signed-off-by: Daan Hoogland --- server/src/com/cloud/server/ConfigurationServerImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 288eeebc6c6..e7a928acfdb 100644 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -650,11 +650,11 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio } else { // !keystoreFile.exists() and dbExisted // Export keystore to local file byte[] storeBytes = Base64.decodeBase64(dbString); - try { - String tmpKeystorePath = "/tmp/tmpkey"; - FileOutputStream fo = new FileOutputStream(tmpKeystorePath); + String tmpKeystorePath = "/tmp/tmpkey"; + try ( + FileOutputStream fo = new FileOutputStream(tmpKeystorePath); + ) { fo.write(storeBytes); - fo.close(); Script script = new Script(true, "cp", 5000, null); script.add("-f"); script.add(tmpKeystorePath); From 3a4d3716650bd689d92bf170519d2c336e436e28 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 15:56:04 +0200 Subject: [PATCH 047/314] coverity 1147051: trivial db resource leak in endpoint selector should have been nested try catches before try-with-resource beacame available Signed-off-by: Daan Hoogland --- .../endpoint/DefaultEndPointSelector.java | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java index 0778e5427b9..d38aaed80ed 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java +++ b/engine/storage/src/org/apache/cloudstack/storage/endpoint/DefaultEndPointSelector.java @@ -395,30 +395,19 @@ public class DefaultEndPointSelector implements EndPointSelector { sbuilder.append(" ORDER by rand() limit 1"); String sql = sbuilder.toString(); - PreparedStatement pstmt = null; - ResultSet rs = null; HostVO host = null; TransactionLegacy txn = TransactionLegacy.currentTxn(); - try { - pstmt = txn.prepareStatement(sql); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = txn.prepareStatement(sql); + ResultSet rs = pstmt.executeQuery(); + ) { while (rs.next()) { long id = rs.getLong(1); host = hostDao.findById(id); } } catch (SQLException e) { s_logger.warn("can't find endpoint", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } if (host == null) { From 22f194b8888ab1464399b8328e58e7291619c13f Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 17 Jul 2015 16:24:13 +0200 Subject: [PATCH 048/314] coverity 1125362, 1125363: assorted resource leaks Signed-off-by: Daan Hoogland This closes #602 --- .../crypt/EncryptionSecretKeyChecker.java | 42 +++++++------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java b/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java index b28b067b926..65249878bde 100644 --- a/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java +++ b/utils/src/com/cloud/utils/crypt/EncryptionSecretKeyChecker.java @@ -30,7 +30,6 @@ import java.util.Properties; import javax.annotation.PostConstruct; -import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; @@ -83,15 +82,12 @@ public class EncryptionSecretKeyChecker { if(is == null) { //This is means we are not able to load key file from the classpath. throw new CloudRuntimeException(s_keyFile + " File containing secret key not found in the classpath: "); } - BufferedReader in = null; - try { - in = new BufferedReader(new InputStreamReader(is)); + + try (BufferedReader in = new BufferedReader(new InputStreamReader(is));) { secretKey = in.readLine(); //Check for null or empty secret key } catch (IOException e) { throw new CloudRuntimeException("Error while reading secret key from: " + s_keyFile, e); - } finally { - IOUtils.closeQuietly(in); } if (secretKey == null || secretKey.isEmpty()) { @@ -104,30 +100,24 @@ public class EncryptionSecretKeyChecker { throw new CloudRuntimeException("Environment variable " + s_envKey + " is not set or empty"); } } else if (encryptionType.equals("web")) { - ServerSocket serverSocket = null; int port = 8097; - try { - serverSocket = new ServerSocket(port); + try (ServerSocket serverSocket = new ServerSocket(port);) { + s_logger.info("Waiting for admin to send secret key on port " + port); + try ( + Socket clientSocket = serverSocket.accept(); + PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); + BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + ) { + String inputLine; + if ((inputLine = in.readLine()) != null) { + secretKey = inputLine; + } + } catch (IOException e) { + throw new CloudRuntimeException("Accept failed on " + port); + } } catch (IOException ioex) { throw new CloudRuntimeException("Error initializing secret key reciever", ioex); } - s_logger.info("Waiting for admin to send secret key on port " + port); - Socket clientSocket = null; - try { - clientSocket = serverSocket.accept(); - } catch (IOException e) { - throw new CloudRuntimeException("Accept failed on " + port); - } - PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); - BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); - String inputLine; - if ((inputLine = in.readLine()) != null) { - secretKey = inputLine; - } - out.close(); - in.close(); - clientSocket.close(); - serverSocket.close(); } else { throw new CloudRuntimeException("Invalid encryption type: " + encryptionType); } From 6c3c9ea915b486722c6d41491338531254335272 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Mon, 27 Jul 2015 16:14:19 +0530 Subject: [PATCH 049/314] Unit tests for HA manager investigate method. Refer to CLOUDSTACK-8666 for the code chenges --- .../ha/HighAvailabilityManagerImplTest.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/server/test/com/cloud/ha/HighAvailabilityManagerImplTest.java b/server/test/com/cloud/ha/HighAvailabilityManagerImplTest.java index e7bb8a5e681..75a43139d43 100644 --- a/server/test/com/cloud/ha/HighAvailabilityManagerImplTest.java +++ b/server/test/com/cloud/ha/HighAvailabilityManagerImplTest.java @@ -16,8 +16,13 @@ // under the License. package com.cloud.ha; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import javax.inject.Inject; @@ -41,6 +46,7 @@ import com.cloud.dc.dao.HostPodDao; import com.cloud.ha.dao.HighAvailabilityDao; import com.cloud.host.Host; import com.cloud.host.HostVO; +import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.resource.ResourceManager; @@ -127,4 +133,31 @@ public class HighAvailabilityManagerImplTest { Mockito.when(_dcDao.findById(Mockito.anyLong())).thenReturn(Mockito.mock(DataCenterVO.class)); highAvailabilityManager.scheduleRestartForVmsOnHost(hostVO, true); } + + @Test + public void investigateHostStatusSuccess() { + Mockito.when(_hostDao.findById(Mockito.anyLong())).thenReturn(hostVO); + // Set the list of investigators, CheckOnAgentInvestigator suffices for now + Investigator investigator = Mockito.mock(CheckOnAgentInvestigator.class); + List investigators = new ArrayList(); + investigators.add(investigator); + highAvailabilityManager.setInvestigators(investigators); + // Mock isAgentAlive to return host status as Down + Mockito.when(investigator.isAgentAlive(hostVO)).thenReturn(Status.Down); + + assertTrue(highAvailabilityManager.investigate(1l) == Status.Down); + } + + @Test + public void investigateHostStatusFailure() { + Mockito.when(_hostDao.findById(Mockito.anyLong())).thenReturn(hostVO); + // Set the list of investigators, CheckOnAgentInvestigator suffices for now + // Also no need to mock isAgentAlive() as actual implementation returns null + Investigator investigator = Mockito.mock(CheckOnAgentInvestigator.class); + List investigators = new ArrayList(); + investigators.add(investigator); + highAvailabilityManager.setInvestigators(investigators); + + assertNull(highAvailabilityManager.investigate(1l)); + } } From 90137acda2c61dc32d96f4c3e5676a359435ac5c Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Tue, 28 Jul 2015 15:15:41 +0530 Subject: [PATCH 050/314] VR type in shared network is dhcpsrvr. Ips are being removed due to this issue Signed-off-by: wilderrodrigues This closes #627 --- systemvm/patches/debian/config/opt/cloud/bin/merge.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/systemvm/patches/debian/config/opt/cloud/bin/merge.py b/systemvm/patches/debian/config/opt/cloud/bin/merge.py index 4999757fce5..2401ef1f2ef 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/merge.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/merge.py @@ -182,6 +182,9 @@ class updateDataBag: self.processCLItem('2', "public") elif (self.qFile.data['cmd_line']['type'] == "vpcrouter"): self.processCLItem('0', "control") + elif (self.qFile.data['cmd_line']['type'] == "dhcpsrvr"): + self.processCLItem('0', "guest") + self.processCLItem('1', "control") return cs_cmdline.merge(dbag, self.qFile.data) def processCLItem(self, num, nw_type): From 9e4a1a08ffa17bf1f6203cdf72b38ca9f3f03b95 Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Mon, 27 Jul 2015 20:49:40 -0400 Subject: [PATCH 051/314] fix dependency for keepalived from wheezy-backports Signed-off-by: wilderrodrigues --- .../definitions/systemvmtemplate/install_systemvm_packages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/appliance/definitions/systemvmtemplate/install_systemvm_packages.sh b/tools/appliance/definitions/systemvmtemplate/install_systemvm_packages.sh index 203f45a79d2..c8b7b91e7b4 100644 --- a/tools/appliance/definitions/systemvmtemplate/install_systemvm_packages.sh +++ b/tools/appliance/definitions/systemvmtemplate/install_systemvm_packages.sh @@ -65,7 +65,7 @@ function install_packages() { xl2tpd bcrelay ppp ipsec-tools tdb-tools \ openswan=1:2.6.37-3 \ xenstore-utils libxenstore3.0 \ - conntrackd ipvsadm libnetfilter-conntrack3 libnl1 \ + conntrackd ipvsadm libnetfilter-conntrack3 libnl-3-200 libnl-genl-3-200 \ ipcalc \ openjdk-7-jre-headless \ iptables-persistent \ From e2d0199621b94602ad6a759d102156d8d603847f Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Mon, 27 Jul 2015 21:16:30 -0400 Subject: [PATCH 052/314] fix release version automatically updated using pom.xml Signed-off-by: wilderrodrigues --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index b06f929a5a8..b88e245c25c 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,6 @@ #!/usr/bin/make -f # -*- makefile -*- -VERSION := $(shell mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v "\[") +VERSION := $(shell cat pom.xml |sed '22!d'| cut -d'>' -f2 |cut -d'<' -f1) PACKAGE = $(shell dh_listpackages|head -n 1|cut -d '-' -f 1) SYSCONFDIR = "/etc" DESTDIR = "debian/tmp" From c30308dc83cb0b3686e096c05ce5aa21e15b40ec Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Mon, 27 Jul 2015 21:20:48 -0400 Subject: [PATCH 053/314] change last owner of change for pgp signature Signed-off-by: wilderrodrigues This closes #626 --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index d8babba627e..8d5fa5dba89 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,7 +6,7 @@ cloudstack (4.6.0-SNAPSHOT) unstable; urgency=low [ Rafael da Fonseca ] * Switch to dpkg-source 3.0 (native) format - -- Rafael da Fonseca Fri, 22 May 2015 16:03:55 +0200 + -- the Apache CloudStack project Thu, 18 Jun 2015 11:17:09 +0200 cloudstack (4.5.0-snapshot) unstable; urgency=low From 0290f3ed6a695649b5259f2e8a4888455f802cb6 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 28 Jul 2015 16:40:59 +0200 Subject: [PATCH 054/314] coverity 1116610: upgrade cluster overprovisioning details --- .../cloud/upgrade/dao/Upgrade410to420.java | 97 +++++++------------ 1 file changed, 35 insertions(+), 62 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java index 18f84f97b7e..2e1c25f1deb 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java @@ -563,74 +563,47 @@ public class Upgrade410to420 implements DbUpgrade { //update the cluster_details table with default overcommit ratios. private void updateOverCommitRatioClusterDetails(Connection conn) { - PreparedStatement pstmt = null; - PreparedStatement pstmt1 = null; - PreparedStatement pstmt2 = null; - PreparedStatement pstmt3 = null; - ResultSet rs1 = null; - ResultSet rscpu_global = null; - ResultSet rsmem_global = null; - try { - pstmt = conn.prepareStatement("select id, hypervisor_type from `cloud`.`cluster` WHERE removed IS NULL"); - pstmt1 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'cpuOvercommitRatio', ?)"); - pstmt2 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'memoryOvercommitRatio', ?)"); - pstmt3 = conn.prepareStatement("select value from `cloud`.`configuration` where name=?"); - pstmt3.setString(1, "cpu.overprovisioning.factor"); - rscpu_global = pstmt3.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("select id, hypervisor_type from `cloud`.`cluster` WHERE removed IS NULL"); + PreparedStatement pstmt1 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'cpuOvercommitRatio', ?)"); + PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'memoryOvercommitRatio', ?)"); + PreparedStatement pstmt3 = conn.prepareStatement("select value from `cloud`.`configuration` where name=?");) { String global_cpu_overprovisioning_factor = "1"; - if (rscpu_global.next()) - global_cpu_overprovisioning_factor = rscpu_global.getString(1); - pstmt3.setString(1, "mem.overprovisioning.factor"); - rsmem_global = pstmt3.executeQuery(); String global_mem_overprovisioning_factor = "1"; - if (rsmem_global.next()) - global_mem_overprovisioning_factor = rsmem_global.getString(1); - rs1 = pstmt.executeQuery(); - - while (rs1.next()) { - long id = rs1.getLong(1); - String hypervisor_type = rs1.getString(2); - if (HypervisorType.VMware.toString().equalsIgnoreCase(hypervisor_type)) { - pstmt1.setLong(1, id); - pstmt1.setString(2, global_cpu_overprovisioning_factor); - pstmt1.execute(); - pstmt2.setLong(1, id); - pstmt2.setString(2, global_mem_overprovisioning_factor); - pstmt2.execute(); - } else { - //update cluster_details table with the default overcommit ratios. - pstmt1.setLong(1,id); - pstmt1.setString(2,global_cpu_overprovisioning_factor); - pstmt1.execute(); - pstmt2.setLong(1, id); - pstmt2.setString(2, "1"); - pstmt2.execute(); + pstmt3.setString(1, "cpu.overprovisioning.factor"); + try (ResultSet rscpu_global = pstmt3.executeQuery();) { + if (rscpu_global.next()) + global_cpu_overprovisioning_factor = rscpu_global.getString(1); + } + pstmt3.setString(1, "mem.overprovisioning.factor"); + try (ResultSet rsmem_global = pstmt3.executeQuery();) { + if (rsmem_global.next()) + global_mem_overprovisioning_factor = rsmem_global.getString(1); + } + try (ResultSet rs1 = pstmt.executeQuery();) { + while (rs1.next()) { + long id = rs1.getLong(1); + String hypervisor_type = rs1.getString(2); + if (HypervisorType.VMware.toString().equalsIgnoreCase(hypervisor_type)) { + pstmt1.setLong(1, id); + pstmt1.setString(2, global_cpu_overprovisioning_factor); + pstmt1.execute(); + pstmt2.setLong(1, id); + pstmt2.setString(2, global_mem_overprovisioning_factor); + pstmt2.execute(); + } else { + //update cluster_details table with the default overcommit ratios. + pstmt1.setLong(1, id); + pstmt1.setString(2, global_cpu_overprovisioning_factor); + pstmt1.execute(); + pstmt2.setLong(1, id); + pstmt2.setString(2, "1"); + pstmt2.execute(); + } } } } catch (SQLException e) { throw new CloudRuntimeException("Unable to update cluster_details with default overcommit ratios.", e); - } finally { - try { - if (rs1 != null) { - rs1.close(); - } - if (rsmem_global != null) { - rsmem_global.close(); - } - if (rscpu_global != null) { - rscpu_global.close(); - } - if (pstmt != null) { - pstmt.close(); - } - if (pstmt2 != null) { - pstmt2.close(); - } - if (pstmt3 != null) { - pstmt3.close(); - } - } catch (SQLException e) { - } } } From b631da2542e3cdc373f4accbd612e11c6c6b89cc Mon Sep 17 00:00:00 2001 From: Kshitij Kansal Date: Tue, 28 Jul 2015 17:38:47 +0530 Subject: [PATCH 055/314] Coverity Issue: Null Pointer Dereferencing fixed and Test cases added Signed-off-by: wilderrodrigues This closes #628 --- .../cloudstack/saml/SAML2AuthManagerImpl.java | 27 +++++-- .../saml/SAML2AuthManagerImplTest.java | 75 +++++++++++++++++++ 2 files changed, 96 insertions(+), 6 deletions(-) create mode 100755 plugins/user-authenticators/saml2/test/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java index 7232ac9e074..b1449c1a644 100644 --- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManagerImpl.java @@ -104,6 +104,10 @@ public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManage private int _refreshInterval = SAMLPluginConstants.SAML_REFRESH_INTERVAL; private AbstractReloadingMetadataProvider _idpMetaDataProvider; + public String getSAMLIdentityProviderMetadataURL(){ + return SAMLIdentityProviderMetadataURL.value(); + } + @Inject private KeystoreDao _ksDao; @@ -119,12 +123,12 @@ public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManage @Override public boolean start() { if (isSAMLPluginEnabled()) { - setup(); s_logger.info("SAML auth plugin loaded"); + return setup(); } else { s_logger.info("SAML auth plugin not enabled so not loading"); + return super.start(); } - return super.start(); } @Override @@ -135,7 +139,7 @@ public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManage return super.stop(); } - private boolean initSP() { + protected boolean initSP() { KeystoreVO keyStoreVO = _ksDao.findByName(SAMLPluginConstants.SAMLSP_KEYPAIR); if (keyStoreVO == null) { try { @@ -338,6 +342,7 @@ public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManage return; } s_logger.debug("Starting SAML IDP Metadata Refresh Task"); + Map metadataMap = new HashMap(); try { discoverAndAddIdp(_idpMetaDataProvider.getMetadata(), metadataMap); @@ -358,7 +363,7 @@ public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManage } _timer = new Timer(); final HttpClient client = new HttpClient(); - final String idpMetaDataUrl = SAMLIdentityProviderMetadataURL.value(); + final String idpMetaDataUrl = getSAMLIdentityProviderMetadataURL(); if (SAMLTimeout.value() != null && SAMLTimeout.value() > SAMLPluginConstants.SAML_REFRESH_INTERVAL) { _refreshInterval = SAMLTimeout.value(); } @@ -368,21 +373,31 @@ public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManage _idpMetaDataProvider = new HTTPMetadataProvider(_timer, client, idpMetaDataUrl); } else { File metadataFile = PropertiesUtil.findConfigFile(idpMetaDataUrl); - s_logger.debug("Provided Metadata is not a URL, trying to read metadata file from local path: " + metadataFile.getAbsolutePath()); - _idpMetaDataProvider = new FilesystemMetadataProvider(_timer, metadataFile); + if (metadataFile == null) { + s_logger.error("Provided Metadata is not a URL, Unable to locate metadata file from local path: " + idpMetaDataUrl); + return false; + } + else{ + s_logger.debug("Provided Metadata is not a URL, trying to read metadata file from local path: " + metadataFile.getAbsolutePath()); + _idpMetaDataProvider = new FilesystemMetadataProvider(_timer, metadataFile); + } } _idpMetaDataProvider.setRequireValidMetadata(true); _idpMetaDataProvider.setParserPool(new BasicParserPool()); _idpMetaDataProvider.initialize(); _timer.scheduleAtFixedRate(new MetadataRefreshTask(), 0, _refreshInterval * 1000); + } catch (MetadataProviderException e) { s_logger.error("Unable to read SAML2 IDP MetaData URL, error:" + e.getMessage()); s_logger.error("SAML2 Authentication may be unavailable"); + return false; } catch (ConfigurationException | FactoryConfigurationError e) { s_logger.error("OpenSAML bootstrapping failed: error: " + e.getMessage()); + return false; } catch (NullPointerException e) { s_logger.error("Unable to setup SAML Auth Plugin due to NullPointerException" + " please check the SAML global settings: " + e.getMessage()); + return false; } return true; } diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java new file mode 100755 index 00000000000..8e811d0c5b6 --- /dev/null +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/saml/SAML2AuthManagerImplTest.java @@ -0,0 +1,75 @@ +// 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. +package org.apache.cloudstack.saml; + +import com.cloud.user.DomainManager; +import com.cloud.user.dao.UserDao; +import org.apache.cloudstack.framework.security.keystore.KeystoreDao; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.junit.Assert.assertFalse; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; + + +@RunWith(MockitoJUnitRunner.class) +public class SAML2AuthManagerImplTest { + + @Mock + private KeystoreDao _ksDao; + + @Mock + private SAMLTokenDao _samlTokenDao; + + @Mock + private UserDao _userDao; + + @Mock + DomainManager _domainMgr; + + @InjectMocks + @Spy + SAML2AuthManagerImpl saml2AuthManager = new SAML2AuthManagerImpl(); + + @Before + public void setUp() { + doReturn(true).when(saml2AuthManager).isSAMLPluginEnabled(); + doReturn(true).when(saml2AuthManager).initSP(); + } + + @Test + public void testStart() { + when(saml2AuthManager.getSAMLIdentityProviderMetadataURL()).thenReturn("file://does/not/exist"); + boolean started = saml2AuthManager.start(); + assertFalse("saml2authmanager should not start as the file doesnt exist", started); + + when(saml2AuthManager.getSAMLIdentityProviderMetadataURL()).thenReturn(" "); + started = saml2AuthManager.start(); + assertFalse("saml2authmanager should not start as the file doesnt exist", started); + + when(saml2AuthManager.getSAMLIdentityProviderMetadataURL()).thenReturn(""); + started = saml2AuthManager.start(); + assertFalse("saml2authmanager should not start as the file doesnt exist", started); + + } +} From 49cb56bbca4ea40b5da0225bc10adff3499f0024 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 28 Jul 2015 17:12:28 +0200 Subject: [PATCH 056/314] coverity 1116612: update network cidrs firewall rules and acls --- .../cloud/upgrade/dao/Upgrade410to420.java | 247 ++++++++---------- 1 file changed, 116 insertions(+), 131 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java index 2e1c25f1deb..3993ca8dc30 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java @@ -1040,129 +1040,131 @@ public class Upgrade410to420 implements DbUpgrade { s_logger.debug("Updating network ACLs"); - PreparedStatement pstmt = null; - PreparedStatement pstmtDelete = null; - ResultSet rs = null; - ResultSet rsAcls = null; - ResultSet rsCidr = null; - //1,2 are default acl Ids, start acl Ids from 3 long nextAclId = 3; + String sqlSelectNetworkIds = "SELECT id, vpc_id, uuid FROM `cloud`.`networks` where vpc_id is not null and removed is null"; + String sqlSelectFirewallRules = "SELECT id, uuid, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type FROM `cloud`.`firewall_rules` where network_id = ? and purpose = 'NetworkACL'"; + String sqlInsertNetworkAcl = "INSERT INTO `cloud`.`network_acl` (id, uuid, vpc_id, description, name) values (?, UUID(), ? , ?, ?)"; + String sqlSelectFirewallCidrs = "SELECT id, source_cidr FROM `cloud`.`firewall_rules_cidrs` where firewall_rule_id = ?"; + String sqlDeleteFirewallCidr = "DELETE FROM `cloud`.`firewall_rules_cidrs` where id = ?"; + String sqlInsertNetworkAclItem = "INSERT INTO `cloud`.`network_acl_item` (uuid, acl_id, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type, cidr, number, action) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; + String sqlDeleteFirewallRules = "DELETE FROM `cloud`.`firewall_rules` where id = ?"; + String sqlUpdateNetworks = "UPDATE `cloud`.`networks` set network_acl_id=? where id=?"; - try { + try ( + PreparedStatement pstmtSelectNetworkIds = conn.prepareStatement(sqlSelectNetworkIds); + PreparedStatement pstmtUpdate = conn.prepareStatement(sqlUpdateNetworks); + PreparedStatement pstmtInsertNetworkAclItem = conn.prepareStatement(sqlInsertNetworkAclItem); + PreparedStatement pstmtSelectFirewallRules = conn.prepareStatement(sqlSelectFirewallRules); + PreparedStatement pstmtInsertNetworkAcl = conn.prepareStatement(sqlInsertNetworkAcl); + PreparedStatement pstmtSelectFirewallCidrs = conn.prepareStatement(sqlSelectFirewallCidrs); + PreparedStatement pstmtDeleteFirewallCidr = conn.prepareStatement(sqlDeleteFirewallCidr); + PreparedStatement pstmtDeleteFirewallRules = conn.prepareStatement(sqlDeleteFirewallRules); + ResultSet rsNetworkIds = pstmtSelectNetworkIds.executeQuery();) { //Get all VPC tiers - pstmt = conn.prepareStatement("SELECT id, vpc_id, uuid FROM `cloud`.`networks` where vpc_id is not null and removed is null"); - rs = pstmt.executeQuery(); - while (rs.next()) { - Long networkId = rs.getLong(1); + while (rsNetworkIds.next()) { + Long networkId = rsNetworkIds.getLong(1); s_logger.debug("Updating network ACLs for network: " + networkId); - Long vpcId = rs.getLong(2); - String tierUuid = rs.getString(3); - pstmt = - conn.prepareStatement("SELECT id, uuid, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type FROM `cloud`.`firewall_rules` where network_id = ? and purpose = 'NetworkACL'"); - pstmt.setLong(1, networkId); - rsAcls = pstmt.executeQuery(); + Long vpcId = rsNetworkIds.getLong(2); + String tierUuid = rsNetworkIds.getString(3); + pstmtSelectFirewallRules.setLong(1, networkId); boolean hasAcls = false; Long aclId = null; int number = 1; - while (rsAcls.next()) { - if (!hasAcls) { - hasAcls = true; - aclId = nextAclId++; - //create ACL for the tier - s_logger.debug("Creating network ACL for tier: " + tierUuid); - pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_acl` (id, uuid, vpc_id, description, name) values (?, UUID(), ? , ?, ?)"); - pstmt.setLong(1, aclId); - pstmt.setLong(2, vpcId); - pstmt.setString(3, "ACL for tier " + tierUuid); - pstmt.setString(4, "tier_" + tierUuid); - pstmt.executeUpdate(); - } - - Long fwRuleId = rsAcls.getLong(1); - String cidr = null; - //get cidr from firewall_rules_cidrs - pstmt = conn.prepareStatement("SELECT id, source_cidr FROM `cloud`.`firewall_rules_cidrs` where firewall_rule_id = ?"); - pstmt.setLong(1, fwRuleId); - rsCidr = pstmt.executeQuery(); - while (rsCidr.next()) { - Long cidrId = rsCidr.getLong(1); - String sourceCidr = rsCidr.getString(2); - if (cidr == null) { - cidr = sourceCidr; - } else { - cidr += "," + sourceCidr; + try (ResultSet rsAcls = pstmtSelectFirewallRules.executeQuery();) { + while (rsAcls.next()) { + if (!hasAcls) { + hasAcls = true; + aclId = nextAclId++; + //create ACL for the tier + s_logger.debug("Creating network ACL for tier: " + tierUuid); + pstmtInsertNetworkAcl.setLong(1, aclId); + pstmtInsertNetworkAcl.setLong(2, vpcId); + pstmtInsertNetworkAcl.setString(3, "ACL for tier " + tierUuid); + pstmtInsertNetworkAcl.setString(4, "tier_" + tierUuid); + pstmtInsertNetworkAcl.executeUpdate(); } - //Delete cidr entry - pstmtDelete = conn.prepareStatement("DELETE FROM `cloud`.`firewall_rules_cidrs` where id = ?"); - pstmtDelete.setLong(1, cidrId); - pstmtDelete.executeUpdate(); - } - String aclItemUuid = rsAcls.getString(2); - //Move acl to network_acl_item table - s_logger.debug("Moving firewall rule: " + aclItemUuid); - pstmt = - conn.prepareStatement("INSERT INTO `cloud`.`network_acl_item` (uuid, acl_id, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type, cidr, number, action) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"); - //uuid - pstmt.setString(1, aclItemUuid); - //aclId - pstmt.setLong(2, aclId); - //Start port - Integer startPort = rsAcls.getInt(3); - if (rsAcls.wasNull()) { - pstmt.setNull(3, Types.INTEGER); - } else { - pstmt.setLong(3, startPort); - } - //End port - Integer endPort = rsAcls.getInt(4); - if (rsAcls.wasNull()) { - pstmt.setNull(4, Types.INTEGER); - } else { - pstmt.setLong(4, endPort); - } - //State - String state = rsAcls.getString(5); - pstmt.setString(5, state); - //protocol - String protocol = rsAcls.getString(6); - pstmt.setString(6, protocol); - //icmp_code - Integer icmpCode = rsAcls.getInt(7); - if (rsAcls.wasNull()) { - pstmt.setNull(7, Types.INTEGER); - } else { - pstmt.setLong(7, icmpCode); - } + Long fwRuleId = rsAcls.getLong(1); + String cidr = null; + //get cidr from firewall_rules_cidrs + pstmtSelectFirewallCidrs.setLong(1, fwRuleId); + try (ResultSet rsCidr = pstmtSelectFirewallCidrs.executeQuery();) { + while (rsCidr.next()) { + Long cidrId = rsCidr.getLong(1); + String sourceCidr = rsCidr.getString(2); + if (cidr == null) { + cidr = sourceCidr; + } else { + cidr += "," + sourceCidr; + } + //Delete cidr entry + pstmtDeleteFirewallCidr.setLong(1, cidrId); + pstmtDeleteFirewallCidr.executeUpdate(); + } + } + String aclItemUuid = rsAcls.getString(2); + //Move acl to network_acl_item table + s_logger.debug("Moving firewall rule: " + aclItemUuid); + //uuid + pstmtInsertNetworkAclItem.setString(1, aclItemUuid); + //aclId + pstmtInsertNetworkAclItem.setLong(2, aclId); + //Start port + Integer startPort = rsAcls.getInt(3); + if (rsAcls.wasNull()) { + pstmtInsertNetworkAclItem.setNull(3, Types.INTEGER); + } else { + pstmtInsertNetworkAclItem.setLong(3, startPort); + } + //End port + Integer endPort = rsAcls.getInt(4); + if (rsAcls.wasNull()) { + pstmtInsertNetworkAclItem.setNull(4, Types.INTEGER); + } else { + pstmtInsertNetworkAclItem.setLong(4, endPort); + } + //State + String state = rsAcls.getString(5); + pstmtInsertNetworkAclItem.setString(5, state); + //protocol + String protocol = rsAcls.getString(6); + pstmtInsertNetworkAclItem.setString(6, protocol); + //icmp_code + Integer icmpCode = rsAcls.getInt(7); + if (rsAcls.wasNull()) { + pstmtInsertNetworkAclItem.setNull(7, Types.INTEGER); + } else { + pstmtInsertNetworkAclItem.setLong(7, icmpCode); + } - //icmp_type - Integer icmpType = rsAcls.getInt(8); - if (rsAcls.wasNull()) { - pstmt.setNull(8, Types.INTEGER); - } else { - pstmt.setLong(8, icmpType); + //icmp_type + Integer icmpType = rsAcls.getInt(8); + if (rsAcls.wasNull()) { + pstmtInsertNetworkAclItem.setNull(8, Types.INTEGER); + } else { + pstmtInsertNetworkAclItem.setLong(8, icmpType); + } + + //created + Date created = rsAcls.getDate(9); + pstmtInsertNetworkAclItem.setDate(9, created); + //traffic type + String trafficType = rsAcls.getString(10); + pstmtInsertNetworkAclItem.setString(10, trafficType); + + //cidr + pstmtInsertNetworkAclItem.setString(11, cidr); + //number + pstmtInsertNetworkAclItem.setInt(12, number++); + //action + pstmtInsertNetworkAclItem.setString(13, "Allow"); + pstmtInsertNetworkAclItem.executeUpdate(); + + //Delete firewall rule + pstmtDeleteFirewallRules.setLong(1, fwRuleId); + pstmtDeleteFirewallRules.executeUpdate(); } - - //created - Date created = rsAcls.getDate(9); - pstmt.setDate(9, created); - //traffic type - String trafficType = rsAcls.getString(10); - pstmt.setString(10, trafficType); - - //cidr - pstmt.setString(11, cidr); - //number - pstmt.setInt(12, number++); - //action - pstmt.setString(13, "Allow"); - pstmt.executeUpdate(); - - //Delete firewall rule - pstmtDelete = conn.prepareStatement("DELETE FROM `cloud`.`firewall_rules` where id = ?"); - pstmtDelete.setLong(1, fwRuleId); - pstmtDelete.executeUpdate(); } if (!hasAcls) { //no network ACls for this network. @@ -1170,30 +1172,13 @@ public class Upgrade410to420 implements DbUpgrade { aclId = NetworkACL.DEFAULT_DENY; } //Assign acl to network - pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` set network_acl_id=? where id=?"); - pstmt.setLong(1, aclId); - pstmt.setLong(2, networkId); - pstmt.executeUpdate(); + pstmtUpdate.setLong(1, aclId); + pstmtUpdate.setLong(2, networkId); + pstmtUpdate.executeUpdate(); } s_logger.debug("Done updating network ACLs "); } catch (SQLException e) { throw new CloudRuntimeException("Unable to move network acls from firewall rules table to network_acl_item table", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (rsAcls != null) { - rsAcls.close(); - } - if (rsCidr != null) { - rsCidr.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } From 168199360d45657c9752237e3aa208df79bbdc0b Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 28 Jul 2015 17:23:44 +0200 Subject: [PATCH 057/314] coverity 1116562: resource count resource leak --- .../com/cloud/upgrade/dao/Upgrade420to421.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java index 192855219d4..66c1a2ea3e3 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java @@ -280,14 +280,13 @@ public class Upgrade420to421 implements DbUpgrade { private static void upgradeResourceCountforDomain(Connection conn, Long domainId, String type, Long resourceCount) throws SQLException { //update or insert into resource_count table. - PreparedStatement pstmt = null; - pstmt = - conn.prepareStatement("INSERT INTO `cloud`.`resource_count` (domain_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?"); - pstmt.setLong(1, domainId); - pstmt.setString(2, type); - pstmt.setLong(3, resourceCount); - pstmt.setLong(4, resourceCount); - pstmt.executeUpdate(); - pstmt.close(); + String sqlInsertResourceCount = "INSERT INTO `cloud`.`resource_count` (domain_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?"; + try (PreparedStatement pstmt = conn.prepareStatement(sqlInsertResourceCount);) { + pstmt.setLong(1, domainId); + pstmt.setString(2, type); + pstmt.setLong(3, resourceCount); + pstmt.setLong(4, resourceCount); + pstmt.executeUpdate(); + } } } From 9d84d9933004e3d0a2af440761b5a06a0d58e5cf Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 28 Jul 2015 17:26:29 +0200 Subject: [PATCH 058/314] coverity 1116563: resource count leak for accounts --- .../com/cloud/upgrade/dao/Upgrade420to421.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java index 66c1a2ea3e3..e67021ecebf 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade420to421.java @@ -267,15 +267,14 @@ public class Upgrade420to421 implements DbUpgrade { private static void upgradeResourceCountforAccount(Connection conn, Long accountId, Long domainId, String type, Long resourceCount) throws SQLException { //update or insert into resource_count table. - PreparedStatement pstmt = null; - pstmt = - conn.prepareStatement("INSERT INTO `cloud`.`resource_count` (account_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?"); - pstmt.setLong(1, accountId); - pstmt.setString(2, type); - pstmt.setLong(3, resourceCount); - pstmt.setLong(4, resourceCount); - pstmt.executeUpdate(); - pstmt.close(); + String sqlInsertResourceCount = "INSERT INTO `cloud`.`resource_count` (account_id, type, count) VALUES (?,?,?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), count=?"; + try (PreparedStatement pstmt = conn.prepareStatement(sqlInsertResourceCount);) { + pstmt.setLong(1, accountId); + pstmt.setString(2, type); + pstmt.setLong(3, resourceCount); + pstmt.setLong(4, resourceCount); + pstmt.executeUpdate(); + } } private static void upgradeResourceCountforDomain(Connection conn, Long domainId, String type, Long resourceCount) throws SQLException { From 3be278ed5e4e83c1f8024adaa7056629973e0151 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Mon, 20 Jul 2015 14:48:40 +0530 Subject: [PATCH 059/314] CLOUDSTACK-8651: [Browser Based Upload Template] Partially uploaded templates doesn't get cleaned up after the SSVM handling it is destroyed Fixed template sync code to include templates in 'NotUploaded' and 'UploadInProgress' states along with 'Active'. --- .../com/cloud/storage/dao/VMTemplateDao.java | 4 +++ .../cloud/storage/dao/VMTemplateDaoImpl.java | 20 +++++++++-- .../storage/image/TemplateServiceImpl.java | 4 +-- .../component/test_browse_templates.py | 36 +++++++++++++++++++ 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDao.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDao.java index a3adffc8b26..dccc902e912 100644 --- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDao.java +++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDao.java @@ -54,8 +54,12 @@ public interface VMTemplateDao extends GenericDao, StateDao< public List listAllInZone(long dataCenterId); + public List listInZoneByState(long dataCenterId, VirtualMachineTemplate.State... states); + public List listAllActive(); + public List listByState(VirtualMachineTemplate.State... states); + public List listByHypervisorType(List hyperTypes); public List publicIsoSearch(Boolean bootable, boolean listRemoved, Map tags); diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java index 90196a8b3d5..02fb4b466ed 100644 --- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java +++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java @@ -372,7 +372,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem tmpltZoneSearch.and("zoneId", tmpltZoneSearch.entity().getZoneId(), SearchCriteria.Op.EQ); TmpltsInZoneSearch = createSearchBuilder(); - TmpltsInZoneSearch.and("state", TmpltsInZoneSearch.entity().getState(), SearchCriteria.Op.EQ); + TmpltsInZoneSearch.and("state", TmpltsInZoneSearch.entity().getState(), SearchCriteria.Op.IN); TmpltsInZoneSearch.and().op("avoidtype", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NEQ); TmpltsInZoneSearch.or("templateType", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NULL); TmpltsInZoneSearch.cp(); @@ -381,7 +381,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem TmpltsInZoneSearch.done(); ActiveTmpltSearch = createSearchBuilder(); - ActiveTmpltSearch.and("state", ActiveTmpltSearch.entity().getState(), SearchCriteria.Op.EQ); + ActiveTmpltSearch.and("state", ActiveTmpltSearch.entity().getState(), SearchCriteria.Op.IN); CountTemplatesByAccount = createSearchBuilder(Long.class); CountTemplatesByAccount.select(null, Func.COUNT, null); @@ -792,6 +792,15 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem return listBy(sc); } + @Override + public List listInZoneByState(long dataCenterId, VirtualMachineTemplate.State... states) { + SearchCriteria sc = TmpltsInZoneSearch.create(); + sc.setParameters("avoidtype", TemplateType.PERHOST.toString()); + sc.setParameters("state", (Object[])states); + sc.setJoinParameters("tmpltzone", "zoneId", dataCenterId); + return listBy(sc); + } + @Override public List listAllActive() { SearchCriteria sc = ActiveTmpltSearch.create(); @@ -799,6 +808,13 @@ public class VMTemplateDaoImpl extends GenericDaoBase implem return listBy(sc); } + @Override + public List listByState(VirtualMachineTemplate.State... states) { + SearchCriteria sc = ActiveTmpltSearch.create(); + sc.setParameters("state", (Object[])states); + return listBy(sc); + } + @Override public List listDefaultBuiltinTemplates() { SearchCriteria sc = tmpltTypeSearch.create(); diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java index f6dc33e7ee5..ccb70c4aba3 100644 --- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java +++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java @@ -291,10 +291,10 @@ public class TemplateServiceImpl implements TemplateService { List allTemplates = null; if (zoneId == null) { // region wide store - allTemplates = _templateDao.listAllActive(); + allTemplates = _templateDao.listByState(VirtualMachineTemplate.State.Active, VirtualMachineTemplate.State.NotUploaded, VirtualMachineTemplate.State.UploadInProgress); } else { // zone wide store - allTemplates = _templateDao.listAllInZone(zoneId); + allTemplates = _templateDao.listInZoneByState(zoneId, VirtualMachineTemplate.State.Active, VirtualMachineTemplate.State.NotUploaded, VirtualMachineTemplate.State.UploadInProgress); } List rtngTmplts = _templateDao.listAllSystemVMTemplates(); List defaultBuiltin = _templateDao.listDefaultBuiltinTemplates(); diff --git a/test/integration/component/test_browse_templates.py b/test/integration/component/test_browse_templates.py index 2cacdb6e678..9366914cfd9 100644 --- a/test/integration/component/test_browse_templates.py +++ b/test/integration/component/test_browse_templates.py @@ -1674,6 +1674,42 @@ class TestBrowseUploadVolume(cloudstackTestCase): return + @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false") + def test_browser_upload_template_incomplete(self): + """ + Test browser based incomplete template upload, followed by SSVM destroy. Template should go to UploadAbandoned state and get cleaned up. + """ + try: + self.debug("========================= Test browser based incomplete template upload ========================") + + #Only register template, without uploading + cmd = getUploadParamsForTemplate.getUploadParamsForTemplateCmd() + cmd.zoneid = self.zone.id + cmd.format = self.uploadtemplateformat + cmd.name=self.templatename+self.account.name+(random.choice(string.ascii_uppercase)) + cmd.account=self.account.name + cmd.domainid=self.domain.id + cmd.displaytext=cmd.name + cmd.hypervisor=self.templatehypervisor + cmd.ostypeid=self.templateostypeid + template_response=self.apiclient.getUploadParamsForTemplate(cmd) + + #Destroy SSVM, and wait for new one to start + self.destroy_ssvm() + + #Verify that the template is cleaned up as part of sync-up during new SSVM start + list_template_response=Template.list( + self.apiclient, + id=template_response.id, + templatefilter="all", + zoneid=self.zone.id) + self.assertEqual(list_template_response, None, "Template is not cleaned up, some issue with template sync-up") + + except Exception as e: + self.fail("Exceptione occurred : %s" % e) + return + + @classmethod def tearDownClass(self): try: From 5adfc1c786f4c92b581a3baa0d149c2a288ebadc Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Wed, 29 Jul 2015 11:07:43 +0530 Subject: [PATCH 060/314] Moved test for CLOUDSTACK-8651 to a new .py file This closes #607 --- .../component/test_browse_templates2.py | 212 ++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100755 test/integration/component/test_browse_templates2.py diff --git a/test/integration/component/test_browse_templates2.py b/test/integration/component/test_browse_templates2.py new file mode 100755 index 00000000000..9fdf3f0d5e8 --- /dev/null +++ b/test/integration/component/test_browse_templates2.py @@ -0,0 +1,212 @@ +# 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. + +# Import Local Modules + +import marvin +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase, unittest +from marvin.cloudstackAPI import * +from marvin.lib.utils import * +from marvin.lib.base import * +from marvin.lib.common import * +from marvin.codes import PASS, FAILED, SUCCESS, XEN_SERVER +from marvin.sshClient import SshClient +import requests +requests.packages.urllib3.disable_warnings() +import random +import string +import telnetlib +import os +import urllib +import time +import tempfile +_multiprocess_shared_ = True + + +class TestBrowseUploadTemplate(cloudstackTestCase): + + """ + Tests for browser based upload template feature. Once all issues in test_browse_templates.py are fixed, this should be merged back + """ + @classmethod + def setUpClass(cls): + cls.testClient = super(TestBrowseUploadTemplate, cls).getClsTestClient() + cls.testdata = cls.testClient.getParsedTestDataConfig() + cls.apiclient = cls.testClient.getApiClient() + cls.hypervisor = cls.testClient.getHypervisorInfo() + cls._cleanup = [] + cls.cleanup = [] + + hosts = list_hosts( + cls.apiclient, + type="Routing" + ) + if hosts is None: + cls.SkipTest( + "There are no hypervisor's available. Check list hosts response") + + cls.uploadtemplateformat = "VHD" + cls.templatename = "test" + cls.templatehypervisor = "XenServer" + cls.templateostypeid = 142 + + cls.zone = get_zone(cls.apiclient, cls.testClient.getZoneForTests()) + cls.domain = get_domain(cls.apiclient) + cls.pod = get_pod(cls.apiclient, cls.zone.id) + + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + + cls._cleanup = [ + cls.account + ] + + def waitForSystemVMAgent(self, vmname): + timeout = self.testdata["timeout"] + + while True: + list_host_response = list_hosts( + self.apiclient, + name=vmname + ) + + if list_host_response and list_host_response[0].state == 'Up': + break + + if timeout == 0: + raise Exception("Timed out waiting for SSVM agent to be Up") + + time.sleep(self.testdata["sleep"]) + timeout = timeout - 1 + + def destroy_ssvm(self): + + list_ssvm_response = list_ssvms( + self.apiclient, + systemvmtype='secondarystoragevm', + state='Running', + zoneid=self.zone.id + ) + self.assertEqual( + isinstance(list_ssvm_response, list), + True, + "Check list response returns a valid list" + ) + ssvm_response = list_ssvm_response[0] + + old_name = ssvm_response.name + + self.debug("Destroying SSVM: %s" % ssvm_response.id) + cmd = destroySystemVm.destroySystemVmCmd() + cmd.id = ssvm_response.id + self.apiclient.destroySystemVm(cmd) + + timeout = self.testdata["timeout"] + while True: + list_ssvm_response = list_ssvms( + self.apiclient, + zoneid=self.zone.id, + systemvmtype='secondarystoragevm' + ) + if isinstance(list_ssvm_response, list): + if list_ssvm_response[0].state == 'Running': + break + if timeout == 0: + raise Exception("List SSVM call failed!") + + time.sleep(self.testdata["sleep"]) + timeout = timeout - 1 + + ssvm_response = list_ssvm_response[0] + + # Verify Name, Public IP, Private IP and Link local IP + # for newly created SSVM + self.assertNotEqual( + ssvm_response.name, + old_name, + "Check SSVM new name with name of destroyed SSVM" + ) + self.assertEqual( + hasattr(ssvm_response, 'privateip'), + True, + "Check whether SSVM has private IP field" + ) + + self.assertEqual( + hasattr(ssvm_response, 'linklocalip'), + True, + "Check whether SSVM has link local IP field" + ) + + self.assertEqual( + hasattr(ssvm_response, 'publicip'), + True, + "Check whether SSVM has public IP field" + ) + + # Wait for the agent to be up + self.waitForSystemVMAgent(ssvm_response.name) + + return + + @attr(tags = ["advanced", "advancedns", "smoke", "basic"], required_hardware="false") + def test_browser_upload_template_incomplete(self): + """ + Test browser based incomplete template upload, followed by SSVM destroy. Template should go to UploadAbandoned state and get cleaned up. + """ + try: + self.debug("========================= Test browser based incomplete template upload ========================") + + #Only register template, without uploading + cmd = getUploadParamsForTemplate.getUploadParamsForTemplateCmd() + cmd.zoneid = self.zone.id + cmd.format = self.uploadtemplateformat + cmd.name=self.templatename+self.account.name+(random.choice(string.ascii_uppercase)) + cmd.account=self.account.name + cmd.domainid=self.domain.id + cmd.displaytext=cmd.name + cmd.hypervisor=self.templatehypervisor + cmd.ostypeid=self.templateostypeid + template_response=self.apiclient.getUploadParamsForTemplate(cmd) + + #Destroy SSVM, and wait for new one to start + self.destroy_ssvm() + + #Verify that the template is cleaned up as part of sync-up during new SSVM start + list_template_response=Template.list( + self.apiclient, + id=template_response.id, + templatefilter="all", + zoneid=self.zone.id) + self.assertEqual(list_template_response, None, "Template is not cleaned up, some issue with template sync-up") + + except Exception as e: + self.fail("Exception occurred : %s" % e) + return + + @classmethod + def tearDownClass(self): + try: + self.apiclient = super(TestBrowseUploadTemplate, self).getClsTestClient().getApiClient() + cleanup_resources(self.apiclient, self._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return From 2c110ab70949d49da1552abc299a3413bdc61b37 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 29 Jul 2015 10:46:30 +0200 Subject: [PATCH 061/314] unittesting: test resolution is not guaranteed to be exact --- utils/test/com/cloud/utils/TestProfiler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/test/com/cloud/utils/TestProfiler.java b/utils/test/com/cloud/utils/TestProfiler.java index 6861f060429..2306cd75520 100644 --- a/utils/test/com/cloud/utils/TestProfiler.java +++ b/utils/test/com/cloud/utils/TestProfiler.java @@ -111,6 +111,6 @@ public class TestProfiler extends Log4jEnabledTestCase { // We are measuring the elapsed time in 2 consecutive calls of System.nanoTime() // That's the same as 0.002 milliseconds or 2000 nanoseconds. - Assert.assertTrue("It took more than 2 microseconds between 2 consecutive calls to System.nanoTime().", nanoTime2 - nanoTime1 <= 2000); + Assert.assertTrue("Expected exactly 2 but it took more than 3 microseconds between 2 consecutive calls to System.nanoTime().", nanoTime2 - nanoTime1 <= 3000); } } \ No newline at end of file From bccd34479684d4474fa344d11961f08995833ea1 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Wed, 29 Jul 2015 14:13:01 +0530 Subject: [PATCH 062/314] CLOUDSTACK-8683: process cmd_line.json for shared network VR in cloud-early-config This closes #634 --- systemvm/patches/debian/config/etc/init.d/cloud-early-config | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/systemvm/patches/debian/config/etc/init.d/cloud-early-config b/systemvm/patches/debian/config/etc/init.d/cloud-early-config index 711d575f908..934ba9caf7b 100755 --- a/systemvm/patches/debian/config/etc/init.d/cloud-early-config +++ b/systemvm/patches/debian/config/etc/init.d/cloud-early-config @@ -1339,6 +1339,10 @@ start() { dhcpsrvr) [ "$NAME" == "" ] && NAME=dhcpsrvr setup_dhcpsrvr + if [ -x /opt/cloud/bin/update_config.py ] + then + /opt/cloud/bin/update_config.py cmd_line.json + fi ;; secstorage) [ "$NAME" == "" ] && NAME=secstorage From d03505acc2f7e6a6569201dca633dc1097df5cf5 Mon Sep 17 00:00:00 2001 From: Sten Spans Date: Wed, 29 Jul 2015 15:45:41 +0200 Subject: [PATCH 063/314] Update NiciraNvpGuestNetworkGuru.java Add support for VXLAN as isolation method --- .../com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java index e68f740cdcf..640d8a50715 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java @@ -98,7 +98,7 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { public NiciraNvpGuestNetworkGuru() { super(); - _isolationMethods = new IsolationMethod[] {IsolationMethod.STT}; + _isolationMethods = new IsolationMethod[] {IsolationMethod.STT, IsolationMethod.VXLAN}; } @Override @@ -115,7 +115,7 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { @Override public Network design(final NetworkOffering offering, final DeploymentPlan plan, final Network userSpecified, final Account owner) { - // Check of the isolation type of the related physical network is STT + // Check of the isolation type of the related physical network is supported PhysicalNetworkVO physnet = physicalNetworkDao.findById(plan.getPhysicalNetworkId()); DataCenter dc = _dcDao.findById(plan.getDataCenterId()); if (!canHandle(offering, dc.getNetworkType(), physnet)) { @@ -130,7 +130,7 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { } s_logger.debug("Nicira Nvp " + devices.get(0).getUuid() + " found on physical network " + physnet.getId()); - s_logger.debug("Physical isolation type is STT, asking GuestNetworkGuru to design this network"); + s_logger.debug("Physical isolation type is supported, asking GuestNetworkGuru to design this network"); NetworkVO networkObject = (NetworkVO)super.design(offering, plan, userSpecified, owner); if (networkObject == null) { return null; From f45548bf0ba9bd1a23d10c48bf9d3fe43cbfae30 Mon Sep 17 00:00:00 2001 From: manasaVeloori Date: Wed, 29 Jul 2015 13:59:15 +0530 Subject: [PATCH 064/314] Added a test to verify that listSnapshots response returns zone id Made changes based on Comments This closes #632 --- test/integration/smoke/test_snapshots.py | 140 +++++++++++++---------- 1 file changed, 77 insertions(+), 63 deletions(-) diff --git a/test/integration/smoke/test_snapshots.py b/test/integration/smoke/test_snapshots.py index d230c6765bf..2f4c6c0d97f 100644 --- a/test/integration/smoke/test_snapshots.py +++ b/test/integration/smoke/test_snapshots.py @@ -31,6 +31,7 @@ from marvin.lib.common import (get_domain, list_snapshots) from marvin.lib.decoratorGenerators import skipTestIf + class TestSnapshotRootDisk(cloudstackTestCase): @classmethod @@ -52,12 +53,13 @@ class TestSnapshotRootDisk(cloudstackTestCase): cls._cleanup = [] if not cls.hypervisorNotSupported: template = get_template( - cls.apiclient, - cls.zone.id, - cls.services["ostype"] - ) + cls.apiclient, + cls.zone.id, + cls.services["ostype"] + ) if template == FAILED: - assert False, "get_template() failed to return template with description %s" % cls.services["ostype"] + assert False, "get_template() failed to return template with description %s" % cls.services[ + "ostype"] cls.services["domainid"] = cls.domain.id cls.services["server_without_disk"]["zoneid"] = cls.zone.id @@ -66,32 +68,33 @@ class TestSnapshotRootDisk(cloudstackTestCase): # Create VMs, NAT Rules etc cls.account = Account.create( - cls.apiclient, - cls.services["account"], - domainid=cls.domain.id - ) + cls.apiclient, + cls.services["account"], + domainid=cls.domain.id + ) cls._cleanup.append(cls.account) cls.service_offering = ServiceOffering.create( - cls.apiclient, - cls.services["service_offerings"] - ) + cls.apiclient, + cls.services["service_offerings"] + ) cls._cleanup.append(cls.service_offering) cls.virtual_machine = cls.virtual_machine_with_disk = \ - VirtualMachine.create( - cls.apiclient, - cls.services["server_without_disk"], - templateid=template.id, - accountid=cls.account.name, - domainid=cls.account.domainid, - serviceofferingid=cls.service_offering.id, - mode=cls.services["mode"] - ) + VirtualMachine.create( + cls.apiclient, + cls.services["server_without_disk"], + templateid=template.id, + accountid=cls.account.name, + domainid=cls.account.domainid, + zoneid=cls.zone.id, + serviceofferingid=cls.service_offering.id, + mode=cls.services["mode"] + ) return @classmethod def tearDownClass(cls): try: - #Cleanup resources used + # Cleanup resources used cleanup_resources(cls.apiclient, cls._cleanup) except Exception as e: raise Exception("Warning: Exception during cleanup : %s" % e) @@ -105,14 +108,14 @@ class TestSnapshotRootDisk(cloudstackTestCase): def tearDown(self): try: - #Clean up, terminate the created instance, volumes and snapshots + # Clean up, terminate the created instance, volumes and snapshots cleanup_resources(self.apiclient, self.cleanup) except Exception as e: raise Exception("Warning: Exception during cleanup : %s" % e) return @skipTestIf("hypervisorNotSupported") - @attr(tags = ["advanced", "advancedns", "smoke"], required_hardware="true") + @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true") def test_01_snapshot_root_disk(self): """Test Snapshot Root Disk """ @@ -123,65 +126,76 @@ class TestSnapshotRootDisk(cloudstackTestCase): # the reqd volume under # /secondary/snapshots//$account_id/$volumeid/$snapshot_uuid # 3. verify backup_snap_id was non null in the `snapshots` table + # 4. Verify that zoneid is returned in listSnapshots API response volumes = list_volumes( - self.apiclient, - virtualmachineid=self.virtual_machine_with_disk.id, - type='ROOT', - listall=True - ) + self.apiclient, + virtualmachineid=self.virtual_machine_with_disk.id, + type='ROOT', + listall=True + ) snapshot = Snapshot.create( - self.apiclient, - volumes[0].id, - account=self.account.name, - domainid=self.account.domainid - ) + self.apiclient, + volumes[0].id, + account=self.account.name, + domainid=self.account.domainid + ) self.debug("Snapshot created: ID - %s" % snapshot.id) snapshots = list_snapshots( - self.apiclient, - id=snapshot.id - ) + self.apiclient, + id=snapshot.id + ) self.assertEqual( - isinstance(snapshots, list), - True, - "Check list response returns a valid list" - ) + isinstance(snapshots, list), + True, + "Check list response returns a valid list" + ) self.assertNotEqual( - snapshots, - None, - "Check if result exists in list item call" - ) + snapshots, + None, + "Check if result exists in list item call" + ) self.assertEqual( - snapshots[0].id, - snapshot.id, - "Check resource id in list resources call" - ) + snapshots[0].id, + snapshot.id, + "Check resource id in list resources call" + ) + + self.assertIsNotNone(snapshots[0].zoneid, + "Zone id is not none in listSnapshots") + self.assertEqual( + snapshots[0].zoneid, + self.zone.id, + "Check zone id in the list snapshots" + ) + self.debug( - "select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';" \ + "select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';" % str(snapshot.id) - ) + ) qresultset = self.dbclient.execute( - "select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';" \ - % str(snapshot.id) - ) + "select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';" + % str(snapshot.id) + ) self.assertNotEqual( - len(qresultset), - 0, - "Check DB Query result set" - ) + len(qresultset), + 0, + "Check DB Query result set" + ) qresult = qresultset[0] snapshot_uuid = qresult[0] # backup_snap_id = snapshot UUID self.assertNotEqual( - str(snapshot_uuid), - 'NULL', - "Check if backup_snap_id is not null" - ) + str(snapshot_uuid), + 'NULL', + "Check if backup_snap_id is not null" + ) - self.assertTrue(is_snapshot_on_nfs(self.apiclient, self.dbclient, self.config, self.zone.id, snapshot.id)) + self.assertTrue(is_snapshot_on_nfs( + self.apiclient, self.dbclient, self.config, self.zone.id, snapshot.id)) return From ac7c882e346f01aba2539488633f73cbd00a547d Mon Sep 17 00:00:00 2001 From: Milamber Date: Thu, 30 Jul 2015 11:03:38 +0100 Subject: [PATCH 065/314] Update L10N resource files on master branch with 4.6 translation strings from Transifex (20150730) --- .../resources/messages_de_DE.properties | 9 + .../resources/messages_fr_FR.properties | 4 + .../classes/resources/messages_hu.properties | 254 +-- .../resources/messages_ja_JP.properties | 1468 ++++++++--------- .../resources/messages_nb_NO.properties | 328 +++- .../resources/messages_pt_BR.properties | 413 +++++ .../resources/messages_ru_RU.properties | 835 +++++----- .../resources/messages_zh_CN.properties | 1365 +++++++-------- 8 files changed, 2712 insertions(+), 1964 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages_de_DE.properties b/client/WEB-INF/classes/resources/messages_de_DE.properties index 3b820fcb51c..9ba5bbb3b6c 100644 --- a/client/WEB-INF/classes/resources/messages_de_DE.properties +++ b/client/WEB-INF/classes/resources/messages_de_DE.properties @@ -208,6 +208,7 @@ label.action.resource.limits=Grenzen der Ressourcen label.action.restore.instance=Instanz wiederherstellen label.action.restore.instance.processing=Instanz wird wiederhergestellt.... label.action.revert.snapshot=Auf Schnappschuss zur\u00fcckkehren +label.action.revert.snapshot.processing=Es wird auf den Schnappschuss zur\u00fcckgekehrt... label.actions=Aktionen label.action.start.instance=Instanz beginnen label.action.start.instance.processing=Instanz wird gestartet.... @@ -231,6 +232,7 @@ label.action.update.resource.count.processing=Ressourcenanzahl wird aktualisiert label.action.update.resource.count=Ressourcenanzahl aktualisieren label.action.vmsnapshot.create=VM-Schnappschuss machen label.action.vmsnapshot.delete=VM-Schnappschuss l\u00f6schen +label.action.vmsnapshot.revert=Auf VM-Schnappschuss zur\u00fcckkehren label.activate.project=Projekt aktivieren label.active.sessions=Aktive Sitzungen label.add.account=Konto hinzuf\u00fcgen @@ -478,7 +480,11 @@ label.disable.vpn=Fernzugriff-VPN deaktivieren label.disabling.vpn.access=Deaktivierung des VPN Zugangs label.disbale.vnmc.device=VNMC-Ger\u00e4t deaktivieren label.disk.allocated=Zugeordnete Festplatte +label.disk.bytes.read.rate=Festplatten-Leserate (BPS) +label.disk.bytes.write.rate=Festplatten-Schreibrate (BPS) +label.disk.iops.read.rate=Festplatten-Leserate (IOPS) label.disk.iops.total=Gesamte IOPS +label.disk.iops.write.rate=Festplatten-Schreibrate (IOPS) label.disk.offering=Festplatten-Angebot label.disk.size=Festplattengr\u00f6\u00dfe label.disk.size.gb=Festplattengr\u00f6\u00dfe (in GB) @@ -503,11 +509,13 @@ label.duration.in.sec=Dauer (in Sekunden) label.dynamically.scalable=Dynamisch skalierbar label.edit.acl.rule=ACL-Regel bearbeiten label.edit=Bearbeiten +label.edit.lb.rule=LB-Regel bearbeiten label.edit.network.details=Netzwerkdetails bearbeiten label.edit.project.details=Projektdetails bearbeiten label.edit.region=Region bearbeiten label.edit.secondary.ips=Sekund\u00e4re IPs bearbeiten label.edit.tags=Schlagw\u00f6rter bearbeiten +label.edit.traffic.type=Datenverkehrstyp bearbeiten label.edit.vpc=VPC bearbeiten label.email=E-Mail label.email.lower=E-Mail-Adresse @@ -1140,6 +1148,7 @@ label.total.cpu=Gesamtanzahl CPU label.total.CPU=Gesamtanzahl CPU label.total.hosts=Gesamtanzahl Hosts label.total.memory=Gesamter Speicher +label.total.of.ip=Gesamtzahl der IP-Adressen label.total.of.vm=Gesamtanzahl VMs label.total.storage=Gesamter Speicher label.total.vms=Gesamtanzahl VMs diff --git a/client/WEB-INF/classes/resources/messages_fr_FR.properties b/client/WEB-INF/classes/resources/messages_fr_FR.properties index 8a8efb7f5c5..1b0ccfb2061 100644 --- a/client/WEB-INF/classes/resources/messages_fr_FR.properties +++ b/client/WEB-INF/classes/resources/messages_fr_FR.properties @@ -72,6 +72,7 @@ label.action.cancel.maintenance.mode.processing=Annulation du mode maintenance.. label.action.change.password=Changer le mot de passe label.action.change.service=Changer d\\'offre de service label.action.change.service.processing=Changement de d\\'offre de service... +label.action.configure.samlauthorization=Configurer Autorisation SAML SSO label.action.copy.ISO=Copier une image ISO label.action.copy.ISO.processing=Copie ISO... label.action.copy.template=Copier mod\u00e8le @@ -300,6 +301,7 @@ label.add.ip.range=Ajouter une plage IP label.add.isolated.guest.network=Ajouter un r\u00e9seau d\\'invit\u00e9 isol\u00e9 label.add.isolated.network=Ajouter un r\u00e9seau isol\u00e9 label.additional.networks=R\u00e9seaux additionnels +label.add.LDAP.account=Ajouter Compte LDAP label.add.ldap.account=Ajouter un compte LDAP label.add.list.name=Nom Liste ACL label.add.load.balancer=Ajouter un r\u00e9partiteur de charge @@ -1289,6 +1291,8 @@ label.s3.nfs.server=Serveur NFS S3 label.s3.secret_key=Cl\u00e9 Priv\u00e9e label.s3.socket_timeout=D\u00e9lai d\\'expiration de la socket label.s3.use_https=Utiliser HTTPS +label.saml.enable=Autoriser SAML SSO +label.saml.entity=Fournisseur d\\'identit\u00e9 label.saturday=Samedi label.save.and.continue=Enregistrer et continuer label.save=Sauvegarder diff --git a/client/WEB-INF/classes/resources/messages_hu.properties b/client/WEB-INF/classes/resources/messages_hu.properties index 6482c9ca4ed..0fd3f4bb6a9 100644 --- a/client/WEB-INF/classes/resources/messages_hu.properties +++ b/client/WEB-INF/classes/resources/messages_hu.properties @@ -43,17 +43,17 @@ hint.type.part.host.tag=\u00cdrd be egy kiszolg\u00e1l\u00f3 c\u00edmke r\u00e9s hint.type.part.storage.tag=\u00cdrd be egy t\u00e1r c\u00edmke r\u00e9sz\u00e9t ICMP.code=ICMP k\u00f3d ICMP.type=ICMP t\u00edpus -image.directory=Image Directory +image.directory=Image K\u00f6nyvt\u00e1r inline=Inline instances.actions.reboot.label=P\u00e9ld\u00e1ny \u00fajraind\u00edt\u00e1sa label.about.app=A CloudStack-r\u0151l label.about=N\u00e9vjegy label.accept.project.invitation=Project-megh\u00edv\u00f3 elfogad\u00e1sa -label.account.and.security.group=Account, Security group +label.account.and.security.group=Sz\u00e1mla, biztons\u00e1gi csoport label.account.id=Sz\u00e1mla azonos\u00edt\u00f3 label.account.lower=sz\u00e1mla label.account.name=Sz\u00e1mla n\u00e9v -label.account.specific=Account-Specific +label.account.specific=Sz\u00e1mla-specifikus label.accounts=Sz\u00e1ml\u00e1k label.account=Sz\u00e1mla label.acl=ACL @@ -340,7 +340,7 @@ label.add.static.route=Statikus \u00fatvonal felv\u00e9tele label.add.system.service.offering=Add System Service Offering label.add.template=Sablon felv\u00e9tele label.add.to.group=Felv\u00e9tel a csoportba -label.add.ucs.manager=Add UCS Manager +label.add.ucs.manager=UCS Manager felv\u00e9tele label.add.userdata=Felhaszn\u00e1l\u00f3 adat label.add.user=Felhaszn\u00e1l\u00f3 felv\u00e9tele label.add.vlan=VLAN felv\u00e9tele @@ -369,7 +369,7 @@ label.affinity.group=Affin\u00edt\u00e1si csoport label.affinity.groups=Affin\u00edt\u00e1si csoportok label.agent.password=\u00dcgyn\u00f6k jelsz\u00f3 label.agent.port=\u00dcgyn\u00f6k port -label.agent.state=Agent State +label.agent.state=\u00dcgyn\u00f6k \u00e1llapot label.agent.username=\u00dcgyn\u00f6k felhaszn\u00e1l\u00f3n\u00e9v label.agree=Elfogadom label.alert.archived=Riaszt\u00e1s archiv\u00e1lva @@ -392,7 +392,7 @@ label.archive=Archive label.archive.events=Esem\u00e9nyek archiv\u00e1l\u00e1sa label.assigned.vms=Hozz\u00e1rendelt VM-ek label.assign=Hozz\u00e1rendel\u00e9s -label.assign.instance.another=Assign Instance to Another Account +label.assign.instance.another=P\u00e9ld\u00e1ny hozz\u00e1rendel\u00e9se m\u00e1sik sz\u00e1ml\u00e1hoz label.assign.to.load.balancer=P\u00e9ld\u00e1ny hozz\u00e1rendel\u00e9se terhel\u00e9seloszt\u00f3hoz label.assign.vms=VM-ek hozz\u00e1rendel\u00e9se label.associated.network.id=Kapcsolt h\u00e1l\u00f3zat ID @@ -429,8 +429,8 @@ label.broadcast.domain.type=Broadcast Domain Type label.broadcast.uri=Broadcast URI label.broadcasturi=broadcasturi label.broadcat.uri=Broadcast URI -label.brocade.vcs.address=Vcs Switch Address -label.brocade.vcs.details=Brocade Vcs Switch details +label.brocade.vcs.address=Vcs Switch c\u00edm +label.brocade.vcs.details=Brocade Vcs Switch r\u00e9szletek label.by.account=By Account label.by.alert.type=Riaszt\u00e1s t\u00edpus szerint label.by.availability=By Availability @@ -497,7 +497,7 @@ label.confirm.password=Jelsz\u00f3 meger\u0151s\u00edt\u00e9s label.congratulations=Gratul\u00e1ci\u00f3\! label.conserve.mode=Conserve mode label.console.proxy=Konzol proxy -label.console.proxy.vm=Console Proxy VM +label.console.proxy.vm=Konzol Proxy VM label.continue.basic.install=Folytat\u00e1s alaptelep\u00edt\u00e9ssel label.continue=Tov\u00e1bb label.copying.iso=ISO m\u00e1sol\u00e1sa @@ -565,7 +565,7 @@ label.delete.project=Projekt t\u00f6rl\u00e9se label.delete.secondary.staging.store=Delete Secondary Staging Store label.delete.SRX=SRX t\u00f6rl\u00e9se label.delete=T\u00f6rl\u00e9s -label.delete.ucs.manager=Delete UCS Manager +label.delete.ucs.manager=UCS Manager t\u00f6rl\u00e9se label.delete.VPN.connection=VPN kapcsolat t\u00f6rl\u00e9se label.delete.VPN.customer.gateway=VPN \u00fcgyf\u00e9l kapu t\u00f6rl\u00e9se label.delete.VPN.gateway=VPN kapu t\u00f6rl\u00e9se @@ -597,7 +597,7 @@ label.disable.vnmc.provider=VNMC szolg\u00e1ltat\u00f3 kikapcsol\u00e1sa label.disable.vpc.offering=VPC aj\u00e1nlat kikapcsol\u00e1sa label.disable.vpn=T\u00e1voli VPN hozz\u00e1f\u00e9r\u00e9s kikapcsol\u00e1sa label.disabling.vpn.access=VPN hozz\u00e1f\u00e9r\u00e9s kikapcsol\u00e1sa -label.disassociate.profile.blade=Disassociate Profile from Blade +label.disassociate.profile.blade=Profil elv\u00e1laszt\u00e1sa a blade-t\u0151l label.disbale.vnmc.device=VNMC eszk\u00f6sz kikapcsol\u00e1sa label.disk.allocated=Merevlemez lefoglalva label.disk.bytes.read.rate=Olvas\u00e1si r\u00e1ta (BPS) @@ -642,7 +642,7 @@ label.edit.affinity.group=Affin\u00edt\u00e1si csoport szerkeszt\u00e9se label.edit.lb.rule=LB szab\u00e1ly m\u00f3dos\u00edt\u00e1sa label.edit.network.details=H\u00e1l\u00f3zat r\u00e9szleteinek szerkeszt\u00e9se label.edit.project.details=Projekt r\u00e9szletek szerkeszt\u00e9se -label.edit.region=Edit Region +label.edit.region=R\u00e9gi\u00f3 szerkeszt\u00e9se label.edit.secondary.ips=M\u00e1sodlagos IP c\u00edmek m\u00f3dos\u00edt\u00e1sa label.edit=Szerkeszt\u00e9s label.edit.tags=Cimk\u00e9k szerkeszt\u00e9se @@ -718,9 +718,9 @@ label.go.step.3=3. l\u00e9p\u00e9sre label.go.step.4=4. l\u00e9p\u00e9sre label.go.step.5=5. l\u00e9psre label.gpu=CPU -label.group.by.account=Group by account -label.group.by.cluster=Group by cluster -label.group.by.pod=Group by pod +label.group.by.account=Sz\u00e1ml\u00e1nk\u00e9nt csoportos\u00edtva +label.group.by.cluster=F\u00fcrt\u00f6nk\u00e9nt csoportos\u00edtva +label.group.by.pod=Pod-onk\u00e9nt csoportos\u00edtva label.group.by.zone=Z\u00f3n\u00e1nk\u00e9nt csoportos\u00edtva label.group=Csoport label.group.optional=Csoport (opcion\u00e1lis) @@ -731,7 +731,7 @@ label.gslb.details=GSLB r\u00e9szletek label.gslb.domain.name=GSLB dom\u00e9n n\u00e9v label.gslb=GSLB label.gslb.lb.details=Terhel\u00e9seloszt\u00f3 r\u00e9szletek -label.gslb.lb.remove=Remove load balancing from this GSLB +label.gslb.lb.remove=Terhel\u00e9seloszt\u00e1s t\u00f6rl\u00e9se ebb\u0151l a GSLB-b\u0151l label.gslb.lb.rule=Terhel\u00e9seloszt\u00f3 szab\u00e1ly label.gslb.service=GSLB szolg\u00e1ltat\u00e1s label.gslb.service.private.ip=GSLB szolg\u00e1ltat\u00e1s priv\u00e1t IP @@ -747,8 +747,8 @@ label.guest.network.details=Vend\u00e9g h\u00e1l\u00f3zat r\u00e9szletek label.guest.networks=Vend\u00e9g h\u00e1l\u00f3zatok label.guest.start.ip=Kezd\u0151 vend\u00e9g IP label.guest.traffic=Vend\u00e9g forgalom -label.guest.traffic.vswitch.name=Guest Traffic vSwitch Name -label.guest.traffic.vswitch.type=Guest Traffic vSwitch Type +label.guest.traffic.vswitch.name=Vend\u00e9g forgalom vSwitch n\u00e9v +label.guest.traffic.vswitch.type=Vend\u00e9g forgalom vSwitch t\u00edpus label.guest.type=Vend\u00e9g t\u00edpus label.guest=Vend\u00e9g label.ha.enabled=HA bekapcsolva @@ -779,7 +779,7 @@ label.IKE.DH=IKE DH label.IKE.encryption=IKE titkos\u00edt\u00e1s label.IKE.hash=IKE Hash label.IKE.lifetime=IKE \u00e9lettartam (mp) -label.IKE.policy=IKE policy +label.IKE.policy=IKE szab\u00e1lyzat label.info=Inf\u00f3 label.info.upper=INFO label.ingress.rule=Ingress szab\u00e1ly @@ -893,7 +893,7 @@ label.lb.algorithm.roundrobin=K\u00f6rbe forg\u00f3 label.lb.algorithm.source=Forr\u00e1s label.LB.isolation=Terhel\u00e9seloszt\u00f3 izol\u00e1ci\u00f3 label.ldap.configuration=LDAP konfigur\u00e1ci\u00f3 -label.ldap.group.name=LDAP Group +label.ldap.group.name=LDAP csoport label.ldap.port=LDAP port label.level=Szint label.linklocal.ip=Link Local IP Address @@ -903,13 +903,15 @@ label.load.balancing.policies=Terhel\u00e9seloszt\u00f3 szab\u00e1lyok label.load.balancing=Terhel\u00e9seloszt\u00e1s label.loading=Bet\u00f6lt\u00e9s label.local=Helyi +label.local.storage.enabled=Helyi t\u00e1r bekapcsol\u00e1sa felhaszn\u00e1l\u00f3i VM-ek r\u00e9sz\u00e9re +label.local.storage.enabled.system.vms=Helyi t\u00e1r bekapcsol\u00e1sa a rendszer VM sz\u00e1m\u00e1ra label.local.storage=Helyi t\u00e1r label.login=Bejelentkez\u00e9s label.logout=Kijelentkez\u00e9s label.lun=LUN label.LUN.number=LUN \# label.lxc.traffic.label=LXC Traffic Label -label.make.project.owner=Make account project owner +label.make.project.owner=Sz\u00e1mla projekt-tulajdonoss\u00e1 t\u00e9tele label.make.redundant=Redund\u00e1nss\u00e1 t\u00e9tel label.managed=Vez\u00e9relt label.management.ips=Vez\u00e9rl\u0151 IP c\u00edm @@ -1018,7 +1020,7 @@ label.netScaler=NetScaler label.network.ACL=H\u00e1l\u00f3zati ACL label.network.ACLs=H\u00e1l\u00f3zati ACL-ek label.network.ACL.total=H\u00e1l\u00f3zati ACL \u00f6sszesen -label.network.addVM=Add network to VM +label.network.addVM=H\u00e1l\u00f3zat felv\u00e9tele a VM-hez label.network.cidr=H\u00e1l\u00f3zat CIDR label.network.desc=H\u00e1l\u00f3zat le\u00edr\u00e1s label.network.device=H\u00e1l\u00f3zati eszk\u00f6z @@ -1092,13 +1094,13 @@ label.order=Sorrend label.os.preference=OS preferencia label.os.type=OS t\u00edpus label.other=M\u00e1s -label.override.guest.traffic=Override Guest-Traffic +label.override.guest.traffic=Vend\u00e9g forgalom fel\u00fclb\u00edr\u00e1l\u00e1sa label.override.public.traffic=Publikus forgalom fel\u00fclb\u00edr\u00e1l\u00e1sa label.ovm3.cluster=Nat\u00edv f\u00fcrt\u00f6z\u00e9s label.ovm.traffic.label=OVM traffic label label.ovs=OVS -label.owned.public.ips=Owned Public IP Addresses -label.owner.account=Owner Account +label.owned.public.ips=Birtokolt publikus IP c\u00edmek +label.owner.account=Tulajdonos sz\u00e1mla label.owner.domain=Owner Domain label.palo.alto.details=Palo Alto r\u00e9szletek label.PA.log.profile=Palo Alto log profil @@ -1145,7 +1147,7 @@ label.primary.allocated=Els\u0151dleges t\u00e1r elk\u00fcl\u00f6n\u00edtve label.primary.network=Els\u0151dleges h\u00e1l\u00f3zat label.primary.storage.count=Primary Storage Pools label.primary.storage=Els\u0151dleges t\u00e1r -label.primary.storage.limits=Primary Storage limits (GiB) +label.primary.storage.limits=Els\u0151dleges t\u00e1r korl\u00e1tok (GiB) label.primary.used=Haszn\u00e1lt els\u0151dleges t\u00e1r label.private.Gateway=Priv\u00e1t \u00e1tj\u00e1r\u00f3 label.private.interface=Private Interface @@ -1177,14 +1179,14 @@ label.public.port=Publikus port label.public=Publikus label.public.traffic=Publikus forgalom label.public.traffic.vswitch.name=Publikus forgalom vSwitch n\u00e9v -label.public.traffic.vswitch.type=Public Traffic vSwitch Type +label.public.traffic.vswitch.type=Publikus forgalom vSwitch t\u00edpus label.public.zone=Publikus z\u00f3na label.purpose=Rendeltet\u00e9s label.Pxe.server.type=Pxe szerver t\u00edpus label.qos.type=QoS t\u00edpus label.quickview=Gyorsn\u00e9zet label.quiesce.vm=VM felf\u00fcggeszt\u00e9se -label.quiet.time.sec=Quiet Time (in sec) +label.quiet.time.sec=V\u00e1rakoz\u00e1s (mp) label.rbd.id=Cephx felhaszn\u00e1l\u00f3 label.rbd.monitor=Ceph monitor label.rbd.pool=Ceph pool @@ -1206,7 +1208,7 @@ label.reinstall.vm=VM \u00fajratelep\u00edt\u00e9se label.related=Kapcsol\u00f3d\u00f3 label.release.account.lowercase=Release from account label.release.account=Release from Account -label.release.dedicated.cluster=Release Dedicated Cluster +label.release.dedicated.cluster=Dedik\u00e1lt f\u00fcrt elenged\u00e9se label.release.dedicated.host=Dedik\u00e1lt kiszolg\u00e1l\u00f3 elenged\u00e9se label.release.dedicated.pod=Dedik\u00e1lt pod elenged\u00e9se label.release.dedicated.vlan.range=Dedik\u00e1lt VLAN tartom\u00e1ny elenged\u00e9se @@ -1229,7 +1231,7 @@ label.remove.tier=R\u00e9teg elt\u00e1vol\u00edt\u00e1sa label.remove.vm.from.lb=VM elt\u00e1vol\u00edt\u00e1sa terhel\u00e9seloszt\u00f3 szab\u00e1lyb\u00f3l label.remove.vm.load.balancer=VM elt\u00e1vol\u00edt\u00e1sa a terhel\u00e9seloszt\u00f3b\u00f3l label.remove.vmware.datacenter=VMware adatk\u00f6zpont elt\u00e1vol\u00edt\u00e1sa -label.remove.vpc.offering=Remove VPC offering +label.remove.vpc.offering=VPC aj\u00e1nlat t\u00f6rl\u00e9se label.remove.vpc=VPC elt\u00e1vol\u00edt\u00e1sa label.removing=T\u00f6rl\u00e9s label.removing.user=Felhaszn\u00e1l\u00f3 elt\u00e1vol\u00edt\u00e1sa @@ -1242,13 +1244,13 @@ label.reserved.ip.range=Elk\u00fcl\u00f6n\u00edtett IP c\u00edmtartom\u00e1ny label.reserved.system.gateway=Reserved system gateway label.reserved.system.ip=Elk\u00fcl\u00f6n\u00edtett rendszer IP label.reserved.system.netmask=Elk\u00fcl\u00f6n\u00edtett rendszer h\u00e1l\u00f3zati maszk -label.resetVM=Reset VM +label.resetVM=VM \u00fajraind\u00edt\u00e1sa label.reset.VPN.connection=VPN kapcsolat \u00fajraind\u00edt\u00e1sa label.resize.new.offering.id=\u00daj aj\u00e1nlat label.resize.new.size=\u00daj m\u00e9ret (GB) label.resize.shrink.ok=Cs\u00f6kkent\u00e9s OK label.resource=Er\u0151forr\u00e1s -label.resource.limit.exceeded=Resource Limit Exceeded +label.resource.limit.exceeded=Er\u0151forr\u00e1s-korl\u00e1t t\u00fall\u00e9p\u00e9s label.resource.limits=Er\u0151forr\u00e1s korl\u00e1tok label.resource.name=Er\u0151forr\u00e1s n\u00e9v label.resources=Er\u0151forr\u00e1sok @@ -1267,9 +1269,9 @@ label.root.disk.controller=Root disk controller label.root.disk.offering=Root Disk Offering label.root.disk.size=Root merevlemez m\u00e9ret label.router.vm.scaled.up=Router VM Scaled Up -label.routing.host=Routing Host +label.routing.host=Routing kiszolg\u00e1l\u00f3 label.routing=\u00datvonalv\u00e1laszt\u00e1s -label.rule.number=Rule Number +label.rule.number=Szab\u00e1ly sz\u00e1m label.rules=Szab\u00e1lyok label.running.vms=Fut\u00f3 VM-ek label.s3.access_key=Hozz\u00e1f\u00e9r\u00e9si kulcs @@ -1294,7 +1296,7 @@ label.secondary.isolated.vlan.id=M\u00e1sodlagos izol\u00e1lt VLAN ID label.secondary.staging.store.details=Secondary Staging Store details label.secondary.staging.store=Secondary Staging Store label.secondary.storage.count=Secondary Storage Pools -label.secondary.storage.details=Secondary storage details +label.secondary.storage.details=M\u00e1sodlagos t\u00e1r r\u00e9szletek label.secondary.storage.limits=Secondary Storage limits (GiB) label.secondary.storage=M\u00e1sodlagos t\u00e1r label.secondary.storage.vm=Secondary storage VM @@ -1315,7 +1317,7 @@ label.select.project=V\u00e1lassz projektet\! label.select.region=R\u00e9gi\u00f3 kiv\u00e1laszt\u00e1sa label.select.template=Sablon kiv\u00e1laszt\u00e1sa label.select.tier=V\u00e1lassz r\u00e9teget\! -label.select-view=Select view +label.select-view=N\u00e9zet label.select.vm.for.static.nat=V\u00e1lassz VM-et a statikus NAT-hoz label.sent=Elk\u00fcld\u00f6tt label.server=Szerver @@ -1324,7 +1326,7 @@ label.service.offering=Szolg\u00e1ltat\u00e1s aj\u00e1nlat label.services=Szolg\u00e1ltat\u00e1sok label.service.state=Szolg\u00e1ltat\u00e1s \u00e1llapot label.session.expired=A munkamenet lej\u00e1rt -label.set.default.NIC=Set default NIC +label.set.default.NIC=Alap\u00e9rtelmezett NIC be\u00e1ll\u00edt\u00e1sa label.settings=Be\u00e1ll\u00edt\u00e1sok label.setup=Be\u00e1ll\u00edt\u00e1sok label.setup.network=H\u00e1l\u00f3zat be\u00e1ll\u00edt\u00e1sa @@ -1387,7 +1389,7 @@ label.step.5=5. l\u00e9p\u00e9s label.step.5.title=5. l\u00e9p\u00e9s\: Ellen\u0151rz\u00e9s label.stickiness.method=Stickiness method label.stickiness=Stickiness -label.sticky.cookie-name=Cookie name +label.sticky.cookie-name=Cookie n\u00e9v label.sticky.domain=Dom\u00e9n label.sticky.expire=Lej\u00e1rat label.sticky.holdtime=Hold time @@ -1397,11 +1399,11 @@ label.sticky.mode=M\u00f3d label.sticky.name=Sticky Name label.sticky.nocache=Nincs gyors\u00edt\u00f3t\u00e1r label.sticky.postonly=Post only -label.sticky.prefix=Prefix +label.sticky.prefix=El\u0151tag label.sticky.request-learn=Request learn label.sticky.tablesize=T\u00e1bla m\u00e9ret label.stop.lb.vm=Terhel\u00e9seloszt\u00f3 VM le\u00e1ll\u00edt\u00e1sa -label.stopped.vms=Stopped VMs +label.stopped.vms=Le\u00e1ll\u00edtott VM-ek label.stop=\u00c1lj label.storage.pool=Storage Pool label.storage.tags=T\u00e1r c\u00edmk\u00e9k @@ -1410,12 +1412,12 @@ label.storage=T\u00e1r label.storage.type=T\u00e1r t\u00edpus label.subdomain.access=Subdomain Access label.submit=Elk\u00fcld\u00e9s -label.submitted.by=[Submitted by\: ] +label.submitted.by=[Bek\u00fcld\u0151\: ] label.succeeded=Siker\u00fclt label.sunday=Vas\u00e1rnap label.super.cidr.for.guest.networks=Super CIDR for Guest Networks label.supported.services=T\u00e1mogatott szolg\u00e1ltat\u00e1sok -label.supported.source.NAT.type=Supported Source NAT type +label.supported.source.NAT.type=T\u00e1mogatott forr\u00e1s NAT t\u00edpus label.supportsstrechedl2subnet=Supports Streched L2 Subnet label.suspend.project=Projekt felf\u00fcggeszt\u00e9se label.switch.type=Switch t\u00edpus @@ -1425,12 +1427,12 @@ label.system.offering=Rendszer aj\u00e1nlat label.system.service.offering=Rendszer szolg\u00e1ltat\u00e1s aj\u00e1nlat label.system.vm.details=Rendszer VM r\u00e9szletek label.system.vm=Rendszer VM -label.system.vm.scaled.up=System VM Scaled Up +label.system.vm.scaled.up=Rendszer VM felm\u00e9retezve label.system.vms=Rendszer VM-ek label.system.vm.type=Rendszer VM t\u00edpus label.system.wide.capacity=Rendszer-szint\u0171 kapac\u00edt\u00e1s label.tagged=Cimk\u00e9zve -label.tag.key=Tag Key +label.tag.key=C\u00edmke kulcs label.tags=Cimk\u00e9k label.tag.value=C\u00edmke \u00e9rt\u00e9k label.target.iqn=C\u00e9l IQN @@ -1464,9 +1466,9 @@ label.total.storage=\u00d6sszes t\u00e1r label.total.virtual.routers=Total of Virtual Routers label.total.virtual.routers.upgrade=Total of Virtual Routers that require upgrade label.total.vms=\u00d6sszes VM -label.traffic.label=Traffic label -label.traffic.types=Traffic Types -label.traffic.type=Traffic Type +label.traffic.label=Forgalom c\u00edmke +label.traffic.type=Forgalom t\u00edpus +label.traffic.types=Forgalom t\u00edpusok label.tuesday=Kedd label.type.id=T\u00edpus ID label.type.lower=t\u00edpus @@ -1497,7 +1499,7 @@ label.username.lower=felhaszn\u00e1l\u00f3n\u00e9v label.users=Felhaszn\u00e1l\u00f3k label.user.vm=Felhaszn\u00e1l\u00f3i VM label.use.vm.ips=VM IP c\u00edmek haszn\u00e1lata -label.use.vm.ip=Use VM IP\: +label.use.vm.ip=VM IP c\u00edm haszn\u00e1lata\: label.value=\u00c9rt\u00e9k label.vcdcname=vCenter DC n\u00e9v label.vcenter.cluster=vCenter f\u00fcrt @@ -1563,7 +1565,7 @@ label.vm.state=VM \u00e1llapot label.vm.stop=\u00c1lj label.vms=VM-ek label.vmware.datacenter.id=VMware adatk\u00f6zpont ID -label.vmware.datacenter.name=VMware datacenter Name +label.vmware.datacenter.name=VMware adatk\u00f6zpont n\u00e9v label.vmware.datacenter.vcenter=VMware datacenter vcenter label.vmware.traffic.label=VMware traffic label label.vnet.id=VLAN/VNI ID @@ -1578,13 +1580,13 @@ label.volume.limits=K\u00f6teg korl\u00e1tok label.volume.migrated=K\u00f6tet \u00e1tk\u00f6lt\u00f6ztetve label.volume.name=K\u00f6tet n\u00e9v label.volumes=K\u00f6tetek -label.vpc.distributedvpcrouter=Distributed VPC Router +label.vpc.distributedvpcrouter=Elosztott VPC Router label.vpc.id=VPC ID label.VPC.limits=VPC korl\u00e1tok label.vpc.offering.details=VPC aj\u00e1nlat r\u00e9szletei label.vpc.offering=VPC aj\u00e1nlat -label.VPC.router.details=VPC router details -label.vpc.supportsregionlevelvpc=Supports Region Level VPC +label.VPC.router.details=VPC router r\u00e9szletek +label.vpc.supportsregionlevelvpc=R\u00e9gi\u00f3-szint\u0171 VPC-t t\u00e1mogat label.vpc.virtual.router=VPC virtu\u00e1lis router label.vpc=VPC label.VPN.connection=VPN kapcsolat @@ -1626,10 +1628,10 @@ label.zone.step.4.title=4. l\u00e9p\u00e9s\: IP c\u00edmtartom\u00e1ny f label.zones=Z\u00f3n\u00e1k label.zone.type=Z\u00f3na t\u00edpus label.zone.wide=Eg\u00e9sz z\u00f3n\u00e1ra kiterjed\u0151 -label.zoneWizard.trafficType.guest=Guest\: Traffic between end-user virtual machines -label.zoneWizard.trafficType.management=Management\: Traffic between CloudStack\\\\'s internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs -label.zoneWizard.trafficType.public=Public\: Traffic between the internet and virtual machines in the cloud. -label.zoneWizard.trafficType.storage=Storage\: Traffic between primary and secondary storage servers, such as VM templates and snapshots +label.zoneWizard.trafficType.guest=Vend\u00e9g\: forgalom v\u00e9gfelhaszn\u00e1l\u00f3i virtu\u00e1lis g\u00e9pek k\u00f6z\u00f6tt +label.zoneWizard.trafficType.management=Vez\u00e9rl\u00e9s\: forgalom a CloudStack felh\u0151 er\u0151forr\u00e1sai k\u00f6z\u00f6tt, bele\u00e9rtve azokat a komponenseket, amelyek a vez\u00e9rl\u0151 szerverrel kommunik\u00e1lnak, mint a kiszolg\u00e1l\u00f3k \u00e9s a rendszer VM-ek +label.zoneWizard.trafficType.public=Publikus\: forgalom az internet \u00e9s a felh\u0151 virtu\u00e1lis g\u00e9pei k\u00f6z\u00f6tt +label.zoneWizard.trafficType.storage=T\u00e1r\: forgalom az els\u0151dleges \u00e9s m\u00e1sodlagos t\u00e1r szerverek k\u00f6z\u00f6tt, p\u00e9ld\u00e1ul VM sablonok \u00e9s pillanatfelv\u00e9telek label.zone=Z\u00f3na managed.state=Managed State message.acquire.ip.nic=Er\u0151s\u00edtsd meg, hogy \u00faj m\u00e1sodlagos IP c\u00edmet k\u00e9rsz ehhez a NIC-hez\!
Megjegyz\u00e9s\: manu\u00e1lisan kell be\u00e1ll\u00edtanod a frissen beszerzett m\u00e1sodlagos IP c\u00edmet a virtu\u00e1lis g\u00e9pben. @@ -1702,7 +1704,7 @@ message.action.stop.instance=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00 message.action.stop.router=Minden ezzel a routerrel kapcsolatos szolg\u00e1ltat\u00e1s megszakad. Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani ezt a routert\! message.action.stop.systemvm=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani ezt a rendszer VM-et\! message.action.take.snapshot=Er\u0151s\u00edtsd meg, hogy pillanatfelv\u00e9telt k\u00e9rsz err\u0151l a k\u00f6tetr\u0151l\! -message.action.unmanage.cluster=Please confirm that you want to unmanage the cluster. +message.action.unmanage.cluster=Er\u0151s\u00edtsd meg, hogy megszak\u00edtod a f\u00fcrt vez\u00e9rl\u00e9s\u00e9t\! message.action.vmsnapshot.delete=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod ezt a VM pillanatfelv\u00e9telt\! message.action.vmsnapshot.revert=Revert VM snapshot message.activate.project=Biztosan aktiv\u00e1lni szeretn\u00e9d ezt a projektet? @@ -1713,38 +1715,39 @@ message.add.domain=Please specify the subdomain you want to create under this do message.added.new.nuage.vsp.controller=\u00daj Nicira Vsp vez\u00e9rl\u0151 felv\u00e9ve message.added.vpc.offering=VPC aj\u00e1nlat felv\u00e9ve message.add.firewall=T\u0171zfal felv\u00e9tele a z\u00f3n\u00e1ba -message.add.guest.network=Please confirm that you would like to add a guest network +message.add.guest.network=Er\u0151s\u00edtsd meg, hogy vend\u00e9g h\u00e1l\u00f3zatot szeretn\u00e9l felvenni\! message.add.host=Add meg a k\u00f6vetkez\u0151 adatokat az \u00faj kiszolg\u00e1l\u00f3 felv\u00e9tel\u00e9hez message.adding.host=Kiszolg\u00e1l\u00f3 felv\u00e9tele message.adding.Netscaler.device=Netscaler eszk\u00f6z felv\u00e9tele message.adding.Netscaler.provider=Netscaler szolg\u00e1ltat\u00f3 felv\u00e9tele -message.add.ip.range=Add an IP range to public network in zone message.add.ip.range.direct.network=Add an IP range to direct network in zone -message.add.ip.range.to.pod=

Add an IP range to pod\:

+message.add.ip.range=IP tartom\u00e1ny felv\u00e9tele a z\u00f3na publikus h\u00e1l\u00f3zat\u00e1hoz +message.add.ip.range.to.pod=

IP tartom\u00e1ny felv\u00e9tele a pod-hoz

message.additional.networks.desc=V\u00e1laszd ki a tov\u00e1bbi h\u00e1l\u00f3zatokat, amelyhez a p\u00e9ld\u00e1ny csatlakozni fog\! message.add.load.balancer=Terhel\u00e9seloszt\u00f3 felv\u00e9tele a z\u00f3n\u00e1ba message.add.load.balancer.under.ip=The load balancer rule has been added under IP\: -message.add.network=Add a new network for zone\: +message.add.network=H\u00e1l\u00f3zat felv\u00e9tele a z\u00f3n\u00e1ban message.add.new.gateway.to.vpc=Please specify the information to add a new gateway to this VPC. -message.add.pod=Add a new pod for zone +message.add.pod.during.zone.creation=Minden z\u00f3n\u00e1nak egy vagy t\u00f6bb pod-ot kell tartalmaznia. Vegy\u00fck fel az els\u0151 pod-ot\! A pod tartalmaz kiszolg\u00e1l\u00f3kat \u00e9s els\u0151dleges t\u00e1r szervereket, amelyeket a k\u00f6vetkez\u0151 l\u00e9p\u00e9sekben vesz\u00fcnk majd fel. El\u0151sz\u00f6r \u00e1ll\u00edts be egy elk\u00fcl\u00f6n\u00edtett IP c\u00edmtartom\u00e1nyt a CloudStack bels\u0151 forgalm\u00e1nak. A c\u00edmtartom\u00e1nynak egyedinek kell lennie a felh\u0151ben. +message.add.pod=\u00daj pod felv\u00e9tele a z\u00f3n\u00e1ban message.add.primary=Please specify the following parameters to add a new primary storage -message.add.primary.storage=Add a new Primary Storage for zone , pod -message.add.region=Please specify the required information to add a new region. -message.add.secondary.storage=Add a new storage for zone +message.add.primary.storage=\u00daj els\u0151dleges t\u00e1r felv\u00e9tele a z\u00f3n\u00e1ban a pod-hoz +message.add.region=Add meg az inform\u00e1ci\u00f3kat az \u00faj r\u00e9gi\u00f3 felv\u00e9tel\u00e9hez\! +message.add.secondary.storage=\u00daj t\u00e1r felv\u00e9tele a z\u00f3n\u00e1hoz message.add.service.offering=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj sz\u00e1m\u00edt\u00e1si aj\u00e1nlat felv\u00e9tel\u00e9hez message.add.system.service.offering=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj rendszer szolg\u00e1ltat\u00e1s aj\u00e1nlat felv\u00e9tel\u00e9hez message.add.template=Add meg a k\u00f6vetkez\u0151 adatokat \u00faj sablon l\u00e9trehoz\u00e1s\u00e1hoz message.add.volume=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj k\u00f6tet l\u00e9trehoz\u00e1s\u00e1hoz message.add.VPN.gateway=Er\u0151s\u00edtsd meg, hogy \u00faj VPN \u00e1tj\u00e1r\u00f3t akarsz felvenni\! -message.admin.guide.read=For VMware-based VMs, please read the dynamic scaling section in the admin guide before scaling. Would you like to continue?\\, +message.admin.guide.read=VMware-alap\u00fa VM-ek eset\u00e9ben k\u00e9rlek olvasd el a dinakikus sk\u00e1l\u00e1z\u00e1sr\u00f3l sz\u00f3l\u00f3 fejezetet\! Szeretn\u00e9d folytatni? message.advanced.mode.desc=Akkor v\u00e1laszd ezt a h\u00e1l\u00f3zat modellt, ha szeretn\u00e9d haszn\u00e1lni a VLAN t\u00e1mogat\u00e1st. Ez a h\u00e1l\u00f3zat modell biztos\u00edtja a legnagyobb rugalmass\u00e1got \u00e9s lehet\u0151v\u00e9 teszi, hogy a rendszergazd\u00e1k olyan aj\u00e1nlatokat biztos\u00edtsanak, mint a t\u0171zfalak, VPN vagy terhel\u00e9seloszt\u00f3k valamint a direkt \u00e9s virtu\u00e1lis h\u00e1l\u00f3zatok. message.advanced.security.group=V\u00e1laszd ezt, ha biztons\u00e1gi csoportokat akarsz haszn\u00e1lni a vend\u00e9g VM izol\u00e1ci\u00f3hoz\! -message.advanced.virtual=Choose this if you wish to use zone-wide VLANs to provide guest VM isolation. -message.after.enable.s3=S3-backed Secondary Storage configured. Note\: When you leave this page, you will not be able to re-configure S3 again. -message.after.enable.swift=Swift configured. Note\: When you leave this page, you will not be able to re-configure Swift again. +message.advanced.virtual=V\u00e1laszd ezt, ha z\u00f3na-szint\u0171 VLAN-okat szeretn\u00e9l haszn\u00e1lni a vend\u00e9g VM-ek izol\u00e1ci\u00f3j\u00e1ra\! +message.after.enable.s3=Az S3-alap\u00fa m\u00e1sodlagos t\u00e1r konfigur\u00e1ci\u00f3ja k\u00e9sz. Megjegyz\u00e9s\: miut\u00e1n elhagytad ezt az oldalt, nem tudod majd az S3-at ism\u00e9t konfigur\u00e1lni. +message.after.enable.swift=A Swift konfigur\u00e1ci\u00f3ja k\u00e9sz. Megjegyz\u00e9s\: miut\u00e1n elhagytad ezt az oldalt, nem tudod majd \u00fajrakonfigur\u00e1lni a Swift-et\! message.alert.state.detected=Alert state detected message.allow.vpn.access=Add meg a VPN felhaszn\u00e1l\u00f3 nev\u00e9t \u00e9s jelszav\u00e1t -message.apply.snapshot.policy=You have successfully updated your current snapshot policy. +message.apply.snapshot.policy=Sikeresen m\u00f3dos\u00edtottad a jelenlegi pillanatfelv\u00e9tel szab\u00e1lyzatodat\! message.attach.iso.confirm=Er\u0151s\u00edtsd meg, hogy az ISO-t ehhez a virtu\u00e1lis g\u00e9phez akarod csatolni\! message.attach.volume=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat a k\u00f6tet csatlakoztat\u00e1s\u00e1hoz\! Ha Windows-alap\u00fa virtu\u00e1lis g\u00e9phez csatlakoztatsz merevlemezt, akkor \u00fajra kell ind\u00edtanod a p\u00e9ld\u00e1nyt ahhoz, hogy l\u00e1sd a merevlemezt. message.basic.mode.desc=Akkor v\u00e1laszd ezt a h\u00e1l\u00f3zati modellt, ha *nem* akarsz VLAN t\u00e1mogat\u00e1st bekapcsolni. Ezen a h\u00e1l\u00f3zaton minden p\u00e9ld\u00e1ny k\u00f6zvetlen\u00fcl a h\u00e1l\u00f3zatt\u00f3l kap IP c\u00edmet \u00e9s a biztons\u00e1gi csoportok szolg\u00e1ltatnak biztons\u00e1got \u00e9s szegreg\u00e1ci\u00f3t. @@ -1753,13 +1756,13 @@ message.change.password=V\u00e1ltoztass jelsz\u00f3t\! message.cluster.dedicated=F\u00fcrt dedik\u00e1lva message.cluster.dedication.released=F\u00fcrt dedik\u00e1l\u00e1s elengedve message.configure.all.traffic.types=T\u00f6bb fizikai h\u00e1l\u00f3zatod van. Kattints a \\'Szerkeszt\u00e9s\\' gombra \u00e9s \u00e1ll\u00edts be c\u00edmk\u00e9ket minden egyes forgalom t\u00edpushoz\! -message.configure.ldap=Please confirm you would like to configure LDAP. +message.configure.ldap=Er\u0151s\u00edtsd meg, hogy szeretn\u00e9l LDAP-t konfigur\u00e1lni\! message.configuring.guest.traffic=Vend\u00e9g forgalom konfigur\u00e1l\u00e1sa message.configuring.physical.networks=Fizikai h\u00e1l\u00f3zatok konfigur\u00e1l\u00e1sa message.configuring.public.traffic=Publikus forgalom konfigur\u00e1l\u00e1sa message.configuring.storage.traffic=T\u00e1r forgalom konfigur\u00e1l\u00e1sa message.confirm.action.force.reconnect=Er\u0151s\u00edtsd meg, hogy \u00fajrakapcsol\u00f3dni akarsz a kiszolg\u00e1l\u00f3hoz\! -message.confirm.add.vnmc.provider=Please confirm you would like to add the VNMC provider. +message.confirm.add.vnmc.provider=Er\u0151s\u00edtsd meg, hogy fel szeretn\u00e9d venni a VNMC szolg\u00e1ltat\u00f3t. message.confirm.archive.alert=Er\u0151s\u00edtsd meg, hogy archiv\u00e1lni akarod ezt a riaszt\u00e1st\! message.confirm.archive.event=Er\u0151s\u00edtsd meg, hogy archiv\u00e1lni szeretn\u00e9d az esem\u00e9nyt\! message.confirm.archive.selected.alerts=Er\u0151s\u00edtsd meg, hogy le akarod archiv\u00e1lni a kiv\u00e1lasztott riaszt\u00e1sokat\! @@ -1777,7 +1780,7 @@ message.confirm.delete.baremetal.rack.configuration=Er\u0151s\u00edtsd meg, hogy message.confirm.delete.BigSwitchBcf=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d ezt a BigSwitch BCF vez\u00e9rl\u0151t\! message.confirm.delete.BrocadeVcs=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d a Brocade Vcs Switch-et message.confirm.delete.ciscoASA1000v=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a CiscoASA1000v-t -message.confirm.delete.ciscovnmc.resource=Please confirm you want to delete CiscoVNMC resource +message.confirm.delete.ciscovnmc.resource=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a CiscoVNMC er\u0151forr\u00e1st\! message.confirm.delete.F5=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d az F5-\u00f6t message.confirm.delete.internal.lb=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod ezt a bels\u0151 LB-t\! message.confirm.delete.NetScaler=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d a NetScaler-t @@ -1790,12 +1793,12 @@ message.confirm.destroy.router=Er\u0151s\u00edtsd meg, hogy el akarod puszt\u00e message.confirm.disable.host=Er\u0151s\u00edtsd meg, hogy ki akarod kapcsolni a kiszolg\u00e1l\u00f3t message.confirm.disable.network.offering=Biztos vagy abban, hogy ki akarod kapcsolni ezt a h\u00e1l\u00f3zat aj\u00e1nlatot? message.confirm.disable.provider=Er\u0151s\u00edtsd meg, hogy ki akarod kapcsolni ezt a szolg\u00e1ltat\u00f3t -message.confirm.disable.vnmc.provider=Please confirm you would like to disable the VNMC provider. +message.confirm.disable.vnmc.provider=Er\u0151s\u00edtsd meg, hogy ki szeretn\u00e9d kapcsolni a VNMC szolg\u00e1ltat\u00f3t\! message.confirm.disable.vpc.offering=Biztos vagy abban, hogy ki akarod kapcsolni ezt a VPC aj\u00e1nlatot? message.confirm.enable.host=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni a kiszolg\u00e1l\u00f3t message.confirm.enable.network.offering=Biztos vagy abban, hogy be akarod kapcsolni ezt a h\u00e1l\u00f3zati aj\u00e1nlatot? message.confirm.enable.provider=Er\u0151s\u00edtsd meg, hogy be szeretn\u00e9d kapcsolni ezt a szolg\u00e1ltat\u00f3t -message.confirm.enable.vnmc.provider=Please confirm you would like to enable the VNMC provider. +message.confirm.enable.vnmc.provider=Er\u0151s\u00edtsd meg, hogy be szeretn\u00e9d kapcsolni a VNMC szolg\u00e1ltat\u00f3t\! message.confirm.enable.vpc.offering=Biztos vagy abban, hogy be akarod kapcsolni ezt a VPC aj\u00e1nlatot? message.confirm.join.project=Er\u0151s\u00edtsd meg, hogy csatlakozni szeretn\u00e9l a projekthez message.confirm.migrate.volume=El akarod k\u00f6lt\u00f6ztetni ezt a k\u00f6tetet? @@ -1804,7 +1807,7 @@ message.confirm.release.dedicated.cluster=El akarod engedni ezt a dedik\u00e1lt message.confirm.release.dedicated.host=El akarod engedni ezt a dedik\u00e1lt kiszolg\u00e1l\u00f3t? message.confirm.release.dedicated.pod=El akarod engedni ezt a dedik\u00e1lt pod-ot? message.confirm.release.dedicated.zone=El akarod engedni ezt a dedik\u00e1lt z\u00f3n\u00e1t? -message.confirm.release.dedicate.vlan.range=Please confirm you want to release dedicated VLAN range +message.confirm.release.dedicate.vlan.range=Er\u0151s\u00edtsd meg, hogy elengeded a dedik\u00e1lt VLAN tartom\u00e1nyt\! message.confirm.remove.event=Biztosan t\u00f6r\u00f6lni szeretn\u00e9d ezt az esem\u00e9nyt? message.confirm.remove.IP.range=Er\u0151s\u00edtsd meg, hogy el akarod t\u00e1vol\u00edtani ezt az IP tartom\u00e1nyt message.confirm.remove.load.balancer=Er\u0151s\u00edtsd meg, hogy el akarod t\u00e1vol\u00edtani a VM-et a terhel\u00e9seloszt\u00f3r\u00f3l\! @@ -1819,10 +1822,10 @@ message.confirm.scale.up.system.vm=Biztosan fel akarod m\u00e9retezni a rendszer message.confirm.shutdown.provider=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani ezt a szolg\u00e1ltat\u00f3t message.confirm.start.lb.vm=Er\u0151s\u00edtsd meg, hogy el akarod ind\u00edtani az LB VM-et\! message.confirm.stop.lb.vm=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani az LB VM-et\! -message.confirm.upgrade.router.newer.template=Please confirm that you want to upgrade router to use newer template +message.confirm.upgrade.router.newer.template=Er\u0151s\u00edtsd meg, hogy a routert \u00faj sablonnal akarod friss\u00edteni\! message.confirm.upgrade.routers.account.newtemplate=Er\u0151s\u00edtsd meg, hogy minden a sz\u00e1mla minden router\u00e9t friss\u00edteni akarod az \u00faj sablonnal\! message.confirm.upgrade.routers.cluster.newtemplate=Please confirm that you want to upgrade all routers in this cluster to use newer template -message.confirm.upgrade.routers.newtemplate=Please confirm that you want to upgrade all routers in this zone to use newer template +message.confirm.upgrade.routers.newtemplate=Er\u0151s\u00edtsd meg, hogy a z\u00f3na minden router\u00e9t friss\u00edteni akarod \u00faj sablonnal\! message.confirm.upgrade.routers.pod.newtemplate=Please confirm that you want to upgrade all routers in this pod to use newer template message.copy.iso.confirm=Er\u0151s\u00edtsd meg, hogy az ISO-t m\u00e1solni akarod\: message.copy.template=A XXX sablon m\u00e1sol\u00e1sa a z\u00f3n\u00e1b\u00f3l a @@ -1878,8 +1881,8 @@ message.enable.account=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni ezt a sz message.enabled.vpn=A t\u00e1voli hozz\u00e1f\u00e9r\u00e9s\u0171 VPN jelenleg be van kapcsolva \u00e9s hozz\u00e1f\u00e9rhet\u0151 az IP c\u00edmmel message.enabled.vpn.ip.sec=Your IPSec pre-shared key is message.enable.user=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni ezt a felhaszn\u00e1l\u00f3t\! -message.enable.vpn.access=VPN is currently disabled for this IP Address. Would you like to enable VPN access? -message.enable.vpn=Please confirm that you want Remote Access VPN enabled for this IP address. +message.enable.vpn.access=A VPN jelenleg ki van kapcsolva erre az IP c\u00edmre. Szeretn\u00e9d bekapcsolni a VPN hozz\u00e1f\u00e9r\u00e9st? +message.enable.vpn=Er\u0151s\u00edtsd meg, hogy be szeretn\u00e9d kapcsolni a t\u00e1voli hozz\u00e1f\u00e9r\u00e9s\u0171 VPN-t ehhez az IP c\u00edmhez\! message.enabling.network.offering=H\u00e1l\u00f3zat aj\u00e1nlat bekapcsol\u00e1sa message.enabling.security.group.provider=Biztons\u00e1gi csoport szolg\u00e1ltat\u00f3 bekapcsol\u00e1sa message.enabling.vpc.offering=VPC aj\u00e1nlat bekapcsol\u00e1sa @@ -1930,21 +1933,21 @@ message.installWizard.tooltip.configureGuestTraffic.guestStartIp=The range of IP message.installWizard.tooltip.configureGuestTraffic.name=A h\u00e1l\u00f3zat neve message.instance.scaled.up.confirm=T\u00e9nyleg nagyobbra akarod m\u00e9retezni a p\u00e9ld\u00e1nyt? message.instanceWizard.noTemplates=You do not have any templates available; please add a compatible template, and re-launch the instance wizard. -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.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.launch.vm.on.private.network=Do you wish to launch your instance on your own private dedicated network? +message.ip.address.changed=Az IP c\u00edmid megv\u00e1ltzhattak, szeretn\u00e9d friss\u00edteni a list\u00e1t? Ebben az esetben a r\u00e9szletek f\u00fcl be fog z\u00e1rulni. +message.iso.desc=A merevlemez k\u00e9p, amely az ind\u00edthat\u00f3 oper\u00e1ci\u00f3s rendszert tartalmazza +message.join.project=Csatlakozt\u00e1l egy projekthez. V\u00e1lts a projekt n\u00e9zetre\! +message.launch.vm.on.private.network=Szeretn\u00e9d a saj\u00e1t dedik\u00e1lt h\u00e1l\u00f3zatodon ind\u00edtani a p\u00e9ld\u00e1nyt? message.launch.zone=A z\u00f3na k\u00e9szen \u00e1ll az ind\u00edt\u00e1sra, folytasd a k\u00f6vetkez\u0151 l\u00e9p\u00e9ssel message.listView.subselect.multi=(Ctrl/Cmd-kattint\u00e1s) -message.lock.account=Please confirm that you want to lock this account. By locking the account, all users for this account will no longer be able to manage their cloud resources. Existing resources can still be accessed. +message.lock.account=Er\u0151s\u00edtsd meg, hogy z\u00e1rolni akarod ezt a sz\u00e1ml\u00e1t. A sz\u00e1mla z\u00e1rol\u00e1s\u00e1val a sz\u00e1mla felhaszn\u00e1l\u00f3i nem lesznek k\u00e9pesek a felh\u0151 er\u0151forr\u00e1saikat vez\u00e9relni. A l\u00e9tez\u0151 er\u0151forr\u00e1sok tov\u00e1bbra is hozz\u00e1f\u00e9rhet\u0151ek lesznek. message.migrate.instance.confirm=Er\u0151s\u00edtsd meg a kiszolg\u00e1l\u00f3 v\u00e1laszt\u00e1st, ahova a virtu\u00e1lis g\u00e9pet mozgatn\u00e1d\! message.migrate.instance.to.host=Er\u0151s\u00edtsd meg, hogy m\u00e1sik kiszolg\u00e1l\u00f3ra akarod mozgatni a p\u00e9ld\u00e1nyt\! -message.migrate.instance.to.ps=Please confirm that you want to migrate instance to another primary storage. -message.migrate.router.confirm=Please confirm the host you wish to migrate the router to\: -message.migrate.systemvm.confirm=Please confirm the host you wish to migrate the system VM to\: +message.migrate.instance.to.ps=Er\u0151s\u00edtsd meg, hogy a p\u00e9ld\u00e1nyt m\u00e1sik els\u0151dleges t\u00e1rra szeretn\u00e9d mozgatni\! +message.migrate.router.confirm=Er\u0151s\u00edtsd meg, hogy a routert mozgatni szeretn\u00e9d a k\u00f6vetkez\u0151 c\u00e9lpontra\: +message.migrate.systemvm.confirm=Er\u0151s\u00edtsd meg, hogy a rendszer VM-et a k\u00f6vetkez\u0151 c\u00e9lpontra szeretn\u00e9d mozgatni\: message.migrate.volume=Er\u0151s\u00edtsd meg, hogy m\u00e1sik els\u0151dleges t\u00e1rra akarod mozgatni a k\u00f6tetet message.network.addVM.desc=Please specify the network that you would like to add this VM to. A new NIC will be added for this network. -message.network.addVMNIC=Please confirm that you would like to add a new VM NIC for this network. +message.network.addVMNIC=Er\u0151s\u00edtsd meg, hogy szeretn\u00e9l egy \u00faj VM NIC-et ehhez a h\u00e1l\u00f3zathoz\! message.new.user=A k\u00f6vetkez\u0151ket adja meg \u00faj sz\u00e1mla l\u00e9trehoz\u00e1s\u00e1hoz message.no.affinity.groups=Nincsenek affin\u00edt\u00e1si csoportaid. K\u00e9rlek folytasd a k\u00f6vetkez\u0151 l\u00e9p\u00e9ssel\! message.no.host.available=Nincs el\u00e9rhet\u0151 kiszolg\u00e1l\u00f3 az \u00e1tk\u00f6lt\u00f6ztet\u00e9shez @@ -1959,46 +1962,47 @@ message.number.storage=

Els\u0151dleges t\u00e1r k\u00f6teteksz\u00e1ma message.number.zones=

Z\u00f3n\u00e1k sz\u00e1ma

message.pending.projects.1=Projekt megh\u00edv\u00f3k v\u00e1rnak r\u00e1d\: message.pending.projects.2=A megtekint\u00e9shez menj a projektek szekci\u00f3hoz \u00e9s v\u00e1laszd a megh\u00edv\u00f3kat a leg\u00f6rd\u00fcl\u0151 men\u00fcb\u0151l\! -message.please.add.at.lease.one.traffic.range=Please add at least one traffic range. -message.please.proceed=Please proceed to the next step. -message.please.select.a.configuration.for.your.zone=Please select a configuration for your zone. +message.please.add.at.lease.one.traffic.range=Adj meg legal\u00e1bb egy forgalom tartom\u00e1nyt\! +message.please.proceed=Menj tov\u00e1bb a k\u00f6vetkez\u0151 l\u00e9p\u00e9shez\! +message.please.select.a.configuration.for.your.zone=V\u00e1lassz konfigur\u00e1ci\u00f3t a z\u00f3n\u00e1dnak\! message.please.select.a.different.public.and.management.network.before.removing=Please select a different public and management network before removing -message.please.select.networks=Please select networks for your virtual machine. -message.please.wait.while.zone.is.being.created=Please wait while your zone is being created; this may take a while... +message.please.select.networks=V\u00e1lassz h\u00e1l\u00f3zatokat a virtu\u00e1lis g\u00e9pedhez\! +message.please.wait.while.zone.is.being.created=K\u00e9rlek v\u00e1rj, am\u00edg a z\u00f3n\u00e1d l\u00e9trej\u00f6n. Ez eltarthat egy ideig... message.pod.dedication.released=Pod dedik\u00e1ci\u00f3 elengedve -message.portable.ip.delete.confirm=Please confirm you want to delete Portable IP Range -message.project.invite.sent=Invite sent to user; they will be added to the project once they accept the invitation +message.portable.ip.delete.confirm=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a hordozhat\u00f3 IP tartom\u00e1nyt\! +message.project.invite.sent=Megh\u00edv\u00f3 elk\u00fcldve a felhaszn\u00e1l\u00f3nak. A felhaszn\u00e1l\u00f3 akkor ker\u00fcl a projektbe, amikor elfogadja a megh\u00edv\u00f3t. message.public.traffic.in.advanced.zone=Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.

Provide at least one range of IP addresses for internet traffic. -message.public.traffic.in.basic.zone=Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire additional IPs to implement static NAT between their instances and the public IP. -message.read.admin.guide.scaling.up=Please read the dynamic scaling section in the admin guide before scaling up. +message.public.traffic.in.basic.zone=A publikus forgalom akkor keletkezik, amikor a felh\u0151 virtu\u00e1lis g\u00e9pei hozz\u00e1f\u00e9rnek az internethez vagy az interneten szolg\u00e1ltat\u00e1sokat biztos\u00edtanak. Publikusan el\u00e9rhet\u0151 IP c\u00edmeket kell erre a c\u00e9lra elk\u00fcl\u00f6n\u00edteni. Amikor l\u00e9trej\u00f6n egy p\u00e9ld\u00e1ny, ezekb\u0151l a publikus IP c\u00edmekb\u0151l kap egyet a p\u00e9ld\u00e1ny a vend\u00e9g IP c\u00edmen k\u00edv\u00fcl. Statikus 1-1 NAT lesz be\u00e1ll\u0167va a publikus \u00e9s a vend\u00e9g IP c\u00edmek k\u00f6z\u00f6tt. V\u00e9gfelhaszn\u00e1l\u00f3k haszn\u00e1lhatj\u00e1k a CloudStack fel\u00fcletet is \u00faj IP c\u00edmek beszerz\u00e9s\u00e9hez \u00e9s statikus NAT be\u00e1ll\u00edt\u00e1s\u00e1hoz. +message.read.admin.guide.scaling.up=Olvasd el az adminisztr\u00e1torok \u00fatmutat\u00f3j\u00e1ban a dinamikus m\u00e9retez\u00e9sre vonatkoz\u00f3 r\u00e9szt miel\u0151tt folytatod\! message.recover.vm=Er\u0151s\u00edtsd meg, hogy helyre akarod \u00e1ll\u00edtani a VM-et. -message.redirecting.region=Redirecting to region... +message.redirecting.region=\u00c1tir\u00e1ny\u00edt\u00e1s r\u00e9gi\u00f3ba... message.reinstall.vm=Figyelmeztet\u00e9s\: \u00d3vatosan\! Ha folytatod, a VM \u00fajra lesz telep\u00edtve a sablon alapj\u00e1n, a f\u0151 lemez\u00e9n tal\u00e1lhat\u00f3 adat elveszik. Amennyiben vannak tov\u00e1bbi merevlemezek, azok \u00e9rintetlenek maradnak. message.remove.ldap=Biztosan t\u00f6r\u00f6lni akarod az LDAP konfigur\u00e1ci\u00f3t? -message.remove.region=Are you sure you want to remove this region from this management server? -message.remove.vpc=Please confirm that you want to remove the VPC -message.remove.vpn.access=Please confirm that you want to remove VPN access from the following user. +message.remove.region=Biztosan t\u00f6r\u00f6lni akarod ezt a r\u00e9gi\u00f3t err\u0151l a vez\u00e9rl\u0151 szerverr\u0151l? +message.remove.vpc=Er\u0151s\u00edtsd meg, hoy el akarod t\u00e1vol\u00edtani ezt a VPC-t\! +message.remove.vpn.access=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a k\u00f6vetkez\u0151 felhaszn\u00e1l\u00f3 VPN hozz\u00e1f\u00e9r\u00e9s\u00e9t\! message.reset.password.warning.notPasswordEnabled=A p\u00e9ld\u00e1ny sablonja jelsz\u00f3 bekapcsol\u00e1sa n\u00e9lk\u00fcl lett l\u00e9trehozva message.reset.password.warning.notStopped=A p\u00e9ld\u00e1nyt le kell \u00e1ll\u00edtanod, miel\u0151tt megpr\u00f3b\u00e1ln\u00e1l jelsz\u00f3t be\u00e1ll\u00edtani. -message.reset.VPN.connection=Please confirm that you want to reset VPN connection -message.restart.mgmt.server=Please restart your management server(s) for your new settings to take effect. +message.reset.VPN.connection=Er\u0151s\u00edtsd meg, hogy alaphelyzetbe akarod \u00e1ll\u00edtani a VPN kapcsolatot\! +message.restart.mgmt.server=Ind\u00edtsd \u00fajra a vez\u00e9rl\u0151 szervert (szervereket) ahhoz, hogy az \u00faj be\u00e1ll\u00edt\u00e1s hat\u00e1lyba l\u00e9pjen\! message.restart.mgmt.usage.server=Please restart your management server(s) and usage server(s) for your new settings to take effect. -message.restart.network=All services provided by this network will be interrupted. Please confirm that you want to restart this network. -message.restart.vpc=Please confirm that you want to restart the VPC +message.restart.network=Megszakad minden szolg\u00e1ltat\u00e1s, amit a h\u00e1l\u00f3zat biztos\u00edt. Er\u0151s\u00edtsd meg, hogy \u00fajra akarod ind\u00edtani a h\u00e1l\u00f3zatot\! +message.restart.vpc=Er\u0151s\u00edtsd meg, hogy \u00fajra akarod ind\u00edtani a VPC-t\! +message.restart.vpc.remark=Er\u0151s\u00edtsd meg, hogy \u00fajra akarod ind\u00edtani a VPC-t\!

Megjegyz\u00e9s\: egy nem redund\u00e1ns VPC redund\u00e1nss\u00e1 t\u00e9tele takar\u00edt\u00e1st tesz sz\u00fcks\u00e9gess\u00e9. A h\u00e1l\u00f3zatok nem lesznek el\u00e9rhet\u0151ek egy p\u00e1r percig..

message.restoreVM=Helyre akarod \u00e1ll\u00edtani a VM-et? message.security.group.usage=(A Ctrl-kattint\u00e1s haszn\u00e1lat\u00e1val tudod az \u00f6sszes alkalmazhat\u00f3 biztons\u00e1gi csoportot kiv\u00e1lasztani) message.select.affinity.groups=V\u00e1lasszd ki azokat az affinit\u00e1si csoportokat, amelyekhez a VM tartozzon\: -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.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.a.zone=Egy z\u00f3na tipikusan egy adatk\u00f6zpontnak felel meg. T\u00f6bb z\u00f3na seg\u00edthet a felh\u0151t megb\u00edzhat\u00f3bb\u00e1 tenni fizikai izol\u00e1ci\u00f3val \u00e9s redundanci\u00e1val. +message.select.instance=V\u00e1lassz egy p\u00e9ld\u00e1nyt\! +message.select.iso=V\u00e1lassz egy ISO-t az \u00faj virtu\u00e1lis p\u00e9ld\u00e1nynak\! +message.select.item=V\u00e1lassz egy elemet\! message.select.security.groups=V\u00e1lassz biztons\u00e1gi csoportokat az \u00faj VM-hez\! -message.select.template=Please select a template for your new virtual instance. +message.select.template=V\u00e1lassz egy sablont az \u00faj virtu\u00e1lis p\u00e9ld\u00e1nynak\! message.select.tier=V\u00e1lassz egy r\u00e9teget\! -message.set.default.NIC.manual=Please manually update the default NIC on the VM now. -message.set.default.NIC=Please confirm that you would like to make this NIC the default for this VM. -message.setup.physical.network.during.zone.creation.basic=When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.

You may also drag and drop other traffic types onto the physical network. -message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.

Drag and drop one or more traffic types onto each physical network. +message.set.default.NIC=Er\u0151s\u00edtsd meg, hogy alap\u00e9rtelmezett\u00e9 szeretn\u00e9d tenni ezt a NIC-et a VM-ben\! +message.set.default.NIC.manual=Most manu\u00e1lisan m\u00f3dos\u00edtsd apal\u00e9rtelmezett NIC-et a VM-ben\! +message.setup.physical.network.during.zone.creation.basic=Alap z\u00f3na l\u00e9trehoz\u00e1sakor egy fizikai h\u00e1l\u00f3zatot hozhatsz l\u00e9tre amely hiperv\u00edzor h\u00e1l\u00f3zati k\u00e1rty\u00e1j\u00e1nak felel meg.

M\u00e1s forgalom-t\u00edpusokat is r\u00e1h\u00fazhatsz a fizikai h\u00e1l\u00f3zatra. +message.setup.physical.network.during.zone.creation=Halad\u00f3 z\u00f3na l\u00e9trehoz\u00e1sakor egy vagy t\u00f6bb fizikai h\u00e1l\u00f3zatot kell konfigur\u00e1lnod. Minden h\u00e1l\u00f3zat egy h\u00e1l\u00f3zati k\u00e1rty\u00e1nak felel meg a hiperv\u00edzoron. Minden fizikai h\u00e1l\u00f3zat egy vagy t\u00f6bb t\u00edpus\u00fa forgalmat bonyol\u00edthat, bizonyos megk\u00f6t\u00e9sekkel arra, hogy azokat hogyan lehet kombin\u00e1lni.

H\u00fazz egy vagy t\u00f6bb forgalom t\u00edpust minden fizikai h\u00e1l\u00f3zatra. message.setup.successful=A felh\u0151 be\u00e1ll\u00edt\u00e1sa sikeres\! message.snapshot.schedule=Az ism\u00e9tl\u0151d\u0151 pillanatfelv\u00e9teleket az al\u00e1bbi opci\u00f3k kiv\u00e1laszt\u00e1s\u00e1val tudod be\u00e1ll\u00edtani message.specifiy.tag.key.value=Please specify a tag key and value @@ -2013,7 +2017,7 @@ message.storage.traffic=Traffic between CloudStack\\'s internal resources, inclu message.suspend.project=Biztosan fel akarod f\u00fcggeszteni ezt a projektet? message.systems.vms.ready=A rendszer VM-ek elk\u00e9sz\u00fcltek. message.template.copying=A sablon m\u00e1sol\u00e1s alatt \u00e1ll. -message.template.desc=OS image that can be used to boot VMs +message.template.desc=Oper\u00e1ci\u00f3s rendszer k\u00e9p, amelyet a virtu\u00e1lis g\u00e9pek el tudnak ind\u00edtani message.tier.required=A r\u00e9teg k\u00f6telez\u0151. 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. @@ -2025,7 +2029,7 @@ message.tooltip.reserved.system.gateway=Az \u00e1tj\u00e1r\u00f3 a pod kiszolg\u message.tooltip.reserved.system.netmask=The network prefix that defines the pod subnet. Uses CIDR notation. message.tooltip.zone.name=N\u00e9v a z\u00f3n\u00e1nak. message.update.os.preference=Hat\u00e1rozz meg egy OS preferenci\u00e1t a kiszolg\u00e1l\u00f3hoz. Minden p\u00e9ld\u00e1ny, aminek hasonl\u00f3 preferenci\u00e1i vannak el\u0151sz\u00f6r ezen a kiszolg\u00e1l\u00f3n indul el. -message.update.resource.count=Please confirm that you want to update resource counts for this account. +message.update.resource.count=Er\u0151s\u00edtsd meg, hogy m\u00f3dos\u00edtani akarod a sz\u00e1mla er\u0151forr\u00e1sainak sz\u00e1m\u00e1t\! message.update.ssl.failed=Nem siker\u00fclt az SSL tan\u00fas\u00edtv\u00e1nyt m\u00f3dos\u00edtani message.update.ssl=Please submit a new X.509 compliant SSL certificate chain to be updated to each console proxy and secondary storage virtual instance\: message.update.ssl.succeeded=Az SSL tan\u00fas\u00edtv\u00e1nyok m\u00f3dos\u00edt\u00e1sa sikeres @@ -2038,7 +2042,7 @@ message.validate.email.address=Adj meg egy \u00e9rv\u00e9nyes e-mail c\u00edmet\ message.validate.equalto=\u00cdrd be ugyanazt az \u00e9rt\u00e9ket \u00fajra\! message.validate.fieldrequired=Ez a mez\u0151 k\u00f6telez\u0151. message.validate.fixfield=Jav\u00edtsd ki ez a mez\u0151t\! -message.validate.instance.name=Instance name can not be longer than 63 characters. Only ASCII letters a~z, A~Z, digits 0~9, hyphen are allowed. Must start with a letter and end with a letter or a digit. +message.validate.instance.name=A p\u00e9ld\u00e1ny neve nem lehet hosszabb 63 karaktern\u00e9l. Csak ASCII karakterek a-z \u00e9s A-Z, sz\u00e1mok 0-9 \u00e9s k\u00f6t\u0151jelek enged\u00e9lyezettek. Bet\u0171vel kell kezd\u0151dnie \u00e9s bet\u0171vel vagy sz\u00e1mmal kell v\u00e9gz\u0151dnie[ message.validate.invalid.characters=\u00c9rv\u00e9nytelen karakter; k\u00e9rlek jav\u00edtsd\! message.validate.max=Adj meg egy \u00e9rt\u00e9ket, ami legfeljebb {0}\! message.validate.maxlength=Legfeljebb {0} karaktert adj meg\! @@ -2050,8 +2054,8 @@ message.validate.URL=Adj meg egy \u00e9rv\u00e9nyes URL-t\! message.virtual.network.desc=A dedicated virtualized network for your account. The broadcast domain is contained within a VLAN and all public network access is routed out by a virtual router. message.vm.create.template.confirm=Sablon l\u00e9trehoz\u00e1sa automatikusan \u00fajraind\u00edtja a VM-et\! message.vm.review.launch=Please review the following information and confirm that your virtual instance is correct before launch. -message.vnmc.available.list=VNMC is not available from provider list. -message.vnmc.not.available.list=VNMC is not available from provider list. +message.vnmc.available.list=VNMC nem el\u00e9rhet\u0151 a szolg\u00e1ltat\u00f3 list\u00e1r\u00f3l. +message.vnmc.not.available.list=VNMC nem el\u00e9rhet\u0151 a szolg\u00e1ltat\u00f3 list\u00e1r\u00f3l. message.volume.create.template.confirm=Please confirm that you wish to create a template for this disk volume. Creation of the template can range from several minutes to longer depending on the size of the volume. message.waiting.for.builtin.templates.to.load=V\u00e1rakoz\u00e1s a be\u00e9p\u00edtett sablonk bet\u00f6lt\u00e9s\u00e9re... message.XSTools61plus.update.failed=Failed to update Original XS Version is 6.1\\+ field. Error\: @@ -2059,11 +2063,11 @@ message.you.must.have.at.least.one.physical.network=Sz\u00fcks\u00e9ged van lega message.your.cloudstack.is.ready=A CloudStack k\u00e9szen \u00e1ll\! message.Zone.creation.complete=A z\u00f3na l\u00e9trehoz\u00e1sa befejez\u0151d\u00f6tt message.zone.creation.complete.would.you.like.to.enable.this.zone=A z\u00f3na l\u00e9trehoz\u00e1sa befejez\u0151d\u00f6tt. Szeretn\u00e9d bekapcsolni a z\u00f3n\u00e1t? -message.zone.no.network.selection=The zone you selected does not have any choices for network selection. -message.zone.step.1.desc=Please select a network model for your zone. -message.zone.step.2.desc=Please enter the following info to add a new zone -message.zone.step.3.desc=Please enter the following info to add a new pod -message.zoneWizard.enable.local.storage=WARNING\: If you enable local storage for this zone, you must do the following, depending on where you would like your system VMs to launch\:

1. If system VMs need to be launched in shared primary storage, shared primary storage needs to be added to the zone after creation. You must also start the zone in a disabled state.

2. If system VMs need to be launched in local primary storage, system.vm.use.local.storage needs to be set to true before you enable the zone.


Would you like to continue? +message.zone.no.network.selection=A kiv\u00e1lasztott z\u00f3n\u00e1ban nem v\u00e1laszthat\u00f3 ki h\u00e1l\u00f3zat. +message.zone.step.1.desc=V\u00e1lassz h\u00e1l\u00f3zat modellt a z\u00f3n\u00e1dnak\! +message.zone.step.2.desc=Add meg a k\u00f6vetkez\u0151 inform\u00e1ci\u00f3kat az \u00faj z\u00f3n\u00e1hoz +message.zone.step.3.desc=Add meg a k\u00f6vetkez\u0151 inform\u00e1ci\u00f3kat az \u00faj pod-hoz +message.zoneWizard.enable.local.storage=Figyelmeztet\u00e9s\: Ha bekapcsolod a helyi t\u00e1rat ebben a z\u00f3n\u00e1ban, akkor a k\u00f6vetkez\u0151t kell tenned att\u00f3l f\u00fcgg\u0151en, hogy hol szeretn\u00e9d elind\u00edtani a rendszer VM-eket\:

1. Ha a rendszer VM-eknek osztott els\u0151dleges t\u00e1ron kell futnia, akkor egy elosztott t\u00e1rat kell l\u00e9trehoznod a z\u00f3na l\u00e9trej\u00f6tte ut\u00e1n. A z\u00f3n\u00e1t kikapcsolt \u00e1llapotban kell elind\u00edtanod.

2. Ha a rendszer VM-eknek helyi els\u0151dleges t\u00e1ron kell futni, akkor a system.vm.use.local.storage \u00e9rt\u00e9k\u00e9t true-ra kell \u00e1ll\u00edtani miel\u00f6tt a z\u00f3n\u00e1t bekapcsolod.


Szeretn\u00e9d folytatni? messgae.validate.min=Adj meg egy \u00e9rt\u00e9ket, ami legal\u00e1bb {0}\! mode=M\u00f3d network.rate=H\u00e1l\u00f3zati r\u00e1ta diff --git a/client/WEB-INF/classes/resources/messages_ja_JP.properties b/client/WEB-INF/classes/resources/messages_ja_JP.properties index 0ca114f50b8..f4341566d10 100644 --- a/client/WEB-INF/classes/resources/messages_ja_JP.properties +++ b/client/WEB-INF/classes/resources/messages_ja_JP.properties @@ -14,64 +14,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -label.add.ldap.account=LDAP \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 -label.vm.ip=VM IP \u30a2\u30c9\u30ec\u30b9 -message.listView.subselect.multi=(Ctrl/Cmd \u30ad\u30fc\u3092\u62bc\u3057\u306a\u304c\u3089\u30af\u30ea\u30c3\u30af) -label.use.vm.ips=\u6b21\u306e VM IP \u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528 -label.reinstall.vm=VM \u306e\u518d\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb -message.reinstall.vm=\u6ce8: \u6ce8\u610f\u3057\u3066\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u3088\u308a VM \u304c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u518d\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\u30eb\u30fc\u30c8 \u30c7\u30a3\u30b9\u30af\u4e0a\u306e\u30c7\u30fc\u30bf\u306f\u5931\u308f\u308c\u307e\u3059\u3002\u8ffd\u52a0\u306e\u30c7\u30fc\u30bf \u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u305d\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u5f71\u97ff\u306f\u3042\u308a\u307e\u305b\u3093\u3002 -label.recover.vm=VM \u306e\u5fa9\u5143 -message.recover.vm=\u3053\u306e VM \u3092\u5fa9\u5143\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -label.port=\u30dd\u30fc\u30c8 -label.remove.ldap=LDAP \u306e\u524a\u9664 -label.configure.ldap=LDAP \u306e\u69cb\u6210 -label.ldap.configuration=LDAP \u69cb\u6210 -label.ldap.port=LDAP \u30dd\u30fc\u30c8 -label.create.nfs.secondary.staging.store=NFS \u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u3092\u4f5c\u6210\u3059\u308b -label.volatile=\u63ee\u767a\u6027 -label.planner.mode=\u30d7\u30e9\u30f3\u30ca\u30fc \u30e2\u30fc\u30c9 -label.deployment.planner=\u5c55\u958b\u30d7\u30e9\u30f3\u30ca\u30fc -label.quiesce.vm=VM \u3092\u4f11\u6b62\u3059\u308b -label.smb.username=SMB \u30e6\u30fc\u30b6\u30fc\u540d -label.smb.password=SMB \u30d1\u30b9\u30ef\u30fc\u30c9 -label.smb.domain=SMB \u30c9\u30e1\u30a4\u30f3 -label.hypervisors=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc -label.home=\u30db\u30fc\u30e0 -label.sockets=CPU \u30bd\u30b1\u30c3\u30c8 -label.root.disk.size=\u30eb\u30fc\u30c8 \u30c7\u30a3\u30b9\u30af \u30b5\u30a4\u30ba -label.s3.nfs.server=S3 NFS \u30b5\u30fc\u30d0\u30fc -label.s3.nfs.path=S3 NFS \u30d1\u30b9 -label.delete.events=\u30a4\u30d9\u30f3\u30c8\u306e\u524a\u9664 -label.delete.alerts=\u30a2\u30e9\u30fc\u30c8\u306e\u524a\u9664 -label.archive.alerts=\u30a2\u30e9\u30fc\u30c8\u306e\u30a2\u30fc\u30ab\u30a4\u30d6 -label.archive.events=\u30a4\u30d9\u30f3\u30c8\u306e\u30a2\u30fc\u30ab\u30a4\u30d6 -label.by.alert.type=\u30a2\u30e9\u30fc\u30c8\u306e\u7a2e\u985e -label.by.event.type=\u30a4\u30d9\u30f3\u30c8\u306e\u7a2e\u985e -label.by.date.start=\u65e5\u4ed8 (\u958b\u59cb) -label.by.date.end=\u65e5\u4ed8 (\u7d42\u4e86) -label.switch.type=\u30b9\u30a4\u30c3\u30c1\u306e\u7a2e\u985e -label.service.state=\u30b5\u30fc\u30d3\u30b9\u306e\u72b6\u614b -label.egress.default.policy=\u9001\u4fe1\u306e\u30c7\u30d5\u30a9\u30eb\u30c8 \u30dd\u30ea\u30b7\u30fc -label.routing=\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 -label.hvm=HVM -label.about=\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 -label.app.name=CloudStack -label.about.app=CloudStack \u306b\u3064\u3044\u3066 -label.custom.disk.iops=\u30ab\u30b9\u30bf\u30e0 IOPS -label.disk.iops.min=\u6700\u5c0f IOPS -label.disk.iops.max=\u6700\u5927 IOPS -label.disk.iops.total=IOPS \u5408\u8a08 -label.hypervisor.snapshot.reserve=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u4e88\u7d04 -label.secondary.ips=\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9 -label.edit.secondary.ips=\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306e\u7de8\u96c6 -label.view.secondary.ips=\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306e\u8868\u793a -message.validate.invalid.characters=\u7121\u52b9\u306a\u6587\u5b57\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u4fee\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.acquire.ip.nic=\u3053\u306e NIC \u306e\u305f\u3081\u306b\u65b0\u3057\u3044\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
\u6ce8: \u65b0\u3057\u304f\u53d6\u5f97\u3057\u305f\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306f\u4eee\u60f3\u30de\u30b7\u30f3\u5185\u3067\u624b\u52d5\u3067\u69cb\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -message.select.affinity.groups=\u3053\u306e VM \u3092\u8ffd\u52a0\u3059\u308b\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.no.affinity.groups=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u6b21\u306e\u624b\u9806\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002 -label.action.delete.nic=NIC \u306e\u524a\u9664 -message.action.delete.nic=\u3053\u306e NIC \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3082 VM \u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002 -changed.item.properties=\u5909\u66f4\u3055\u308c\u305f\u9805\u76ee\u306e\u30d7\u30ed\u30d1\u30c6\u30a3 + +changed.item.properties=\u9805\u76ee\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u5909\u66f4 confirm.enable.s3=S3 \u30d9\u30fc\u30b9\u306e\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 confirm.enable.swift=Swift \u306e\u30b5\u30dd\u30fc\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 error.could.not.change.your.password.because.ldap.is.enabled=\u30a8\u30e9\u30fc\u3002LDAP \u304c\u6709\u52b9\u306a\u305f\u3081\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002 @@ -87,39 +31,49 @@ error.session.expired=\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u6709\u52b9\u671f\u96 error.something.went.wrong.please.correct.the.following=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u6b21\u306e\u5185\u5bb9\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044 error.unable.to.reach.management.server=\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u3068\u901a\u4fe1\u3067\u304d\u307e\u305b\u3093 error.unresolved.internet.name=\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u540d\u3092\u89e3\u6c7a\u3067\u304d\u307e\u305b\u3093\u3002 -label.extractable=\u62bd\u51fa\u53ef\u80fd force.delete.domain.warning=\u8b66\u544a\: \u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u5b50\u30c9\u30e1\u30a4\u30f3\u304a\u3088\u3073\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u305d\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002 force.delete=\u5f37\u5236\u7684\u306b\u524a\u9664\u3059\u308b force.remove.host.warning=\u8b66\u544a\: \u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u304c\u5f37\u5236\u7684\u306b\u505c\u6b62\u3055\u308c\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u304b\u3089\u3053\u306e\u30db\u30b9\u30c8\u304c\u5f37\u5236\u7684\u306b\u89e3\u9664\u3055\u308c\u307e\u3059\u3002 -force.remove=\u5f37\u5236\u7684\u306b\u524a\u9664\u3059\u308b +force.remove=\u5f37\u5236\u7684\u306b\u89e3\u9664\u3059\u308b force.stop.instance.warning=\u8b66\u544a\: \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5f37\u5236\u505c\u6b62\u306f\u3001\u6700\u7d42\u624b\u6bb5\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c7\u30fc\u30bf\u3092\u640d\u5931\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u52d5\u4f5c\u304c\u4e00\u8cab\u3057\u306a\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 force.stop=\u5f37\u5236\u7684\u306b\u505c\u6b62\u3059\u308b +hint.no.host.tags=\u30db\u30b9\u30c8\u30bf\u30b0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +hint.no.storage.tags=\u30b9\u30c8\u30ec\u30fc\u30b8\u30bf\u30b0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +hint.type.part.host.tag=\u30db\u30b9\u30c8\u30bf\u30b0\u306e\u7a2e\u985e +hint.type.part.storage.tag=\u30b9\u30c8\u30ec\u30fc\u30b8\u30bf\u30b0\u306e\u7a2e\u985e ICMP.code=ICMP \u30b3\u30fc\u30c9 ICMP.type=ICMP \u306e\u7a2e\u985e image.directory=\u753b\u50cf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea inline=\u76f4\u5217 instances.actions.reboot.label=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u518d\u8d77\u52d5 +label.about.app=CloudStack \u306b\u3064\u3044\u3066 +label.about=\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831 label.accept.project.invitation=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u62db\u5f85\u306e\u627f\u8afe label.account.and.security.group=\u30a2\u30ab\u30a6\u30f3\u30c8\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.account.id=\u30a2\u30ab\u30a6\u30f3\u30c8 ID +label.account.lower=\u30a2\u30ab\u30a6\u30f3\u30c8 label.account.name=\u30a2\u30ab\u30a6\u30f3\u30c8\u540d label.account.specific=\u30a2\u30ab\u30a6\u30f3\u30c8\u56fa\u6709 -label.account=\u30a2\u30ab\u30a6\u30f3\u30c8 label.accounts=\u30a2\u30ab\u30a6\u30f3\u30c8 +label.account=\u30a2\u30ab\u30a6\u30f3\u30c8 +label.acl=ACL +label.acl.id=ACL ID +label.acl.name=ACL \u540d +label.acl.replaced=ACL \u304c\u7f6e\u304d\u63db\u3048\u3089\u308c\u307e\u3057\u305f label.acquire.new.ip=\u65b0\u3057\u3044 IP \u30a2\u30c9\u30ec\u30b9\u306e\u53d6\u5f97 -label.acquire.new.secondary.ip=\u65b0\u3057\u3044\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306e\u53d6\u5f97 +label.acquire.new.secondary.ip=\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306e\u53d6\u5f97 label.action.attach.disk.processing=\u30c7\u30a3\u30b9\u30af\u3092\u30a2\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059... label.action.attach.disk=\u30c7\u30a3\u30b9\u30af\u306e\u30a2\u30bf\u30c3\u30c1 -label.action.attach.iso.processing=ISO \u3092\u30a2\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059... label.action.attach.iso=ISO \u306e\u30a2\u30bf\u30c3\u30c1 +label.action.attach.iso.processing=ISO \u3092\u30a2\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059... label.action.cancel.maintenance.mode.processing=\u4fdd\u5b88\u30e2\u30fc\u30c9\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u3066\u3044\u307e\u3059... label.action.cancel.maintenance.mode=\u4fdd\u5b88\u30e2\u30fc\u30c9\u306e\u30ad\u30e3\u30f3\u30bb\u30eb label.action.change.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u66f4 label.action.change.service.processing=\u30b5\u30fc\u30d3\u30b9\u3092\u5909\u66f4\u3057\u3066\u3044\u307e\u3059... label.action.change.service=\u30b5\u30fc\u30d3\u30b9\u306e\u5909\u66f4 -label.action.copy.ISO.processing=ISO \u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059... label.action.copy.ISO=ISO \u306e\u30b3\u30d4\u30fc -label.action.copy.template.processing=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059... +label.action.copy.ISO.processing=ISO \u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059.... +label.action.copy.template.processing=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059.... label.action.copy.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30b3\u30d4\u30fc label.action.create.template.from.vm=VM \u304b\u3089\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f5c\u6210 label.action.create.template.from.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u304b\u3089\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u4f5c\u6210 @@ -141,15 +95,16 @@ label.action.delete.firewall.processing=\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30 label.action.delete.firewall=\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u898f\u5247\u306e\u524a\u9664 label.action.delete.ingress.rule.processing=\u53d7\u4fe1\u898f\u5247\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.ingress.rule=\u53d7\u4fe1\u898f\u5247\u306e\u524a\u9664 -label.action.delete.IP.range.processing=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.IP.range=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u524a\u9664 -label.action.delete.ISO.processing=ISO \u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... +label.action.delete.IP.range.processing=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.ISO=ISO \u306e\u524a\u9664 +label.action.delete.ISO.processing=ISO \u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.load.balancer.processing=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u898f\u5247\u306e\u524a\u9664 label.action.delete.network.processing=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u524a\u9664 label.action.delete.nexusVswitch=Nexus 1000V \u306e\u524a\u9664 +label.action.delete.nic=NIC \u306e\u524a\u9664 label.action.delete.physical.network=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u524a\u9664 label.action.delete.pod.processing=\u30dd\u30c3\u30c9\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.delete.pod=\u30dd\u30c3\u30c9\u306e\u524a\u9664 @@ -178,8 +133,8 @@ label.action.destroy.systemvm.processing=\u30b7\u30b9\u30c6\u30e0 VM \u3092\u783 label.action.destroy.systemvm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u7834\u68c4 label.action.detach.disk.processing=\u30c7\u30a3\u30b9\u30af\u3092\u30c7\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059... label.action.detach.disk=\u30c7\u30a3\u30b9\u30af\u306e\u30c7\u30bf\u30c3\u30c1 -label.action.detach.iso.processing=ISO \u3092\u30c7\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059... label.action.detach.iso=ISO \u306e\u30c7\u30bf\u30c3\u30c1 +label.action.detach.iso.processing=ISO \u3092\u30c7\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059... label.action.disable.account.processing=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059... label.action.disable.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7121\u52b9\u5316 label.action.disable.cluster.processing=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059... @@ -231,8 +186,8 @@ label.action.enable.user.processing=\u30e6\u30fc\u30b6\u30fc\u3092\u6709\u52b9\u label.action.enable.user=\u30e6\u30fc\u30b6\u30fc\u306e\u6709\u52b9\u5316 label.action.enable.zone.processing=\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059... label.action.enable.zone=\u30be\u30fc\u30f3\u306e\u6709\u52b9\u5316 -label.action.expunge.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u62b9\u6d88 label.action.expunge.instance.processing=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u62b9\u6d88\u3057\u3066\u3044\u307e\u3059... +label.action.expunge.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u62b9\u6d88 label.action.force.reconnect.processing=\u518d\u63a5\u7d9a\u3057\u3066\u3044\u307e\u3059... label.action.force.reconnect=\u5f37\u5236\u518d\u63a5\u7d9a label.action.generate.keys.processing=\u30ad\u30fc\u3092\u751f\u6210\u3057\u3066\u3044\u307e\u3059... @@ -256,9 +211,8 @@ label.action.reboot.systemvm.processing=\u30b7\u30b9\u30c6\u30e0 VM \u3092\u518d label.action.reboot.systemvm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u518d\u8d77\u52d5 label.action.recurring.snapshot=\u5b9a\u671f\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 label.action.register.iso=ISO \u306e\u767b\u9332 -label.action.register.template=URL \u304b\u3089\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u767b\u9332 -label.action.release.ip.processing=IP \u30a2\u30c9\u30ec\u30b9\u3092\u89e3\u653e\u3057\u3066\u3044\u307e\u3059... label.action.release.ip=IP \u30a2\u30c9\u30ec\u30b9\u306e\u89e3\u653e +label.action.release.ip.processing=IP \u30a2\u30c9\u30ec\u30b9\u3092\u89e3\u653e\u3057\u3066\u3044\u307e\u3059... label.action.remove.host.processing=\u30db\u30b9\u30c8\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059... label.action.remove.host=\u30db\u30b9\u30c8\u306e\u524a\u9664 label.action.reset.password.processing=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3066\u3044\u307e\u3059... @@ -268,6 +222,8 @@ label.action.resize.volume=\u30dc\u30ea\u30e5\u30fc\u30e0 \u30b5\u30a4\u30ba\u30 label.action.resource.limits=\u30ea\u30bd\u30fc\u30b9\u5236\u9650 label.action.restore.instance.processing=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u5fa9\u5143\u3057\u3066\u3044\u307e\u3059... label.action.restore.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5fa9\u5143 +label.action.revert.snapshot.processing=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3057\u3066\u3044\u307e\u3059... +label.action.revert.snapshot=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3059 label.action.start.instance.processing=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059... label.action.start.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8d77\u52d5 label.action.start.router.processing=\u30eb\u30fc\u30bf\u30fc\u3092\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059... @@ -280,49 +236,74 @@ label.action.stop.router.processing=\u30eb\u30fc\u30bf\u30fc\u3092\u505c\u6b62\u label.action.stop.router=\u30eb\u30fc\u30bf\u30fc\u306e\u505c\u6b62 label.action.stop.systemvm.processing=\u30b7\u30b9\u30c6\u30e0 VM \u3092\u505c\u6b62\u3057\u3066\u3044\u307e\u3059... label.action.stop.systemvm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u505c\u6b62 +label.actions=\u64cd\u4f5c label.action.take.snapshot.processing=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059.... label.action.take.snapshot=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u4f5c\u6210 -label.action.revert.snapshot.processing=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3057\u3066\u3044\u307e\u3059... -label.action.revert.snapshot=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3059 -label.action.unmanage.cluster.processing=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u7ba1\u7406\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3057\u3066\u3044\u307e\u3059... -label.action.unmanage.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u7ba1\u7406\u5bfe\u8c61\u304b\u3089\u306e\u9664\u5916 -label.action.update.OS.preference.processing=OS \u57fa\u672c\u8a2d\u5b9a\u3092\u66f4\u65b0\u3057\u3066\u3044\u307e\u3059... +label.action=\u64cd\u4f5c +label.action.unmanage.cluster.processing=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u975e\u7ba1\u7406\u5bfe\u8c61\u306b\u3057\u3066\u3044\u307e\u3059... +label.action.unmanage.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u975e\u7ba1\u7406\u5bfe\u8c61\u5316 label.action.update.OS.preference=OS \u57fa\u672c\u8a2d\u5b9a\u306e\u66f4\u65b0 +label.action.update.OS.preference.processing=OS \u57fa\u672c\u8a2d\u5b9a\u3092\u66f4\u65b0\u3057\u3066\u3044\u307e\u3059... label.action.update.resource.count.processing=\u30ea\u30bd\u30fc\u30b9\u6570\u3092\u66f4\u65b0\u3057\u3066\u3044\u307e\u3059... label.action.update.resource.count=\u30ea\u30bd\u30fc\u30b9\u6570\u306e\u66f4\u65b0 label.action.vmsnapshot.create=VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u4f5c\u6210 label.action.vmsnapshot.delete=VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u524a\u9664 label.action.vmsnapshot.revert=VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3059 -label.actions=\u64cd\u4f5c label.activate.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u5316 label.active.sessions=\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30bb\u30c3\u30b7\u30e7\u30f3 -label.add.account.to.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 -label.add.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 label.add.accounts.to=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0\u5148\: label.add.accounts=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 +label.add.account.to.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 +label.add.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 label.add.ACL=ACL \u306e\u8ffd\u52a0 +label.add.acl.list=ACL \u4e00\u89a7\u306e\u8ffd\u52a0 label.add.affinity.group=\u65b0\u3057\u3044\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u306e\u8ffd\u52a0 -label.add.BigSwitchBcf.device=Big Switch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u8ffd\u52a0 +label.add.baremetal.dhcp.device=\u30d9\u30a2\u30e1\u30bf\u30eb DHCP \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 +label.add.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb\u30e9\u30c3\u30af\u8a2d\u5b9a\u306e\u8ffd\u52a0 +label.add.BigSwitchBcf.device=BigSwitch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8ffd\u52a0 +label.add.BrocadeVcs.device=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u306e\u8ffd\u52a0 label.add.by.cidr=CIDR \u3067\u8ffd\u52a0 label.add.by.group=\u30b0\u30eb\u30fc\u30d7\u3067\u8ffd\u52a0 label.add.by=\u8ffd\u52a0\u5358\u4f4d +label.add.ciscoASA1000v=Cisco ASA 1000V \u30ea\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0 label.add.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u8ffd\u52a0 label.add.compute.offering=\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 label.add.direct.iprange=\u76f4\u63a5 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8ffd\u52a0 label.add.disk.offering=\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 label.add.domain=\u30c9\u30e1\u30a4\u30f3\u306e\u8ffd\u52a0 +label.added.brocade.vcs.switch=\u65b0\u3057\u3044 Brocade VCS \u30b9\u30a4\u30c3\u30c1\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f +label.added.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f +label.added.new.bigswitch.bcf.controller=\u65b0\u3057\u3044 BigSwitch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f +label.added.nicira.nvp.controller=\u65b0\u3057\u3044 Nicira NVP Controller \u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f label.add.egress.rule=\u9001\u4fe1\u898f\u5247\u306e\u8ffd\u52a0 +label.addes.new.f5=\u65b0\u3057\u3044 F5 \u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f label.add.F5.device=F5 \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 label.add.firewall=\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u898f\u5247\u306e\u8ffd\u52a0 +label.add.globo.dns=GloboDNS \u306e\u8ffd\u52a0 +label.add.gslb=GSLB \u306e\u8ffd\u52a0 label.add.guest.network=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 -label.add.isolated.guest.network=\u5206\u96e2\u3055\u308c\u305f\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 label.add.host=\u30db\u30b9\u30c8\u306e\u8ffd\u52a0 +label.adding.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 +label.adding.failed=\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +label.adding.pod=\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 +label.adding.processing=\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059... label.add.ingress.rule=\u53d7\u4fe1\u898f\u5247\u306e\u8ffd\u52a0 +label.adding.succeeded=\u8ffd\u52a0\u3057\u307e\u3057\u305f +label.adding=\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 +label.adding.user=\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 +label.adding.zone=\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 label.add.intermediate.certificate=\u4e2d\u9593\u8a3c\u660e\u66f8\u306e\u8ffd\u52a0 +label.add.internal.lb=\u5185\u90e8 LB \u306e\u8ffd\u52a0 label.add.ip.range=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8ffd\u52a0 +label.add.isolated.guest.network=\u5206\u96e2\u30b2\u30b9\u30c8\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 +label.add.isolated.network=\u5206\u96e2\u3055\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 +label.additional.networks=\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af +label.add.ldap.account=LDAP \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0 +label.add.list.name=ACL \u4e00\u89a7\u540d label.add.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u306e\u8ffd\u52a0 label.add.more=\u305d\u306e\u307b\u304b\u306e\u9805\u76ee\u306e\u8ffd\u52a0 label.add.netScaler.device=NetScaler \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 +label.add.network.acl.list=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL \u4e00\u89a7\u306e\u8ffd\u52a0 label.add.network.ACL=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL \u306e\u8ffd\u52a0 label.add.network.device=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 label.add.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 @@ -330,17 +311,21 @@ label.add.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 label.add.new.F5=\u65b0\u3057\u3044 F5 \u306e\u8ffd\u52a0 label.add.new.gateway=\u65b0\u3057\u3044\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u8ffd\u52a0 label.add.new.NetScaler=\u65b0\u3057\u3044 NetScaler \u306e\u8ffd\u52a0 -label.add.new.SRX=\u65b0\u3057\u3044 SRX \u306e\u8ffd\u52a0 label.add.new.PA=\u65b0\u3057\u3044 Palo Alto \u306e\u8ffd\u52a0 +label.add.new.SRX=\u65b0\u3057\u3044 SRX \u306e\u8ffd\u52a0 label.add.new.tier=\u65b0\u3057\u3044\u968e\u5c64\u306e\u8ffd\u52a0 +label.add.nfs.secondary.staging.store=NFS \u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u306e\u8ffd\u52a0 label.add.NiciraNvp.device=NVP Controller \u306e\u8ffd\u52a0 label.add.NuageVsp.device=Nuage Virtualized Services Directory (VSD) \u306e\u8ffd\u52a0 -label.add.BrocadeVcs.device=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u306e\u8ffd\u52a0 +label.add.OpenDaylight.device=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u8ffd\u52a0 +label.add.PA.device=Palo Alto \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 label.add.physical.network=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 label.add.pod=\u30dd\u30c3\u30c9\u306e\u8ffd\u52a0 +label.add.portable.ip.range=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8ffd\u52a0 label.add.port.forwarding.rule=\u30dd\u30fc\u30c8\u8ee2\u9001\u898f\u5247\u306e\u8ffd\u52a0 label.add.primary.storage=\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u8ffd\u52a0 -label.add.region=\u9818\u57df\u306e\u8ffd\u52a0 +label.add.private.gateway=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u8ffd\u52a0 +label.add.region=\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u8ffd\u52a0 label.add.resources=\u30ea\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0 label.add.route=\u30eb\u30fc\u30c8\u306e\u8ffd\u52a0 label.add.rule=\u898f\u5247\u306e\u8ffd\u52a0 @@ -348,206 +333,281 @@ label.add.secondary.storage=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u3 label.add.security.group=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u306e\u8ffd\u52a0 label.add.service.offering=\u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 label.add.SRX.device=SRX \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 -label.add.PA.device=Palo Alto \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 label.add.static.nat.rule=\u9759\u7684 NAT \u898f\u5247\u306e\u8ffd\u52a0 label.add.static.route=\u9759\u7684\u30eb\u30fc\u30c8\u306e\u8ffd\u52a0 label.add.system.service.offering=\u30b7\u30b9\u30c6\u30e0 \u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 label.add.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8ffd\u52a0 label.add.to.group=\u8ffd\u52a0\u5148\u30b0\u30eb\u30fc\u30d7 +label.add=\u8ffd\u52a0 +label.add.ucs.manager=UCS Manager \u306e\u8ffd\u52a0 +label.add.userdata=\u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf label.add.user=\u30e6\u30fc\u30b6\u30fc\u306e\u8ffd\u52a0 -label.add.userdata=\u30e6\u30fc\u30b6\u30fc \u30c7\u30fc\u30bf label.add.vlan=VLAN \u306e\u8ffd\u52a0 -label.add.vxlan=VXLAN \u306e\u8ffd\u52a0 -label.add.VM.to.tier=\u968e\u5c64\u3078\u306e VM \u306e\u8ffd\u52a0 -label.add.vm=VM \u306e\u8ffd\u52a0 label.add.vms.to.lb=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u898f\u5247\u3078\u306e VM \u306e\u8ffd\u52a0 label.add.vms=VM \u306e\u8ffd\u52a0 +label.add.VM.to.tier=\u968e\u5c64\u3078\u306e VM \u306e\u8ffd\u52a0 +label.add.vm=VM \u306e\u8ffd\u52a0 +label.add.vmware.datacenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u8ffd\u52a0 +label.add.vnmc.device=VNMC \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 +label.add.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u8ffd\u52a0 label.add.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u8ffd\u52a0 +label.add.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 label.add.vpc=VPC \u306e\u8ffd\u52a0 label.add.vpn.customer.gateway=VPN \u30ab\u30b9\u30bf\u30de\u30fc \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u8ffd\u52a0 label.add.VPN.gateway=VPN \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u8ffd\u52a0 label.add.vpn.user=VPN \u30e6\u30fc\u30b6\u30fc\u306e\u8ffd\u52a0 +label.add.vxlan=VXLAN \u306e\u8ffd\u52a0 label.add.zone=\u30be\u30fc\u30f3\u306e\u8ffd\u52a0 -label.add=\u8ffd\u52a0 -label.adding.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -label.adding.failed=\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -label.adding.pod=\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -label.adding.processing=\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059... -label.adding.succeeded=\u8ffd\u52a0\u3057\u307e\u3057\u305f -label.adding.user=\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -label.adding.zone=\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -label.adding=\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -label.additional.networks=\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.admin.accounts=\u7ba1\u7406\u8005\u30a2\u30ab\u30a6\u30f3\u30c8 label.admin=\u7ba1\u7406\u8005 label.advanced.mode=\u62e1\u5f35\u30e2\u30fc\u30c9 label.advanced.search=\u9ad8\u5ea6\u306a\u691c\u7d22 label.advanced=\u62e1\u5f35 -label.affinity.group=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.affinity.groups=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 +label.affinity.group=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.affinity=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 label.agent.password=\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 \u30d1\u30b9\u30ef\u30fc\u30c9 -label.agent.port=\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 \u30dd\u30fc\u30c8 +label.agent.port=\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30dd\u30fc\u30c8 +label.agent.state=\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u72b6\u614b label.agent.username=\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 \u30e6\u30fc\u30b6\u30fc\u540d label.agree=\u540c\u610f\u3059\u308b +label.alert.archived=\u30a2\u30e9\u30fc\u30c8\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u3055\u308c\u307e\u3057\u305f +label.alert.deleted=\u30a2\u30e9\u30fc\u30c8\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f +label.alert.details=\u30a2\u30e9\u30fc\u30c8\u306e\u8a73\u7d30 label.alert=\u30a2\u30e9\u30fc\u30c8 label.algorithm=\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 label.allocated=\u5272\u308a\u5f53\u3066\u6e08\u307f label.allocation.state=\u5272\u308a\u5f53\u3066\u72b6\u614b -label.anti.affinity.group=\u30a2\u30f3\u30c1\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 +label.allow=\u8a31\u53ef label.anti.affinity.groups=\u30a2\u30f3\u30c1\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 +label.anti.affinity.group=\u30a2\u30f3\u30c1\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.anti.affinity=\u30a2\u30f3\u30c1\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 label.api.key=API \u30ad\u30fc label.api.version=API \u30d0\u30fc\u30b8\u30e7\u30f3 label.apply=\u9069\u7528 +label.app.name=CloudStack +label.archive.alerts=\u30a2\u30e9\u30fc\u30c8\u306e\u30a2\u30fc\u30ab\u30a4\u30d6 +label.archive.events=\u30a4\u30d9\u30f3\u30c8\u306e\u30a2\u30fc\u30ab\u30a4\u30d6 +label.archive=\u30a2\u30fc\u30ab\u30a4\u30d6 +label.assigned.vms=\u5272\u308a\u5f53\u3066\u6e08\u307f VM +label.assign.instance.another=\u307b\u304b\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5272\u308a\u5f53\u3066 label.assign.to.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u5272\u308a\u5f53\u3066\u3066\u3044\u307e\u3059 label.assign=\u5272\u308a\u5f53\u3066 +label.assign.vms=\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u5272\u308a\u5f53\u3066 label.associated.network.id=\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ID label.associated.network=\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af +label.associated.profile=\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb +label.associate.public.ip=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u306e\u95a2\u9023\u4ed8\u3051 label.attached.iso=\u30a2\u30bf\u30c3\u30c1\u3055\u308c\u305f ISO label.author.email=\u4f5c\u6210\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb label.author.name=\u4f5c\u6210\u8005\u306e\u540d\u524d -label.availability.zone=\u30a2\u30d9\u30a4\u30e9\u30d3\u30ea\u30c6\u30a3 \u30be\u30fc\u30f3 +label.autoscale=\u81ea\u52d5\u30b5\u30a4\u30ba\u8a2d\u5b9a label.availability=\u53ef\u7528\u6027 +label.availability.zone=\u30a2\u30d9\u30a4\u30e9\u30d3\u30ea\u30c6\u30a3 \u30be\u30fc\u30f3 +label.availabilityZone=\u30a2\u30d9\u30a4\u30e9\u30d3\u30ea\u30c6\u30a3\u30be\u30fc\u30f3 label.available.public.ips=\u4f7f\u7528\u3067\u304d\u308b\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 label.available=\u4f7f\u7528\u53ef\u80fd label.back=\u623b\u308b label.bandwidth=\u5e2f\u57df\u5e45 +label.baremetal.dhcp.devices=\u30d9\u30a2\u30e1\u30bf\u30eb DHCP \u30c7\u30d0\u30a4\u30b9 +label.baremetal.dhcp.provider=\u30d9\u30a2\u30e1\u30bf\u30eb DHCP \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc +label.baremetal.pxe.devices=\u30d9\u30a2\u30e1\u30bf\u30eb PXE \u30c7\u30d0\u30a4\u30b9 +label.baremetal.pxe.device=\u30d9\u30a2\u30e1\u30bf\u30eb PXE \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 +label.baremetal.pxe.provider=\u30d9\u30a2\u30e1\u30bf\u30eb PXE \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc +label.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb\u30e9\u30c3\u30af\u8a2d\u5b9a label.basic.mode=\u57fa\u672c\u30e2\u30fc\u30c9 label.basic=\u57fa\u672c -label.bigswitch.controller.address=Big Switch VNS \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc \u30a2\u30c9\u30ec\u30b9 +label.bigswitch.bcf.details=BigSwitch BCF \u306e\u8a73\u7d30 +label.bigswitch.bcf.nat=BigSwitch BCF \u306e NAT \u3092\u6709\u52b9\u5316\u3057\u307e\u3057\u305f +label.bigswitch.controller.address=BigSwitch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u30a2\u30c9\u30ec\u30b9 +label.blade.id=\u30d6\u30ec\u30fc\u30c9 ID +label.blades=\u30d6\u30ec\u30fc\u30c9 label.bootable=\u8d77\u52d5\u53ef\u80fd label.broadcast.domain.range=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 \u30c9\u30e1\u30a4\u30f3\u306e\u7bc4\u56f2 label.broadcast.domain.type=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 \u30c9\u30e1\u30a4\u30f3\u306e\u7a2e\u985e label.broadcast.uri=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 URI +label.broadcasturi=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 URI +label.broadcat.uri=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 URI +label.brocade.vcs.address=VCS \u30b9\u30a4\u30c3\u30c1 \u30a2\u30c9\u30ec\u30b9 +label.brocade.vcs.details=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u306e\u8a73\u7d30 label.by.account=\u30a2\u30ab\u30a6\u30f3\u30c8 +label.by.alert.type=\u30a2\u30e9\u30fc\u30c8\u306e\u7a2e\u985e label.by.availability=\u53ef\u7528\u6027 +label.by.date.end=\u65e5\u4ed8 (\u7d42\u4e86) +label.by.date.start=\u65e5\u4ed8 (\u958b\u59cb) label.by.domain=\u30c9\u30e1\u30a4\u30f3 label.by.end.date=\u7d42\u4e86\u65e5 +label.by.event.type=\u30a4\u30d9\u30f3\u30c8\u306e\u7a2e\u985e label.by.level=\u30ec\u30d9\u30eb label.by.pod=\u30dd\u30c3\u30c9 label.by.role=\u5f79\u5272 label.by.start.date=\u958b\u59cb\u65e5 label.by.state=\u72b6\u614b +label.bytes.received=\u53d7\u4fe1\u30d0\u30a4\u30c8 +label.bytes.sent=\u9001\u4fe1\u30d0\u30a4\u30c8 label.by.traffic.type=\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e label.by.type.id=\u7a2e\u985e ID label.by.type=\u7a2e\u985e label.by.zone=\u30be\u30fc\u30f3 -label.bytes.received=\u53d7\u4fe1\u30d0\u30a4\u30c8 -label.bytes.sent=\u9001\u4fe1\u30d0\u30a4\u30c8 +label.cache.mode=\u66f8\u304d\u8fbc\u307f\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u7a2e\u985e label.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb -label.capacity=\u51e6\u7406\u80fd\u529b label.capacity.bytes=\u51e6\u7406\u80fd\u529b (\u30d0\u30a4\u30c8) label.capacity.iops=\u51e6\u7406\u80fd\u529b (IOPS) +label.capacity=\u51e6\u7406\u80fd\u529b label.certificate=\u30b5\u30fc\u30d0\u30fc\u8a3c\u660e\u66f8 +label.change.affinity=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3\u306e\u5909\u66f4 label.change.service.offering=\u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u5909\u66f4 label.change.value=\u5024\u306e\u5909\u66f4 label.character=\u6587\u5b57 -label.md5.checksum=MD5 \u30c1\u30a7\u30c3\u30af\u30b5\u30e0 +label.chassis=\u30b7\u30e3\u30fc\u30b7 +label.checksum=\u30c1\u30a7\u30c3\u30af\u30b5\u30e0 label.cidr.account=CIDR \u307e\u305f\u306f\u30a2\u30ab\u30a6\u30f3\u30c8/\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 +label.cidr=CIDR label.CIDR.list=CIDR \u4e00\u89a7 label.cidr.list=\u9001\u4fe1\u5143 CIDR label.CIDR.of.destination.network=\u5b9b\u5148\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e CIDR -label.cidr=CIDR +label.cisco.nexus1000v.ip.address=Nexus 1000V \u306e IP \u30a2\u30c9\u30ec\u30b9 +label.cisco.nexus1000v.password=Nexus 1000V \u306e\u30d1\u30b9\u30ef\u30fc\u30c9 +label.cisco.nexus1000v.username=Nexus 1000V \u306e\u30e6\u30fc\u30b6\u30fc\u540d +label.ciscovnmc.resource.details=Cisco VNMC \u30ea\u30bd\u30fc\u30b9\u306e\u8a73\u7d30 label.clean.up=\u30af\u30ea\u30fc\u30f3 \u30a2\u30c3\u30d7\u3059\u308b -label.make.redundant=\u5197\u9577\u5316\u3059\u308b label.clear.list=\u4e00\u89a7\u306e\u6d88\u53bb label.close=\u9589\u3058\u308b label.cloud.console=\u30af\u30e9\u30a6\u30c9\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb label.cloud.managed=Cloud.com \u306b\u3088\u308b\u7ba1\u7406 label.cluster.name=\u30af\u30e9\u30b9\u30bf\u30fc\u540d +label.clusters=\u30af\u30e9\u30b9\u30bf\u30fc label.cluster.type=\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u7a2e\u985e label.cluster=\u30af\u30e9\u30b9\u30bf\u30fc -label.clusters=\u30af\u30e9\u30b9\u30bf\u30fc label.clvm=CLVM -label.rbd=RBD -label.rbd.monitor=Ceph \u30e2\u30cb\u30bf\u30fc -label.rbd.pool=Ceph \u30d7\u30fc\u30eb -label.rbd.id=Cephx \u30e6\u30fc\u30b6\u30fc -label.rbd.secret=Cephx \u30b7\u30fc\u30af\u30ec\u30c3\u30c8 label.code=\u30b3\u30fc\u30c9 label.community=\u30b3\u30df\u30e5\u30cb\u30c6\u30a3 label.compute.and.storage=\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30b9\u30c8\u30ec\u30fc\u30b8 -label.compute.offering=\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.compute.offerings=\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 +label.compute.offering=\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.compute=\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 label.configuration=\u69cb\u6210 +label.configure.ldap=LDAP \u306e\u69cb\u6210 label.configure.network.ACLs=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL \u306e\u69cb\u6210 -label.configure.vpc=VPC \u306e\u69cb\u6210 label.configure=\u69cb\u6210 -label.confirm.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u78ba\u8a8d\u5165\u529b +label.configure.vpc=VPC \u306e\u69cb\u6210 label.confirmation=\u78ba\u8a8d +label.confirm.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u78ba\u8a8d\u5165\u529b label.congratulations=\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306f\u3053\u308c\u3067\u5b8c\u4e86\u3067\u3059\u3002 label.conserve.mode=\u7bc0\u7d04\u30e2\u30fc\u30c9 label.console.proxy=\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7 +label.console.proxy.vm=\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7 VM label.continue.basic.install=\u57fa\u672c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u7d9a\u884c\u3059\u308b label.continue=\u7d9a\u884c -label.corrections.saved=\u4fee\u6574\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f +label.copying.iso=ISO \u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059 +label.corrections.saved=\u63a5\u7d9a\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f +label.counter=\u30ab\u30a6\u30f3\u30bf\u30fc label.cpu.allocated.for.VMs=VM \u306b\u5272\u308a\u5f53\u3066\u6e08\u307f\u306e CPU label.cpu.allocated=\u5272\u308a\u5f53\u3066\u6e08\u307f\u306e CPU label.CPU.cap=CPU \u30ad\u30e3\u30c3\u30d7 +label.cpu=CPU label.cpu.limits=CPU \u5236\u9650 label.cpu.mhz=CPU (MHz) label.cpu.utilized=CPU \u4f7f\u7528\u7387 -label.cpu=CPU +label.created.by.system=\u30b7\u30b9\u30c6\u30e0\u4f5c\u6210 +label.created=\u4f5c\u6210\u65e5\u6642 +label.create.nfs.secondary.staging.storage=NFS \u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u3092\u4f5c\u6210\u3059\u308b +label.create.nfs.secondary.staging.store=NFS \u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u3092\u4f5c\u6210\u3059\u308b label.create.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210 label.create.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210 label.create.VPN.connection=VPN \u63a5\u7d9a\u306e\u4f5c\u6210 -label.created.by.system=\u30b7\u30b9\u30c6\u30e0\u4f5c\u6210 -label.created=\u4f5c\u6210\u65e5\u6642 label.cross.zones=\u30af\u30ed\u30b9 \u30be\u30fc\u30f3 +label.custom.disk.iops=\u30ab\u30b9\u30bf\u30e0 IOPS label.custom.disk.size=\u30ab\u30b9\u30bf\u30e0 \u30c7\u30a3\u30b9\u30af \u30b5\u30a4\u30ba +label.custom=\u30ab\u30b9\u30bf\u30e0 label.daily=\u6bce\u65e5 label.data.disk.offering=\u30c7\u30fc\u30bf \u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.date=\u65e5\u6642 label.day.of.month=\u6bce\u6708\u6307\u5b9a\u65e5 label.day.of.week=\u6bce\u9031\u6307\u5b9a\u65e5 +label.day=\u65e5 +label.dc.name=DC \u540d label.dead.peer.detection=\u505c\u6b62\u30d4\u30a2\u3092\u691c\u51fa\u3059\u308b label.decline.invitation=\u62db\u5f85\u306e\u8f9e\u9000 +label.dedicate.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5c02\u7528\u306b\u8a2d\u5b9a label.dedicated=\u5c02\u7528 +label.dedicated.vlan.vni.ranges=\u5c02\u7528 VLAN/VNI \u306e\u7bc4\u56f2 +label.dedicate.host=\u30db\u30b9\u30c8\u3092\u5c02\u7528\u306b\u8a2d\u5b9a +label.dedicate.pod=\u30dd\u30c3\u30c9\u3092\u5c02\u7528\u306b\u8a2d\u5b9a +label.dedicate=\u5c02\u7528\u306b\u8a2d\u5b9a +label.dedicate.vlan.vni.range=VLAN/VNI \u306e\u7bc4\u56f2\u3092\u5c02\u7528\u306b\u8a2d\u5b9a +label.dedicate.zone=\u30be\u30fc\u30f3\u3092\u5c02\u7528\u306b\u8a2d\u5b9a +label.default.egress.policy=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u9001\u4fe1\u30dd\u30ea\u30b7\u30fc +label.default=\u30c7\u30d5\u30a9\u30eb\u30c8 label.default.use=\u30c7\u30d5\u30a9\u30eb\u30c8\u4f7f\u7528 label.default.view=\u30c7\u30d5\u30a9\u30eb\u30c8 \u30d3\u30e5\u30fc -label.default=\u30c7\u30d5\u30a9\u30eb\u30c8 +label.delete.acl.list=ACL \u4e00\u89a7\u306e\u524a\u9664 label.delete.affinity.group=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u306e\u524a\u9664 -label.delete.BigSwitchBcf=Big Switch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u524a\u9664 +label.delete.alerts=\u30a2\u30e9\u30fc\u30c8\u306e\u524a\u9664 +label.delete.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb\u30e9\u30c3\u30af\u8a2d\u5b9a\u306e\u524a\u9664 +label.delete.BigSwitchBcf=BigSwitch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u524a\u9664 +label.delete.BrocadeVcs=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u306e\u524a\u9664 +label.delete.ciscoASA1000v=Cisco ASA 1000V \u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664 +label.delete.ciscovnmc.resource=Cisco VNMC \u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664 +label.delete.events=\u30a4\u30d9\u30f3\u30c8\u306e\u524a\u9664 label.delete.F5=F5 \u306e\u524a\u9664 label.delete.gateway=\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u524a\u9664 +label.delete.internal.lb=\u5185\u90e8 LB \u306e\u524a\u9664 label.delete.NetScaler=NetScaler \u306e\u524a\u9664 label.delete.NiciraNvp=NVP Controller \u306e\u524a\u9664 label.delete.NuageVsp=Nuage VSD \u306e\u524a\u9664 -label.delete.BrocadeVcs=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u306e\u524a\u9664 -label.delete.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u524a\u9664 -label.delete.SRX=SRX \u306e\u524a\u9664 +label.delete.OpenDaylight.device=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u524a\u9664 label.delete.PA=Palo Alto \u306e\u524a\u9664 +label.delete.portable.ip.range=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u524a\u9664 +label.delete.profile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664 +label.delete.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u524a\u9664 +label.delete.secondary.staging.store=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u306e\u524a\u9664 +label.delete.SRX=SRX \u306e\u524a\u9664 +label.delete=\u524a\u9664 +label.delete.ucs.manager=UCS Manager \u306e\u524a\u9664 label.delete.VPN.connection=VPN \u63a5\u7d9a\u306e\u524a\u9664 label.delete.VPN.customer.gateway=VPN \u30ab\u30b9\u30bf\u30de\u30fc \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u524a\u9664 label.delete.VPN.gateway=VPN \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u524a\u9664 label.delete.vpn.user=VPN \u30e6\u30fc\u30b6\u30fc\u306e\u524a\u9664 -label.delete=\u524a\u9664 label.deleting.failed=\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f label.deleting.processing=\u524a\u9664\u3057\u3066\u3044\u307e\u3059... +label.deny=\u62d2\u5426 +label.deployment.planner=\u5c55\u958b\u30d7\u30e9\u30f3\u30ca\u30fc label.description=\u8aac\u660e label.destination.physical.network.id=\u30d6\u30ea\u30c3\u30b8\u5148\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ID label.destination.zone=\u30b3\u30d4\u30fc\u5148\u30be\u30fc\u30f3 label.destroy.router=\u30eb\u30fc\u30bf\u30fc\u306e\u7834\u68c4 label.destroy=\u7834\u68c4 +label.destroy.vm.graceperiod=VM \u7834\u68c4\u306e\u7336\u4e88\u671f\u9593 label.detaching.disk=\u30c7\u30a3\u30b9\u30af\u3092\u30c7\u30bf\u30c3\u30c1\u3057\u3066\u3044\u307e\u3059 label.details=\u8a73\u7d30 label.device.id=\u30c7\u30d0\u30a4\u30b9 ID label.devices=\u30c7\u30d0\u30a4\u30b9 -label.DHCP.server.type=DHCP \u30b5\u30fc\u30d0\u30fc\u306e\u7a2e\u985e label.dhcp=DHCP +label.DHCP.server.type=DHCP \u30b5\u30fc\u30d0\u30fc\u306e\u7a2e\u985e +label.direct.attached.public.ip=\u76f4\u63a5\u30a2\u30bf\u30c3\u30c1\u3055\u308c\u3066\u3044\u308b\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 label.direct.ips=\u5171\u6709\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e IP \u30a2\u30c9\u30ec\u30b9 -label.disable.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u7121\u52b9\u5316 -label.disable.vpn=\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u306e\u7121\u52b9\u5316 +label.disable.autoscale=\u81ea\u52d5\u30b5\u30a4\u30ba\u8a2d\u5b9a\u306e\u7121\u52b9\u5316 label.disabled=\u7121\u52b9 +label.disable.host=\u30db\u30b9\u30c8\u306e\u7121\u52b9\u5316 +label.disable.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u7121\u52b9\u5316 +label.disable.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u7121\u52b9\u5316 +label.disable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u7121\u52b9\u5316 +label.disable.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u7121\u52b9\u5316 +label.disable.vpn=\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u306e\u7121\u52b9\u5316 label.disabling.vpn.access=VPN \u30a2\u30af\u30bb\u30b9\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 +label.disassociate.profile.blade=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3068\u30d6\u30ec\u30fc\u30c9\u306e\u95a2\u9023\u4ed8\u3051\u306e\u89e3\u9664 +label.disbale.vnmc.device=VNMC \u30c7\u30d0\u30a4\u30b9\u306e\u7121\u52b9\u5316 label.disk.allocated=\u5272\u308a\u5f53\u3066\u6e08\u307f\u306e\u30c7\u30a3\u30b9\u30af label.disk.bytes.read.rate=\u30c7\u30a3\u30b9\u30af\u8aad\u307f\u53d6\u308a\u901f\u5ea6 (BPS) label.disk.bytes.write.rate=\u30c7\u30a3\u30b9\u30af\u66f8\u304d\u8fbc\u307f\u901f\u5ea6 (BPS) +label.disk.iops.max=\u6700\u5927 IOPS +label.disk.iops.min=\u6700\u5c0f IOPS label.disk.iops.read.rate=\u30c7\u30a3\u30b9\u30af\u8aad\u307f\u53d6\u308a\u901f\u5ea6 (IOPS) +label.disk.iops.total=IOPS \u5408\u8a08 label.disk.iops.write.rate=\u30c7\u30a3\u30b9\u30af\u66f8\u304d\u8fbc\u307f\u901f\u5ea6 (IOPS) label.disk.offering=\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 +label.diskoffering=\u30c7\u30a3\u30b9\u30af\u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.disk.provisioningtype=\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u306e\u7a2e\u985e label.disk.read.bytes=\u30c7\u30a3\u30b9\u30af\u8aad\u307f\u53d6\u308a (\u30d0\u30a4\u30c8) label.disk.read.io=\u30c7\u30a3\u30b9\u30af\u8aad\u307f\u53d6\u308a (IO) @@ -557,13 +617,16 @@ label.disk.total=\u30c7\u30a3\u30b9\u30af\u5408\u8a08 label.disk.volume=\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0 label.disk.write.bytes=\u30c7\u30a3\u30b9\u30af\u66f8\u304d\u8fbc\u307f (\u30d0\u30a4\u30c8) label.disk.write.io=\u30c7\u30a3\u30b9\u30af\u66f8\u304d\u8fbc\u307f (IO) +label.display.name=\u8868\u793a\u540d label.display.text=\u8868\u793a\u30c6\u30ad\u30b9\u30c8 +label.distributedrouter=\u5206\u6563\u30eb\u30fc\u30bf\u30fc label.dns.1=DNS 1 label.dns.2=DNS 2 -label.DNS.domain.for.guest.networks=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e DNS \u30c9\u30e1\u30a4\u30f3 label.dns=DNS +label.DNS.domain.for.guest.networks=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e DNS \u30c9\u30e1\u30a4\u30f3 label.domain.admin=\u30c9\u30e1\u30a4\u30f3\u7ba1\u7406\u8005 label.domain.id=\u30c9\u30e1\u30a4\u30f3 ID +label.domain.lower=\u30c9\u30e1\u30a4\u30f3 label.domain.name=\u30c9\u30e1\u30a4\u30f3\u540d label.domain.router=\u30c9\u30e1\u30a4\u30f3 \u30eb\u30fc\u30bf\u30fc label.domain.suffix=DNS \u30c9\u30e1\u30a4\u30f3 \u30b5\u30d5\u30a3\u30c3\u30af\u30b9 (\u4f8b\: xyz.com) @@ -572,91 +635,145 @@ label.done=\u5b8c\u4e86 label.double.quotes.are.not.allowed=\u4e8c\u91cd\u5f15\u7528\u7b26\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 label.download.progress=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u9032\u6357\u72b6\u6cc1 label.drag.new.position=\u65b0\u3057\u3044\u4f4d\u7f6e\u306b\u30c9\u30e9\u30c3\u30b0 +label.duration.in.sec=\u6301\u7d9a\u6642\u9593(\u79d2) +label.dynamically.scalable=\u52d5\u7684\u306b\u30b5\u30a4\u30ba\u8a2d\u5b9a\u3059\u308b +label.edit.acl.rule=ACL \u898f\u5247\u306e\u7de8\u96c6 label.edit.affinity.group=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u306e\u7de8\u96c6 label.edit.lb.rule=LB \u898f\u5247\u306e\u7de8\u96c6 label.edit.network.details=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8a73\u7d30\u306e\u7de8\u96c6 label.edit.project.details=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a73\u7d30\u306e\u7de8\u96c6 +label.edit.region=\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u7de8\u96c6 +label.edit.secondary.ips=\u30bb\u30ab\u30f3\u30c0\u30ea IP \u306e\u7de8\u96c6 label.edit.tags=\u30bf\u30b0\u306e\u7de8\u96c6 label.edit.traffic.type=\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e\u306e\u7de8\u96c6 -label.edit.vpc=VPC \u306e\u7de8\u96c6 label.edit=\u7de8\u96c6 -label.egress.rule=\u9001\u4fe1\u898f\u5247 +label.edit.vpc=VPC \u306e\u7de8\u96c6 +label.egress.default.policy=\u9001\u4fe1\u306e\u30c7\u30d5\u30a9\u30eb\u30c8 \u30dd\u30ea\u30b7\u30fc label.egress.rules=\u9001\u4fe1\u898f\u5247 +label.egress.rule=\u9001\u4fe1\u898f\u5247 label.elastic.IP=\u30a8\u30e9\u30b9\u30c6\u30a3\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 label.elastic.LB=\u30a8\u30e9\u30b9\u30c6\u30a3\u30c3\u30af LB label.elastic=\u30a8\u30e9\u30b9\u30c6\u30a3\u30c3\u30af +label.email.lower=\u96fb\u5b50\u30e1\u30fc\u30eb label.email=\u96fb\u5b50\u30e1\u30fc\u30eb +label.enable.autoscale=\u81ea\u52d5\u30b5\u30a4\u30ba\u8a2d\u5b9a\u306e\u6709\u52b9\u5316 +label.enable.host=\u30db\u30b9\u30c8\u306e\u6709\u52b9\u5316 +label.enable.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u6709\u52b9\u5316 label.enable.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u6709\u52b9\u5316 label.enable.s3=S3 \u30d9\u30fc\u30b9\u306e\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u6709\u52b9\u5316 label.enable.swift=Swift \u306e\u6709\u52b9\u5316 +label.enable.vnmc.device=VNMC \u30c7\u30d0\u30a4\u30b9\u306e\u6709\u52b9\u5316 +label.enable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u6709\u52b9\u5316 +label.enable.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u6709\u52b9\u5316 label.enable.vpn=\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u306e\u6709\u52b9\u5316 label.enabling.vpn.access=VPN \u30a2\u30af\u30bb\u30b9\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 label.enabling.vpn=VPN \u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 label.end.IP=\u7d42\u4e86 IP \u30a2\u30c9\u30ec\u30b9 +label.endpoint.or.operation=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u307e\u305f\u306f\u64cd\u4f5c +label.endpoint=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 label.end.port=\u7d42\u4e86\u30dd\u30fc\u30c8 label.end.reserved.system.IP=\u4e88\u7d04\u6e08\u307f\u7d42\u4e86\u30b7\u30b9\u30c6\u30e0 IP \u30a2\u30c9\u30ec\u30b9 label.end.vlan=\u7d42\u4e86 VLAN label.end.vxlan=\u7d42\u4e86 VXLAN -label.endpoint.or.operation=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u307e\u305f\u306f\u64cd\u4f5c -label.endpoint=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 label.enter.token=\u30c8\u30fc\u30af\u30f3\u306e\u5165\u529b label.error.code=\u30a8\u30e9\u30fc \u30b3\u30fc\u30c9 label.error=\u30a8\u30e9\u30fc +label.error.upper=\u30a8\u30e9\u30fc label.ESP.encryption=ESP \u6697\u53f7\u5316 label.ESP.hash=ESP \u30cf\u30c3\u30b7\u30e5 label.ESP.lifetime=ESP \u6709\u52b9\u671f\u9593 (\u79d2) label.ESP.policy=ESP \u30dd\u30ea\u30b7\u30fc label.esx.host=ESX/ESXi \u30db\u30b9\u30c8 +label.event.archived=\u30a4\u30d9\u30f3\u30c8\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u3055\u308c\u307e\u3057\u305f +label.event.deleted=\u30a4\u30d9\u30f3\u30c8\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f +label.event=\u30a4\u30d9\u30f3\u30c8 +label.every=\u6bce label.example=\u4f8b -label.expunge=\u62b9\u6d88\u3059\u308b +label.expunge=\u62b9\u6d88 label.external.link=\u5916\u90e8\u30ea\u30f3\u30af +label.extractable.lower=\u5c55\u958b +label.extractable=\u62bd\u51fa\u53ef\u80fd +label.f5.details=F5 \u306e\u8a73\u7d30 label.f5=F5 label.failed=\u5931\u6557 label.featured=\u304a\u3059\u3059\u3081 label.fetch.latest=\u6700\u65b0\u60c5\u5831\u306e\u53d6\u5f97 label.filterBy=\u30d5\u30a3\u30eb\u30bf\u30fc label.firewall=\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb +label.firstname.lower=\u540d label.first.name=\u540d -label.format=\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 +label.format.lower=\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 +label.format=\u5f62\u5f0f label.friday=\u91d1\u66dc\u65e5 label.full.path=\u30d5\u30eb \u30d1\u30b9 label.full=\u5b8c\u5168 label.gateway=\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.general.alerts=\u4e00\u822c\u30a2\u30e9\u30fc\u30c8 label.generating.url=URL \u3092\u751f\u6210\u3057\u3066\u3044\u307e\u3059 +label.globo.dns.configuration=GloboDNS \u306e\u8a2d\u5b9a +label.globo.dns=GloboDNS label.gluster.volume=\u30dc\u30ea\u30e5\u30fc\u30e0 label.go.step.2=\u624b\u9806 2 \u306b\u9032\u3080 label.go.step.3=\u624b\u9806 3 \u306b\u9032\u3080 label.go.step.4=\u624b\u9806 4 \u306b\u9032\u3080 label.go.step.5=\u624b\u9806 5 \u306b\u9032\u3080 +label.gpu=GPU +label.group.by.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u5225\u30b0\u30eb\u30fc\u30d7 +label.group.by.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u5225\u30b0\u30eb\u30fc\u30d7 +label.group.by.pod=\u30dd\u30c3\u30c9\u5225\u30b0\u30eb\u30fc\u30d7 +label.group.by.zone=\u30be\u30fc\u30f3\u5225\u30b0\u30eb\u30fc\u30d7 label.group.optional=\u30b0\u30eb\u30fc\u30d7 (\u30aa\u30d7\u30b7\u30e7\u30f3) label.group=\u30b0\u30eb\u30fc\u30d7 +label.gslb.assigned.lb.more=\u8ca0\u8377\u5206\u6563\u306e\u8ffd\u52a0\u5272\u308a\u5f53\u3066 +label.gslb.assigned.lb=\u5272\u308a\u5f53\u3066\u6e08\u307f\u8ca0\u8377\u5206\u6563 +label.gslb.delete=GSLB \u306e\u524a\u9664 +label.gslb.details=GSLB \u306e\u8a73\u7d30 +label.gslb.domain.name=GSLB \u30c9\u30e1\u30a4\u30f3\u540d +label.gslb=GSLB +label.gslb.lb.details=\u8ca0\u8377\u5206\u6563\u306e\u8a73\u7d30 +label.gslb.lb.remove=\u3053\u306e GSLB \u304b\u3089\u8ca0\u8377\u5206\u6563\u3092\u524a\u9664 +label.gslb.lb.rule=\u8ca0\u8377\u5206\u6563\u898f\u5247 +label.gslb.service=GSLB \u30b5\u30fc\u30d3\u30b9 +label.gslb.service.private.ip=GSLB \u30b5\u30fc\u30d3\u30b9\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9 +label.gslb.service.public.ip=GSLB \u30b5\u30fc\u30d3\u30b9\u306e\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 +label.gslb.servicetype=\u30b5\u30fc\u30d3\u30b9\u306e\u7a2e\u985e label.guest.cidr=\u30b2\u30b9\u30c8 CIDR label.guest.end.ip=\u30b2\u30b9\u30c8\u306e\u7d42\u4e86 IP \u30a2\u30c9\u30ec\u30b9 label.guest.gateway=\u30b2\u30b9\u30c8 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.guest.ip.range=\u30b2\u30b9\u30c8 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 label.guest.ip=\u30b2\u30b9\u30c8 IP \u30a2\u30c9\u30ec\u30b9 label.guest.netmask=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30de\u30b9\u30af +label.guest.network.details=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8a73\u7d30 label.guest.networks=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.guest.start.ip=\u30b2\u30b9\u30c8\u306e\u958b\u59cb IP \u30a2\u30c9\u30ec\u30b9 label.guest.traffic=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af +label.guest.traffic.vswitch.name=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u540d +label.guest.traffic.vswitch.type=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u306e\u7a2e\u985e label.guest.type=\u30b2\u30b9\u30c8\u306e\u7a2e\u985e label.guest=\u30b2\u30b9\u30c8 -label.ha.enabled=\u9ad8\u53ef\u7528\u6027\u3092\u6709\u52b9\u306b\u3059\u308b +label.ha.enabled=\u9ad8\u53ef\u7528\u6027\u6709\u52b9 +label.health.check.interval.in.sec=\u30d8\u30eb\u30b9 \u30c1\u30a7\u30c3\u30af\u9593\u9694 (\u79d2) +label.health.check=\u30d8\u30eb\u30b9 \u30c1\u30a7\u30c3\u30af +label.healthy.threshold=\u6b63\u5e38\u3057\u304d\u3044\u5024 label.help=\u30d8\u30eb\u30d7 label.hide.ingress.rule=\u53d7\u4fe1\u898f\u5247\u3092\u96a0\u3059 label.hints=\u30d2\u30f3\u30c8 +label.home=\u30db\u30fc\u30e0 label.host.alerts=\u30db\u30b9\u30c8 \u30a2\u30e9\u30fc\u30c8 label.host.MAC=\u30db\u30b9\u30c8\u306e MAC label.host.name=\u30db\u30b9\u30c8\u540d +label.hosts=\u30db\u30b9\u30c8 label.host.tags=\u30db\u30b9\u30c8 \u30bf\u30b0 label.host=\u30db\u30b9\u30c8 -label.hosts=\u30db\u30b9\u30c8 label.hourly=\u6bce\u6642 +label.hvm=HVM label.hypervisor.capabilities=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306e\u6a5f\u80fd +label.hypervisor.snapshot.reserve=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u4e88\u7d04 +label.hypervisors=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc label.hypervisor.type=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306e\u7a2e\u985e -label.hypervisor.version=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 label.hypervisor=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc +label.hypervisor.version=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 +label.hyperv.traffic.label=Hyper-V \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb label.id=ID label.IKE.DH=IKE DH label.IKE.encryption=IKE \u6697\u53f7\u5316 @@ -664,8 +781,10 @@ label.IKE.hash=IKE \u30cf\u30c3\u30b7\u30e5 label.IKE.lifetime=IKE \u6709\u52b9\u671f\u9593 (\u79d2) label.IKE.policy=IKE \u30dd\u30ea\u30b7\u30fc label.info=\u60c5\u5831 +label.info.upper=\u60c5\u5831 label.ingress.rule=\u53d7\u4fe1\u898f\u5247 label.initiated.by=\u958b\u59cb\u30e6\u30fc\u30b6\u30fc +label.inside.port.profile=\u5185\u90e8\u30dd\u30fc\u30c8 \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb label.installWizard.addClusterIntro.subtitle=\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u3064\u3044\u3066 label.installWizard.addClusterIntro.title=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046 label.installWizard.addHostIntro.subtitle=\u30db\u30b9\u30c8\u306b\u3064\u3044\u3066 @@ -676,53 +795,75 @@ label.installWizard.addPrimaryStorageIntro.subtitle=\u30d7\u30e9\u30a4\u30de\u30 label.installWizard.addPrimaryStorageIntro.title=\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046 label.installWizard.addSecondaryStorageIntro.subtitle=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u3064\u3044\u3066 label.installWizard.addSecondaryStorageIntro.title=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046 -label.installWizard.addZone.title=\u30be\u30fc\u30f3\u306e\u8ffd\u52a0 label.installWizard.addZoneIntro.subtitle=\u30be\u30fc\u30f3\u306b\u3064\u3044\u3066 label.installWizard.addZoneIntro.title=\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046 +label.installWizard.addZone.title=\u30be\u30fc\u30f3\u306e\u8ffd\u52a0 label.installWizard.click.launch=[\u8d77\u52d5] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -label.installWizard.subtitle=\u3053\u306e\u30ac\u30a4\u30c9 \u30c4\u30a2\u30fc\u306f CloudStack&\#8482 \u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u5f79\u7acb\u3061\u307e\u3059 -label.installWizard.title=CloudStack&\#8482 \u3078\u3088\u3046\u3053\u305d +label.installWizard.subtitle=\u3053\u306e\u30ac\u30a4\u30c9 \u30c4\u30a2\u30fc\u306f CloudStack&\#8482; \u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u5f79\u7acb\u3061\u307e\u3059 +label.installWizard.title=CloudStack&\#8482; \u3078\u3088\u3046\u3053\u305d label.instance.limits=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5236\u9650 label.instance.name=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d -label.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 +label.instance.port=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 \u30dd\u30fc\u30c8 +label.instance.scaled.up=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u9078\u629e\u3057\u305f\u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306b\u30b9\u30b1\u30fc\u30eb\u3059\u308b label.instances=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 +label.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 +label.instanciate.template.associate.profile.blade=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u304a\u3088\u3073\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3068\u30d6\u30ec\u30fc\u30c9\u306e\u95a2\u9023\u4ed8\u3051 label.intermediate.certificate=\u4e2d\u9593\u8a3c\u660e\u66f8 {0} label.internal.dns.1=\u5185\u90e8 DNS 1 label.internal.dns.2=\u5185\u90e8 DNS 2 +label.internal.lb.details=\u5185\u90e8 LB \u306e\u8a73\u7d30 +label.internallbvm=InternalLbVm label.internal.name=\u5185\u90e8\u540d label.interval.type=\u9593\u9694\u306e\u7a2e\u985e -label.introduction.to.cloudstack=CloudStack&\#8482 \u306e\u7d39\u4ecb +label.introduction.to.cloudstack=CloudStack&\#8482; \u306e\u7d39\u4ecb label.invalid.integer=\u7121\u52b9\u306a\u6574\u6570 label.invalid.number=\u7121\u52b9\u306a\u6570 label.invitations=\u62db\u5f85\u72b6 +label.invited.accounts=\u62db\u5f85\u6e08\u307f\u30a2\u30ab\u30a6\u30f3\u30c8 label.invite.to=\u62db\u5f85\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\: label.invite=\u62db\u5f85 -label.invited.accounts=\u62db\u5f85\u6e08\u307f\u30a2\u30ab\u30a6\u30f3\u30c8 label.ip.address=IP \u30a2\u30c9\u30ec\u30b9 +label.ipaddress=IP \u30a2\u30c9\u30ec\u30b9 label.ip.allocations=IP \u30a2\u30c9\u30ec\u30b9\u306e\u5272\u308a\u5f53\u3066 -label.ip.limits=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u5236\u9650 +label.ip=IP +label.ip.limits=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u306e\u5236\u9650 label.ip.or.fqdn=IP \u30a2\u30c9\u30ec\u30b9\u307e\u305f\u306f FQDN label.ip.range=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 label.ip.ranges=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 -label.ip=IP -label.ipaddress=IP \u30a2\u30c9\u30ec\u30b9 -label.ips=IP \u30a2\u30c9\u30ec\u30b9 label.IPsec.preshared.key=IPsec \u4e8b\u524d\u5171\u6709\u30ad\u30fc -label.is.default=\u30c7\u30d5\u30a9\u30eb\u30c8 -label.is.redundant.router=\u5197\u9577 -label.is.shared=\u5171\u6709 -label.is.system=\u30b7\u30b9\u30c6\u30e0 +label.ips=IP \u30a2\u30c9\u30ec\u30b9 +label.ipv4.cidr=IPv4 CIDR +label.ipv4.dns1=IPv4 DNS1 +label.ipv4.dns2=IPv4 DNS2 +label.ipv4.end.ip=IPv4 \u7d42\u4e86 IP \u30a2\u30c9\u30ec\u30b9 +label.ipv4.gateway=IPv4 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 +label.ipv4.netmask=IPv4 \u30cd\u30c3\u30c8\u30de\u30b9\u30af +label.ipv4.start.ip=IPv4 \u958b\u59cb IP \u30a2\u30c9\u30ec\u30b9 +label.ipv6.address=IPv6 IP \u30a2\u30c9\u30ec\u30b9 +label.ipv6.CIDR=IPv6 CIDR +label.ipv6.dns1=IPv6 DNS 1 +label.ipv6.dns2=IPv6 DNS 2 +label.ipv6.end.ip=IPv6 \u7d42\u4e86 IP \u30a2\u30c9\u30ec\u30b9 +label.ipv6.gateway=IPv6 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 +label.ipv6.start.ip=IPv6 \u958b\u59cb IP \u30a2\u30c9\u30ec\u30b9 label.iscsi=iSCSI +label.is.default=\u30c7\u30d5\u30a9\u30eb\u30c8 label.iso.boot=ISO \u8d77\u52d5 label.iso=ISO label.isolated.networks=\u5206\u96e2\u3055\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.isolation.method=\u5206\u96e2\u65b9\u6cd5 label.isolation.mode=\u5206\u96e2\u30e2\u30fc\u30c9 label.isolation.uri=\u5206\u96e2 URI +label.is.redundant.router=\u5197\u9577 +label.is.shared=\u5171\u6709 +label.is.system=\u30b7\u30b9\u30c6\u30e0 label.item.listing=\u9805\u76ee\u4e00\u89a7 -label.keep=\u4fdd\u6301\u6570 -label.key=\u30ad\u30fc +label.japanese.keyboard=\u65e5\u672c\u8a9e\u30ad\u30fc\u30dc\u30fc\u30c9 +label.keep.colon=\u4fdd\u6301\: +label.keep=\u4fdd\u6301 +label.keyboard.language=\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u8a00\u8a9e label.keyboard.type=\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u7a2e\u985e +label.key=\u30ad\u30fc label.kvm.traffic.label=KVM \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb label.label=\u30e9\u30d9\u30eb label.lang.arabic=\u30a2\u30e9\u30d3\u30a2\u8a9e @@ -740,41 +881,46 @@ label.lang.norwegian=\u30ce\u30eb\u30a6\u30a7\u30fc\u8a9e label.lang.polish=\u30dd\u30fc\u30e9\u30f3\u30c9\u8a9e label.lang.russian=\u30ed\u30b7\u30a2\u8a9e label.lang.spanish=\u30b9\u30da\u30a4\u30f3\u8a9e -label.lang.hungarian=\u30cf\u30f3\u30ac\u30ea\u30fc\u8a9e label.last.disconnected=\u6700\u7d42\u5207\u65ad\u65e5\u6642 +label.lastname.lower=\u59d3 label.last.name=\u59d3 label.latest.events=\u6700\u65b0\u30a4\u30d9\u30f3\u30c8 +label.launch=\u8d77\u52d5 label.launch.vm=VM \u306e\u8d77\u52d5 label.launch.zone=\u30be\u30fc\u30f3\u306e\u8d77\u52d5 -label.launch=\u8d77\u52d5 label.lb.algorithm.leastconn=\u6700\u5c0f\u63a5\u7d9a label.lb.algorithm.roundrobin=\u30e9\u30a6\u30f3\u30c9\u30ed\u30d3\u30f3 label.lb.algorithm.source=\u9001\u4fe1\u5143 label.LB.isolation=LB \u5206\u96e2 +label.ldap.configuration=LDAP \u69cb\u6210 +label.ldap.group.name=LDAP \u30b0\u30eb\u30fc\u30d7 +label.ldap.port=LDAP \u30dd\u30fc\u30c8 label.level=\u30ec\u30d9\u30eb label.linklocal.ip=\u30ea\u30f3\u30af \u30ed\u30fc\u30ab\u30eb IP \u30a2\u30c9\u30ec\u30b9 +label.load.balancer.type=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u306e\u7a2e\u985e label.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc label.load.balancing.policies=\u8ca0\u8377\u5206\u6563\u30dd\u30ea\u30b7\u30fc label.load.balancing=\u8ca0\u8377\u5206\u6563 label.loading=\u30ed\u30fc\u30c9\u3057\u3066\u3044\u307e\u3059 -label.local.storage.enabled=\u30e6\u30fc\u30b6\u30fc VM \u306e\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u306b\u3059\u308b -label.local.storage.enabled.system.vms=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u306b\u3059\u308b label.local.storage=\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8 label.local=\u30ed\u30fc\u30ab\u30eb label.login=\u30ed\u30b0\u30aa\u30f3 label.logout=\u30ed\u30b0\u30aa\u30d5 -label.saml.login=SAML \u30ed\u30b0\u30aa\u30f3 -label.LUN.number=LUN \u756a\u53f7 label.lun=LUN -label.make.project.owner=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6240\u6709\u8005\u3078\u306e\u5909\u66f4 -label.manage.resources=\u30ea\u30bd\u30fc\u30b9\u306e\u7ba1\u7406 -label.management.server=\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc -label.manage=\u7ba1\u7406 +label.LUN.number=LUN \u756a\u53f7 +label.lxc.traffic.label=LXC \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb +label.make.project.owner=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6240\u6709\u8005\u5316 +label.make.redundant=\u5197\u9577\u5316\u69cb\u6210\u3092\u3068\u308b label.managed=\u7ba1\u7406\u5bfe\u8c61 label.management.ips=\u7ba1\u7406 IP \u30a2\u30c9\u30ec\u30b9 +label.management.server=\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc label.management=\u7ba1\u7406 +label.manage.resources=\u30ea\u30bd\u30fc\u30b9\u306e\u7ba1\u7406 +label.manage=\u7ba1\u7406 label.max.cpus=\u6700\u5927 CPU \u30b3\u30a2\u6570 label.max.guest.limit=\u6700\u5927\u30b2\u30b9\u30c8\u5236\u9650 +label.maximum=\u6700\u5927 +label.max.instances=\u6700\u5927\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u6570 label.max.memory=\u6700\u5927\u30e1\u30e2\u30ea (MiB) label.max.networks=\u6700\u5927\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u6570 label.max.primary.storage=\u6700\u5927\u30d7\u30e9\u30a4\u30de\u30ea (GiB) @@ -785,14 +931,14 @@ label.max.templates=\u6700\u5927\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6570 label.max.vms=\u6700\u5927\u30e6\u30fc\u30b6\u30fc VM \u6570 label.max.volumes=\u6700\u5927\u30dc\u30ea\u30e5\u30fc\u30e0\u6570 label.max.vpcs=\u6700\u5927 VPC \u6570 -label.maximum=\u6700\u5927 label.may.continue=\u7d9a\u884c\u3067\u304d\u307e\u3059\u3002 +label.md5.checksum=MD5 \u30c1\u30a7\u30c3\u30af\u30b5\u30e0 label.memory.allocated=\u5272\u308a\u5f53\u3066\u6e08\u307f\u306e\u30e1\u30e2\u30ea label.memory.limits=\u30e1\u30e2\u30ea\u5236\u9650 (MiB) label.memory.mb=\u30e1\u30e2\u30ea (MB) label.memory.total=\u30e1\u30e2\u30ea\u5408\u8a08 -label.memory.used=\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf label.memory=\u30e1\u30e2\u30ea +label.memory.used=\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf label.menu.accounts=\u30a2\u30ab\u30a6\u30f3\u30c8 label.menu.alerts=\u30a2\u30e9\u30fc\u30c8 label.menu.all.accounts=\u3059\u3079\u3066\u306e\u30a2\u30ab\u30a6\u30f3\u30c8 @@ -819,24 +965,26 @@ label.menu.my.templates=\u30de\u30a4 \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 label.menu.network.offerings=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.menu.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.menu.physical.resources=\u7269\u7406\u30ea\u30bd\u30fc\u30b9 -label.menu.regions=\u9818\u57df +label.menu.regions=\u30ea\u30fc\u30b8\u30e7\u30f3 label.menu.running.instances=\u5b9f\u884c\u4e2d\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 label.menu.security.groups=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.menu.service.offerings=\u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.menu.snapshots=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 +label.menu.sshkeypair=SSH \u30ad\u30fc\u30da\u30a2 label.menu.stopped.instances=\u505c\u6b62\u3055\u308c\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 label.menu.storage=\u30b9\u30c8\u30ec\u30fc\u30b8 label.menu.system.service.offerings=\u30b7\u30b9\u30c6\u30e0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 -label.menu.system.vms=\u30b7\u30b9\u30c6\u30e0 VM label.menu.system=\u30b7\u30b9\u30c6\u30e0 +label.menu.system.vms=\u30b7\u30b9\u30c6\u30e0 VM label.menu.templates=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 label.menu.virtual.appliances=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9 label.menu.virtual.resources=\u4eee\u60f3\u30ea\u30bd\u30fc\u30b9 label.menu.volumes=\u30dc\u30ea\u30e5\u30fc\u30e0 -label.menu.sshkeypair=SSH \u30ad\u30fc \u30da\u30a2 +label.menu.vpc.offerings=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.migrate.instance.to.host=\u5225\u306e\u30db\u30b9\u30c8\u3078\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c label.migrate.instance.to.ps=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c label.migrate.instance.to=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c\u5148\: +label.migrate.lb.vm=LB VM \u306e\u79fb\u884c label.migrate.router.to=\u30eb\u30fc\u30bf\u30fc\u306e\u79fb\u884c\u5148\: label.migrate.systemvm.to=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u79fb\u884c\u5148\: label.migrate.to.host=\u30db\u30b9\u30c8\u3078\u79fb\u884c @@ -844,7 +992,11 @@ label.migrate.to.storage=\u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u79fb\u884c label.migrate.volume.to.primary.storage=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u79fb\u884c label.migrate.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u79fb\u884c label.minimum=\u6700\u5c0f -label.minute.past.hour=\u5206 (\u6bce\u6642) +label.min.instances=\u6700\u5c0f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u6570 +label.min.past.the.hr=\u5206(\u6bce\u6642) +label.minute.past.hour=\u5206(\u6bce\u6642) +label.minutes.past.hour=\u5206(\u6bce\u6642) +label.mode=\u30e2\u30fc\u30c9 label.monday=\u6708\u66dc\u65e5 label.monthly=\u6bce\u6708 label.more.templates=\u305d\u306e\u307b\u304b\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 @@ -855,21 +1007,26 @@ label.move.up.row=1 \u884c\u4e0a\u306b\u79fb\u52d5 label.my.account=\u30de\u30a4 \u30a2\u30ab\u30a6\u30f3\u30c8 label.my.network=\u30de\u30a4 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.my.templates=\u30de\u30a4 \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -label.na=\u8a72\u5f53\u306a\u3057 +label.name.lower=\u540d\u524d label.name.optional=\u540d\u524d (\u30aa\u30d7\u30b7\u30e7\u30f3) label.name=\u540d\u524d label.nat.port.range=NAT \u30dd\u30fc\u30c8\u306e\u7bc4\u56f2 +label.na=\u5229\u7528\u4e0d\u53ef label.netmask=\u30cd\u30c3\u30c8\u30de\u30b9\u30af +label.netscaler.details=NetScaler \u306e\u8a73\u7d30 label.netScaler=NetScaler +label.network.ACLs=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL label.network.ACL.total=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL \u5408\u8a08 label.network.ACL=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL -label.network.ACLs=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL +label.network.addVM=VM \u3078\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 +label.network.cidr=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af CIDR label.network.desc=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8aac\u660e label.network.device.type=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c7\u30d0\u30a4\u30b9\u306e\u7a2e\u985e label.network.device=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c7\u30d0\u30a4\u30b9 label.network.domain.text=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c9\u30e1\u30a4\u30f3 label.network.domain=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c9\u30e1\u30a4\u30f3 label.network.id=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ID +label.networking.and.security=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 label.network.label.display.for.blank.value=\u30c7\u30d5\u30a9\u30eb\u30c8 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u4f7f\u7528 label.network.limits=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5236\u9650 label.network.name=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u540d @@ -881,85 +1038,112 @@ label.network.rate.megabytes=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901f\u5ea6 (M label.network.rate=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901f\u5ea6 (MB/\u79d2) label.network.read=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u8aad\u307f\u53d6\u308a label.network.service.providers=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30b5\u30fc\u30d3\u30b9 \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc -label.network.type=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u7a2e\u985e -label.network.write=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u66f8\u304d\u8fbc\u307f -label.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af -label.networking.and.security=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 label.networks=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af +label.network.type=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u7a2e\u985e +label.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af +label.network.write=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u66f8\u304d\u8fbc\u307f label.new.password=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9 label.new.project=\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 -label.new.vm=\u65b0\u3057\u3044 VM label.new=\u65b0\u898f +label.new.vm=\u65b0\u3057\u3044 VM label.next=\u6b21\u3078 label.nexusVswitch=Nexus 1000V +label.nfs=NFS label.nfs.server=NFS \u30b5\u30fc\u30d0\u30fc label.nfs.storage=NFS \u30b9\u30c8\u30ec\u30fc\u30b8 -label.nfs=NFS label.nic.adapter.type=NIC \u30a2\u30c0\u30d7\u30bf\u30fc\u306e\u7a2e\u985e label.nicira.controller.address=\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc \u30a2\u30c9\u30ec\u30b9 label.nicira.l3gatewayserviceuuid=L3 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 \u30b5\u30fc\u30d3\u30b9\u306e UUID +label.nicira.nvp.details=Nicira NVP \u306e\u8a73\u7d30 label.nicira.transportzoneuuid=\u30c8\u30e9\u30f3\u30b9\u30dd\u30fc\u30c8 \u30be\u30fc\u30f3\u306e UUID -label.brocade.vcs.address=VCS \u30b9\u30a4\u30c3\u30c1 \u30a2\u30c9\u30ec\u30b9 label.nics=NIC label.no.actions=\u5b9f\u884c\u3067\u304d\u308b\u64cd\u4f5c\u306f\u3042\u308a\u307e\u305b\u3093 label.no.alerts=\u6700\u8fd1\u306e\u30a2\u30e9\u30fc\u30c8\u306f\u3042\u308a\u307e\u305b\u3093 label.no.data=\u8868\u793a\u3059\u308b\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093 label.no.errors=\u6700\u8fd1\u306e\u30a8\u30e9\u30fc\u306f\u3042\u308a\u307e\u305b\u3093 +label.no.grouping=(\u30b0\u30eb\u30fc\u30d7\u306a\u3057) label.no.isos=\u4f7f\u7528\u3067\u304d\u308b ISO \u306f\u3042\u308a\u307e\u305b\u3093 label.no.items=\u4f7f\u7528\u3067\u304d\u308b\u9805\u76ee\u306f\u3042\u308a\u307e\u305b\u3093 -label.no.security.groups=\u4f7f\u7528\u3067\u304d\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u306f\u3042\u308a\u307e\u305b\u3093 -label.no.thanks=\u8a2d\u5b9a\u3057\u306a\u3044 -label.no=\u3044\u3044\u3048 label.none=\u306a\u3057 +label.no.security.groups=\u4f7f\u7528\u3067\u304d\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u306f\u3042\u308a\u307e\u305b\u3093 label.not.found=\u898b\u3064\u304b\u308a\u307e\u305b\u3093 +label.no.thanks=\u8a2d\u5b9a\u3057\u306a\u3044 label.notifications=\u901a\u77e5 -label.num.cpu.cores=CPU \u30b3\u30a2\u6570 +label.no=\u3044\u3044\u3048 label.number.of.clusters=\u30af\u30e9\u30b9\u30bf\u30fc\u6570 +label.number.of.cpu.sockets=CPU \u30bd\u30b1\u30c3\u30c8\u6570 label.number.of.hosts=\u30db\u30b9\u30c8\u6570 label.number.of.pods=\u30dd\u30c3\u30c9\u6570 label.number.of.system.vms=\u30b7\u30b9\u30c6\u30e0 VM \u6570 label.number.of.virtual.routers=\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u6570 label.number.of.zones=\u30be\u30fc\u30f3\u6570 +label.num.cpu.cores=CPU \u30b3\u30a2\u6570 label.numretries=\u518d\u8a66\u884c\u56de\u6570 label.ocfs2=OCFS2 label.offer.ha=\u9ad8\u53ef\u7528\u6027\u3092\u63d0\u4f9b\u3059\u308b +label.of.month=\u6708\u6bce label.ok=OK +label.opendaylight.controllerdetail=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u8a73\u7d30 +label.opendaylight.controller=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc +label.opendaylight.controllers=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc +label.openDaylight=OpenDaylight +label.operator=\u6f14\u7b97\u5b50 label.optional=\u30aa\u30d7\u30b7\u30e7\u30f3 label.order=\u9806\u5e8f label.os.preference=OS \u57fa\u672c\u8a2d\u5b9a label.os.type=OS \u306e\u7a2e\u985e -label.ovm3.vip=\u30de\u30b9\u30bf\u30fc VIP IP \u30a2\u30c9\u30ec\u30b9 -label.ovm3.pool=\u30cd\u30a4\u30c6\u30a3\u30d6 \u30d7\u30fc\u30ea\u30f3\u30b0 -label.ovm3.cluster=\u30cd\u30a4\u30c6\u30a3\u30d6 \u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0 +label.other=\u305d\u306e\u307b\u304b +label.override.guest.traffic=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b +label.override.public.traffic=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b +label.ovm3.cluster=\u30cd\u30a4\u30c6\u30a3\u30d6\u30af\u30e9\u30b9\u30bf\u30fc +label.ovm3.pool=\u30cd\u30a4\u30c6\u30a3\u30d6\u30d7\u30fc\u30eb +label.ovm3.vip=\u30de\u30b9\u30bf\u30fc VIP IP +label.ovm.traffic.label=OVM \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb +label.ovs=OVS label.owned.public.ips=\u6240\u6709\u3059\u308b\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 label.owner.account=\u6240\u6709\u8005\u30a2\u30ab\u30a6\u30f3\u30c8 label.owner.domain=\u6240\u6709\u8005\u30c9\u30e1\u30a4\u30f3 +label.palo.alto.details=Palo Alto \u306e\u8a73\u7d30 label.PA.log.profile=Palo Alto \u30ed\u30b0 \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb -label.PA.threat.profile=Palo Alto \u8105\u5a01\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb +label.PA=Palo Alto label.parent.domain=\u89aa\u30c9\u30e1\u30a4\u30f3 -label.password.enabled=\u30d1\u30b9\u30ef\u30fc\u30c9\u7ba1\u7406\u3092\u6709\u52b9\u306b\u3059\u308b +label.passive=\u30d1\u30c3\u30b7\u30d6 +label.password.enabled=\u30d1\u30b9\u30ef\u30fc\u30c9\u7ba1\u7406\u6709\u52b9 +label.password.lower=\u30d1\u30b9\u30ef\u30fc\u30c9 +label.password.reset.confirm=\u6b21\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f\: label.password=\u30d1\u30b9\u30ef\u30fc\u30c9 +label.PA.threat.profile=Palo Alto \u8105\u5a01\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb label.path=\u30d1\u30b9 label.perfect.forward.secrecy=Perfect Forward Secrecy +label.persistent=\u6c38\u7d9a label.physical.network.ID=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ID label.physical.network=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.PING.CIFS.password=PING CIFS \u30d1\u30b9\u30ef\u30fc\u30c9 label.PING.CIFS.username=PING CIFS \u30e6\u30fc\u30b6\u30fc\u540d label.PING.dir=PING \u30c7\u30a3\u30ec\u30af\u30c8\u30ea +label.ping.path=Ping \u30d1\u30b9 label.PING.storage.IP=PING \u5bfe\u8c61\u306e\u30b9\u30c8\u30ec\u30fc\u30b8 IP \u30a2\u30c9\u30ec\u30b9 +label.planner.mode=\u30d7\u30e9\u30f3\u30ca\u30fc \u30e2\u30fc\u30c9 label.please.specify.netscaler.info=NetScaler \u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 label.please.wait=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044 label.plugin.details=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8a73\u7d30 label.plugins=\u30d7\u30e9\u30b0\u30a4\u30f3 +label.pod.dedicated=\u30dd\u30c3\u30c9\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f label.pod.name=\u30dd\u30c3\u30c9\u540d -label.pod=\u30dd\u30c3\u30c9 label.pods=\u30dd\u30c3\u30c9 +label.pod=\u30dd\u30c3\u30c9 +label.polling.interval.sec=\u30dd\u30fc\u30ea\u30f3\u30b0\u9593\u9694 (\u79d2) +label.portable.ip.range.details=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8a73\u7d30 +label.portable.ip.ranges=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 +label.portable.ips=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9 +label.portable.ip=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9 label.port.forwarding.policies=\u30dd\u30fc\u30c8\u8ee2\u9001\u30dd\u30ea\u30b7\u30fc label.port.forwarding=\u30dd\u30fc\u30c8\u8ee2\u9001 label.port.range=\u30dd\u30fc\u30c8\u306e\u7bc4\u56f2 +label.port=\u30dd\u30fc\u30c8 label.PreSetup=PreSetup -label.prev=\u623b\u308b label.previous=\u623b\u308b +label.prev=\u623b\u308b label.primary.allocated=\u5272\u308a\u5f53\u3066\u6e08\u307f\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 label.primary.network=\u30d7\u30e9\u30a4\u30de\u30ea \u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.primary.storage.count=\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30d7\u30fc\u30eb @@ -969,75 +1153,113 @@ label.primary.used=\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 label.private.Gateway=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.private.interface=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9 label.private.ip.range=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 -label.private.ip=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9 label.private.ips=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9 +label.private.ip=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9 +label.privatekey=PKCS\#8 \u79d8\u5bc6\u30ad\u30fc label.private.network=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.private.port=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30dd\u30fc\u30c8 label.private.zone=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30be\u30fc\u30f3 -label.privatekey=PKCS\#8 \u79d8\u5bc6\u30ad\u30fc +label.profile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb label.project.dashboard=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9 label.project.id=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 ID label.project.invite=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u62db\u5f85 label.project.name=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d -label.project.view=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u30d3\u30e5\u30fc -label.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 label.projects=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 +label.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 +label.project.view=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u30d3\u30e5\u30fc +label.protocol.number=\u30d7\u30ed\u30c8\u30b3\u30eb\u756a\u53f7 label.protocol=\u30d7\u30ed\u30c8\u30b3\u30eb -label.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc label.providers=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc +label.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc label.public.interface=\u30d1\u30d6\u30ea\u30c3\u30af \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9 -label.public.ip=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 label.public.ips=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 +label.public.ip=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 +label.public.load.balancer.provider=\u30d1\u30d6\u30ea\u30c3\u30af \u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc label.public.network=\u30d1\u30d6\u30ea\u30c3\u30af \u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.public.port=\u30d1\u30d6\u30ea\u30c3\u30af \u30dd\u30fc\u30c8 label.public.traffic=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af -label.public.zone=\u30d1\u30d6\u30ea\u30c3\u30af \u30be\u30fc\u30f3 +label.public.traffic.vswitch.name=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u540d +label.public.traffic.vswitch.type=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u306e\u7a2e\u985e label.public=\u30d1\u30d6\u30ea\u30c3\u30af +label.public.zone=\u30d1\u30d6\u30ea\u30c3\u30af \u30be\u30fc\u30f3 label.purpose=\u76ee\u7684 label.Pxe.server.type=PXE \u30b5\u30fc\u30d0\u30fc\u306e\u7a2e\u985e +label.qos.type=QoS \u306e\u7a2e\u985e label.quickview=\u30af\u30a4\u30c3\u30af\u30d3\u30e5\u30fc +label.quiesce.vm=VM \u3092\u4f11\u6b62\u3059\u308b +label.quiet.time.sec=\u5f85\u3061\u6642\u9593 (\u79d2) +label.rbd.id=Cephx \u30e6\u30fc\u30b6\u30fc +label.rbd.monitor=Ceph \u30e2\u30cb\u30bf\u30fc +label.rbd.pool=Ceph \u30d7\u30fc\u30eb +label.rbd=RBD +label.rbd.secret=Cephx \u30b7\u30fc\u30af\u30ec\u30c3\u30c8 label.reboot=\u518d\u8d77\u52d5 label.recent.errors=\u6700\u8fd1\u306e\u30a8\u30e9\u30fc +label.recover.vm=VM \u306e\u5fa9\u5143 label.redundant.router.capability=\u5197\u9577\u30eb\u30fc\u30bf\u30fc\u6a5f\u80fd label.redundant.router=\u5197\u9577\u30eb\u30fc\u30bf\u30fc -label.redundant.vpc=\u5197\u9577 VPC label.redundant.state=\u5197\u9577\u72b6\u614b +label.redundant.vpc=\u5197\u9577 VPC +label.refresh.blades=\u30d6\u30ec\u30fc\u30c9\u306e\u66f4\u65b0 label.refresh=\u66f4\u65b0 -label.region=\u9818\u57df +label.region.details=\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u8a73\u7d30 +label.regionlevelvpc=\u30ea\u30fc\u30b8\u30e7\u30f3\u30ec\u30d9\u30eb\u306e VPC +label.region=\u30ea\u30fc\u30b8\u30e7\u30f3 +label.reinstall.vm=VM \u306e\u518d\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb label.related=\u95a2\u9023 +label.release.account.lowercase=\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u89e3\u653e +label.release.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u89e3\u653e +label.release.dedicated.cluster=\u5c02\u7528\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u89e3\u653e +label.release.dedicated.host=\u5c02\u7528\u30db\u30b9\u30c8\u306e\u89e3\u653e +label.release.dedicated.pod=\u5c02\u7528\u30dd\u30c3\u30c9\u306e\u89e3\u653e +label.release.dedicated.vlan.range=\u5c02\u7528 VLAN \u306e\u7bc4\u56f2\u306e\u89e3\u653e +label.release.dedicated.zone=\u5c02\u7528\u30be\u30fc\u30f3\u306e\u89e3\u653e label.remind.later=\u30a2\u30e9\u30fc\u30e0\u3092\u8868\u793a\u3059\u308b label.remove.ACL=ACL \u306e\u524a\u9664 label.remove.egress.rule=\u9001\u4fe1\u898f\u5247\u306e\u524a\u9664 label.remove.from.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059 label.remove.ingress.rule=\u53d7\u4fe1\u898f\u5247\u306e\u524a\u9664 label.remove.ip.range=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u524a\u9664 +label.remove.ldap=LDAP \u306e\u524a\u9664 +label.remove.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u524a\u9664 label.remove.pf=\u30dd\u30fc\u30c8\u8ee2\u9001\u898f\u5247\u306e\u524a\u9664 label.remove.project.account=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304b\u3089\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664 -label.remove.region=\u9818\u57df\u306e\u524a\u9664 +label.remove.region=\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u524a\u9664 label.remove.rule=\u898f\u5247\u306e\u524a\u9664 label.remove.static.nat.rule=\u9759\u7684 NAT \u898f\u5247\u306e\u524a\u9664 label.remove.static.route=\u9759\u7684\u30eb\u30fc\u30c8\u306e\u524a\u9664 label.remove.tier=\u968e\u5c64\u306e\u524a\u9664 label.remove.vm.from.lb=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u898f\u5247\u304b\u3089\u306e VM \u306e\u524a\u9664 +label.remove.vm.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u304b\u3089\u306e VM \u306e\u524a\u9664 +label.remove.vmware.datacenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u524a\u9664 +label.remove.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u524a\u9664 label.remove.vpc=VPC \u306e\u524a\u9664 -label.removing.user=\u30e6\u30fc\u30b6\u30fc\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059 label.removing=\u524a\u9664\u3057\u3066\u3044\u307e\u3059 +label.removing.user=\u30e6\u30fc\u30b6\u30fc\u3092\u524a\u9664\u3057\u3066\u3044\u307e\u3059 +label.reource.id=\u30ea\u30bd\u30fc\u30b9 ID +label.replace.acl=ACL \u306e\u7f6e\u304d\u63db\u3048 +label.replace.acl.list=ACL \u4e00\u89a7\u306e\u7f6e\u304d\u63db\u3048 label.required=\u5fc5\u9808\u3067\u3059 +label.requires.upgrade=\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u5fc5\u8981 +label.reserved.ip.range=\u4e88\u7d04\u6e08\u307f IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 label.reserved.system.gateway=\u4e88\u7d04\u6e08\u307f\u30b7\u30b9\u30c6\u30e0 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.reserved.system.ip=\u4e88\u7d04\u6e08\u307f\u30b7\u30b9\u30c6\u30e0 IP \u30a2\u30c9\u30ec\u30b9 label.reserved.system.netmask=\u4e88\u7d04\u6e08\u307f\u30b7\u30b9\u30c6\u30e0 \u30cd\u30c3\u30c8\u30de\u30b9\u30af +label.resetVM=VM \u306e\u30ea\u30bb\u30c3\u30c8 label.reset.VPN.connection=VPN \u63a5\u7d9a\u306e\u30ea\u30bb\u30c3\u30c8 label.resize.new.offering.id=\u65b0\u3057\u3044\u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 -label.resize.new.size=\u65b0\u3057\u3044\u30b5\u30a4\u30ba (GB) +label.resize.new.size=\u65b0\u3057\u3044\u30b5\u30a4\u30ba(GB) label.resize.shrink.ok=\u7e2e\u5c0f\u53ef\u80fd\u306b\u3059\u308b +label.resource.limit.exceeded=\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u3092\u8d85\u904e\u3057\u307e\u3057\u305f label.resource.limits=\u30ea\u30bd\u30fc\u30b9\u5236\u9650 +label.resource.name=\u30ea\u30bd\u30fc\u30b9\u540d label.resource.state=\u30ea\u30bd\u30fc\u30b9\u306e\u72b6\u614b -label.resource=\u30ea\u30bd\u30fc\u30b9 label.resources=\u30ea\u30bd\u30fc\u30b9 +label.resource=\u30ea\u30bd\u30fc\u30b9 +label.response.timeout.in.sec=\u5fdc\u7b54\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8 (\u79d2) label.restart.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u518d\u8d77\u52d5 label.restart.required=\u518d\u8d77\u52d5\u304c\u5fc5\u8981 label.restart.vpc=VPC \u306e\u518d\u8d77\u52d5 -message.restart.vpc.remark=VPC \u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?

\u6ce8: \u975e\u5197\u9577 VPC \u3092\u5197\u9577\u5316\u3059\u308b\u3068 \u5f37\u5236\u7684\u306b\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304c\u6570\u5206\u9593\u4f7f\u7528\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002

label.restore=\u5fa9\u5143 label.retry.interval=\u518d\u8a66\u884c\u9593\u9694 label.review=\u78ba\u8a8d @@ -1046,6 +1268,11 @@ label.role=\u5f79\u5272 label.root.certificate=\u30eb\u30fc\u30c8\u8a3c\u660e\u66f8 label.root.disk.controller=\u30eb\u30fc\u30c8 \u30c7\u30a3\u30b9\u30af \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc label.root.disk.offering=\u30eb\u30fc\u30c8 \u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 +label.root.disk.size=\u30eb\u30fc\u30c8 \u30c7\u30a3\u30b9\u30af \u30b5\u30a4\u30ba +label.router.vm.scaled.up=\u30eb\u30fc\u30bf\u30fc VM \u306e\u30b5\u30a4\u30ba\u304c\u62e1\u5927\u3055\u308c\u307e\u3057\u305f +label.routing.host=\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 \u30db\u30b9\u30c8 +label.routing=\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 +label.rule.number=\u898f\u5247\u756a\u53f7 label.rules=\u898f\u5247 label.running.vms=\u5b9f\u884c\u4e2d\u306e VM label.s3.access_key=\u30a2\u30af\u30bb\u30b9 \u30ad\u30fc @@ -1053,6 +1280,8 @@ label.s3.bucket=\u30d0\u30b1\u30c3\u30c8 label.s3.connection_timeout=\u63a5\u7d9a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8 label.s3.endpoint=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 label.s3.max_error_retry=\u6700\u5927\u30a8\u30e9\u30fc\u518d\u8a66\u884c\u6570 +label.s3.nfs.path=S3 NFS \u30d1\u30b9 +label.s3.nfs.server=S3 NFS \u30b5\u30fc\u30d0\u30fc label.s3.secret_key=\u79d8\u5bc6\u30ad\u30fc label.s3.socket_timeout=\u30bd\u30b1\u30c3\u30c8 \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8 label.s3.use_https=HTTPS \u3092\u4f7f\u7528\u3059\u308b @@ -1060,19 +1289,24 @@ label.saturday=\u571f\u66dc\u65e5 label.save.and.continue=\u4fdd\u5b58\u3057\u3066\u7d9a\u884c label.save=\u4fdd\u5b58 label.saving.processing=\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059... +label.scale.up.policy=\u30b5\u30a4\u30ba\u62e1\u5927\u30dd\u30ea\u30b7\u30fc label.scope=\u30b9\u30b3\u30fc\u30d7 label.search=\u691c\u7d22 +label.secondary.ips=\u30bb\u30ab\u30f3\u30c0\u30ea IP +label.secondary.isolated.vlan.id=\u5206\u96e2\u3055\u308c\u305f\u30bb\u30ab\u30f3\u30c0\u30ea VLAN ID +label.secondary.staging.store.details=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u306e\u8a73\u7d30 +label.secondary.staging.store=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2 label.secondary.storage.count=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30d7\u30fc\u30eb +label.secondary.storage.details=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u8a73\u7d30 label.secondary.storage.limits=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u5236\u9650 (GiB) -label.secondary.storage.vm=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 VM label.secondary.storage=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 +label.secondary.storage.vm=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 VM label.secondary.used=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u4f7f\u7528\u91cf label.secret.key=\u79d8\u5bc6\u30ad\u30fc label.security.group.name=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u540d -label.security.group=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.security.groups.enabled=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u6709\u52b9 label.security.groups=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 -label.select-view=\u30d3\u30e5\u30fc\u306e\u9078\u629e +label.security.group=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 label.select.a.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u9078\u629e label.select.a.zone=\u30be\u30fc\u30f3\u306e\u9078\u629e label.select.instance.to.attach.volume.to=\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30a2\u30bf\u30c3\u30c1\u3059\u308b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044 @@ -1080,39 +1314,59 @@ label.select.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u9078\u629e label.select.iso.or.template=ISO \u307e\u305f\u306f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u9078\u629e label.select.offering=\u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u9078\u629e label.select.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u9078\u629e +label.select.region=\u30ea\u30fc\u30b8\u30e7\u30f3\u306e\u9078\u629e +label.select.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u9078\u629e label.select.tier=\u968e\u5c64\u306e\u9078\u629e -label.select.vm.for.static.nat=\u9759\u7684 NAT \u7528 VM \u306e\u9078\u629e label.select=\u9078\u629e +label.select-view=\u30d3\u30e5\u30fc\u306e\u9078\u629e +label.select.vm.for.static.nat=\u9759\u7684 NAT \u7528 VM \u306e\u9078\u629e label.sent=\u9001\u4fe1\u6e08\u307f label.server=\u30b5\u30fc\u30d0\u30fc label.service.capabilities=\u30b5\u30fc\u30d3\u30b9\u306e\u6a5f\u80fd label.service.offering=\u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 +label.service.state=\u30b5\u30fc\u30d3\u30b9\u306e\u72b6\u614b +label.services=\u30b5\u30fc\u30d3\u30b9 label.session.expired=\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u307e\u3057\u305f -label.set.up.zone.type=\u30be\u30fc\u30f3\u306e\u7a2e\u985e\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 +label.set.default.NIC=\u30c7\u30d5\u30a9\u30eb\u30c8 NIC \u306e\u8a2d\u5b9a +label.settings=\u8a2d\u5b9a label.setup.network=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 -label.setup.zone=\u30be\u30fc\u30f3\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 label.setup=\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 -label.shared=\u5171\u6709 +label.set.up.zone.type=\u30be\u30fc\u30f3\u306e\u7a2e\u985e\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 +label.setup.zone=\u30be\u30fc\u30f3\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 label.SharedMountPoint=SharedMountPoint +label.shared=\u5171\u6709 +label.show.advanced.settings=\u8a73\u7d30\u8a2d\u5b9a\u306e\u8868\u793a label.show.ingress.rule=\u53d7\u4fe1\u898f\u5247\u306e\u8868\u793a label.shutdown.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3 +label.simplified.chinese.keyboard=\u7c21\u6613\u4e2d\u56fd\u8a9e\u30ad\u30fc\u30dc\u30fc\u30c9 label.site.to.site.VPN=\u30b5\u30a4\u30c8\u9593 VPN label.size=\u30b5\u30a4\u30ba label.skip.guide=CloudStack \u3092\u4f7f\u7528\u3057\u305f\u3053\u3068\u304c\u3042\u308b\u306e\u3067\u3001\u3053\u306e\u30ac\u30a4\u30c9\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b +label.smb.domain=SMB \u30c9\u30e1\u30a4\u30f3 +label.smb.password=SMB \u30d1\u30b9\u30ef\u30fc\u30c9 +label.smb.username=SMB \u30e6\u30fc\u30b6\u30fc\u540d label.snapshot.limits=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u5236\u9650 label.snapshot.name=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u540d -label.snapshot.s=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 label.snapshot.schedule=\u5b9a\u671f\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7 -label.snapshot=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 label.snapshots=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 +label.snapshot.s=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u6570 +label.snapshot=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 +label.SNMP.community=SNMP \u30b3\u30df\u30e5\u30cb\u30c6\u30a3 +label.SNMP.port=SNMP \u30dd\u30fc\u30c8 +label.sockets=CPU \u30bd\u30b1\u30c3\u30c8 +label.source.ip.address=\u9001\u4fe1\u5143 IP \u30a2\u30c9\u30ec\u30b9 +label.source.nat.supported=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u9001\u4fe1\u5143 NAT label.source.nat=\u9001\u4fe1\u5143 NAT +label.source.port=\u9001\u4fe1\u5143\u30dd\u30fc\u30c8 label.specify.IP.ranges=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u6307\u5b9a label.specify.vlan=VLAN \u3092\u6307\u5b9a\u3059\u308b label.specify.vxlan=VXLAN \u3092\u6307\u5b9a\u3059\u308b label.SR.name=SR \u540d\u30e9\u30d9\u30eb +label.srx.details=SRX \u306e\u8a73\u7d30 label.srx=SRX -label.PA=Palo Alto +label.standard.us.keyboard=\u6a19\u6e96(US) \u30ad\u30fc\u30dc\u30fc\u30c9 label.start.IP=\u958b\u59cb IP \u30a2\u30c9\u30ec\u30b9 +label.start.lb.vm=LB VM \u306e\u8d77\u52d5 label.start.port=\u958b\u59cb\u30dd\u30fc\u30c8 label.start.reserved.system.IP=\u4e88\u7d04\u6e08\u307f\u958b\u59cb\u30b7\u30b9\u30c6\u30e0 IP \u30a2\u30c9\u30ec\u30b9 label.start.vlan=\u958b\u59cb VLAN @@ -1120,8 +1374,8 @@ label.start.vxlan=\u958b\u59cb VXLAN label.state=\u72b6\u614b label.static.nat.enabled=\u9759\u7684 NAT \u6709\u52b9 label.static.nat.to=\u9759\u7684 NAT \u306e\u8a2d\u5b9a\u5148\: -label.static.nat.vm.details=\u9759\u7684 NAT VM \u306e\u8a73\u7d30 label.static.nat=\u9759\u7684 NAT +label.static.nat.vm.details=\u9759\u7684 NAT VM \u306e\u8a73\u7d30 label.statistics=\u7d71\u8a08 label.status=\u72b6\u6cc1 label.step.1.title=\u624b\u9806 1\: \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u9078\u629e @@ -1134,6 +1388,7 @@ label.step.4.title=\u624b\u9806 4\: \u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.step.4=\u624b\u9806 4 label.step.5.title=\u624b\u9806 5\: \u78ba\u8a8d label.step.5=\u624b\u9806 5 +label.stickiness.method=\u6301\u7d9a\u6027\u65b9\u6cd5 label.stickiness=\u6301\u7d9a\u6027 label.sticky.cookie-name=Cookie \u540d label.sticky.domain=\u30c9\u30e1\u30a4\u30f3 @@ -1142,84 +1397,110 @@ label.sticky.holdtime=\u4fdd\u6301\u6642\u9593 label.sticky.indirect=\u9593\u63a5 label.sticky.length=\u9577\u3055 label.sticky.mode=\u30e2\u30fc\u30c9 +label.sticky.name=\u30b9\u30c6\u30a3\u30c3\u30ad\u30fc\u540d label.sticky.nocache=\u30ad\u30e3\u30c3\u30b7\u30e5\u306a\u3057 label.sticky.postonly=\u30dd\u30b9\u30c8\u306e\u307f label.sticky.prefix=\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9 label.sticky.request-learn=\u30e9\u30fc\u30cb\u30f3\u30b0\u306e\u8981\u6c42 label.sticky.tablesize=\u30c6\u30fc\u30d6\u30eb \u30b5\u30a4\u30ba -label.stop=\u505c\u6b62 +label.stop.lb.vm=LB VM \u306e\u505c\u6b62 label.stopped.vms=\u505c\u6b62\u4e2d\u306e VM +label.stop=\u505c\u6b62 +label.storage.pool=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30d7\u30fc\u30eb label.storage.tags=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30bf\u30b0 label.storage.traffic=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af label.storage.type=\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u7a2e\u985e -label.qos.type=QoS \u306e\u7a2e\u985e -label.cache.mode=\u66f8\u304d\u8fbc\u307f\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u7a2e\u985e label.storage=\u30b9\u30c8\u30ec\u30fc\u30b8 label.subdomain.access=\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3 \u30a2\u30af\u30bb\u30b9 -label.submit=\u9001\u4fe1 label.submitted.by=[\u9001\u4fe1\u30e6\u30fc\u30b6\u30fc\: ] +label.submit=\u9001\u4fe1 label.succeeded=\u6210\u529f label.sunday=\u65e5\u66dc\u65e5 label.super.cidr.for.guest.networks=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30b9\u30fc\u30d1\u30fc CIDR label.supported.services=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u30b5\u30fc\u30d3\u30b9 label.supported.source.NAT.type=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u9001\u4fe1\u5143 NAT \u306e\u7a2e\u985e +label.supportsstrechedl2subnet=\u30b9\u30c8\u30ec\u30c3\u30c1 L2 \u30b5\u30d6\u30cd\u30c3\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b label.suspend.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e00\u6642\u505c\u6b62 +label.switch.type=\u30b9\u30a4\u30c3\u30c1\u306e\u7a2e\u985e label.system.capacity=\u30b7\u30b9\u30c6\u30e0\u306e\u51e6\u7406\u80fd\u529b +label.system.offering.for.router=\u30eb\u30fc\u30bf\u30fc\u7528\u30b7\u30b9\u30c6\u30e0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.system.offering=\u30b7\u30b9\u30c6\u30e0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.system.service.offering=\u30b7\u30b9\u30c6\u30e0 \u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 +label.system.vm.details=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u8a73\u7d30 +label.system.vm.scaled.up=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u30b5\u30a4\u30ba\u304c\u62e1\u5927\u3055\u308c\u307e\u3057\u305f +label.system.vms=\u30b7\u30b9\u30c6\u30e0 VM label.system.vm.type=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u7a2e\u985e label.system.vm=\u30b7\u30b9\u30c6\u30e0 VM -label.system.vms=\u30b7\u30b9\u30c6\u30e0 VM label.system.wide.capacity=\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u51e6\u7406\u80fd\u529b label.tagged=\u30bf\u30b0\u3042\u308a +label.tag.key=\u30bf\u30b0 \u30ad\u30fc label.tags=\u30bf\u30b0 +label.tag.value=\u30bf\u30b0\u5024 label.target.iqn=\u30bf\u30fc\u30b2\u30c3\u30c8 IQN label.task.completed=\u30bf\u30b9\u30af\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f label.template.limits=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5236\u9650 label.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 label.TFTP.dir=TFTP \u30c7\u30a3\u30ec\u30af\u30c8\u30ea +label.tftp.root.directory=TFTP \u30eb\u30fc\u30c8 \u30c7\u30a3\u30ec\u30af\u30c8\u30ea label.theme.default=\u30c7\u30d5\u30a9\u30eb\u30c8 \u30c6\u30fc\u30de label.theme.grey=\u30ab\u30b9\u30bf\u30e0 - \u30b0\u30ec\u30fc label.theme.lightblue=\u30ab\u30b9\u30bf\u30e0 - \u30e9\u30a4\u30c8 \u30d6\u30eb\u30fc +label.threshold=\u3057\u304d\u3044\u5024 label.thursday=\u6728\u66dc\u65e5 label.tier.details=\u968e\u5c64\u306e\u8a73\u7d30 label.tier=\u968e\u5c64 -label.time.zone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3 -label.time=\u6642\u523b -label.timeout.in.second = \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8 (\u79d2) +label.time.colon=\u6642\u9593\: +label.timeout.in.second = \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u5024(\u79d2) label.timeout=\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8 +label.time=\u6642\u9593 +label.timezone.colon=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\: +label.time.zone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3 label.timezone=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3 label.token=\u30c8\u30fc\u30af\u30f3 -label.total.CPU=CPU \u5408\u8a08 label.total.cpu=CPU \u5408\u8a08 +label.total.CPU=CPU \u5408\u8a08 label.total.hosts=\u30db\u30b9\u30c8\u5408\u8a08 label.total.memory=\u30e1\u30e2\u30ea\u5408\u8a08 -label.total.of.ip=IP \u30a2\u30c9\u30ec\u30b9\u5408\u8a08 +label.total.of.ip=\u5168 IP \u30a2\u30c9\u30ec\u30b9\u6570 label.total.of.vm=VM \u5408\u8a08 label.total.storage=\u30b9\u30c8\u30ec\u30fc\u30b8\u5408\u8a08 +label.total.virtual.routers=\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u5408\u8a08 +label.total.virtual.routers.upgrade=\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u5fc5\u8981\u306a\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u5408\u8a08 label.total.vms=VM \u5408\u8a08 label.traffic.label=\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb -label.traffic.type=\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e label.traffic.types=\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e +label.traffic.type=\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e label.tuesday=\u706b\u66dc\u65e5 label.type.id=\u7a2e\u985e ID +label.type.lower=\u7a2e\u985e label.type=\u7a2e\u985e +label.ucs=UCS +label.uk.keyboard=UK \u30ad\u30fc\u30dc\u30fc\u30c9 label.unavailable=\u4f7f\u7528\u4e0d\u80fd +label.unhealthy.threshold=\u7570\u5e38\u3057\u304d\u3044\u5024 label.unlimited=\u7121\u5236\u9650 label.untagged=\u30bf\u30b0\u306a\u3057 label.update.project.resources=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u30ea\u30bd\u30fc\u30b9\u306e\u66f4\u65b0 label.update.ssl.cert= SSL \u8a3c\u660e\u66f8 label.update.ssl= SSL \u8a3c\u660e\u66f8 label.updating=\u66f4\u65b0\u3057\u3066\u3044\u307e\u3059 -label.upload.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 +label.upgrade.required=\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059 +label.upgrade.router.newer.template=\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b label.upload=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 +label.upload.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 label.url=URL label.usage.interface=\u4f7f\u7528\u72b6\u6cc1\u6e2c\u5b9a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9 -label.use.vm.ip=\u6b21\u306e VM IP \u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528\: +label.usage.sanity.result=\u4f7f\u7528\u72b6\u6cc1\u30b5\u30cb\u30c6\u30a3\u7d50\u679c +label.usage.server=\u4f7f\u7528\u72b6\u6cc1\u6e2c\u5b9a\u30b5\u30fc\u30d0\u30fc label.used=\u4f7f\u7528\u4e2d -label.user=\u30e6\u30fc\u30b6\u30fc +label.user.data=\u30e6\u30fc\u30b6\u30fc \u30c7\u30fc\u30bf +label.username.lower=\u30e6\u30fc\u30b6\u30fc\u540d label.username=\u30e6\u30fc\u30b6\u30fc\u540d label.users=\u30e6\u30fc\u30b6\u30fc +label.user=\u30e6\u30fc\u30b6\u30fc +label.user.vm=\u30e6\u30fc\u30b6\u30fc VM +label.use.vm.ips=\u6b21\u306e VM IP \u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528 +label.use.vm.ip=\u6b21\u306e VM IP \u30a2\u30c9\u30ec\u30b9\u3092\u4f7f\u7528\: label.value=\u5024 label.vcdcname=vCenter DC \u540d label.vcenter.cluster=vCenter \u30af\u30e9\u30b9\u30bf\u30fc @@ -1228,396 +1509,135 @@ label.vcenter.datastore=vCenter \u30c7\u30fc\u30bf\u30b9\u30c8\u30a2 label.vcenter.host=vCenter \u30db\u30b9\u30c8 label.vcenter.password=vCenter \u30d1\u30b9\u30ef\u30fc\u30c9 label.vcenter.username=vCenter \u30e6\u30fc\u30b6\u30fc\u540d +label.vcenter=vCenter label.vcipaddress=vCenter IP \u30a2\u30c9\u30ec\u30b9 label.version=\u30d0\u30fc\u30b8\u30e7\u30f3 +label.vgpu.max.resolution=\u6700\u5927\u89e3\u50cf\u5ea6 +label.vgpu.max.vgpu.per.gpu=GPU \u3042\u305f\u308a\u306e vGPU \u6570 +label.vgpu.remaining.capacity=\u6b8b\u5b58\u51e6\u7406\u80fd\u529b +label.vgpu.type=vGPU \u306e\u7a2e\u985e +label.vgpu=VGPU +label.vgpu.video.ram=\u30d3\u30c7\u30aa RAM label.view.all=\u3059\u3079\u3066\u8868\u793a label.view.console=\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u8868\u793a -label.view.more=\u8a73\u7d30\u8868\u793a -label.view=\u8868\u793a - label.viewing=\u8868\u793a\u9805\u76ee\: -label.virtual.appliance=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9 +label.view.more=\u8a73\u7d30\u8868\u793a +label.view.secondary.ips=\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306e\u8868\u793a +label.view=\u8868\u793a - +label.virtual.appliance.details=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u306e\u8a73\u7d30 label.virtual.appliances=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9 +label.virtual.appliance=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9 label.virtual.machines=\u4eee\u60f3\u30de\u30b7\u30f3 label.virtual.machine=\u4eee\u60f3\u30de\u30b7\u30f3 +label.virtual.networking=\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af label.virtual.network=\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af -label.virtual.router=\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc +label.virtual.routers.group.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 +label.virtual.routers.group.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 +label.virtual.routers.group.pod=\u30dd\u30c3\u30c9\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 +label.virtual.routers.group.zone=\u30be\u30fc\u30f3\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 label.virtual.routers=\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc +label.virtual.router=\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc label.vlan.id=VLAN/VNI ID +label.vlan.only=VLAN +label.vlan.range.details=VLAN \u306e\u7bc4\u56f2\u306e\u8a73\u7d30 +label.vlan.ranges=VLAN \u306e\u7bc4\u56f2 label.vlan.range=VLAN/VNI \u306e\u7bc4\u56f2 -label.vlan=VLAN/VNI -label.vnet=VLAN/VNI -label.vnet.id=VLAN/VNI ID -label.vxlan.id=VXLAN ID -label.vxlan.range=VXLAN \u306e\u7bc4\u56f2 -label.vxlan=VXLAN +label.vlan=VLAN +label.vlan.vni.ranges=VLAN/VNI \u306e\u7bc4\u56f2 +label.vlan.vni.range=VLAN/VNI \u306e\u7bc4\u56f2 label.vm.add=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u8ffd\u52a0 label.vm.destroy=\u7834\u68c4 label.vm.display.name=VM \u8868\u793a\u540d -label.vm.name=VM \u540d -label.vm.reboot=\u518d\u8d77\u52d5 -label.vm.start=\u8d77\u52d5 -label.vm.state=VM \u306e\u72b6\u614b -label.vm.stop=\u505c\u6b62 label.VMFS.datastore=VMFS \u30c7\u30fc\u30bf\u30b9\u30c8\u30a2 label.vmfs=VMFS +label.vm.id=VM ID +label.vm.ip=VM IP \u30a2\u30c9\u30ec\u30b9 +label.vm.name=VM \u540d +label.vm.password=VM \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\: +label.vm.reboot=\u518d\u8d77\u52d5 label.VMs.in.tier=\u968e\u5c64\u5185\u306e VM -label.vms=VM label.vmsnapshot.current=\u4f7f\u7528\u4e2d label.vmsnapshot.memory=\u30e1\u30e2\u30ea\u3082\u542b\u3081\u308b label.vmsnapshot.parentname=\u89aa label.vmsnapshot.type=\u7a2e\u985e label.vmsnapshot=VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 +label.vm.start=\u8d77\u52d5 +label.vm.state=VM \u306e\u72b6\u614b +label.vm.stop=\u505c\u6b62 +label.vms=VM +label.vmware.datacenter.id=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc ID +label.vmware.datacenter.name=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u540d +label.vmware.datacenter.vcenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e vCenter label.vmware.traffic.label=VMware \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb +label.vnet.id=VLAN/VNI ID +label.vnet=VLAN/VNI +label.vnmc.devices=VNMC \u30c7\u30d0\u30a4\u30b9 +label.vnmc=VNMC +label.volatile=\u63ee\u767a\u6027 label.volgroup=\u30dc\u30ea\u30e5\u30fc\u30e0 \u30b0\u30eb\u30fc\u30d7 +label.volume.details=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u8a73\u7d30 label.volume.limits=\u30dc\u30ea\u30e5\u30fc\u30e0\u5236\u9650 +label.volume.migrated=\u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u79fb\u884c\u3055\u308c\u307e\u3057\u305f label.volume.name=\u30dc\u30ea\u30e5\u30fc\u30e0\u540d -label.volume=\u30dc\u30ea\u30e5\u30fc\u30e0 label.volumes=\u30dc\u30ea\u30e5\u30fc\u30e0 +label.volume=\u30dc\u30ea\u30e5\u30fc\u30e0 +label.vpc.distributedvpcrouter=\u5206\u6563 VPC \u30eb\u30fc\u30bf\u30fc label.vpc.id=VPC ID +label.VPC.limits=VPC \u5236\u9650 +label.vpc.offering.details=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8a73\u7d30 +label.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 label.VPC.router.details=VPC \u30eb\u30fc\u30bf\u30fc\u306e\u8a73\u7d30 +label.vpc.supportsregionlevelvpc=\u30ea\u30fc\u30b8\u30e7\u30f3\u30ec\u30d9\u30eb\u306e VPC \u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b +label.vpc.virtual.router=VPC \u4eee\u60f3\u30eb\u30fc\u30bf\u30fc label.vpc=VPC label.VPN.connection=VPN \u63a5\u7d9a -label.VPN.customer.gateway=VPN \u30ab\u30b9\u30bf\u30de\u30fc \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.vpn.customer.gateway=VPN \u30ab\u30b9\u30bf\u30de\u30fc \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 +label.VPN.customer.gateway=VPN \u30ab\u30b9\u30bf\u30de\u30fc \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.VPN.gateway=VPN \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 label.vpn=VPN label.vsmctrlvlanid=\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb VLAN ID label.vsmpktvlanid=\u30d1\u30b1\u30c3\u30c8 VLAN ID label.vsmstoragevlanid=\u30b9\u30c8\u30ec\u30fc\u30b8 VLAN ID label.vsphere.managed=vSphere \u306b\u3088\u308b\u7ba1\u7406 +label.vswitch.name=vSwitch \u540d +label.vSwitch.type=vSwitch \u306e\u7a2e\u985e +label.vxlan.id=VXLAN ID +label.vxlan.range=VXLAN \u306e\u7bc4\u56f2 +label.vxlan=VXLAN label.waiting=\u5f85\u6a5f\u3057\u3066\u3044\u307e\u3059 +label.warning=\u6ce8\u610f label.warn=\u8b66\u544a -label.warning=\u8b66\u544a +label.warn.upper=\u8b66\u544a label.wednesday=\u6c34\u66dc\u65e5 label.weekly=\u6bce\u9031 label.welcome.cloud.console=\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u3078\u3088\u3046\u3053\u305d label.welcome=\u3088\u3046\u3053\u305d -label.what.is.cloudstack=CloudStack&\#8482 \u306b\u3064\u3044\u3066 +label.what.is.cloudstack=CloudStack&\#8482; \u306b\u3064\u3044\u3066 +label.xenserver.tools.version.61.plus=\u5143\u306e XS \u30d0\u30fc\u30b8\u30e7\u30f3\u306f 6.1 \u4ee5\u964d +label.Xenserver.Tools.Version61plus=\u5143\u306e XS \u30d0\u30fc\u30b8\u30e7\u30f3\u306f 6.1 \u4ee5\u964d label.xenserver.traffic.label=XenServer \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb label.yes=\u306f\u3044 +label.zone.dedicated=\u5c02\u7528\u30be\u30fc\u30f3 label.zone.details=\u30be\u30fc\u30f3\u306e\u8a73\u7d30 label.zone.id=\u30be\u30fc\u30f3 ID +label.zone.lower=\u30be\u30fc\u30f3 +label.zone.name=\u30be\u30fc\u30f3\u540d label.zone.step.1.title=\u624b\u9806 1\: \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u9078\u629e label.zone.step.2.title=\u624b\u9806 2\: \u30be\u30fc\u30f3\u306e\u8ffd\u52a0 label.zone.step.3.title=\u624b\u9806 3\: \u30dd\u30c3\u30c9\u306e\u8ffd\u52a0 label.zone.step.4.title=\u624b\u9806 4\: IP \u30a2\u30c9\u30ec\u30b9\u7bc4\u56f2\u306e\u8ffd\u52a0 -label.zone.type=\u30be\u30fc\u30f3\u306e\u7a2e\u985e -label.zone.wide=\u30be\u30fc\u30f3\u5168\u4f53 -label.zone=\u30be\u30fc\u30f3 label.zones=\u30be\u30fc\u30f3 +label.zone.type=\u30be\u30fc\u30f3\u306e\u7a2e\u985e +label.zone=\u30be\u30fc\u30f3 +label.zone.wide=\u30be\u30fc\u30f3\u5168\u4f53 label.zoneWizard.trafficType.guest=\u30b2\u30b9\u30c8\: \u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3067\u3059\u3002 label.zoneWizard.trafficType.management=\u7ba1\u7406\: \u30db\u30b9\u30c8\u3084 CloudStack \u30b7\u30b9\u30c6\u30e0 VM \u306a\u3069\u3001\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u3068\u901a\u4fe1\u3059\u308b CloudStack \u306e\u5185\u90e8\u30ea\u30bd\u30fc\u30b9\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3067\u3059\u3002 label.zoneWizard.trafficType.public=\u30d1\u30d6\u30ea\u30c3\u30af\: \u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3068\u30af\u30e9\u30a6\u30c9\u5185\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3067\u3059\u3002 label.zoneWizard.trafficType.storage=\u30b9\u30c8\u30ec\u30fc\u30b8\: VM \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3084\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306a\u3069\u3001\u30d7\u30e9\u30a4\u30de\u30ea\u304a\u3088\u3073\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30b5\u30fc\u30d0\u30fc\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3067\u3059\u3002 -label.ldap.group.name=LDAP \u30b0\u30eb\u30fc\u30d7 -label.password.reset.confirm=\u6b21\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u307e\u3057\u305f\: -label.provider=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc -label.resetVM=VM \u306e\u30ea\u30bb\u30c3\u30c8 -label.openDaylight=OpenDaylight -label.assign.instance.another=\u307b\u304b\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5272\u308a\u5f53\u3066 -label.network.addVM=VM \u3078\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 -label.set.default.NIC=\u30c7\u30d5\u30a9\u30eb\u30c8 NIC \u306e\u8a2d\u5b9a -label.Xenserver.Tools.Version61plus=\u5143\u306e XS \u30d0\u30fc\u30b8\u30e7\u30f3\u306f 6.1 \u4ee5\u964d -label.supportsstrechedl2subnet=\u30b9\u30c8\u30ec\u30c3\u30c1 L2 \u30b5\u30d6\u30cd\u30c3\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b -label.menu.vpc.offerings=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 -label.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 -label.regionlevelvpc=\u9818\u57df\u30ec\u30d9\u30eb\u306e VPC -label.add.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8ffd\u52a0 -label.distributedrouter=\u5206\u6563\u30eb\u30fc\u30bf\u30fc -label.vpc.offering.details=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u8a73\u7d30 -label.disable.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u7121\u52b9\u5316 -label.enable.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u6709\u52b9\u5316 -label.remove.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u524a\u9664 -label.vpc.distributedvpcrouter=\u5206\u6563 VPC \u30eb\u30fc\u30bf\u30fc -label.vpc.supportsregionlevelvpc=\u9818\u57df\u30ec\u30d9\u30eb\u306e VPC \u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b -label.dynamically.scalable=\u52d5\u7684\u306b\u30b5\u30a4\u30ba\u8a2d\u5b9a\u3059\u308b -label.instance.scaled.up=\u8981\u6c42\u3055\u308c\u305f\u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u307e\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30b5\u30a4\u30ba\u304c\u62e1\u5927\u3055\u308c\u307e\u3057\u305f -label.tag.key=\u30bf\u30b0 \u30ad\u30fc -label.tag.value=\u30bf\u30b0\u5024 -label.ipv6.address=IPv6 IP \u30a2\u30c9\u30ec\u30b9 -label.ipv6.gateway=IPv6 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 -label.ipv6.CIDR=IPv6 CIDR -label.VPC.limits=VPC \u5236\u9650 -label.edit.region=\u9818\u57df\u306e\u7de8\u96c6 -label.gslb.domain.name=GSLB \u30c9\u30e1\u30a4\u30f3\u540d -label.add.gslb=GSLB \u306e\u8ffd\u52a0 -label.gslb.servicetype=\u30b5\u30fc\u30d3\u30b9\u306e\u7a2e\u985e -label.gslb.details=GSLB \u306e\u8a73\u7d30 -label.gslb.delete=GSLB \u306e\u524a\u9664 -label.opendaylight.controller=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc -label.opendaylight.controllers=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc -label.portable.ip.ranges=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 -label.add.portable.ip.range=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8ffd\u52a0 -label.delete.portable.ip.range=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u524a\u9664 -label.opendaylight.controllerdetail=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u8a73\u7d30 -label.portable.ip.range.details=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8a73\u7d30 -label.portable.ips=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9 -label.gslb.assigned.lb=\u5272\u308a\u5f53\u3066\u6e08\u307f\u8ca0\u8377\u5206\u6563 -label.gslb.assigned.lb.more=\u8ca0\u8377\u5206\u6563\u306e\u8ffd\u52a0\u5272\u308a\u5f53\u3066 -label.gslb.lb.rule=\u8ca0\u8377\u5206\u6563\u898f\u5247 -label.gslb.lb.details=\u8ca0\u8377\u5206\u6563\u306e\u8a73\u7d30 -label.gslb.lb.remove=\u3053\u306e GSLB \u304b\u3089\u8ca0\u8377\u5206\u6563\u3092\u524a\u9664 -label.enable.autoscale=\u81ea\u52d5\u30b5\u30a4\u30ba\u8a2d\u5b9a\u306e\u6709\u52b9\u5316 -label.disable.autoscale=\u81ea\u52d5\u30b5\u30a4\u30ba\u8a2d\u5b9a\u306e\u7121\u52b9\u5316 -label.min.instances=\u6700\u5c0f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u6570 -label.max.instances=\u6700\u5927\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u6570 -label.add.OpenDaylight.device=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u8ffd\u52a0 -label.show.advanced.settings=\u8a73\u7d30\u8a2d\u5b9a\u306e\u8868\u793a -label.delete.OpenDaylight.device=OpenDaylight \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u524a\u9664 -label.polling.interval.sec=\u30dd\u30fc\u30ea\u30f3\u30b0\u9593\u9694 (\u79d2) -label.quiet.time.sec=\u5f85\u3061\u6642\u9593 (\u79d2) -label.destroy.vm.graceperiod=VM \u7834\u68c4\u306e\u7336\u4e88\u671f\u9593 -label.SNMP.community=SNMP \u30b3\u30df\u30e5\u30cb\u30c6\u30a3 -label.SNMP.port=SNMP \u30dd\u30fc\u30c8 -label.add.ucs.manager=UCS Manager \u306e\u8ffd\u52a0 -label.ovm.traffic.label=OVM \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb -label.lxc.traffic.label=LXC \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb -label.hyperv.traffic.label=Hyper-V \u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb -label.resource.name=\u30ea\u30bd\u30fc\u30b9\u540d -label.reource.id=\u30ea\u30bd\u30fc\u30b9 ID -label.vnmc.devices=VNMC \u30c7\u30d0\u30a4\u30b9 -label.add.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u8ffd\u52a0 -label.enable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u6709\u52b9\u5316 -label.add.vnmc.device=VNMC \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 -label.ciscovnmc.resource.details=Cisco VNMC \u30ea\u30bd\u30fc\u30b9\u306e\u8a73\u7d30 -label.delete.ciscovnmc.resource=Cisco VNMC \u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664 -label.enable.vnmc.device=VNMC \u30c7\u30d0\u30a4\u30b9\u306e\u6709\u52b9\u5316 -label.disbale.vnmc.device=VNMC \u30c7\u30d0\u30a4\u30b9\u306e\u7121\u52b9\u5316 -label.disable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u7121\u52b9\u5316 -label.services=\u30b5\u30fc\u30d3\u30b9 -label.secondary.staging.store=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2 -label.release.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u89e3\u653e -label.release.account.lowercase=\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u89e3\u653e -label.vlan.vni.ranges=VLAN/VNI \u306e\u7bc4\u56f2 -label.dedicated.vlan.vni.ranges=\u5c02\u7528 VLAN/VNI \u306e\u7bc4\u56f2 -label.dedicate.vlan.vni.range=VLAN/VNI \u306e\u7bc4\u56f2\u3092\u5c02\u7528\u306b\u8a2d\u5b9a -label.vlan.vni.range=VLAN/VNI \u306e\u7bc4\u56f2 -label.vlan.range.details=VLAN \u306e\u7bc4\u56f2\u306e\u8a73\u7d30 -label.release.dedicated.vlan.range=\u5c02\u7528 VLAN \u306e\u7bc4\u56f2\u306e\u89e3\u653e -label.broadcat.uri=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 URI -label.ipv4.cidr=IPv4 CIDR -label.guest.network.details=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8a73\u7d30 -label.ipv4.gateway=IPv4 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4 -label.release.dedicated.vlan.range=\u5c02\u7528 VLAN \u306e\u7bc4\u56f2\u306e\u89e3\u653e -label.vlan.ranges=VLAN \u306e\u7bc4\u56f2 -label.virtual.appliance.details=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u306e\u8a73\u7d30 -label.start.lb.vm=LB VM \u306e\u8d77\u52d5 -label.stop.lb.vm=LB VM \u306e\u505c\u6b62 -label.migrate.lb.vm=LB VM \u306e\u79fb\u884c -label.vpc.virtual.router=VPC \u4eee\u60f3\u30eb\u30fc\u30bf\u30fc -label.ovs=OVS -label.gslb.service=GSLB \u30b5\u30fc\u30d3\u30b9 -label.gslb.service.public.ip=GSLB \u30b5\u30fc\u30d3\u30b9\u306e\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 -label.gslb.service.private.ip=GSLB \u30b5\u30fc\u30d3\u30b9\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9 -label.baremetal.dhcp.provider=\u30d9\u30a2\u30e1\u30bf\u30eb DHCP \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc -label.add.baremetal.dhcp.device=\u30d9\u30a2\u30e1\u30bf\u30eb DHCP \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 -label.baremetal.pxe.provider=\u30d9\u30a2\u30e1\u30bf\u30eb PXE \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc -label.baremetal.pxe.device=\u30d9\u30a2\u30e1\u30bf\u30eb PXE \u30c7\u30d0\u30a4\u30b9\u306e\u8ffd\u52a0 -label.tftp.root.directory=TFTP \u30eb\u30fc\u30c8 \u30c7\u30a3\u30ec\u30af\u30c8\u30ea -label.add.vmware.datacenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u8ffd\u52a0 -label.remove.vmware.datacenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e\u524a\u9664 -label.dc.name=DC \u540d -label.vcenter=vCenter -label.dedicate.zone=\u30be\u30fc\u30f3\u3092\u5c02\u7528\u306b\u8a2d\u5b9a -label.zone.dedicated=\u30be\u30fc\u30f3\u306e\u5c02\u7528\u8a2d\u5b9a -label.release.dedicated.zone=\u5c02\u7528\u30be\u30fc\u30f3\u306e\u89e3\u653e -label.ipv6.dns1=IPv6 DNS 1 -label.ipv6.dns2=IPv6 DNS 2 -label.vmware.datacenter.name=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u540d -label.vmware.datacenter.vcenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306e vCenter -label.vmware.datacenter.id=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc ID -label.system.vm.details=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u8a73\u7d30 -label.system.vm.scaled.up=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u30b5\u30a4\u30ba\u304c\u62e1\u5927\u3055\u308c\u307e\u3057\u305f -label.console.proxy.vm=\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7 VM -label.settings=\u8a2d\u5b9a -label.requires.upgrade=\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u5fc5\u8981 -label.upgrade.router.newer.template=\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b -label.router.vm.scaled.up=\u30eb\u30fc\u30bf\u30fc VM \u306e\u30b5\u30a4\u30ba\u304c\u62e1\u5927\u3055\u308c\u307e\u3057\u305f -label.total.virtual.routers=\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u5408\u8a08 -label.upgrade.required=\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u5fc5\u8981 -label.virtual.routers.group.zone=\u30be\u30fc\u30f3\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 -label.total.virtual.routers.upgrade=\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u304c\u5fc5\u8981\u306a\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u5408\u8a08 -label.virtual.routers.group.pod=\u30dd\u30c3\u30c9\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 -label.virtual.routers.group.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 -label.zone.lower=\u30be\u30fc\u30f3 -label.virtual.routers.group.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u5225\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc \u30b0\u30eb\u30fc\u30d7 -label.netscaler.details=NetScaler \u306e\u8a73\u7d30 -label.baremetal.dhcp.devices=\u30d9\u30a2\u30e1\u30bf\u30eb DHCP \u30c7\u30d0\u30a4\u30b9 -label.baremetal.pxe.devices=\u30d9\u30a2\u30e1\u30bf\u30eb PXE \u30c7\u30d0\u30a4\u30b9 -label.addes.new.f5=\u65b0\u3057\u3044 F5 \u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -label.f5.details=F5 \u306e\u8a73\u7d30 -label.srx.details=SRX \u306e\u8a73\u7d30 -label.palo.alto.details=Palo Alto \u306e\u8a73\u7d30 -label.added.nicira.nvp.controller=\u65b0\u3057\u3044 Nicira NVP Controller \u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -label.nicira.nvp.details=Nicira NVP \u306e\u8a73\u7d30 -label.added.brocade.vcs.switch=\u65b0\u3057\u3044 Brocade VCS \u30b9\u30a4\u30c3\u30c1\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -label.brocade.vcs.details=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u306e\u8a73\u7d30 -label.added.new.bigswitch.bcf.controller=\u65b0\u3057\u3044 Big Switch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -label.bigswitch.bcf.details=Big Switch BCF \u306e\u8a73\u7d30 -label.bigswitch.bcf.nat=Big Switch BCF NAT \u6709\u52b9 -label.dedicate=\u5c02\u7528\u306b\u8a2d\u5b9a -label.dedicate.pod=\u30dd\u30c3\u30c9\u3092\u5c02\u7528\u306b\u8a2d\u5b9a -label.pod.dedicated=\u30dd\u30c3\u30c9\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f -label.release.dedicated.pod=\u5c02\u7528\u30dd\u30c3\u30c9\u306e\u89e3\u653e -label.override.public.traffic=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b -label.public.traffic.vswitch.type=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u306e\u7a2e\u985e -label.public.traffic.vswitch.name=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u540d -label.override.guest.traffic=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b -label.guest.traffic.vswitch.type=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u306e\u7a2e\u985e -label.guest.traffic.vswitch.name=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e vSwitch \u540d -label.cisco.nexus1000v.ip.address=Nexus 1000V \u306e IP \u30a2\u30c9\u30ec\u30b9 -label.cisco.nexus1000v.username=Nexus 1000V \u306e\u30e6\u30fc\u30b6\u30fc\u540d -label.cisco.nexus1000v.password=Nexus 1000V \u306e\u30d1\u30b9\u30ef\u30fc\u30c9 -label.dedicate.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5c02\u7528\u306b\u8a2d\u5b9a -label.release.dedicated.cluster=\u5c02\u7528\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u89e3\u653e -label.dedicate.host=\u30db\u30b9\u30c8\u3092\u5c02\u7528\u306b\u8a2d\u5b9a -label.release.dedicated.host=\u5c02\u7528\u30db\u30b9\u30c8\u306e\u89e3\u653e -label.number.of.cpu.sockets=CPU \u30bd\u30b1\u30c3\u30c8\u6570 -label.delete.ucs.manager=UCS Manager \u306e\u524a\u9664 -label.blades=\u30d6\u30ec\u30fc\u30c9 -label.chassis=\u30b7\u30e3\u30fc\u30b7 -label.blade.id=\u30d6\u30ec\u30fc\u30c9 ID -label.associated.profile=\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb -label.refresh.blades=\u30d6\u30ec\u30fc\u30c9\u306e\u66f4\u65b0 -label.instanciate.template.associate.profile.blade=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u304a\u3088\u3073\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3068\u30d6\u30ec\u30fc\u30c9\u306e\u95a2\u9023\u4ed8\u3051 -label.select.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u9078\u629e -label.profile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb -label.delete.profile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664 -label.disassociate.profile.blade=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3068\u30d6\u30ec\u30fc\u30c9\u306e\u95a2\u9023\u4ed8\u3051\u306e\u89e3\u9664 -label.secondary.storage.details=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u8a73\u7d30 -label.secondary.staging.store.details=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u306e\u8a73\u7d30 -label.add.nfs.secondary.staging.store=NFS \u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u306e\u8ffd\u52a0 -label.delete.secondary.staging.store=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u306e\u524a\u9664 -label.ipv4.start.ip=IPv4 \u958b\u59cb IP \u30a2\u30c9\u30ec\u30b9 -label.ipv4.end.ip=IPv4 \u7d42\u4e86 IP \u30a2\u30c9\u30ec\u30b9 -label.ipv6.start.ip=IPv6 \u958b\u59cb IP \u30a2\u30c9\u30ec\u30b9 -label.ipv6.end.ip=IPv6 \u7d42\u4e86 IP \u30a2\u30c9\u30ec\u30b9 -label.vm.password=VM \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\: -label.group.by.zone=\u30be\u30fc\u30f3\u5225\u30b0\u30eb\u30fc\u30d7 -label.group.by.pod=\u30dd\u30c3\u30c9\u5225\u30b0\u30eb\u30fc\u30d7 -label.group.by.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u5225\u30b0\u30eb\u30fc\u30d7 -label.group.by.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u5225\u30b0\u30eb\u30fc\u30d7 -label.no.grouping=(\u30b0\u30eb\u30fc\u30d7\u306a\u3057) -label.create.nfs.secondary.staging.storage=NFS \u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u3092\u4f5c\u6210\u3059\u308b -label.username.lower=\u30e6\u30fc\u30b6\u30fc\u540d -label.password.lower=\u30d1\u30b9\u30ef\u30fc\u30c9 -label.email.lower=\u96fb\u5b50\u30e1\u30fc\u30eb -label.firstname.lower=\u540d -label.lastname.lower=\u59d3 -label.domain.lower=\u30c9\u30e1\u30a4\u30f3 -label.account.lower=\u30a2\u30ab\u30a6\u30f3\u30c8 -label.type.lower=\u7a2e\u985e -label.rule.number=\u898f\u5247\u756a\u53f7 -label.action=\u64cd\u4f5c -label.name.lower=\u540d\u524d -label.ucs=UCS -label.change.affinity=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3\u306e\u5909\u66f4 -label.persistent=\u6c38\u7d9a -label.broadcasturi=\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 URI -label.network.cidr=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af CIDR -label.reserved.ip.range=\u4e88\u7d04\u6e08\u307f IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2 -label.autoscale=\u81ea\u52d5\u30b5\u30a4\u30ba\u8a2d\u5b9a -label.health.check=\u30d8\u30eb\u30b9 \u30c1\u30a7\u30c3\u30af -label.public.load.balancer.provider=\u30d1\u30d6\u30ea\u30c3\u30af \u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc -label.add.isolated.network=\u5206\u96e2\u3055\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 -label.add.isolated.guest.network=\u5206\u96e2\u3055\u308c\u305f\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8ffd\u52a0 -label.vlan.only=VLAN -label.secondary.isolated.vlan.id=\u5206\u96e2\u3055\u308c\u305f\u30bb\u30ab\u30f3\u30c0\u30ea VLAN ID -label.ipv4.netmask=IPv4 \u30cd\u30c3\u30c8\u30de\u30b9\u30af -label.custom=\u30ab\u30b9\u30bf\u30e0 -label.disable.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u7121\u52b9\u5316 -label.enable.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u6709\u52b9\u5316 -label.remove.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u524a\u9664 -label.system.offering.for.router=\u30eb\u30fc\u30bf\u30fc\u7528\u30b7\u30b9\u30c6\u30e0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 -label.mode=\u30e2\u30fc\u30c9 -label.associate.public.ip=\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u306e\u95a2\u9023\u4ed8\u3051 -label.acl=ACL -label.user.data=\u30e6\u30fc\u30b6\u30fc \u30c7\u30fc\u30bf -label.virtual.networking=\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af -label.allow=\u8a31\u53ef -label.deny=\u62d2\u5426 -label.default.egress.policy=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u9001\u4fe1\u30dd\u30ea\u30b7\u30fc -label.xenserver.tools.version.61.plus=\u5143\u306e XS \u30d0\u30fc\u30b8\u30e7\u30f3\u306f 6.1 \u4ee5\u964d -label.gpu=GPU -label.vgpu.type=vGPU \u306e\u7a2e\u985e -label.vgpu.video.ram=\u30d3\u30c7\u30aa RAM -label.vgpu.max.resolution=\u6700\u5927\u89e3\u50cf\u5ea6 -label.vgpu.max.vgpu.per.gpu=GPU \u3042\u305f\u308a\u306e vGPU \u6570 -label.vgpu.remaining.capacity=\u6b8b\u5b58\u51e6\u7406\u80fd\u529b -label.routing.host=\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 \u30db\u30b9\u30c8 -label.usage.server=\u4f7f\u7528\u72b6\u6cc1\u6e2c\u5b9a\u30b5\u30fc\u30d0\u30fc -label.user.vm=\u30e6\u30fc\u30b6\u30fc VM -label.resource.limit.exceeded=\u30ea\u30bd\u30fc\u30b9\u5236\u9650\u3092\u8d85\u904e\u3057\u307e\u3057\u305f -label.direct.attached.public.ip=\u76f4\u63a5\u30a2\u30bf\u30c3\u30c1\u3055\u308c\u3066\u3044\u308b\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9 -label.usage.sanity.result=\u4f7f\u7528\u72b6\u6cc1\u30b5\u30cb\u30c6\u30a3\u7d50\u679c -label.select.region=\u9818\u57df\u306e\u9078\u629e -label.info.upper=\u60c5\u5831 -label.warn.upper=\u8b66\u544a -label.error.upper=\u30a8\u30e9\u30fc -label.event.deleted=\u30a4\u30d9\u30f3\u30c8\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f -label.add.ciscoASA1000v=Cisco ASA 1000V \u30ea\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0 -label.delete.ciscoASA1000v=Cisco ASA 1000V \u30ea\u30bd\u30fc\u30b9\u306e\u524a\u9664 -label.inside.port.profile=\u5185\u90e8\u30dd\u30fc\u30c8 \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb -label.archive=\u30a2\u30fc\u30ab\u30a4\u30d6 -label.event.archived=\u30a4\u30d9\u30f3\u30c8\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u3055\u308c\u307e\u3057\u305f -label.alert.details=\u30a2\u30e9\u30fc\u30c8\u306e\u8a73\u7d30 -label.alert.deleted=\u30a2\u30e9\u30fc\u30c8\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f -label.alert.archived=\u30a2\u30e9\u30fc\u30c8\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u3055\u308c\u307e\u3057\u305f -label.volume.details=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u8a73\u7d30 -label.volume.migrated=\u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u79fb\u884c\u3055\u308c\u307e\u3057\u305f -label.storage.pool=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30d7\u30fc\u30eb -label.enable.host=\u30db\u30b9\u30c8\u306e\u6709\u52b9\u5316 -label.disable.host=\u30db\u30b9\u30c8\u306e\u7121\u52b9\u5316 -label.copying.iso=ISO \u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059 -label.add.internal.lb=\u5185\u90e8 LB \u306e\u8ffd\u52a0 -label.internal.lb.details=\u5185\u90e8 LB \u306e\u8a73\u7d30 -label.delete.internal.lb=\u5185\u90e8 LB \u306e\u524a\u9664 -label.remove.vm.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u304b\u3089\u306e VM \u306e\u524a\u9664 -label.add.acl.list=ACL \u4e00\u89a7\u306e\u8ffd\u52a0 -label.add.list.name=ACL \u4e00\u89a7\u540d -label.add.network.acl.list=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af ACL \u4e00\u89a7\u306e\u8ffd\u52a0 -label.delete.acl.list=ACL \u4e00\u89a7\u306e\u524a\u9664 -label.acl.replaced=ACL \u304c\u7f6e\u304d\u63db\u3048\u3089\u308c\u307e\u3057\u305f -label.ipv4.dns1=IPv4 DNS 1 -label.ipv4.dns2=IPv4 DNS 2 -label.protocol.number=\u30d7\u30ed\u30c8\u30b3\u30eb\u756a\u53f7 -label.edit.acl.rule=ACL \u898f\u5247\u306e\u7de8\u96c6 -label.source.ip.address=\u9001\u4fe1\u5143 IP \u30a2\u30c9\u30ec\u30b9 -label.source.port=\u9001\u4fe1\u5143\u30dd\u30fc\u30c8 -label.instance.port=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 \u30dd\u30fc\u30c8 -label.assigned.vms=\u5272\u308a\u5f53\u3066\u6e08\u307f VM -label.replace.acl=ACL \u306e\u7f6e\u304d\u63db\u3048 -label.source.nat.supported=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u308b\u9001\u4fe1\u5143 NAT -label.acl.name=ACL \u540d -label.acl.id=ACL ID -label.passive=\u30d1\u30c3\u30b7\u30d6 -label.replace.acl.list=ACL \u4e00\u89a7\u306e\u7f6e\u304d\u63db\u3048 -label.vswitch.name=vSwitch \u540d -label.vSwitch.type=vSwitch \u306e\u7a2e\u985e -label.ping.path=Ping \u30d1\u30b9 -label.response.timeout.in.sec=\u5fdc\u7b54\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8 (\u79d2) -label.health.check.interval.in.sec=\u30d8\u30eb\u30b9 \u30c1\u30a7\u30c3\u30af\u9593\u9694 (\u79d2) -label.healthy.threshold=\u6b63\u5e38\u3057\u304d\u3044\u5024 -label.unhealthy.threshold=\u7570\u5e38\u3057\u304d\u3044\u5024 -label.other=\u305d\u306e\u307b\u304b -label.vm.id=VM ID -label.vnmc=VNMC -label.scale.up.policy=\u30b5\u30a4\u30ba\u62e1\u5927\u30dd\u30ea\u30b7\u30fc -label.counter=\u30ab\u30a6\u30f3\u30bf\u30fc -label.operator=\u6f14\u7b97\u5b50 -label.threshold=\u3057\u304d\u3044\u5024 -label.load.balancer.type=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u306e\u7a2e\u985e -label.vgpu=VGPU -label.sticky.name=\u30b9\u30c6\u30a3\u30c3\u30ad\u30fc\u540d -label.stickiness.method=\u6301\u7d9a\u6027\u65b9\u6cd5 -label.gslb=GSLB -label.portable.ip=\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9 -label.internallbvm=InternalLbVm -label.agent.state=\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u72b6\u614b -label.duration.in.sec=\u671f\u9593 (\u79d2) managed.state=\u7ba1\u7406\u5bfe\u8c61\u72b6\u614b -message.acquire.new.ip.vpc=\u3053\u306e VPC \u306e\u65b0\u3057\u3044 IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.acquire.ip.nic=\u3053\u306e NIC \u306e\u305f\u3081\u306b\u65b0\u3057\u3044\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
\u6ce8\: \u65b0\u3057\u304f\u53d6\u5f97\u3057\u305f\u30bb\u30ab\u30f3\u30c0\u30ea IP \u30a2\u30c9\u30ec\u30b9\u306f\u4eee\u60f3\u30de\u30b7\u30f3\u5185\u3067\u624b\u52d5\u3067\u69cb\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 message.acquire.new.ip=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u65b0\u3057\u3044 IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.acquire.new.ip.vpc=\u3053\u306e VPC \u306e\u65b0\u3057\u3044 IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.acquire.public.ip=\u65b0\u3057\u3044 IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3059\u308b\u30be\u30fc\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.action.cancel.maintenance.mode=\u3053\u306e\u4fdd\u5b88\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.cancel.maintenance=\u30db\u30b9\u30c8\u306e\u4fdd\u5b88\u306f\u6b63\u5e38\u306b\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u51e6\u7406\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 @@ -1633,6 +1653,7 @@ message.action.delete.ISO.for.all.zones=\u305d\u306e ISO \u306f\u3059\u3079\u306 message.action.delete.ISO=\u3053\u306e ISO \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.delete.network=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.delete.nexusVswitch=\u3053\u306e Nexus 1000V \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.action.delete.nic=\u3053\u306e NIC \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3082 VM \u304b\u3089\u524a\u9664\u3055\u308c\u307e\u3059\u3002 message.action.delete.physical.network=\u3053\u306e\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.delete.pod=\u3053\u306e\u30dd\u30c3\u30c9\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.delete.primary.storage=\u3053\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? @@ -1653,6 +1674,7 @@ message.action.disable.physical.network=\u3053\u306e\u7269\u7406\u30cd\u30c3\u30 message.action.disable.pod=\u3053\u306e\u30dd\u30c3\u30c9\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.disable.static.NAT=\u9759\u7684 NAT \u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.disable.zone=\u3053\u306e\u30be\u30fc\u30f3\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.action.downloading.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 message.action.download.iso=\u3053\u306e ISO \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.download.template=\u3053\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.enable.cluster=\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? @@ -1675,6 +1697,7 @@ message.action.remove.host=\u3053\u306e\u30db\u30b9\u30c8\u3092\u524a\u9664\u305 message.action.reset.password.off=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u73fe\u5728\u3053\u306e\u6a5f\u80fd\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002 message.action.reset.password.warning=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u524d\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u505c\u6b62\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 message.action.restore.instance=\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u5fa9\u5143\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.action.revert.snapshot=\u6240\u6709\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u3053\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.start.instance=\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.start.router=\u3053\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.start.systemvm=\u3053\u306e\u30b7\u30b9\u30c6\u30e0 VM \u3092\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? @@ -1682,40 +1705,42 @@ message.action.stop.instance=\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3 message.action.stop.router=\u3053\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u3067\u63d0\u4f9b\u3059\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u505c\u6b62\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.stop.systemvm=\u3053\u306e\u30b7\u30b9\u30c6\u30e0 VM \u3092\u505c\u6b62\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.take.snapshot=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.action.revert.snapshot=\u6240\u6709\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u3053\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.action.unmanage.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u7ba1\u7406\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.action.unmanage.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u975e\u7ba1\u7406\u5bfe\u8c61\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.action.vmsnapshot.delete=\u3053\u306e VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.action.vmsnapshot.revert=VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3059 +message.action.vmsnapshot.revert=VM \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u5143\u306b\u623b\u3059 message.activate.project=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.add.cluster.zone=\u30be\u30fc\u30f3 \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.cluster=\u30be\u30fc\u30f3 \u306e\u30dd\u30c3\u30c9 \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059 +message.add.cluster.zone=\u30be\u30fc\u30f3 \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.disk.offering=\u65b0\u3057\u3044\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.domain=\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u306b\u4f5c\u6210\u3059\u308b\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.added.new.nuage.vsp.controller=\u65b0\u3057\u3044 Nuage VSP \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f +message.added.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f message.add.firewall=\u30be\u30fc\u30f3\u306b\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.guest.network=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u8ffd\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.add.host=\u65b0\u3057\u3044\u30db\u30b9\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.adding.host=\u30db\u30b9\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 +message.adding.Netscaler.device=NetScaler \u30c7\u30d0\u30a4\u30b9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 +message.adding.Netscaler.provider=NetScaler \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 message.add.ip.range.direct.network=\u30be\u30fc\u30f3 \u306e\u76f4\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.ip.range.to.pod=

\u30dd\u30c3\u30c9 \u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059

message.add.ip.range=\u30be\u30fc\u30f3\u306e\u30d1\u30d6\u30ea\u30c3\u30af \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059 -message.add.load.balancer.under.ip=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u898f\u5247\u304c\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3057\u3066\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\: +message.additional.networks.desc=\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u63a5\u7d9a\u3059\u308b\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.load.balancer=\u30be\u30fc\u30f3\u306b\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059 +message.add.load.balancer.under.ip=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u898f\u5247\u304c\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3057\u3066\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\: message.add.network=\u30be\u30fc\u30f3 \u306b\u65b0\u3057\u3044\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.new.gateway.to.vpc=\u3053\u306e VPC \u306b\u65b0\u3057\u3044\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.pod.during.zone.creation=\u5404\u30be\u30fc\u30f3\u306b\u306f 1 \u3064\u4ee5\u4e0a\u306e\u30dd\u30c3\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002\u4eca\u3053\u3053\u3067\u6700\u521d\u306e\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002\u30dd\u30c3\u30c9\u306f\u30db\u30b9\u30c8\u3068\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30b5\u30fc\u30d0\u30fc\u304b\u3089\u69cb\u6210\u3055\u308c\u307e\u3059\u304c\u3001\u3053\u308c\u3089\u306f\u5f8c\u306e\u624b\u9806\u3067\u8ffd\u52a0\u3057\u307e\u3059\u3002\u6700\u521d\u306b\u3001CloudStack \u306e\u5185\u90e8\u7ba1\u7406\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u305f\u3081\u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u4e88\u7d04\u3057\u307e\u3059\u3002IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306f\u3001\u30af\u30e9\u30a6\u30c9\u5185\u306e\u5404\u30be\u30fc\u30f3\u3067\u91cd\u8907\u3057\u306a\u3044\u3088\u3046\u306b\u4e88\u7d04\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 message.add.pod=\u30be\u30fc\u30f3 \u306b\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.primary.storage=\u30be\u30fc\u30f3 \u306e\u30dd\u30c3\u30c9 \u306b\u65b0\u3057\u3044\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.primary=\u65b0\u3057\u3044\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.add.region=\u65b0\u3057\u3044\u9818\u57df\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.add.region=\u65b0\u3057\u3044\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.secondary.storage=\u30be\u30fc\u30f3 \u306b\u65b0\u3057\u3044\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059 message.add.service.offering=\u65b0\u3057\u3044\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.system.service.offering=\u65b0\u3057\u3044\u30b7\u30b9\u30c6\u30e0 \u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.template=\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.volume=\u65b0\u3057\u3044\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.add.VPN.gateway=VPN \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u8ffd\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.adding.host=\u30db\u30b9\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -message.adding.Netscaler.device=NetScaler \u30c7\u30d0\u30a4\u30b9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -message.adding.Netscaler.provider=NetScaler \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059 -message.additional.networks.desc=\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u63a5\u7d9a\u3059\u308b\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.admin.guide.read=VMware \u30d9\u30fc\u30b9\u306e VM \u306b\u3064\u3044\u3066\u306f\u3001\u30b5\u30a4\u30ba\u5909\u66f4\u306e\u524d\u306b\u7ba1\u7406\u8005\u30ac\u30a4\u30c9\u306e\u52d5\u7684\u306a\u30b5\u30a4\u30ba\u5909\u66f4\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u304a\u8aad\u307f\u304f\u3060\u3055\u3044\u3002\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?, message.advanced.mode.desc=VLAN \u30b5\u30dd\u30fc\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e2\u30c7\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30e2\u30c7\u30eb\u3067\u306f\u6700\u3082\u67d4\u8edf\u306b\u30ab\u30b9\u30bf\u30e0 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u63d0\u4f9b\u3067\u304d\u3001\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3001VPN\u3001\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u306e\u30b5\u30dd\u30fc\u30c8\u306e\u307b\u304b\u306b\u3001\u76f4\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3082\u6709\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 message.advanced.security.group=\u30b2\u30b9\u30c8 VM \u3092\u5206\u96e2\u3059\u308b\u305f\u3081\u306b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.advanced.virtual=\u30b2\u30b9\u30c8 VM \u3092\u5206\u96e2\u3059\u308b\u305f\u3081\u306b\u30be\u30fc\u30f3\u5168\u4f53\u306e VLAN \u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 @@ -1729,57 +1754,96 @@ message.attach.volume=\u65b0\u3057\u3044\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30 message.basic.mode.desc=VLAN \u30b5\u30dd\u30fc\u30c8\u304c\u4e0d\u8981\u3067\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e2\u30c7\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e2\u30c7\u30eb\u3067\u4f5c\u6210\u3055\u308c\u308b\u3059\u3079\u3066\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304b\u3089\u76f4\u63a5 IP \u30a2\u30c9\u30ec\u30b9\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3057\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u5206\u96e2\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002 message.change.offering.confirm=\u3053\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u5909\u66f4\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.change.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.cluster.dedicated=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f +message.cluster.dedication.released=\u5c02\u7528\u30af\u30e9\u30b9\u30bf\u30fc\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f message.configure.all.traffic.types=\u8907\u6570\u306e\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304c\u3042\u308a\u307e\u3059\u3002[\u7de8\u96c6] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e\u3054\u3068\u306b\u30e9\u30d9\u30eb\u3092\u69cb\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.configure.ldap=LDAP \u3092\u69cb\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.configuring.guest.traffic=\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u69cb\u6210\u3057\u3066\u3044\u307e\u3059 message.configuring.physical.networks=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u69cb\u6210\u3057\u3066\u3044\u307e\u3059 message.configuring.public.traffic=\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u69cb\u6210\u3057\u3066\u3044\u307e\u3059 message.configuring.storage.traffic=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u69cb\u6210\u3057\u3066\u3044\u307e\u3059 message.confirm.action.force.reconnect=\u3053\u306e\u30db\u30b9\u30c8\u3092\u5f37\u5236\u518d\u63a5\u7d9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.F5=F5 \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.BigSwitchBcf=\u3053\u306e Big Switch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.BrocadeVcs=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.NetScaler=NetScaler \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.NuageVsp=Nuage Virtualized Services Directory \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.SRX=SRX \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.PA=Palo Alto \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.destroy.router=\u3053\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u7834\u68c4\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.disable.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.enable.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.join.project=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53c2\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.remove.IP.range=\u3053\u306e IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.shutdown.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.current.guest.CIDR.unchanged=\u73fe\u5728\u306e\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e CIDR \u3092\u5909\u66f4\u305b\u305a\u306b\u7dad\u6301\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.ciscoASA1000v=Cisco ASA 1000V \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.remove.selected.events=\u9078\u629e\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.archive.selected.events=\u9078\u629e\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.remove.event=\u3053\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.archive.event=\u3053\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.remove.selected.alerts=\u9078\u629e\u3057\u305f\u30a2\u30e9\u30fc\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.archive.selected.alerts=\u9078\u629e\u3057\u305f\u30a2\u30e9\u30fc\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.alert=\u3053\u306e\u30a2\u30e9\u30fc\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.add.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.confirm.archive.alert=\u3053\u306e\u30a2\u30e9\u30fc\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.migrate.volume=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u79fb\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.archive.event=\u3053\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.archive.selected.alerts=\u9078\u629e\u3057\u305f\u30a2\u30e9\u30fc\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.archive.selected.events=\u9078\u629e\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u3092\u30a2\u30fc\u30ab\u30a4\u30d6\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.confirm.attach.disk=\u30c7\u30a3\u30b9\u30af\u3092\u30a2\u30bf\u30c3\u30c1\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.confirm.create.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.enable.host=\u30db\u30b9\u30c8\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.disable.host=\u30db\u30b9\u30c8\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.internal.lb=\u5185\u90e8 LB \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.remove.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u304b\u3089 VM \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.current.guest.CIDR.unchanged=\u73fe\u5728\u306e\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e CIDR \u3092\u5909\u66f4\u305b\u305a\u306b\u7dad\u6301\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.dedicate.cluster.domain.account=\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.dedicate.host.domain.account=\u3053\u306e\u30db\u30b9\u30c8\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.dedicate.pod.domain.account=\u3053\u306e\u30dd\u30c3\u30c9\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.dedicate.zone=\u3053\u306e\u30be\u30fc\u30f3\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.confirm.delete.acl.list=\u3053\u306e ACL \u4e00\u89a7\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.alert=\u3053\u306e\u30a2\u30e9\u30fc\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb\u30e9\u30c3\u30af\u8a2d\u5b9a\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.BigSwitchBcf=\u3053\u306e BigSwitch BCF \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.BrocadeVcs=Brocade VCS \u30b9\u30a4\u30c3\u30c1\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.ciscoASA1000v=Cisco ASA 1000V \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.ciscovnmc.resource=Cisco VNMC \u30ea\u30bd\u30fc\u30b9\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.F5=F5 \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.internal.lb=\u5185\u90e8 LB \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.NetScaler=NetScaler \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.NuageVsp=Nuage Virtualized Services Directory \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.PA=Palo Alto \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.secondary.staging.store=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.SRX=SRX \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.delete.ucs.manager=UCS Manager \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.destroy.router=\u3053\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u7834\u68c4\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.disable.host=\u30db\u30b9\u30c8\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.disable.network.offering=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.disable.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.disable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.disable.vpc.offering=\u3053\u306e VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.enable.host=\u30db\u30b9\u30c8\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.enable.network.offering=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.enable.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.enable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.enable.vpc.offering=\u3053\u306e VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.join.project=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53c2\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.migrate.volume=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u79fb\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.refresh.blades=\u30d6\u30ec\u30fc\u30c9\u3092\u66f4\u65b0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.release.dedicated.cluster=\u3053\u306e\u5c02\u7528\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.release.dedicated.host=\u3053\u306e\u5c02\u7528\u30db\u30b9\u30c8\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.release.dedicated.pod=\u3053\u306e\u5c02\u7528\u30dd\u30c3\u30c9\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.release.dedicated.zone=\u3053\u306e\u5c02\u7528\u30be\u30fc\u30f3\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.release.dedicate.vlan.range=\u5c02\u7528 VLAN \u306e\u7bc4\u56f2\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.event=\u3053\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.IP.range=\u3053\u306e IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.load.balancer=\u30ed\u30fc\u30c9 \u30d0\u30e9\u30f3\u30b5\u30fc\u304b\u3089 VM \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.network.offering=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.selected.alerts=\u9078\u629e\u3057\u305f\u30a2\u30e9\u30fc\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.selected.events=\u9078\u629e\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.vmware.datacenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.remove.vpc.offering=\u3053\u306e VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.confirm.replace.acl.new.one=ACL \u3092\u65b0\u3057\u3044\u3082\u306e\u3068\u7f6e\u304d\u63db\u3048\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.scale.up.router.vm=\u30eb\u30fc\u30bf\u30fc VM \u306e\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.scale.up.system.vm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.shutdown.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.start.lb.vm=LB VM \u3092\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.stop.lb.vm=LB VM \u3092\u505c\u6b62\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.upgrade.router.newer.template=\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.upgrade.routers.account.newtemplate=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.upgrade.routers.cluster.newtemplate=\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.upgrade.routers.newtemplate=\u3053\u306e\u30be\u30fc\u30f3\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.confirm.upgrade.routers.pod.newtemplate=\u3053\u306e\u30dd\u30c3\u30c9\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.copy.iso.confirm=ISO \u3092\u6b21\u306e\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.copy.template.confirm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.copy.template=\u30be\u30fc\u30f3 \u304b\u3089\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 XXX \u3092\u6b21\u306e\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\: +message.create.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.create.template.vm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 \u304b\u3089 VM \u3092\u4f5c\u6210\u3057\u307e\u3059 message.create.template.volume=\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0 \u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u524d\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30dc\u30ea\u30e5\u30fc\u30e0 \u30b5\u30a4\u30ba\u306b\u3088\u3063\u3066\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210\u306b\u306f\u6570\u5206\u4ee5\u4e0a\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -message.create.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.creating.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 message.creating.guest.network=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 message.creating.physical.networks=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 message.creating.pod=\u30dd\u30c3\u30c9\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 message.creating.primary.storage=\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 message.creating.secondary.storage=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 +message.creating.systemVM=\u30b7\u30b9\u30c6\u30e0 VM \u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 (\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044) message.creating.zone=\u30be\u30fc\u30f3\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 message.decline.invitation=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u62db\u5f85\u3092\u8f9e\u9000\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.dedicated.zone.released=\u5c02\u7528\u30be\u30fc\u30f3\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f message.dedicate.zone=\u30be\u30fc\u30f3\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059 message.delete.account=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.delete.affinity.group=\u3053\u306e\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? @@ -1803,6 +1867,9 @@ message.disable.snapshot.policy=\u73fe\u5728\u306e\u30b9\u30ca\u30c3\u30d7\u30b7 message.disable.user=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.disable.vpn.access=\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.disable.vpn=VPN \u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.disabling.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 +message.disabling.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 +message.disallowed.characters=\u8a31\u53ef\u3055\u308c\u306a\u3044\u6587\u5b57\: <,> message.download.ISO=ISO \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f 00000 \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059 message.download.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f 00000 \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059 message.download.volume.confirm=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? @@ -1812,23 +1879,31 @@ message.edit.confirm=[\u4fdd\u5b58] \u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u message.edit.limits=\u6b21\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u5236\u9650\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300c-1\u300d\u306f\u3001\u30ea\u30bd\u30fc\u30b9\u4f5c\u6210\u306b\u5236\u9650\u304c\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002 message.edit.traffic.type=\u3053\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e\u306b\u95a2\u9023\u4ed8\u3051\u308b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.enable.account=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.enabled.vpn.ip.sec=IPSec \u4e8b\u524d\u5171\u6709\u30ad\u30fc\: +message.enabled.vpn=\u73fe\u5728\u3001\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002 message.enable.user=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.enable.vpn.access=\u73fe\u5728\u3053\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3059\u308b VPN \u306f\u7121\u52b9\u3067\u3059\u3002VPN \u30a2\u30af\u30bb\u30b9\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.enable.vpn=\u3053\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3059\u308b\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.enabled.vpn.ip.sec=IPSec \u4e8b\u524d\u5171\u6709\u30ad\u30fc\: -message.enabled.vpn=\u73fe\u5728\u3001\u30ea\u30e2\u30fc\u30c8 \u30a2\u30af\u30bb\u30b9 VPN \u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002 +message.enabling.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 message.enabling.security.group.provider=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7 \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 +message.enabling.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 +message.enabling.zone.dots=\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059... message.enabling.zone=\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 +message.enter.seperated.list.multiple.cidrs=CIDR \u304c\u8907\u6570\u3042\u308b\u5834\u5408\u306f\u3001\u30b3\u30f3\u30de\u533a\u5207\u308a\u306e\u4e00\u89a7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 message.enter.token=\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u62db\u5f85\u72b6\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u30c8\u30fc\u30af\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.generate.keys=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u65b0\u3057\u3044\u30ad\u30fc\u3092\u751f\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.gslb.delete.confirm=\u3053\u306e GSLB \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.gslb.lb.remove.confirm=GSLB \u304b\u3089\u8ca0\u8377\u5206\u6563\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.guest.traffic.in.advanced.zone=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306f\u3001\u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u9593\u306e\u901a\u4fe1\u3067\u3059\u3002\u5404\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u901a\u4fe1\u3059\u308b\u305f\u3081\u306e VLAN ID \u306e\u7bc4\u56f2\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.guest.traffic.in.basic.zone=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306f\u3001\u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u9593\u306e\u901a\u4fe1\u3067\u3059\u3002CloudStack \u3067\u30b2\u30b9\u30c8 VM \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u7bc4\u56f2\u304c\u4e88\u7d04\u6e08\u307f\u306e\u30b7\u30b9\u30c6\u30e0 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3068\u91cd\u8907\u3057\u306a\u3044\u3088\u3046\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.host.dedicated=\u30db\u30b9\u30c8\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f +message.host.dedication.released=\u5c02\u7528\u30db\u30b9\u30c8\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f message.installWizard.click.retry=\u8d77\u52d5\u3092\u518d\u8a66\u884c\u3059\u308b\u306b\u306f\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.installWizard.copy.whatIsACluster=\u30af\u30e9\u30b9\u30bf\u30fc\u306f\u30db\u30b9\u30c8\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u65b9\u6cd5\u3067\u3059\u30021 \u3064\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306e\u30db\u30b9\u30c8\u306f\u3059\u3079\u3066\u540c\u4e00\u306e\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u304b\u3089\u69cb\u6210\u3055\u308c\u3001\u540c\u3058\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3092\u5b9f\u884c\u3057\u3001\u540c\u3058\u30b5\u30d6\u30cd\u30c3\u30c8\u4e0a\u306b\u3042\u308a\u3001\u540c\u3058\u5171\u6709\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u540c\u3058\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306e\u30db\u30b9\u30c8\u9593\u3067\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u3078\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u4e2d\u65ad\u305b\u305a\u306b\u3001\u4eee\u60f3\u30de\u30b7\u30f3 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u30e9\u30a4\u30d6 \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30af\u30e9\u30b9\u30bf\u30fc\u306f CloudStack&\#8482; \u74b0\u5883\u5185\u306e 3 \u756a\u76ee\u306b\u5927\u304d\u306a\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u3002\u30af\u30e9\u30b9\u30bf\u30fc\u306f\u30dd\u30c3\u30c9\u306b\u542b\u307e\u308c\u3001\u30dd\u30c3\u30c9\u306f\u30be\u30fc\u30f3\u306b\u542b\u307e\u308c\u307e\u3059\u3002

CloudStack&\#8482; \u3067\u306f 1 \u3064\u306e\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u306b\u8907\u6570\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001\u57fa\u672c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u306f 1 \u3064\u3067\u3059\u3002 message.installWizard.copy.whatIsAHost=\u30db\u30b9\u30c8\u306f\u5358\u4e00\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3067\u3001\u30b2\u30b9\u30c8\u4eee\u60f3\u30de\u30b7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30ea\u30bd\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30d9\u30a2 \u30e1\u30bf\u30eb \u30db\u30b9\u30c8\u3092\u9664\u3044\u3066\u3001\u5404\u30db\u30b9\u30c8\u306b\u306f\u30b2\u30b9\u30c8\u4eee\u60f3\u30de\u30b7\u30f3\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002\u30d9\u30a2 \u30e1\u30bf\u30eb \u30db\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u300e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30ac\u30a4\u30c9\u4e0a\u7d1a\u7de8\u300f\u3067\u7279\u6b8a\u4f8b\u3068\u3057\u3066\u8aac\u660e\u3057\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001KVM \u304c\u6709\u52b9\u306a Linux \u30b5\u30fc\u30d0\u30fc\u3001Citrix XenServer \u304c\u52d5\u4f5c\u3059\u308b\u30b5\u30fc\u30d0\u30fc\u3001\u304a\u3088\u3073 ESXi \u30b5\u30fc\u30d0\u30fc\u304c\u30db\u30b9\u30c8\u3067\u3059\u3002\u57fa\u672c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u3001XenServer \u307e\u305f\u306f KVM \u3092\u5b9f\u884c\u3059\u308b\u5358\u4e00\u306e\u30db\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002

\u30db\u30b9\u30c8\u306f CloudStack&\#8482; \u74b0\u5883\u5185\u306e\u6700\u5c0f\u306e\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u3002\u30db\u30b9\u30c8\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u542b\u307e\u308c\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u306f\u30dd\u30c3\u30c9\u306b\u542b\u307e\u308c\u3001\u30dd\u30c3\u30c9\u306f\u30be\u30fc\u30f3\u306b\u542b\u307e\u308c\u307e\u3059\u3002 message.installWizard.copy.whatIsAPod=\u901a\u5e38\u30011 \u3064\u306e\u30dd\u30c3\u30c9\u306f\u5358\u4e00\u306e\u30e9\u30c3\u30af\u3092\u8868\u3057\u307e\u3059\u3002\u540c\u3058\u30dd\u30c3\u30c9\u5185\u306e\u30db\u30b9\u30c8\u306f\u540c\u3058\u30b5\u30d6\u30cd\u30c3\u30c8\u306b\u542b\u307e\u308c\u307e\u3059\u3002

\u30dd\u30c3\u30c9\u306f CloudStack&\#8482; \u74b0\u5883\u5185\u306e 2 \u756a\u76ee\u306b\u5927\u304d\u306a\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u3002\u30dd\u30c3\u30c9\u306f\u30be\u30fc\u30f3\u306b\u542b\u307e\u308c\u307e\u3059\u3002\u5404\u30be\u30fc\u30f3\u306f 1 \u3064\u4ee5\u4e0a\u306e\u30dd\u30c3\u30c9\u3092\u542b\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u57fa\u672c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u3001\u30be\u30fc\u30f3\u5185\u306e\u30dd\u30c3\u30c9\u306f 1 \u3064\u3067\u3059\u3002 message.installWizard.copy.whatIsAZone=\u30be\u30fc\u30f3\u306f CloudStack&\#8482; \u74b0\u5883\u5185\u306e\u6700\u5927\u306e\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u30021 \u3064\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u5185\u306b\u8907\u6570\u306e\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001\u901a\u5e38\u3001\u30be\u30fc\u30f3\u306f\u5358\u4e00\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u30be\u30fc\u30f3\u306b\u7d44\u7e54\u5316\u3059\u308b\u3068\u3001\u30be\u30fc\u30f3\u3092\u7269\u7406\u7684\u306b\u5206\u96e2\u3057\u3066\u5197\u9577\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001\u5404\u30be\u30fc\u30f3\u306b\u96fb\u6e90\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30a2\u30c3\u30d7\u30ea\u30f3\u30af\u3092\u914d\u5099\u3057\u307e\u3059\u3002\u5fc5\u9808\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30be\u30fc\u30f3\u306f\u9060\u9694\u5730\u306b\u5206\u6563\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 -message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482 \u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30ea\u30bd\u30fc\u30b9\u3092\u30d7\u30fc\u30eb\u3059\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3001\u30d1\u30d6\u30ea\u30c3\u30af\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u3001\u304a\u3088\u3073\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u306e Infrastructure as a Service (IaaS) \u30af\u30e9\u30a6\u30c9\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002CloudStack&\#8482 \u3092\u4f7f\u7528\u3057\u3066\u3001\u30af\u30e9\u30a6\u30c9 \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u69cb\u6210\u3059\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u30b9\u30c8\u30ec\u30fc\u30b8\u3001\u304a\u3088\u3073\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30ce\u30fc\u30c9\u3092\u7ba1\u7406\u3057\u3001\u30af\u30e9\u30a6\u30c9 \u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u74b0\u5883\u3092\u5c55\u958b\u3001\u7ba1\u7406\u3001\u304a\u3088\u3073\u69cb\u6210\u3057\u307e\u3059\u3002

CloudStack&\#8482 \u306f\u30b3\u30e2\u30c7\u30a3\u30c6\u30a3\u5316\u3057\u305f\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u500b\u5225\u306e\u4eee\u60f3\u30de\u30b7\u30f3 \u30a4\u30e1\u30fc\u30b8\u3092\u8d85\u3048\u3066\u62e1\u5f35\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u7c21\u5358\u306a\u8a2d\u5b9a\u3067\u52d5\u4f5c\u3059\u308b\u30af\u30e9\u30a6\u30c9 \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30b9\u30bf\u30c3\u30af\u306b\u3088\u3063\u3066\u3001\u4eee\u60f3\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3064\u307e\u308a\u591a\u5c64\u578b\u306e\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8 \u30af\u30e9\u30a6\u30c9 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u69cb\u7bc9\u3057\u3001\u5c55\u958b\u3057\u3001\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u4e0d\u53ef\u6b20\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u3059\u3079\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u30aa\u30fc\u30d7\u30f3 \u30bd\u30fc\u30b9 \u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u30d7\u30ec\u30df\u30a2\u30e0 \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e21\u65b9\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u304c\u3001\u30aa\u30fc\u30d7\u30f3 \u30bd\u30fc\u30b9 \u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3082\u307b\u3068\u3093\u3069\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 +message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482; \u306f\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30ea\u30bd\u30fc\u30b9\u3092\u30d7\u30fc\u30eb\u3059\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3001\u30d1\u30d6\u30ea\u30c3\u30af\u3001\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u3001\u304a\u3088\u3073\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u306e Infrastructure as a Service (IaaS) \u30af\u30e9\u30a6\u30c9\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002CloudStack&\#8482; \u3092\u4f7f\u7528\u3057\u3066\u3001\u30af\u30e9\u30a6\u30c9 \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u69cb\u6210\u3059\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3001\u30b9\u30c8\u30ec\u30fc\u30b8\u3001\u304a\u3088\u3073\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30ce\u30fc\u30c9\u3092\u7ba1\u7406\u3057\u3001\u30af\u30e9\u30a6\u30c9 \u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u74b0\u5883\u3092\u5c55\u958b\u3001\u7ba1\u7406\u3001\u304a\u3088\u3073\u69cb\u6210\u3057\u307e\u3059\u3002

CloudStack&\#8482; \u306f\u30b3\u30e2\u30c7\u30a3\u30c6\u30a3\u5316\u3057\u305f\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u500b\u5225\u306e\u4eee\u60f3\u30de\u30b7\u30f3 \u30a4\u30e1\u30fc\u30b8\u3092\u8d85\u3048\u3066\u62e1\u5f35\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u7c21\u5358\u306a\u8a2d\u5b9a\u3067\u52d5\u4f5c\u3059\u308b\u30af\u30e9\u30a6\u30c9 \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30b9\u30bf\u30c3\u30af\u306b\u3088\u3063\u3066\u3001\u4eee\u60f3\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3064\u307e\u308a\u591a\u5c64\u578b\u306e\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8 \u30af\u30e9\u30a6\u30c9 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u69cb\u7bc9\u3057\u3001\u5c55\u958b\u3057\u3001\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u4e0d\u53ef\u6b20\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u3059\u3079\u3066\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u30aa\u30fc\u30d7\u30f3 \u30bd\u30fc\u30b9 \u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u30d7\u30ec\u30df\u30a2\u30e0 \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e21\u65b9\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u304c\u3001\u30aa\u30fc\u30d7\u30f3 \u30bd\u30fc\u30b9 \u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3082\u307b\u3068\u3093\u3069\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 message.installWizard.copy.whatIsPrimaryStorage=CloudStack&\#8482; \u306e\u30af\u30e9\u30a6\u30c9 \u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3067\u306f\u3001\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e 2 \u7a2e\u985e\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3069\u3061\u3089\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u3082\u3001iSCSI\u3001NFS \u30b5\u30fc\u30d0\u30fc\u3001\u307e\u305f\u306f\u30ed\u30fc\u30ab\u30eb \u30c7\u30a3\u30b9\u30af\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002

\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u30af\u30e9\u30b9\u30bf\u30fc\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3001\u305d\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u5185\u306e\u30db\u30b9\u30c8\u3067\u52d5\u4f5c\u3059\u308b\u3059\u3079\u3066\u306e VM \u306e\u5404\u30b2\u30b9\u30c8 VM \u306e\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002\u901a\u5e38\u3001\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30b5\u30fc\u30d0\u30fc\u306f\u30db\u30b9\u30c8\u306e\u8fd1\u304f\u306b\u8a2d\u7f6e\u3057\u307e\u3059\u3002 message.installWizard.copy.whatIsSecondaryStorage=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u30be\u30fc\u30f3\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3001\u6b21\u306e\u9805\u76ee\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002
  • \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - VM \u306e\u8d77\u52d5\u306b\u4f7f\u7528\u3067\u304d\u308b OS \u30a4\u30e1\u30fc\u30b8\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306a\u3069\u8ffd\u52a0\u306e\u69cb\u6210\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
  • ISO \u30a4\u30e1\u30fc\u30b8 - \u8d77\u52d5\u53ef\u80fd\u307e\u305f\u306f\u8d77\u52d5\u4e0d\u53ef\u306e OS \u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002
  • \u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 - VM \u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\u30b3\u30d4\u30fc\u3067\u3059\u3002\u30c7\u30fc\u30bf\u306e\u5fa9\u5143\u307e\u305f\u306f\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002
message.installWizard.now.building=\u30af\u30e9\u30a6\u30c9\u3092\u69cb\u7bc9\u3057\u3066\u3044\u307e\u3059... @@ -1857,12 +1932,14 @@ message.installWizard.tooltip.configureGuestTraffic.guestGateway=\u30b2\u30b9\u3 message.installWizard.tooltip.configureGuestTraffic.guestNetmask=\u30b2\u30b9\u30c8\u306e\u4f7f\u7528\u3059\u308b\u30b5\u30d6\u30cd\u30c3\u30c8\u4e0a\u3067\u4f7f\u7528\u3055\u308c\u308b\u30cd\u30c3\u30c8\u30de\u30b9\u30af\u3067\u3059\u3002 message.installWizard.tooltip.configureGuestTraffic.guestStartIp=\u3053\u306e\u30be\u30fc\u30f3\u306e\u30b2\u30b9\u30c8\u306b\u5272\u308a\u5f53\u3066\u308b\u3053\u3068\u304c\u3067\u304d\u308b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3067\u3059\u3002\u4f7f\u7528\u3059\u308b NIC \u304c 1 \u3064\u306e\u5834\u5408\u306f\u3001\u3053\u308c\u3089\u306e IP \u30a2\u30c9\u30ec\u30b9\u306f\u30dd\u30c3\u30c9\u306e CIDR \u3068\u540c\u3058 CIDR \u306b\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 message.installWizard.tooltip.configureGuestTraffic.name=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u540d\u524d\u3067\u3059\u3002 +message.instance.scaled.up.confirm=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.instanceWizard.noTemplates=\u4f7f\u7528\u53ef\u80fd\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u4e92\u63db\u6027\u306e\u3042\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3001\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 \u30a6\u30a3\u30b6\u30fc\u30c9\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.ip.address.changed=\u304a\u4f7f\u3044\u306e IP \u30a2\u30c9\u30ec\u30b9\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4e00\u89a7\u3092\u66f4\u65b0\u3057\u307e\u3059\u304b? \u305d\u306e\u5834\u5408\u306f\u3001\u8a73\u7d30\u30da\u30a4\u30f3\u304c\u9589\u3058\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.iso.desc=\u30c7\u30fc\u30bf\u307e\u305f\u306f OS \u8d77\u52d5\u53ef\u80fd\u30e1\u30c7\u30a3\u30a2\u3092\u542b\u3080\u30c7\u30a3\u30b9\u30af \u30a4\u30e1\u30fc\u30b8 message.join.project=\u3053\u308c\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53c2\u52a0\u3057\u307e\u3057\u305f\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u53c2\u7167\u3059\u308b\u306b\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 \u30d3\u30e5\u30fc\u306b\u5207\u308a\u66ff\u3048\u3066\u304f\u3060\u3055\u3044\u3002 message.launch.vm.on.private.network=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u5c02\u7528\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8d77\u52d5\u3057\u307e\u3059\u304b? message.launch.zone=\u30be\u30fc\u30f3\u3092\u8d77\u52d5\u3059\u308b\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u6b21\u306e\u624b\u9806\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002 +message.listView.subselect.multi=(Ctrl/Cmd \u30ad\u30fc\u3092\u62bc\u3057\u306a\u304c\u3089\u30af\u30ea\u30c3\u30af) message.lock.account=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u30af\u30e9\u30a6\u30c9 \u30ea\u30bd\u30fc\u30b9\u3092\u7ba1\u7406\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u305d\u306e\u5f8c\u3082\u65e2\u5b58\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002 message.migrate.instance.confirm=\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c\u5148\u306f\u6b21\u306e\u30db\u30b9\u30c8\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.migrate.instance.to.host=\u5225\u306e\u30db\u30b9\u30c8\u306b\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u79fb\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? @@ -1870,7 +1947,11 @@ message.migrate.instance.to.ps=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9 message.migrate.router.confirm=\u30eb\u30fc\u30bf\u30fc\u306e\u79fb\u884c\u5148\u306f\u6b21\u306e\u30db\u30b9\u30c8\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.migrate.systemvm.confirm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u79fb\u884c\u5148\u306f\u6b21\u306e\u30db\u30b9\u30c8\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.migrate.volume=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u79fb\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.network.addVM.desc=\u3053\u306e VM \u3092\u8ffd\u52a0\u3059\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u305f\u3081\u306e\u65b0\u3057\u3044 NIC \u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002 +message.network.addVMNIC=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u65b0\u3057\u3044 VM NIC \u3092\u8ffd\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.new.user=\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.no.affinity.groups=\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u6b21\u306e\u624b\u9806\u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002 +message.no.host.available=\u79fb\u884c\u306b\u4f7f\u7528\u3067\u304d\u308b\u30db\u30b9\u30c8\u306f\u3042\u308a\u307e\u305b\u3093 message.no.network.support.configuration.not.true=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u304c\u6709\u52b9\u306a\u30be\u30fc\u30f3\u304c\u7121\u3044\u305f\u3081\u3001\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u6a5f\u80fd\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u624b\u9806 5. \u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002 message.no.network.support=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3068\u3057\u3066 vSphere \u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304c\u3001\u3053\u306e\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306b\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u6a5f\u80fd\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u624b\u9806 5. \u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002 message.no.projects.adminOnly=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\u3002
\u7ba1\u7406\u8005\u306b\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3092\u4f9d\u983c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 @@ -1888,11 +1969,17 @@ message.please.select.a.configuration.for.your.zone=\u30be\u30fc\u30f3\u306e\u69 message.please.select.a.different.public.and.management.network.before.removing=\u524a\u9664\u306e\u524d\u306b\u7570\u306a\u308b\u30d1\u30d6\u30ea\u30c3\u30af\u304a\u3088\u3073\u7ba1\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.please.select.networks=\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.please.wait.while.zone.is.being.created=\u30be\u30fc\u30f3\u304c\u4f5c\u6210\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044... +message.pod.dedication.released=\u5c02\u7528\u30dd\u30c3\u30c9\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f +message.portable.ip.delete.confirm=\u3053\u306e\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.project.invite.sent=\u30e6\u30fc\u30b6\u30fc\u306b\u62db\u5f85\u72b6\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u30e6\u30fc\u30b6\u30fc\u304c\u62db\u5f85\u3092\u627f\u8afe\u3059\u308b\u3068\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002 message.public.traffic.in.advanced.zone=\u30af\u30e9\u30a6\u30c9\u5185\u306e VM \u304c\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u305f\u3081\u306b\u3001\u4e00\u822c\u306b\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a IP \u30a2\u30c9\u30ec\u30b9\u3092\u5272\u308a\u5f53\u3066\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306f CloudStack \u306e\u30e6\u30fc\u30b6\u30fc \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3053\u308c\u3089\u306e IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3001\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u30d1\u30d6\u30ea\u30c3\u30af \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u9593\u306b NAT \u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002

\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u305f\u3081\u306b\u3001\u5c11\u306a\u304f\u3068\u3082 1 \u3064 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.public.traffic.in.basic.zone=\u30af\u30e9\u30a6\u30c9\u5185\u306e VM \u304c\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u304b\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u7d4c\u7531\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u3068\u3001\u30d1\u30d6\u30ea\u30c3\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u305f\u3081\u306b\u3001\u4e00\u822c\u306b\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a IP \u30a2\u30c9\u30ec\u30b9\u3092\u5272\u308a\u5f53\u3066\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3068\u3001\u30b2\u30b9\u30c8 IP \u30a2\u30c9\u30ec\u30b9\u306e\u307b\u304b\u306b\u3053\u306e\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u304b\u3089\u30a2\u30c9\u30ec\u30b9\u304c 1 \u3064\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u3068\u30b2\u30b9\u30c8 IP \u30a2\u30c9\u30ec\u30b9\u306e\u9593\u306b\u3001\u9759\u7684\u306a 1 \u5bfe 1 \u306e NAT \u304c\u81ea\u52d5\u7684\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u307e\u3059\u3002\u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306f CloudStack \u306e\u30e6\u30fc\u30b6\u30fc \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u3066\u8ffd\u52a0\u306e IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3001\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u306e\u9593\u306b\u9759\u7684 NAT \u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 -message.redirecting.region=\u9818\u57df\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u3066\u3044\u307e\u3059... -message.remove.region=\u3053\u306e\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u3053\u306e\u9818\u57df\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.read.admin.guide.scaling.up=\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3059\u308b\u524d\u306b\u7ba1\u7406\u8005\u30ac\u30a4\u30c9\u306e\u52d5\u7684\u306a\u30b5\u30a4\u30ba\u5909\u66f4\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u304a\u8aad\u307f\u304f\u3060\u3055\u3044\u3002 +message.recover.vm=\u3053\u306e VM \u3092\u5fa9\u5143\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.redirecting.region=\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3057\u3066\u3044\u307e\u3059... +message.reinstall.vm=\u6ce8\: \u6ce8\u610f\u3057\u3066\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u3088\u308a VM \u304c\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u518d\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\u30eb\u30fc\u30c8 \u30c7\u30a3\u30b9\u30af\u4e0a\u306e\u30c7\u30fc\u30bf\u306f\u5931\u308f\u308c\u307e\u3059\u3002\u8ffd\u52a0\u306e\u30c7\u30fc\u30bf \u30dc\u30ea\u30e5\u30fc\u30e0\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u305d\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u5f71\u97ff\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +message.remove.ldap=LDAP \u69cb\u6210\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.remove.region=\u3053\u306e\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u3053\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.remove.vpc=VPC \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.remove.vpn.access=\u6b21\u306e\u30e6\u30fc\u30b6\u30fc\u304b\u3089 VPN \u30a2\u30af\u30bb\u30b9\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.reset.password.warning.notPasswordEnabled=\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u7ba1\u7406\u3092\u6709\u52b9\u306b\u305b\u305a\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002 @@ -1901,18 +1988,25 @@ message.reset.VPN.connection=VPN \u63a5\u7d9a\u3092\u30ea\u30bb\u30c3\u30c8\u305 message.restart.mgmt.server=\u65b0\u3057\u3044\u8a2d\u5b9a\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.restart.mgmt.usage.server=\u65b0\u3057\u3044\u8a2d\u5b9a\u3092\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u3068\u4f7f\u7528\u72b6\u6cc1\u6e2c\u5b9a\u30b5\u30fc\u30d0\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.restart.network=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u63d0\u4f9b\u3059\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.restart.vpc.remark=VPC \u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?

\u6ce8\u610f\: \u975e\u5197\u9577 VPC \u306e\u5197\u9577\u5316\u306f\u5f37\u5236\u7684\u306b\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u3055\u308c\u307e\u3059. \u307e\u305f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306f\u6570\u5206\u9593\u5229\u7528\u51fa\u6765\u306a\u304f\u306a\u308a\u307e\u3059.

message.restart.vpc=VPC \u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.restoreVM=VM \u3092\u5fa9\u5143\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.security.group.usage=(\u8a72\u5f53\u3059\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u3059\u3079\u3066\u9078\u629e\u3059\u308b\u306b\u306f\u3001Ctrl \u30ad\u30fc\u3092\u62bc\u3057\u306a\u304c\u3089\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044) +message.select.affinity.groups=\u3053\u306e VM \u3092\u8ffd\u52a0\u3059\u308b\u30a2\u30d5\u30a3\u30cb\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.select.a.zone=\u30be\u30fc\u30f3\u306f\u901a\u5e38\u3001\u5358\u4e00\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002\u8907\u6570\u306e\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3057\u3001\u7269\u7406\u7684\u306b\u5206\u96e2\u3057\u3066\u5197\u9577\u6027\u3092\u6301\u305f\u305b\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30af\u30e9\u30a6\u30c9\u306e\u4fe1\u983c\u6027\u3092\u9ad8\u3081\u307e\u3059\u3002 message.select.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.select.iso=\u65b0\u3057\u3044\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e ISO \u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.select.item=\u9805\u76ee\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.select.security.groups=\u65b0\u3057\u3044\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.select.template=\u65b0\u3057\u3044\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.select.tier=\u968e\u5c64\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.set.default.NIC.manual=\u4eca\u3059\u3050\u306b\u3053\u306e VM \u306e\u30c7\u30d5\u30a9\u30eb\u30c8 NIC \u3092\u624b\u52d5\u3067\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.set.default.NIC=\u3053\u306e NIC \u3092\u3053\u306e VM \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.setup.physical.network.during.zone.creation.basic=\u57fa\u672c\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u3068\u304d\u306f\u3001\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u4e0a\u306e NIC \u306b\u5bfe\u5fdc\u3059\u308b 1 \u3064\u306e\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u304d\u307e\u3059\u3002\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306f\u3044\u304f\u3064\u304b\u306e\u7a2e\u985e\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u4f1d\u9001\u3057\u307e\u3059\u3002

\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u307b\u304b\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e\u3092\u30c9\u30e9\u30c3\u30b0 \u30a2\u30f3\u30c9 \u30c9\u30ed\u30c3\u30d7\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 message.setup.physical.network.during.zone.creation=\u62e1\u5f35\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u3068\u304d\u306f\u30011 \u3064\u4ee5\u4e0a\u306e\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5404\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306f\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u4e0a\u306e 1 \u3064\u306e NIC \u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002\u5404\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u306f\u3001\u7d44\u307f\u5408\u308f\u305b\u306b\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u304c\u30011 \u3064\u4ee5\u4e0a\u306e\u7a2e\u985e\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u901a\u4fe1\u3067\u304d\u307e\u3059\u3002

\u5404\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u5bfe\u3057\u3066\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e\u3092\u30c9\u30e9\u30c3\u30b0 \u30a2\u30f3\u30c9 \u30c9\u30ed\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.setup.successful=\u30af\u30e9\u30a6\u30c9\u304c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u307e\u3057\u305f\u3002 message.snapshot.schedule=\u6b21\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u304b\u3089\u9078\u629e\u3057\u3066\u30dd\u30ea\u30b7\u30fc\u306e\u57fa\u672c\u8a2d\u5b9a\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u5b9a\u671f\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u304d\u307e\u3059\u3002 +message.specifiy.tag.key.value=\u30bf\u30b0 \u30ad\u30fc\u304a\u3088\u3073\u5024\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 message.specify.url=URL \u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 message.step.1.continue=\u7d9a\u884c\u3059\u308b\u306b\u306f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u307e\u305f\u306f ISO \u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044 message.step.1.desc=\u65b0\u3057\u3044\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7528\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002ISO \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u308b\u7a7a\u767d\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 @@ -1922,7 +2016,10 @@ message.step.4.continue=\u7d9a\u884c\u3059\u308b\u306b\u306f\u5c11\u306a\u304f\u message.step.4.desc=\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u63a5\u7d9a\u3059\u308b\u30d7\u30e9\u30a4\u30de\u30ea \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.storage.traffic=\u30db\u30b9\u30c8\u3084 CloudStack \u30b7\u30b9\u30c6\u30e0 VM \u306a\u3069\u3001\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u3068\u901a\u4fe1\u3059\u308b CloudStack \u306e\u5185\u90e8\u30ea\u30bd\u30fc\u30b9\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3067\u3059\u3002\u3053\u3053\u3067\u30b9\u30c8\u30ec\u30fc\u30b8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u69cb\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.suspend.project=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4e00\u6642\u505c\u6b62\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.systems.vms.ready=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002 +message.template.copying=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059\u3002 message.template.desc=VM \u306e\u8d77\u52d5\u306b\u4f7f\u7528\u3067\u304d\u308b OS \u30a4\u30e1\u30fc\u30b8 +message.tier.required=\u968e\u5c64\u306f\u5fc5\u9808\u3067\u3059 message.tooltip.dns.1=\u30be\u30fc\u30f3\u5185\u306e VM \u3067\u4f7f\u7528\u3059\u308b DNS \u30b5\u30fc\u30d0\u30fc\u306e\u540d\u524d\u3067\u3059\u3002\u30be\u30fc\u30f3\u306e\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u304b\u3089\u3001\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u901a\u4fe1\u3067\u304d\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 message.tooltip.dns.2=\u30be\u30fc\u30f3\u5185\u306e VM \u3067\u4f7f\u7528\u3059\u308b 2 \u756a\u76ee\u306e DNS \u30b5\u30fc\u30d0\u30fc\u306e\u540d\u524d\u3067\u3059\u3002\u30be\u30fc\u30f3\u306e\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9\u304b\u3089\u3001\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u901a\u4fe1\u3067\u304d\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 message.tooltip.internal.dns.1=\u30be\u30fc\u30f3\u5185\u306e CloudStack \u5185\u90e8\u30b7\u30b9\u30c6\u30e0 VM \u3067\u4f7f\u7528\u3059\u308b DNS \u30b5\u30fc\u30d0\u30fc\u306e\u540d\u524d\u3067\u3059\u3002\u30dd\u30c3\u30c9\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9\u304b\u3089\u3001\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u901a\u4fe1\u3067\u304d\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 @@ -1934,111 +2031,45 @@ message.tooltip.reserved.system.netmask=\u30dd\u30c3\u30c9\u306e\u30b5\u30d6\u30 message.tooltip.zone.name=\u30be\u30fc\u30f3\u306e\u540d\u524d\u3067\u3059\u3002 message.update.os.preference=\u3053\u306e\u30db\u30b9\u30c8\u306e OS \u57fa\u672c\u8a2d\u5b9a\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u540c\u69d8\u306e\u57fa\u672c\u8a2d\u5b9a\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u3001\u5225\u306e\u30db\u30b9\u30c8\u3092\u9078\u629e\u3059\u308b\u524d\u306b\u307e\u305a\u3053\u306e\u30db\u30b9\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002 message.update.resource.count=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ea\u30bd\u30fc\u30b9\u6570\u3092\u66f4\u65b0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.update.ssl=\u5404\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7\u304a\u3088\u3073\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u66f4\u65b0\u3059\u308b\u3001X.509 \u6e96\u62e0\u306e\u65b0\u3057\u3044 SSL \u8a3c\u660e\u66f8\u3092\u9001\u4fe1\u3057\u3066\u304f\u3060\u3055\u3044\: -message.update.ssl.succeeded=SSL \u8a3c\u660e\u66f8\u306e\u66f4\u65b0\u306b\u6210\u529f\u3057\u307e\u3057\u305f message.update.ssl.failed=SSL \u8a3c\u660e\u66f8\u306e\u66f4\u65b0\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 +message.update.ssl.succeeded=SSL \u8a3c\u660e\u66f8\u306e\u66f4\u65b0\u306b\u6210\u529f\u3057\u307e\u3057\u305f +message.update.ssl=\u5404\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7\u304a\u3088\u3073\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u66f4\u65b0\u3059\u308b\u3001X.509 \u6e96\u62e0\u306e\u65b0\u3057\u3044 SSL \u8a3c\u660e\u66f8\u3092\u9001\u4fe1\u3057\u3066\u304f\u3060\u3055\u3044\: +message.validate.accept=\u6709\u52b9\u306a\u62e1\u5f35\u5b50\u3092\u6301\u3064\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.creditcard=\u30af\u30ec\u30b8\u30c3\u30c8 \u30ab\u30fc\u30c9\u756a\u53f7\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.date.ISO=\u65e5\u4ed8\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 (ISO)\u3002 +message.validate.date=\u65e5\u4ed8\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.digits=\u6570\u5b57\u306e\u307f\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.email.address=\u30e1\u30fc\u30eb \u30a2\u30c9\u30ec\u30b9\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.equalto=\u540c\u3058\u5024\u3092\u518d\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.fieldrequired=\u3053\u308c\u306f\u5fc5\u9808\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u3059\u3002 +message.validate.fixfield=\u3053\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.validate.instance.name=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u306f 63 \u6587\u5b57\u4ee5\u5185\u3067\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002ASCII \u6587\u5b57\u306e a\uff5ez\u3001A\uff5eZ\u3001\u6570\u5b57\u306e 0\uff5e9\u3001\u304a\u3088\u3073\u30cf\u30a4\u30d5\u30f3\u306e\u307f\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u6587\u5b57\u3067\u59cb\u307e\u308a\u3001\u6587\u5b57\u307e\u305f\u306f\u6570\u5b57\u3067\u7d42\u308f\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +message.validate.invalid.characters=\u7121\u52b9\u306a\u6587\u5b57\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u4fee\u6574\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.max={0} \u4ee5\u4e0b\u306e\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.maxlength={0} \u6587\u5b57\u4ee5\u4e0b\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.minlength={0} \u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.number=\u6570\u5024\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.range={0} \uff5e {1} \u306e\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.range.length={0} \uff5e {1} \u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.validate.URL=URL \u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.virtual.network.desc=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u5c02\u7528\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u3059\u3002\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 \u30c9\u30e1\u30a4\u30f3\u306f VLAN \u5185\u306b\u914d\u7f6e\u3055\u308c\u3001\u30d1\u30d6\u30ea\u30c3\u30af \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u3059\u3079\u3066\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u306b\u3088\u3063\u3066\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002 message.vm.create.template.confirm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3068 VM \u304c\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3055\u308c\u307e\u3059\u3002 message.vm.review.launch=\u6b21\u306e\u60c5\u5831\u3092\u53c2\u7167\u3057\u3066\u3001\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6b63\u3057\u304f\u8a2d\u5b9a\u3057\u305f\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +message.vnmc.available.list=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u4e00\u89a7\u3067 VNMC \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 +message.vnmc.not.available.list=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u4e00\u89a7\u3067 VNMC \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 message.volume.create.template.confirm=\u3053\u306e\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u30dc\u30ea\u30e5\u30fc\u30e0 \u30b5\u30a4\u30ba\u306b\u3088\u3063\u3066\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210\u306b\u306f\u6570\u5206\u4ee5\u4e0a\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 +message.waiting.for.builtin.templates.to.load=\u7d44\u307f\u8fbc\u307f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30ed\u30fc\u30c9\u3092\u5f85\u6a5f\u3057\u3066\u3044\u307e\u3059... +message.XSTools61plus.update.failed=[\u5143\u306e XS \u30d0\u30fc\u30b8\u30e7\u30f3\u306f 6.1 \u4ee5\u964d] \u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30a8\u30e9\u30fc\: message.you.must.have.at.least.one.physical.network=\u5c11\u306a\u304f\u3068\u3082 1 \u3064\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304c\u5fc5\u8981\u3067\u3059 -message.zone.creation.complete.would.you.like.to.enable.this.zone=\u30be\u30fc\u30f3\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? +message.your.cloudstack.is.ready=CloudStack \u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\! message.Zone.creation.complete=\u30be\u30fc\u30f3\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f +message.zone.creation.complete.would.you.like.to.enable.this.zone=\u30be\u30fc\u30f3\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? message.zone.no.network.selection=\u9078\u629e\u3057\u305f\u30be\u30fc\u30f3\u3067\u306f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3067\u304d\u307e\u305b\u3093\u3002 message.zone.step.1.desc=\u30be\u30fc\u30f3\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e2\u30c7\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.zone.step.2.desc=\u65b0\u3057\u3044\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.zone.step.3.desc=\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 message.zoneWizard.enable.local.storage=\u8b66\u544a\: \u3053\u306e\u30be\u30fc\u30f3\u306e\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u306b\u3059\u308b\u5834\u5408\u306f\u3001\u30b7\u30b9\u30c6\u30e0 VM \u306e\u8d77\u52d5\u5834\u6240\u306b\u5fdc\u3058\u3066\u6b21\u306e\u64cd\u4f5c\u304c\u5fc5\u8981\u3067\u3059\u3002

1. \u30b7\u30b9\u30c6\u30e0 VM \u3092\u5171\u6709\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u5171\u6709\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u305f\u5f8c\u3067\u30be\u30fc\u30f3\u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30be\u30fc\u30f3\u3092\u7121\u52b9\u72b6\u614b\u304b\u3089\u958b\u59cb\u3059\u308b\u5fc5\u8981\u3082\u3042\u308a\u307e\u3059\u3002

2. \u30b7\u30b9\u30c6\u30e0 VM \u3092\u30ed\u30fc\u30ab\u30eb \u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3059\u308b\u524d\u306b system.vm.use.local.storage \u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002


\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.validate.fieldrequired=\u3053\u308c\u306f\u5fc5\u9808\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u3059\u3002 -message.validate.fixfield=\u3053\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.email.address=\u30e1\u30fc\u30eb \u30a2\u30c9\u30ec\u30b9\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.URL=URL \u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.date=\u65e5\u4ed8\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.date.ISO=\u65e5\u4ed8\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 (ISO)\u3002 -message.validate.number=\u6570\u5024\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.digits=\u6570\u5b57\u306e\u307f\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.creditcard=\u30af\u30ec\u30b8\u30c3\u30c8 \u30ab\u30fc\u30c9\u756a\u53f7\u3092\u6b63\u3057\u304f\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.equalto=\u540c\u3058\u5024\u3092\u518d\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.accept=\u6709\u52b9\u306a\u62e1\u5f35\u5b50\u3092\u6301\u3064\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.maxlength={0} \u6587\u5b57\u4ee5\u4e0b\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.minlength={0} \u6587\u5b57\u4ee5\u4e0a\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.range.length={0} \uff5e {1} \u6587\u5b57\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.range={0} \uff5e {1} \u306e\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.validate.max={0} \u4ee5\u4e0b\u306e\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 messgae.validate.min={0} \u4ee5\u4e0a\u306e\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.creating.systemVM=\u30b7\u30b9\u30c6\u30e0 VM \u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059 (\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044) -message.enabling.zone.dots=\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059... -message.restoreVM=VM \u3092\u5fa9\u5143\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.no.host.available=\u79fb\u884c\u306b\u4f7f\u7528\u3067\u304d\u308b\u30db\u30b9\u30c8\u306f\u3042\u308a\u307e\u305b\u3093 -message.network.addVM.desc=\u3053\u306e VM \u3092\u8ffd\u52a0\u3059\u308b\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u305f\u3081\u306e\u65b0\u3057\u3044 NIC \u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002 -message.network.addVMNIC=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u65b0\u3057\u3044 VM NIC \u3092\u8ffd\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.set.default.NIC=\u3053\u306e NIC \u3092\u3053\u306e VM \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.set.default.NIC.manual=\u4eca\u3059\u3050\u306b\u3053\u306e VM \u306e\u30c7\u30d5\u30a9\u30eb\u30c8 NIC \u3092\u624b\u52d5\u3067\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.instance.scaled.up.confirm=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.copy.template.confirm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.template.copying=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3044\u307e\u3059\u3002 -message.XSTools61plus.update.failed=[\u5143\u306e XS \u30d0\u30fc\u30b8\u30e7\u30f3\u306f 6.1 \u4ee5\u964d] \u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30a8\u30e9\u30fc\: -message.gslb.delete.confirm=\u3053\u306e GSLB \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.portable.ip.delete.confirm=\u3053\u306e\u30dd\u30fc\u30bf\u30d6\u30eb IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.gslb.lb.remove.confirm=GSLB \u304b\u3089\u8ca0\u8377\u5206\u6563\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.admin.guide.read=VMware \u30d9\u30fc\u30b9\u306e VM \u306b\u3064\u3044\u3066\u306f\u3001\u30b5\u30a4\u30ba\u5909\u66f4\u306e\u524d\u306b\u7ba1\u7406\u8005\u30ac\u30a4\u30c9\u306e\u52d5\u7684\u306a\u30b5\u30a4\u30ba\u5909\u66f4\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u304a\u8aad\u307f\u304f\u3060\u3055\u3044\u3002\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?, -message.tier.required=\u968e\u5c64\u306f\u5fc5\u9808\u3067\u3059 -message.remove.ldap=LDAP \u69cb\u6210\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.action.downloading.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u307e\u3059\u3002 -message.configure.ldap=LDAP \u3092\u69cb\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.ciscovnmc.resource=Cisco VNMC \u30ea\u30bd\u30fc\u30b9\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.add.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.enable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.disable.vnmc.provider=VNMC \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.vnmc.available.list=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u4e00\u89a7\u3067 VNMC \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -message.vnmc.not.available.list=\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u4e00\u89a7\u3067 VNMC \u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -message.confirm.release.dedicate.vlan.range=\u5c02\u7528 VLAN \u306e\u7bc4\u56f2\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.start.lb.vm=LB VM \u3092\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.stop.lb.vm=LB VM \u3092\u505c\u6b62\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.remove.vmware.datacenter=VMware \u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.dedicate.zone=\u3053\u306e\u30be\u30fc\u30f3\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.release.dedicated.zone=\u3053\u306e\u5c02\u7528\u30be\u30fc\u30f3\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.dedicated.zone.released=\u5c02\u7528\u30be\u30fc\u30f3\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f -message.read.admin.guide.scaling.up=\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3059\u308b\u524d\u306b\u7ba1\u7406\u8005\u30ac\u30a4\u30c9\u306e\u52d5\u7684\u306a\u30b5\u30a4\u30ba\u5909\u66f4\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3092\u304a\u8aad\u307f\u304f\u3060\u3055\u3044\u3002 -message.confirm.scale.up.system.vm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.upgrade.router.newer.template=\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.scale.up.router.vm=\u30eb\u30fc\u30bf\u30fc VM \u306e\u30b5\u30a4\u30ba\u3092\u62e1\u5927\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.upgrade.routers.newtemplate=\u3053\u306e\u30be\u30fc\u30f3\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.upgrade.routers.pod.newtemplate=\u3053\u306e\u30dd\u30c3\u30c9\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.upgrade.routers.cluster.newtemplate=\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.upgrade.routers.account.newtemplate=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u3059\u3079\u3066\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3066\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.dedicate.pod.domain.account=\u3053\u306e\u30dd\u30c3\u30c9\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.release.dedicated.pod=\u3053\u306e\u5c02\u7528\u30dd\u30c3\u30c9\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.pod.dedication.released=\u5c02\u7528\u30dd\u30c3\u30c9\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f -message.confirm.dedicate.cluster.domain.account=\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.cluster.dedicated=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f -message.confirm.release.dedicated.cluster=\u3053\u306e\u5c02\u7528\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.cluster.dedication.released=\u5c02\u7528\u30af\u30e9\u30b9\u30bf\u30fc\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f -message.confirm.dedicate.host.domain.account=\u3053\u306e\u30db\u30b9\u30c8\u3092\u30c9\u30e1\u30a4\u30f3/\u30a2\u30ab\u30a6\u30f3\u30c8\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.host.dedicated=\u30db\u30b9\u30c8\u3092\u5c02\u7528\u306b\u8a2d\u5b9a\u3057\u307e\u3057\u305f -message.confirm.release.dedicated.host=\u3053\u306e\u5c02\u7528\u30db\u30b9\u30c8\u3092\u89e3\u653e\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.host.dedication.released=\u5c02\u7528\u30db\u30b9\u30c8\u304c\u89e3\u653e\u3055\u308c\u307e\u3057\u305f -message.confirm.delete.ucs.manager=UCS Manager \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.refresh.blades=\u30d6\u30ec\u30fc\u30c9\u3092\u66f4\u65b0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.delete.secondary.staging.store=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0 \u30b9\u30c8\u30a2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.select.tier=\u968e\u5c64\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -message.disallowed.characters=\u8a31\u53ef\u3055\u308c\u306a\u3044\u6587\u5b57: \<\,\> -message.waiting.for.builtin.templates.to.load=\u7d44\u307f\u8fbc\u307f\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30ed\u30fc\u30c9\u3092\u5f85\u6a5f\u3057\u3066\u3044\u307e\u3059... -message.systems.vms.ready=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002 -message.your.cloudstack.is.ready=CloudStack \u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\! -message.specifiy.tag.key.value=\u30bf\u30b0 \u30ad\u30fc\u304a\u3088\u3073\u5024\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044 -message.enter.seperated.list.multiple.cidrs=CIDR \u304c\u8907\u6570\u3042\u308b\u5834\u5408\u306f\u3001\u30b3\u30f3\u30de\u533a\u5207\u308a\u306e\u4e00\u89a7\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -message.disabling.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 -message.confirm.enable.network.offering=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.enabling.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 -message.confirm.remove.network.offering=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.disable.network.offering=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.disabling.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 -message.confirm.enable.vpc.offering=\u3053\u306e VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.enabling.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u307e\u3059 -message.confirm.remove.vpc.offering=\u3053\u306e VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.confirm.disable.vpc.offering=\u3053\u306e VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? mode=\u30e2\u30fc\u30c9 network.rate=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901f\u5ea6 notification.reboot.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u518d\u8d77\u52d5 @@ -2068,47 +2099,6 @@ state.Starting=\u958b\u59cb\u4e2d state.Stopped=\u505c\u6b62\u6e08\u307f state.Stopping=\u505c\u6b62\u3057\u3066\u3044\u307e\u3059 state.Suspended=\u4e00\u6642\u505c\u6b62 +title.upload.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 ui.listView.filters.all=\u3059\u3079\u3066 ui.listView.filters.mine=\u81ea\u5206\u306e\u3082\u306e -label.na=\u8a72\u5f53\u306a\u3057 -label.added.network.offering=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -hint.type.part.storage.tag=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30bf\u30b0\u306e\u4e00\u90e8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -hint.type.part.host.tag=\u30db\u30b9\u30c8 \u30bf\u30b0\u306e\u4e00\u90e8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -hint.no.storage.tags=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30bf\u30b0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -hint.no.host.tags=\u30db\u30b9\u30c8 \u30bf\u30b0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -label.availabilityZone=\u30a2\u30d9\u30a4\u30e9\u30d3\u30ea\u30c6\u30a3 \u30be\u30fc\u30f3 -label.diskoffering=\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0 -title.upload.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9 -label.format.lower=\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 -label.checksum=\u30c1\u30a7\u30c3\u30af\u30b5\u30e0 -label.assign.vms=VM \u306e\u5272\u308a\u5f53\u3066 -label.extractable.lower=\u62bd\u51fa\u53ef\u80fd -label.globo.dns=GloboDNS -label.add.globo.dns=GloboDNS \u306e\u8ffd\u52a0 -label.globo.dns.configuration=GloboDNS \u69cb\u6210 -label.region.details=\u9818\u57df\u306e\u8a73\u7d30 -label.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb \u30e9\u30c3\u30af\u69cb\u6210 -label.add.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb \u30e9\u30c3\u30af\u69cb\u6210\u306e\u8ffd\u52a0 -label.delete.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb \u30e9\u30c3\u30af\u69cb\u6210\u306e\u524a\u9664 -message.confirm.delete.baremetal.rack.configuration=\u30d9\u30a2\u30e1\u30bf\u30eb \u30e9\u30c3\u30af\u69cb\u6210\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? -message.added.new.nuage.vsp.controller=\u65b0\u3057\u3044 Nuage VSP \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -message.added.vpc.offering=VPC \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f -label.keyboard.language=\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u8a00\u8a9e -label.standard.us.keyboard=\u6a19\u6e96 (US) \u30ad\u30fc\u30dc\u30fc\u30c9 -label.uk.keyboard=UK \u30ad\u30fc\u30dc\u30fc\u30c9 -label.japanese.keyboard=\u65e5\u672c\u8a9e\u30ad\u30fc\u30dc\u30fc\u30c9 -label.simplified.chinese.keyboard=\u7c21\u4f53\u4e2d\u56fd\u8a9e\u30ad\u30fc\u30dc\u30fc\u30c9 -label.display.name=\u8868\u793a\u540d -label.zone.name=\u30be\u30fc\u30f3\u540d -label.instances=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 -label.event=\u30a4\u30d9\u30f3\u30c8 -label.minutes.past.hour=\u5206 (\u6bce\u6642) -label.snapshots=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 -label.time.colon=\u6642\u523b: -label.min.past.the.hr=\u5206 (\u6bce\u6642) -label.timezone.colon=\u30bf\u30a4\u30e0\u30be\u30fc\u30f3: -label.keep.colon=\u4fdd\u6301\u6570: -label.every=\u6bce\u9031 -label.day=\u6bce\u6708 -label.of.month=\u65e5 -label.add.private.gateway=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u306e\u8ffd\u52a0 diff --git a/client/WEB-INF/classes/resources/messages_nb_NO.properties b/client/WEB-INF/classes/resources/messages_nb_NO.properties index 30c3c7d0ed3..e241811e638 100644 --- a/client/WEB-INF/classes/resources/messages_nb_NO.properties +++ b/client/WEB-INF/classes/resources/messages_nb_NO.properties @@ -21,14 +21,20 @@ error.could.not.change.your.password.because.ldap.is.enabled=Feil kunne ikke byt error.could.not.enable.zone=Kunne ikke aktivere sonen error.installWizard.message=Noe gikk galt. G\u00e5 tilbake og korriger feilene. error.invalid.username.password=Ugyldig brukernavn eller passord +error.login=Ditt brukernavn/passord stemmer ikke overens med v\u00e5re opplysninger. error.mgmt.server.inaccessible=Administrasjonsserver er utilgjengelig. Vennligst pr\u00f8v igjen senere. error.password.not.match=Passordfeltene sammensvarer ikke error.session.expired=Din sesjon har utl\u00f8pt. error.something.went.wrong.please.correct.the.following=Noe gikk galt. Vennligst korrig\u00e9r f\u00f8lgende error.unable.to.reach.management.server=Kan ikke oppn\u00e5 kontakt med administrasjonsserveren +error.unresolved.internet.name=Ditt internettnavn kan ikke l\u00f8ses. force.delete=Tving sletting force.remove=Tving fjerning force.stop=Tving stopp +hint.no.host.tags=Ingen hosttagger funnet +hint.no.storage.tags=Ingen lagringstagger funnet +hint.type.part.host.tag=Skriv inn deler av hosttagg +hint.type.part.storage.tag=Skriv inn deler av lagringstagg ICMP.code=ICMP-kode ICMP.type=ICMP-type image.directory=Bilde-katalog @@ -43,11 +49,16 @@ label.account.lower=konto label.account.name=Kontonavn label.accounts=Kontoer label.acl=ACL +label.acl.id=ACL ID label.acl.name=ACL Navn +label.acl.replaced=ACL erstattet +label.acquire.new.ip=Tilegne ny IP label.action.attach.disk.processing=Tilknytter Disk.... label.action.attach.disk=Tilknytt Disk label.action.attach.iso.processing=Tilknytter ISO.... label.action.attach.iso=Tilknytt ISO +label.action.cancel.maintenance.mode=Avbryt vedlikeholdsmodus +label.action.cancel.maintenance.mode.processing=Avbryter vedlikeholdsmodus.... label.action.change.password=Endre passord label.action.change.service=Endre Tjeneste label.action.change.service.processing=Endrer Tjeneste.... @@ -111,6 +122,9 @@ label.action.destroy.instance.processing=\u00d8delegge instans.... label.action.destroy.instance=\u00d8delegg Instans label.action.destroy.systemvm.processing=Sletter system VM.... label.action.destroy.systemvm=Slett system VM +label.action.detach.disk=Frakoble disk +label.action.detach.iso=Frakoble ISO +label.action.detach.iso.processing=Frakobler ISO.... label.action.disable.account=Deaktiver konto label.action.disable.account.processing=Deaktiverer konto.... label.action.disable.cluster=Deaktiver klyngen @@ -137,6 +151,7 @@ label.action.edit.host=Editer vert label.action.edit.instance=Rediger instans label.action.edit.ISO=Rediger ISO label.action.edit.network=Editer Nettverk +label.action.edit.network.offering=Editer nettverkstilbud label.action.edit.network.processing=Editerer Nettverk.... label.action.edit.pod=Editer Pod label.action.edit.primary.storage=Editer Prim\u00e6rlagring @@ -148,6 +163,8 @@ label.action.enable.account=Aktiver konto label.action.enable.account.processing=Aktiverer konto.... label.action.enable.cluster=Aktiver klynge label.action.enable.cluster.processing=Aktiverer klyngen... +label.action.enable.maintenance.mode=Aktiver vedlikeholdsmodus +label.action.enable.maintenance.mode.processing=Aktiver vedlikeholdsmodus... label.action.enable.nexusVswitch=Aktiver Nexus 1000v label.action.enable.physical.network=Aktiver fysisk nettverk label.action.enable.pod=Aktiver pod @@ -160,6 +177,7 @@ label.action.enable.zone=Aktiver sone label.action.enable.zone.processing=Aktiverer sone... label.action.generate.keys=Generer n\u00f8kler label.action.generate.keys.processing=Genererer n\u00f8kler.... +label.action=Handling label.action.list.nexusVswitch=Liste Nexus 1000v label.action.lock.account=L\u00e5s konto label.action.lock.account.processing=L\u00e5ser konto.... @@ -212,29 +230,42 @@ label.add.accounts=Legg til kontoer label.add.accounts.to=Legg kontoer til label.add.account.to.project=Legg kontoen til prosjektet label.add.ACL=Legg til ACL +label.add.acl.list=Legg til ACL liste +label.add.BigSwitchBcf.device=Legg til BigSwitch BCF kontroller label.add.by=Legg til ved label.add.cluster=Legg til klynge label.add.compute.offering=Legg til systemtilbud label.add.domain=Legg til domene +label.added.network.offering=La til nettverkstilbud +label.added.new.bigswitch.bcf.controller=La til ny BigSwitch BCF kontroller +label.add.egress.rule=Legg til egress regel +label.addes.new.f5=La til ny F5 label.add.F5.device=Legg til F5 enhet label.add.firewall=Legg til brannmurregel +label.add.globo.dns=legg til GloboDNS +label.add.gslb=Legg til GSLB label.add.guest.network=Legg til gjestenettverk label.add.host=Legg til vert label.adding.cluster=Legger til klynge label.adding.failed=Tillegging feilet label.adding.pod=Legger til pod label.adding.processing=Legger til +label.add.ingress.rule=Legg til ingressregel label.adding.succeeded=Tillegging vellykket label.adding=Tillegger label.adding.user=Legger til bruker label.adding.zone=Legger til sone +label.add.intermediate.certificate=Legg til intermediate sertifikat +label.add.internal.lb=Legg til intern LB label.add.ip.range=Legg til IP-rekke -label.add.ldap.account=Legg til LDAP konto +label.add.ldap.account=Legg til LDAP-konto label.add=Legg til +label.add.list.name=ACL listenavn label.add.load.balancer=Legg til lastbalanserer label.add.more=Legg til mer label.add.netScaler.device=Legg til Netscaler enhet label.add.network.ACL=Legg til nettverk ACL +label.add.network.acl.list=Legg til nettverk ACL liste label.add.network.device=Legg til nettverksenhet label.add.network=Legg til nettverk label.add.network.offering=Legg til nettverkstilbud @@ -243,11 +274,14 @@ label.add.new.gateway=Legg til ny gateway label.add.new.NetScaler=Legg til ny NetScaler label.add.new.PA=Legg til ny Palo Alto label.add.new.SRX=Legg til ny SRX +label.add.NiciraNvp.device=Legg til Nvp kontroller +label.add.OpenDaylight.device=Legg til OpenDayLight kontroller label.add.PA.device=Legg til Palo Alto enhet label.add.physical.network=Legg til fysisk nettverk label.add.pod=Legg til pod label.add.port.forwarding.rule=Legg til portvideresendingsregel label.add.primary.storage=Legg til prim\u00e6rlagring +label.add.private.gateway=Legg til privat gateway label.add.region=Legg til region label.add.resources=Legg til ressurser label.add.route=Legg til rute @@ -261,13 +295,18 @@ label.add.static.route=Legg til statisk rute label.add.system.service.offering=Legg til et systemtilbud label.add.template=Legg til mal label.add.to.group=Legg til gruppe +label.add.userdata=Brukerdata label.add.user=Legg til bruker label.add.vlan=Legg til VLAN label.add.vm=Legg til VM label.add.vms=Legg til VMer label.add.vms.to.lb=Legg til VM(er) til lastbalanseringsregel +label.add.vmware.datacenter=Legg til VMware datasenter +label.add.vnmc.device=Legg til VNMC enhet +label.add.vnmc.provider=Legg til VNMC tilbyder label.add.volume=Legg til volum label.add.vpc=Legg til VPC +label.add.vpc.offering=Legg til VPC tilbud label.add.VPN.gateway=Legg til VPN Gateway label.add.vpn.user=Legg til VPN-bruker label.add.vxlan=Legg til VXLAN @@ -278,10 +317,18 @@ label.advanced=Avansert label.advanced.mode=Avansermodus label.advanced.search=Avansert s\u00f8k label.agent.password=Agentpassord +label.agent.port=Agentport +label.agent.state=Agentstatus +label.agent.username=Agentbrukernavn label.agree=Godtar +label.alert.archived=Varsel arkivert +label.alert.deleted=Varsel slettet +label.alert.details=Varseldetaljer label.alert=Varsel +label.algorithm=Algoritme label.allocated=Allokert label.allocation.state=Allokeringsstatus +label.allow=Tillat label.api.key=API-n\u00f8kkel label.api.version=API Versjon label.apply=Bruk @@ -289,10 +336,13 @@ label.app.name=CloudStack label.archive.alerts=Arkiver varsler label.archive=Arkiv label.archive.events=Arkiver hendelser +label.assign.instance.another=Tildel instans til en annen konto label.assign=Tildel +label.assign.vms=Tildel VMer label.attached.iso=Tilknyttet ISO label.author.email=Forfatter e-post label.author.name=Forfatternavn +label.autoscale=Autoskaler label.availability=Tilgjengelighet label.availability.zone=Tilgjengelighetssone label.available.public.ips=Tilgjengelig offentlige IP-adresser @@ -302,6 +352,11 @@ label.bandwidth=B\u00e5ndbredde label.basic=Basis label.basic.mode=Basismodus label.bigswitch.bcf.details=BigSwitch BCF detaljer +label.bigswitch.bcf.nat=BigSwitch BCF NAT aktivert +label.bigswitch.controller.address=BigSwitch BCF kontrolleradresse +label.blade.id=Blad-ID +label.blades=Blad +label.bootable=Botbar label.by.account=Etter Konto label.by.alert.type=Etter varseltype label.by.availability=Etter Tilgjengelighet @@ -313,6 +368,7 @@ label.by.pod=Etter Pod label.by.role=Etter Rolle label.by.start.date=Etter Startdato label.bytes.received=Bytes Mottatt +label.bytes.sent=Bytes sendt label.by.traffic.type=Etter Trafikktype label.by.type=Etter Type label.by.type.id=Etter Type ID @@ -325,12 +381,15 @@ label.certificate=Sertifikat label.change.service.offering=Endre tjenestetilbud label.change.value=Endre verdi label.character=Karakter +label.chassis=Kasse +label.checksum=sjekksum label.cidr=CIDR label.CIDR.list=CIDR liste label.cidr.list=Kilde-CIDR label.cisco.nexus1000v.ip.address=Nexus 1000v IP Addresse label.cisco.nexus1000v.password=Nexus 1000v Passord label.cisco.nexus1000v.username=Nexus 1000v Brukernavn +label.ciscovnmc.resource.details=CiscoVNMC ressursdetaljer label.clean.up=Rydd opp label.clear.list=T\u00f8m liste label.close=Lukk @@ -341,6 +400,7 @@ label.clusters=Klynger label.cluster.type=Klyngetype label.clvm=CLVM label.code=Kode +label.community=Fellesskap label.compute.and.storage=Regnekraft og lagring label.compute=Beregne label.compute.offering=Regnekraftstilbud @@ -348,12 +408,14 @@ label.compute.offerings=Regnekraftstilbud label.configuration=Konfigurering label.configure=Konfigurer label.configure.ldap=Konfigurer LDAP +label.configure.network.ACLs=Konfigurer Nettverksaksesslister label.configure.vpc=Konfigurer VPC label.confirmation=Bekreftelse label.confirm.password=Bekreft passord label.congratulations=Gratulerer\! label.conserve.mode=Konserveringsmodus label.console.proxy=Konsollproxy +label.console.proxy.vm=Konsollproxy VM label.continue.basic.install=Fortsett med enkelt oppsett label.continue=Fortsett label.copying.iso=Kopierer ISO @@ -370,22 +432,31 @@ label.created=Opprettet label.create.project=Opprett prosjekt label.create.template=Opprett mal label.create.VPN.connection=Opprett VPN-tilkobling +label.cross.zones=Kryssoner label.custom.disk.size=Tilpasset Diskst\u00f8rrelse label.daily=Daglig label.data.disk.offering=Datadisktilbud label.date=Dato label.day=Dag label.decline.invitation=Avvis invitasjon +label.dedicate.cluster=Dediker kluster label.dedicated=Dedikert +label.dedicate=Dediker +label.dedicate.host=Dediker host +label.dedicate.zone=Dediker sone label.default=Standardverdi label.default.use=Standard bruk label.default.view=Standardvisning +label.delete.acl.list=Slett ACL liste label.delete.alerts=Slette varsler label.delete.ciscoASA1000v=Slett CiscoASA1000v +label.delete.ciscovnmc.resource=Slett CiscoVNMC ressurs label.delete.events=Slett hendelser label.delete.F5=Slett F5 label.delete.gateway=slett gateway +label.delete.internal.lb=Slett intern LB label.delete.NetScaler=Slett Netscaler +label.delete.OpenDaylight.device=Fjern OpenDaylight kontroller label.delete.PA=Slett Palo Alto label.delete.profile=Slett Profil label.delete.project=Slett prosjekt @@ -396,6 +467,7 @@ label.delete.VPN.gateway=Slett VPN-gateway label.delete.vpn.user=Slett VPN-bruker label.deleting.failed=Sletting feilet label.deleting.processing=Sletter.... +label.deny=Nekt label.description=Beskrivelse label.destination.physical.network.id=Fysisk nettverksid-destinasjon label.destination.zone=Destinasjonssone @@ -406,15 +478,22 @@ label.device.id=Enhets ID label.devices=Enheter label.dhcp=DHCP label.DHCP.server.type=DHCP servertype +label.disable.autoscale=Deaktiver autoskalering label.disabled=Inaktiv +label.disable.network.offering=Deaktiver nettverkstilbud label.disable.provider=Deaktiver tilbyder +label.disable.vnmc.provider=Deatkivert VNMC tilbyder +label.disable.vpc.offering=Deaktivert VPC tilbud label.disable.vpn=Dekativer VPN label.disabling.vpn.access=Deaktiverer VPN Tilgang +label.disbale.vnmc.device=Deaktivert VNMC enhet label.disk.allocated=Disk allokert label.disk.iops.max=Maks IOPS label.disk.iops.min=Min IOPS label.disk.iops.total=IOPS Totalt +label.diskoffering=diskoffering label.disk.offering=Disktilbud +label.disk.provisioningtype=Provisjoneringstype label.disk.read.bytes=Disk lese (Bytes) label.disk.read.io=Disk lese (IO) label.disk.size=Diskst\u00f8rrelse @@ -423,7 +502,9 @@ label.disk.total=Disk Totalt label.disk.volume=Disk Volum label.disk.write.bytes=Disk skrive (Bytes) label.disk.write.io=Disk skrive (IO) +label.display.name=Visningsnavn label.display.text=Visningstekst +label.distributedrouter=DIstribuert router label.dns.1=DNS 1 label.dns.2=DNS 2 label.dns=DNS @@ -436,30 +517,49 @@ label.domain.name=Domenenavn label.domain.router=Domeneruter label.done=Utf\u00f8rt label.drag.new.position=Dra til ny posisjon +label.duration.in.sec=Varighet (i sek.) +label.dynamically.scalable=Dynamisk skalerbar +label.edit.acl.rule=Endre ACL regel label.edit=Editer label.edit.lb.rule=Endre LB-regel label.edit.network.details=Edit\u00e9r nettverksdetaljer label.edit.project.details=Editer prosjektdetaljer +label.edit.region=Editer region label.edit.secondary.ips=Endre sekund\u00e6re IPer label.edit.traffic.type=Endre trafikktype label.edit.vpc=Rediger VPC +label.egress.default.policy=Egress standard policy +label.egress.rule=Egressregel +label.egress.rules=Egressregler label.elastic=Elastisk label.elastic.IP=Elastisk IP label.elastic.LB=Elastisk LB label.email=E-post label.email.lower=epost +label.enable.autoscale=Aktivert autoskalering +label.enable.network.offering=Aktiver nettverkstilbud label.enable.provider=Aktiver tilbyder +label.enable.s3=Aktiver S3-st\u00f8ttet sekund\u00e6rlagring label.enable.swift=Aktiver Swift +label.enable.vnmc.device=Aktivert VNMC enhet +label.enable.vnmc.provider=Aktivert VNMC tilbyder +label.enable.vpc.offering=Aktiver VPC tilbud label.enable.vpn=Aktiver VPN label.enabling.vpn.access=Aktiverer VPN-tilgang label.enabling.vpn=Aktiverer VPN label.end.IP=Slutt-IP label.end.port=Sluttport +label.end.vlan=Slutt VLAN +label.end.vxlan=Slutt VXLAN label.enter.token=Skriv inn koden +label.error.code=Feilkode label.error=Feil label.error.upper=ERROR label.esx.host=ESX/ESXi vert +label.event=Hendelse +label.every=Hver label.example=Eksempel +label.extractable.lower=Nedlastbar label.extractable=Utpakkbar label.f5.details=F5 detaljer label.f5=F5 @@ -470,18 +570,35 @@ label.firewall=Brannmur label.first.name=Fornavn label.firstname.lower=fornavn label.format=Format +label.format.lower=format label.friday=Fredag label.full=Full label.full.path=Full sti label.general.alerts=Generelle varsler +label.globo.dns.configuration=GloboDNS-konfigurasjon +label.globo.dns=GloboDNS label.gluster.volume=Volum label.go.step.2=G\u00e5 til steg 2 label.go.step.3=G\u00e5 til steg 3 label.go.step.4=G\u00e5 til steg 4 label.go.step.5=G\u00e5 til steg 5 label.gpu=CPU +label.group.by.account=Grupper p\u00e5 konto +label.group.by.cluster=Grupper p\u00e5 kluster +label.group.by.pod=Grupper p\u00e5 pod +label.group.by.zone=Grupper p\u00e5 sone label.group=Gruppe label.group.optional=Gruppe (Valgfritt) +label.gslb.assigned.lb.more=Tildel mer lastbalansering +label.gslb.assigned.lb=Tildelt lastbalansering +label.gslb.delete=Slett GSLB +label.gslb.details=GSLB detaljer +label.gslb.domain.name=GSLB domenenavn +label.gslb=GSLB +label.gslb.lb.details=Lastbalanseringsdetaljer +label.gslb.lb.remove=Fjern lastbalansering fra denne GSLB +label.gslb.lb.rule=Lastbalanseringsregel +label.gslb.service=GSLB tjeneste label.guest.cidr=Gjest CIDR label.guest.end.ip=Gjest slutt-IP label.guest=Gjest @@ -493,19 +610,27 @@ label.guest.start.ip=Gjest start-IP label.guest.traffic=Gjestetrafikk label.guest.type=Gjestetype label.ha.enabled=HA Aktivert +label.health.check=Helsesjekk label.help=Hjelp +label.hide.ingress.rule=Skjul ingressregel label.hints=Hint label.home=Hjem label.host.alerts=Vertsvarsler label.host.MAC=Verts MAC label.host.name=Vertsnavn label.hosts=Verter +label.host.tags=Vertsknagger label.host=Vert label.hourly=Hver time label.hvm=HVM +label.hypervisor=Hypervisor +label.hypervisors=Hypervisors +label.hypervisor.type=Hypervisor type +label.hypervisor.version=Hypervisor versjon label.id=ID label.info=Info label.info.upper=INFO +label.ingress.rule=Ingressregel label.installWizard.addClusterIntro.subtitle=Hva er en klynge? label.installWizard.addClusterIntro.title=La oss legge til en klynge label.installWizard.addHostIntro.subtitle=Hva er en vert? @@ -525,9 +650,11 @@ label.installWizard.title=Hei og velkommen til CloudStack&\#8482 label.instance=Instans label.instance.limits=Instans Begrensninger label.instance.name=Instans Navn +label.instance.port=Instansport label.instances=Instanser label.internal.dns.1=Intern DNS 1 label.internal.dns.2=Intern DNS 2 +label.internal.lb.details=Intern LB detaljer label.internal.name=Internt navn label.introduction.to.cloudstack=Introduksjon til CloudStack&\#8482 label.invitations=Invitasjoner @@ -546,12 +673,18 @@ label.ipv4.cidr=IPv4 CIDR label.ipv4.dns1=IPv4 DNS1 label.ipv4.dns2=IPv4 DNS2 label.ipv4.end.ip=IPv4 Slutt IP +label.ipv4.netmask=IPv4 nettmaske label.ipv4.start.ip=IPv4 Start IP label.ipv6.address=IPv6 IP Adresse +label.ipv6.CIDR=IPv6 CIDR +label.ipv6.dns1=IPv6 DNS1 +label.ipv6.dns2=IPv6 DNS2 label.ipv6.end.ip=IPv6 Slutt IP label.ipv6.gateway=IPv6 Gateway label.ipv6.start.ip=IPv6 Start IP +label.iscsi=iSCSI label.is.default=Er standard +label.iso.boot=ISO Boot label.iso=ISO label.isolated.networks=Isolerte nettverk label.isolation.method=Isolasjonsmetode @@ -560,20 +693,28 @@ label.is.redundant.router=Redundant label.is.shared=Er delt label.is.system=Er system label.item.listing=Elementlisting +label.japanese.keyboard=Japansk-tastatur label.keep=Behold +label.keep.colon=Behold\: +label.keyboard.language=Tastaturspr\u00e5k +label.keyboard.type=Tastaturtype label.key=N\u00f8kkel label.kvm.traffic.label=KVM trafikketikett +label.label=Etikett label.lang.arabic=Arabisk label.lang.brportugese=Brasiliansk Portugisisk label.lang.catalan=Katalansk label.lang.chinese=Kinesisk (Forenklet) +label.lang.dutch=Dutch (Nederland) label.lang.english=Engelsk label.lang.french=Fransk label.lang.german=Tysk +label.lang.hungarian=Ungarsk label.lang.italian=Italiensk label.lang.japanese=Japanesisk label.lang.korean=Koreansk label.lang.norwegian=Norsk +label.lang.polish=Polsk label.lang.russian=Russisk label.lang.spanish=Spansk label.last.name=Etternavn @@ -589,29 +730,40 @@ label.ldap.configuration=LDAP Konfigurering label.ldap.group.name=LDAP Gruppe label.ldap.port=LDAP port label.load.balancer=Lastbalanserer +label.load.balancer.type=Lastbalanseringstype label.load.balancing=Lastbalansering label.load.balancing.policies=Regler for lastbalansering label.loading=Laster label.local=Lokal +label.local.storage.enabled.system.vms=Aktiver lokal lagring for SystemVMer label.local.storage=Lokal lagring +label.login=Logg inn label.logout=Logg ut label.lun=LUN label.LUN.number=LUN \# label.make.project.owner=Gj\u00f8r konto prosjekteier +label.make.redundant=Gj\u00f8r redundant label.manage=Administrer label.management=Administrasjon label.management.ips=Administrasjons IP-adresser label.manage.resources=Behandle ressurser +label.max.cpus=Maks CPU kjerner label.maximum=Maksimum label.max.instances=Maks Instanser +label.max.memory=Maks minne (MiB) +label.max.networks=Maks nettverk +label.max.primary.storage=Maks prim\u00e6r (GiB) label.max.public.ips=Maks offentlige IPer +label.max.secondary.storage=Maks sekund\u00e6r (GiB) label.max.snapshots=Maks \u00f8yeblikksbilder label.max.templates=Maks maler label.max.vms=Maks bruker-VMer label.max.volumes=Maks volumer +label.max.vpcs=Maks VPCs label.may.continue=Du kan n\u00e5 fortsette. label.md5.checksum=MD5 sjekksum label.memory.allocated=Minne allokert +label.memory.limits=Minnebegrensning (MiB) label.memory.mb=Minne (i MB) label.memory=Minne label.memory.total=Minne totalt @@ -623,6 +775,7 @@ label.menu.all.instances=Alle instanser label.menu.configuration=Konfigurering label.menu.domains=Domener label.menu.events=Hendelser +label.menu.global.settings=Globale innstillinger label.menu.infrastructure=Infrastruktur label.menu.instances=Instanser label.menu.ipaddresses=IP-adresser @@ -647,16 +800,22 @@ label.menu.system.vms=System VMer label.menu.templates=Maler label.menu.virtual.resources=Virtuelle ressurser label.menu.volumes=Volumer +label.menu.vpc.offerings=VPC tilbud label.migrate.instance.to.host=Migrer instansen til en annen vert label.migrate.instance.to=Migrer instans til label.migrate.instance.to.ps=Migrer instansen til en annen sekund\u00e6r lagring. +label.migrate.lb.vm=Migrer LB VM label.migrate.router.to=Migrer Ruter til label.migrate.systemvm.to=Migrer System VM til label.migrate.to.host=Migrer til vert label.migrate.to.storage=Migrer til lagring +label.migrate.volume=Migrer volum label.migrate.volume.to.primary.storage=Migrer volumet til en annen prim\u00e6rlagring. label.minimum=Minimum label.min.instances=Min Instanser +label.min.past.the.hr=minutter etter time +label.minutes.past.hour=minutt(er) etter time +label.mode=Modus label.monday=Mandag label.monthly=M\u00e5nedlig label.more.templates=Flere maler @@ -670,12 +829,15 @@ label.my.templates=Mine maler label.name.lower=Navn label.name=Navn label.name.optional=Navn (Valgfritt) +label.na=N/A label.nat.port.range=NAT portrekke label.netmask=Nettmaske label.netscaler.details=NetScaler detaljer label.netScaler=NetScaler label.network.ACL=Nettverk ACL label.network.ACLs=Nettverk ACLer +label.network.addVM=Legg nettverk til VM +label.network.cidr=Nettverk CIDR label.network.desc=Nettverksbeskrivelse label.network.device=Nettverksenhet label.network.device.type=Type nettverksenhet @@ -684,9 +846,11 @@ label.network.domain.text=Nettverksdomene label.network.id=Nettverks ID label.networking.and.security=Nettverk og sikkerhet label.network.label.display.for.blank.value=Bruk standard gateway +label.network.limits=Nettverksbegrensninger label.network.name=Nettverksdame label.network=Nettverk label.network.offering=Nettverkstilbud +label.network.read=Nettverk les label.networks=Nettverk label.new=Ny label.new.password=Nytt passord @@ -697,24 +861,41 @@ label.nexusVswitch=Nexus 1000v label.nfs=NFS label.nfs.server=NFS Server label.nfs.storage=NFS Lagring +label.nic.adapter.type=NIC adaptertype label.nicira.nvp.details=Nicira NVP detaljer label.nics=NICer label.no.data=Ingen data \u00e5 vise +label.no.grouping=(ingen gruppering) +label.no.isos=Ingen tilgjengelige ISOer +label.no.items=Ingen tilgjengelige elementer label.no=Nei label.none=Ingen +label.no.security.groups=Ingen tilgjengelige sikkerhetsgrupper label.not.found=Ikke funnet label.no.thanks=Nei, takk label.notifications=Notifikasjoner label.number.of.clusters=Antall klynger +label.number.of.cpu.sockets=Totalt antall CPU-sockets +label.number.of.hosts=Antall verter label.number.of.pods=Antall pods +label.number.of.system.vms=Antall System VMer label.number.of.virtual.routers=Antall virtuelle rutere label.number.of.zones=Antall soner +label.num.cpu.cores=\# av CPU-kjerner +label.ocfs2=OCFS2 label.offer.ha=Tilby HA label.ok=OK +label.opendaylight.controllerdetail=OpenDaylight kontrollerdetaljer +label.opendaylight.controller=OpenDaylight kontroller +label.opendaylight.controllers=OpenDaylight kontrollere +label.openDaylight=OpenDaylight label.optional=Valgfritt label.order=Rekkef\u00f8lge label.os.type=OS-type +label.other=Andre label.ovs=OVS +label.owner.account=Eierkonto +label.owner.domain=Eierdomene label.palo.alto.details=Palo Alto detaljer label.PA=Palo Alto label.passive=Passiv @@ -776,29 +957,51 @@ label.rbd.monitor=Ceph monitor label.rbd.pool=Ceph pool label.rbd=RBD label.reboot=Restart +label.recover.vm=Gjenopprett VM label.redundant.router.capability=Redundant ruter label.redundant.router=Redundant ruter label.redundant.state=Redundant tilstand +label.redundant.vpc=Redundant VPC +label.refresh.blades=Oppdater blad(er) label.refresh=Oppfrisk +label.region.details=Regiondetaljer label.region=Region label.reinstall.vm=Reinstaller VM label.related=Relaterte +label.release.dedicated.cluster=Frigj\u00f8r dedikert kluster +label.release.dedicated.host=Frigj\u00f8r dedikert host +label.release.dedicated.zone=Frigj\u00f8r dedikert sone label.remind.later=P\u00e5minn meg senere label.remove.ACL=Fjern ACL +label.remove.egress.rule=Fjern egressregel label.remove.from.load.balancer=Fjerner instans fra lastbalanserer +label.remove.ingress.rule=Fjern ingressregel label.remove.ip.range=Fjern IP-rekke label.remove.ldap=Fjern LDAP +label.remove.network.offering=Fjern nettverkstilbud label.remove.pf=Fjern portvideresendingsregel +label.remove.project.account=Fjern konto fra prosjekt label.remove.region=Fjern region label.remove.rule=Fjern regel label.remove.static.nat.rule=Fjern statisk NAT-regel label.remove.static.route=Fjern statisk rute +label.remove.vm.from.lb=Fjern VM fra lastbalanseringsregel +label.remove.vmware.datacenter=Fjern VMware datasenter label.remove.vpc=fjern VPC +label.remove.vpc.offering=Fjern VPC tilbud label.removing=Fjerner label.removing.user=Fjerner Bruker +label.reource.id=Ressurs ID +label.replace.acl=Erstatt ACL label.required=P\u00e5krevd +label.requires.upgrade=Krever oppgradering label.reserved.system.ip=Reservert System IP label.reset.VPN.connection=Resett VPN-tilkobling +label.resize.new.offering.id=Nytt tilbud +label.resize.new.size=Ny st\u00f8rrelse (GB) +label.resize.shrink.ok=Krympe OK +label.resource.limits=Ressursbegrensninger +label.resource.name=Ressursnavn label.resource=Ressurs label.resources=Ressurser label.restart.network=Nettverksomstart @@ -808,12 +1011,19 @@ label.restore=Gjenopprett label.review=Gjennomg\u00e5 label.revoke.project.invite=Tilbakekall invitasjonen label.role=Rolle +label.root.certificate=Rootsertifikat +label.root.disk.controller=Root diskkontroller +label.root.disk.offering=Root disktilbud label.root.disk.size=Rotdiskst\u00f8rrelse +label.router.vm.scaled.up=RuterVM skalert opp label.routing=Ruting +label.rule.number=Regelnummer label.rules=Regler label.running.vms=Kj\u00f8rende VMer +label.s3.access_key=Aksessn\u00f8kkel label.s3.nfs.path=S3 NFS Sti label.s3.nfs.server=S3 NFS Server +label.s3.secret_key=Hemmelig n\u00f8kkel label.s3.use_https=Bruk HTTPS label.saturday=L\u00f8rdag label.save.and.continue=Lagre og fortsett @@ -823,6 +1033,7 @@ label.search=S\u00f8k label.secondary.ips=Sekund\u00e6re IPer label.secondary.storage=Sekund\u00e6rlagring label.secondary.storage.vm=Sekund\u00e6rlagring VM +label.secret.key=Hemmelig n\u00f8kkel label.security.group.name=Sikkerhetsgruppenavn label.security.group=Sikkerhetsgruppe label.security.groups=Sikkerhetsgrupper @@ -844,31 +1055,44 @@ label.service.offering=Tjenestetilbud label.service.state=Tjeneste Status label.services=Tjenester label.session.expired=Sesjon utl\u00f8pt +label.set.default.NIC=Sett som standard NIC label.settings=Innstillinger label.setup.network=Nettverksoppsett label.setup=Oppsett label.setup.zone=Soneoppsett label.set.up.zone.type=Oppsett av sonetype label.shared=Delt +label.show.advanced.settings=VIs avanserte instillinger +label.show.ingress.rule=Vis ingressregel label.shutdown.provider=Steng tilbyder +label.simplified.chinese.keyboard=Forenklet kinesisk-tastatur +label.site.to.site.VPN=Site-to-site VPN label.size=St\u00f8rrelse label.skip.guide=Jeg har brukt CloudStack tidligere. Hopp over denne veiviseren label.smb.domain=SMB Domene label.smb.password=SMB Passord label.smb.username=SMB Brukernavn +label.snapshot.s=\u00d8yeblikksbilde(r) label.snapshots=\u00d8yeblikksbilder label.snapshot=\u00d8yeblikksbilde label.SNMP.port=SNM Port label.sockets=CPU Sokkel +label.source.ip.address=Kilde IP-adresse label.source.nat=Kilde NAT +label.source.nat.supported=SourceNAT st\u00f8ttet +label.source.port=Kildeport label.specify.IP.ranges=Spesifiser IP-rekker label.specify.vlan=Spesifiser VLAN label.specify.vxlan=Spesifiser VXLAN label.SR.name=SR navnelapp label.srx.details=SRX detaljer label.srx=SRX +label.standard.us.keyboard=Standard (Amerikansk) tastatur label.start.IP=Start-IP +label.start.lb.vm=Start LB VM label.start.port=Start port +label.start.vlan=Start VLAN +label.start.vxlan=Start VXLAN label.state=Status label.static.nat.enabled=Statisk NAT aktivert label.static.nat=Statistk NAT @@ -889,6 +1113,9 @@ label.stickiness=Klebrighet label.sticky.domain=Domene label.sticky.expire=Utl\u00f8per label.sticky.length=Lengde +label.sticky.mode=Modus +label.sticky.tablesize=Tabellst\u00f8rrelse +label.stop.lb.vm=Stop LB VM label.stopped.vms=Stoppede VMer label.stop=Stopp label.storage=Lagring @@ -904,6 +1131,8 @@ label.suspend.project=Suspender prosjekt label.switch.type=Svitsjtype label.system.capacity=Systemkapasistet label.system.offering=Systemtilbud +label.system.vm.details=SystemVM-detaljer +label.system.vm.scaled.up=SystemVM skalert opp label.system.vms=System VMer label.system.vm=System VM label.tagged=Tagget @@ -924,6 +1153,7 @@ label.total.CPU=Totalt CPU label.total.hosts=Totalt Verter label.total.memory=Totalt minne label.total.storage=Totalt lagring +label.total.virtual.routers.upgrade=Totalt antall virtuelle routere som trenger oppgradering label.traffic.label=Trafikketikett label.traffic.types=Trafikktyper label.traffic.type=Trafikktype @@ -931,17 +1161,22 @@ label.tuesday=Tirsdag label.type.id=Type ID label.type.lower=type label.type=Type +label.ucs=UCS +label.uk.keyboard=UK-tastatur +label.unavailable=Utilgjengelig label.unlimited=Ubegrenset label.update.project.resources=Oppdater prosjektressurser label.update.ssl.cert= SSL-sertifikat label.update.ssl= SSL-sertifikat label.updating=Oppdaterer label.upgrade.required=Oppgradering er p\u00e5krevd +label.upgrade.router.newer.template=Oppgrader ruter til nyere mal label.upload=Last opp label.upload.volume=Last opp volum label.url=URL label.used=Brukt label.user=Bruker +label.user.data=Brukerdata label.username=Brukernavn label.username.lower=brukernavn label.users=Brukere @@ -950,12 +1185,19 @@ label.use.vm.ips=Bruk VM IPer label.value=Verdi label.vcdcname=vCenter DC navn label.vcenter.cluster=vCenter Klynge +label.vcenter.datacenter=vCenter Datacenter +label.vcenter.datastore=vCenter Datastore label.vcenter.host=vCenter Vert label.vcenter.password=vCenter passord label.vcenter.username=vCenter brukernavn label.vcenter=vcenter label.vcipaddress=vCenter IP-adresse label.version=Versjon +label.vgpu.max.resolution=Maks oppl\u00f8sning +label.vgpu.max.vgpu.per.gpu=VGPUs per GPU +label.vgpu.type=vGPU type +label.vgpu=VGPU +label.vgpu.video.ram=Video RAM label.view.all=Vis alle label.view.console=Se konsoll label.viewing=Viser @@ -965,6 +1207,10 @@ label.view=Vis label.virtual.machines=Virtuelle Maskiner label.virtual.machine=Virtuell Maskin label.virtual.network=Virtuelt-nettverk +label.virtual.routers.group.account=Virtuelle rutere gruppert p\u00e5 konto +label.virtual.routers.group.cluster=Virtuelle rutere gruppert p\u00e5 kluster +label.virtual.routers.group.pod=Virtuelle rutere gruppert p\u00e5 pod +label.virtual.routers.group.zone=Virtuelle rutere gruppert p\u00e5 sone label.virtual.routers=Virtuelle rutere label.virtual.router=Virtuell ruter label.vlan.id=VLAN/VNI ID @@ -975,28 +1221,45 @@ label.vm.destroy=Destruer label.vm.display.name=Visningsnavn for VM label.VMFS.datastore=VMFS lagringsomr\u00e5de label.vmfs=VMFS +label.vm.id=VM ID label.vm.ip=VM IP Adresse label.vm.name=VM-navn +label.vm.password=Passord til VM er label.vm.reboot=Restart +label.vmsnapshot.parentname=Forelder label.vmsnapshot.type=Type label.vmsnapshot=VM \u00d8yeblikksbilder label.vm.start=Start +label.vm.state=VM-status label.vm.stop=Stopp label.vms=VMer +label.vmware.datacenter.id=VMware datasenter ID +label.vmware.datacenter.name=VMware datasenternavn +label.vmware.datacenter.vcenter=VMware datasenter vcenter label.vmware.traffic.label=VMware trafikketikett label.vnet.id=VLAN/VNI ID label.vnet=VLAN/VNI +label.vnmc.devices=VNMC enheter +label.vnmc=VNMC label.volgroup=Volumgruppe +label.volume.details=Volumdetaljer label.volume.limits=Volumbegrensninger +label.volume.migrated=Volum migrert label.volume.name=Volumnavn label.volumes=Volumer label.volume=Volum +label.vpc.distributedvpcrouter=Distribuert VPC router label.vpc.id=VPC ID +label.VPC.limits=VPC begrensninger +label.vpc.offering.details=VPC tilbudsdetaljer +label.vpc.offering=VPC tilbud label.VPC.router.details=VPC ruterdetaljer label.vpc=VPC label.VPN.connection=VPN-tilkobling label.VPN.gateway=VPN Gateway label.vpn=VPN +label.vswitch.name=vSwitch navn +label.vSwitch.type=vSwitch type label.vxlan.id=VXLAN ID label.vxlan.range=VXLAN-rekke label.vxlan=VXLAN @@ -1009,11 +1272,15 @@ label.weekly=Ukentlig label.welcome.cloud.console=Velkommen til administrasjonskonsollet label.welcome=Velkommen label.what.is.cloudstack=Hva er CloudStack&\#8482? +label.xenserver.tools.version.61.plus=Original XS versjon er 6.1\\+ +label.Xenserver.Tools.Version61plus=Original XS versjon er 6.1\\+ label.xenserver.traffic.label=XenServer trafikketikett label.yes=Ja +label.zone.dedicated=Dedikert sone label.zone.details=Sonedetaljer label.zone.id=Sone ID label.zone.lower=Sone +label.zone.name=Sonenavn label.zone=Sone label.zones=Soner label.zone.step.1.title=Steg 1\: Velg et nettverk @@ -1048,6 +1315,7 @@ message.action.disable.nexusVswitch=Vennligst bekreft at du \u00f8nsker \u00e5 d message.action.disable.physical.network=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere dette fysiske nettverket. message.action.disable.pod=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne poden message.action.disable.zone=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne sonen. +message.action.downloading.template=Laster ned mal. message.action.download.iso=Vennligst bekreft at du \u00f8nsker \u00e5 laste ned denne ISO. message.action.download.template=Vennligst bekreft at du \u00f8nsker \u00e5 laste ned denne malen. message.action.enable.cluster=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne klyngen. @@ -1074,6 +1342,7 @@ message.add.load.balancer.under.ip=Lastbalanseringsregelen har blitt lagt til un message.add.VPN.gateway=Vennligst bekreft at du \u00f8nsker \u00e5 legge til en VPN Gateway message.alert.state.detected=Alarm oppdaget message.change.password=Vennligst endre ditt passord +message.configure.ldap=Bekreft at du \u00f8nsker \u00e5 konfigurere LDAP. message.configuring.guest.traffic=Konfigurerer gjestetrafikk message.configuring.physical.networks=Konfigurer fysisk nettverk message.configuring.public.traffic=Konfigurerer offentlig trafikk @@ -1084,10 +1353,20 @@ message.confirm.delete.NetScaler=Vennligst bekreft at du \u00f8nsker \u00e5 slet message.confirm.delete.PA=Vennligst bekreft at du vil slette Palo Alto message.confirm.delete.SRX=Vennligst bekreft at du \u00f8nsker \u00e5 slette SRX message.confirm.destroy.router=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne denne ruteren +message.confirm.disable.network.offering=Er du sikker p\u00e5 at du vil deaktivere dette nettverkstilbudet? message.confirm.disable.provider=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne tilbyderen +message.confirm.disable.vpc.offering=Er du sikker p\u00e5 at du vil deaktivere dette VPC tilbudet? +message.confirm.enable.network.offering=Vil du aktivere dette nettverkstilbudet? message.confirm.enable.provider=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne tilbyderen message.confirm.join.project=Vennligst bekreft at du \u00f8nsker \u00e5 delta i dette prosjektet. +message.confirm.remove.network.offering=Er du sikker p\u00e5 at du vil fjerne dette nettverkstilbudet? +message.confirm.remove.vpc.offering=Er du sikker p\u00e5 at du vil fjerne dette VPC tilbudet? +message.confirm.scale.up.router.vm=\u00d8nsker du \u00e5 skalere opp denne Ruter-VMen? +message.confirm.scale.up.system.vm=\u00d8nsker du \u00e5 skalere opp denne system VM? message.confirm.shutdown.provider=Vennligst bekreft at du \u00f8nsker \u00e5 stenge denne tilbyderen +message.confirm.start.lb.vm=Vennligst bekreft at du vil starte LB VM +message.confirm.stop.lb.vm=Vennligst bekreft at du vil stoppe LB VM +message.copy.template.confirm=\u00d8nsker du \u00e5 kopiere malen? message.create.template=Er du sikker p\u00e5 at du \u00f8nsker \u00e5 lage malen? message.creating.cluster=Oppretter klynge message.creating.guest.network=Oppretter gjestenettverk @@ -1095,6 +1374,7 @@ message.creating.physical.networks=Oppretter fysiske nettverk message.creating.pod=Oppretter pod message.creating.primary.storage=Oppretter prim\u00e6rlagring message.creating.secondary.storage=Oppretter sekund\u00e6rlagring +message.creating.systemVM=Oppretter system-VMer (dette kan ta litt tid) message.creating.zone=Oppretter sone message.decline.invitation=Er du sikker p\u00e5 du \u00f8nsker \u00e5 avvise denne prosjektinvitasjonen? message.delete.gateway=Vennligst bekreft at du \u00f8nsker \u00e5 slette gateway @@ -1104,11 +1384,21 @@ message.delete.VPN.connection=Vennligst bekreft at du \u00f8nsker \u00e5 slette message.detach.disk=Er du sikker p\u00e5 at du \u00f8nsker \u00e5 frakoble denne disken? message.disable.user=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne bruker. message.disable.vpn=Er du sikker p\u00e5 at du vil deaktivere VPN? +message.disabling.network.offering=Deaktiverer nettverkstilbud +message.disabling.vpc.offering=Deaktiverer VPC tilbud +message.disallowed.characters=Ikke tillatte tegn\: \\<\\,\\> +message.enable.account=Bekreft at du \u00f8nsker \u00e5 aktivere denne kontoen. +message.enabled.vpn.ip.sec=Din IPSec delte n\u00f8kkel (psk) er message.enable.user=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne bruker. message.enable.vpn=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere VPN-tilgang for denne IP-adressen +message.enabling.network.offering=Aktiver nettverkstilbud +message.enabling.vpc.offering=Aktiverer VPC tilbud message.enabling.zone=Aktiverer sonen +message.enabling.zone.dots=Aktiverer sone... +message.enter.seperated.list.multiple.cidrs=Skriv inn en kommaseparert liste over CIDRs hvis du har mer enn en message.enter.token=Vennligst skriv inn koden du fikk i invitasjonsmailen. message.generate.keys=Vennligst bekreft at du \u00f8nsker \u00e5 generere nye n\u00f8kler for denne bruker. +message.gslb.delete.confirm=Vennligst bekreft at du vil slette denne GSLB message.installWizard.click.retry=Klikk p\u00e5 knappen for \u00e5 pr\u00f8ve oppstart p\u00e5 nytt. message.installWizard.tooltip.addCluster.name=Klyngenavnet. Dette kan v\u00e6re hva som helst og er ikke benyttet av CloudStack. message.installWizard.tooltip.addHost.hostname=DNS-navnet eller IP-adressen til verten. @@ -1129,6 +1419,7 @@ message.installWizard.tooltip.configureGuestTraffic.description=En beskrivelse a message.installWizard.tooltip.configureGuestTraffic.guestGateway=Gatewayen gjestene skal bruke message.installWizard.tooltip.configureGuestTraffic.guestNetmask=Nettmasken benyttet p\u00e5 subnettet gjestene skal bruke message.installWizard.tooltip.configureGuestTraffic.name=Et navn for nettverket +message.instance.scaled.up.confirm=\u00d8nsker du \u00e5 skalere opp denne instancen? message.instanceWizard.noTemplates=Du har ingen maler tilgjengelig. Vennligst legg til en kompatibel mal og kj\u00f8r instansveiviseren. message.ip.address.changed=Din IP-adresse kan ha endret seg. \u00d8nsker du \u00e5 oppdatere visningen? Merk at detaljvisningen vil i s\u00e5fall lukkes. message.iso.desc=Diskimage som inneholder data etter oppstartsbar media for OS @@ -1139,6 +1430,9 @@ message.migrate.instance.to.ps=Vennligst bekreft at du \u00f8nsker \u00e5 migrer message.migrate.router.confirm=Vennligst bekreft verten du \u00f8nsker \u00e5 migrere ruteren til\: message.migrate.systemvm.confirm=Vennligst bekreft verten du \u00f8nsker \u00e5 migrere system VM til\: message.migrate.volume=Vennligst bekreft at du \u00f8nsker \u00e5 migrere volumet til en annen prim\u00e6rlagring. +message.network.addVM.desc=Vennligst spesifiser nettverket du vil legge til denne VMen. Et nytt NIC vil bli lagt til for dette nettverket. +message.network.addVMNIC=Vennligst bekreft at du vil legge til ett nytt NIC for dette nettverket. +message.no.host.available=Ingen hoster tilgjengelig for migrering message.no.projects.adminOnly=Du har ingen prosjekter.
Vennligst be din administrator om \u00e5 opprette et nytt prosjekt. message.no.projects=Du har ingen prosjekter.
Vennligst opprett et nytt fra prosjektseksjonen. message.pending.projects.1=Du har f\u00f8lgende prosjektinvitasjoner\: @@ -1150,6 +1444,9 @@ message.please.select.a.different.public.and.management.network.before.removing= message.please.select.networks=Vennligst velg nettverk for din VM message.please.wait.while.zone.is.being.created=Vennlist vent mens din sone opprettes. Dette kan ta noe tid... message.project.invite.sent=Invitasjon sendt til bruker. De vil bli lagt til prosjektet s\u00e5 snart de har akseptert invitasjonen +message.recover.vm=Vennligst bekreft at du \u00f8nsker \u00e5 gjenopprette denne VMen. +message.reinstall.vm=Advarsel\: Fortsett med forsiktighet. Dette vil reinstallere VMen fra malen; data p\u00e5 rot-disken vil forsvinne. Ekstra datavolumer; hvis noen, vil ikke bli r\u00f8rt. +message.remove.ldap=Er du sikker p\u00e5 at du vil slette LDAP-konfigurasjonen? message.remove.region=Er du sikker p\u00e5 at du vil fjerne denne regionen fra denne administrasjonsserveren? message.remove.vpc=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne VPC message.reset.password.warning.notPasswordEnabled=Denne malen vil bli opprettet uten passord @@ -1157,27 +1454,54 @@ message.reset.password.warning.notStopped=Din instans m\u00e5 stoppes f\u00f8r m message.reset.VPN.connection=Vennligst bekreft at du \u00f8nsker \u00e5 resette VPN-tilkobling message.restart.mgmt.server=Vennlist restart administrajonsserveren(e) din(e) for at de nye innstillingene skal tr\u00e5 i kraft. message.restart.vpc=Vennligst bekreft at du \u00f8nsker \u00e5 restarte VPC +message.restoreVM=Vil du gjenopprette denne VMen? message.select.instance=Vennligst velg en instans. message.select.iso=Vennligst velg en ISO for din nye virtuelle instans. message.select.item=Vennligst velg et element message.select.security.groups=Vennligst velg sikkerhetsgruppe(r) for din nye VM message.select.template=Vennligst velg en mal for din nye virtuelle instans. +message.set.default.NIC.manual=Vennligst oppdater standard-NIC manuelt p\u00e5 VMen n\u00e5. +message.set.default.NIC=Vennligst bekreft at du vil gj\u00f8re dette NIC til standard for denne VM. message.setup.successful=Oppsettet av nettskyen er vellykket\! message.specify.url=Vennligst spesifiser URL message.suspend.project=Er du sikker du \u00f8nsker \u00e5 pause dette prosjektet? +message.systems.vms.ready=System-VMer klare. +message.template.copying=Malen blir kopiert. message.template.desc=OS-image som kan brukes til \u00e5 starte VMer message.tooltip.pod.name=Et navn for denne pod. message.tooltip.zone.name=Et navn for denne sonen. +message.validate.creditcard=Vennligst oppgi et gyldig kredittkortnummer. +message.validate.date.ISO=Vennligst skriv inn en gyldig dato (ISO). +message.validate.date=Vennligst skriv inn en gyldig dato. +message.validate.digits=Vennligst skriv inn kun tall. +message.validate.email.address=Vennligst skriv inn en gyldig e-postadresse. +message.validate.equalto=Vennligst skriv inn den samme verdien igjen. +message.validate.fieldrequired=Dette feltet er p\u00e5krevd. +message.validate.fixfield=Vennligst fiks dette feltet. message.validate.invalid.characters=Ugyldige tegn funnet; vennligst korriger. +message.validate.maxlength=Vennligst ikke skriv inn mer enn {0} tegn. +message.validate.max=Skriv en verdi mindre enn eller lik {0}. +message.validate.minlength=Vennligst skriv inn minst {0} tegn. +message.validate.number=Vennligst skriv inn et gyldig nummer. +message.validate.range.length=Vennligst skriv inn en verdi som er mellom {0} og {1} tegn langt. +message.validate.range=Skriv en verdi mellom {0} og {1}. +message.validate.URL=Vennligst skriv inn en gyldig URL. message.vm.create.template.confirm=Oppretting av Mal vil restarte VM automatisk. message.vm.review.launch=Vennligst vurder f\u00f8lgende informasjon og bekreft at din virtuelle instans er korrekt f\u00f8r kj\u00f8ring message.you.must.have.at.least.one.physical.network=Du trenger minst ett fysisk nettverk +message.your.cloudstack.is.ready=Din CloudStack er klar\! message.Zone.creation.complete=Opprettelsen av sonen utf\u00f8rt message.zone.creation.complete.would.you.like.to.enable.this.zone=Soneopprettelse fullf\u00f8rt. \u00d8nsker du \u00e5 aktivere denne sonen? message.zone.no.network.selection=Sonen du har valgt har ingen mulighet for valg av nettverk. +message.zone.step.1.desc=Vennligst en nettverksmodell for din sone. +message.zone.step.2.desc=Vennligst skriv inn f\u00f8lgende informasjon for \u00e5 legge til en ny sone +messgae.validate.min=Skriv en verdig st\u00f8rre enn eller lik {0}. +mode=Modus +network.rate=Nettverksrate notification.reboot.instance=Omstart av instans notification.start.instance=Start instans notification.stop.instance=Stopp instans +side.by.side=Side ved side state.Accepted=Akseptert state.Active=Aktiv state.Allocated=Allokert @@ -1188,6 +1512,7 @@ state.Completed=Utf\u00f8rt state.Creating=Oppretter state.Declined=Avvist state.Destroyed=Destruert +state.detached=Frakoblet state.Disabled=Inaktiv state.Enabled=Aktivert state.Error=Feil @@ -1200,5 +1525,6 @@ state.Starting=Starter state.Stopped=Stoppet state.Stopping=Stopper state.Suspended=Pauset +title.upload.volume=Last opp volum ui.listView.filters.all=Alle ui.listView.filters.mine=Mine diff --git a/client/WEB-INF/classes/resources/messages_pt_BR.properties b/client/WEB-INF/classes/resources/messages_pt_BR.properties index 78d2b6bdc65..9b341eccc64 100644 --- a/client/WEB-INF/classes/resources/messages_pt_BR.properties +++ b/client/WEB-INF/classes/resources/messages_pt_BR.properties @@ -48,22 +48,30 @@ label.accept.project.invitation=Aceitar convite de projeto. label.account.and.security.group=Contas, grupos de Seguran\u00e7a label.account=Conta label.account.id=ID da Conta +label.account.lower=conta label.account.name=Nome da Conta label.accounts=Contas label.account.specific=Conta-Specific +label.acl=ACL +label.acl.id=ACL ID +label.acl.name=Nome da ACL +label.acl.replaced=ACL trocado label.acquire.new.ip=Adquirir novo IP label.acquire.new.secondary.ip=Adquira um novo IP secund\u00e1rio label.action.attach.disk=Anexar Disco label.action.attach.disk.processing=Anexando Disco.... label.action.attach.iso=Anexar ISO label.action.attach.iso.processing=Anexando ISO.... +label.action=A\u00e7\u00e3o label.action.cancel.maintenance.mode=Cancelar Modo de Manuten\u00e7\u00e3o label.action.cancel.maintenance.mode.processing=Cancelando Modo de Manuten\u00e7\u00e3o.... label.action.change.password=Troca de Senha label.action.change.service.processing=Trocando de Plano.... label.action.change.service=Trocar Plano label.action.copy.ISO=Copiar ISO +label.action.copy.ISO.processing=Copiando ISO... label.action.copy.template=Copiar Template +label.action.copy.template.processing=Copiando Template... label.action.create.template=Criar Template label.action.create.template.from.vm=Criar Template a partir da VM label.action.create.template.from.volume=Criar Template a partir do Disco @@ -244,17 +252,24 @@ label.add.accounts=Adicionar contas label.add.accounts.to=Adicionar contas para label.add.account.to.project=Adicionar conta ao projeto label.add.ACL=Adicionar ACL +label.add.acl.list=Adiciona Lista ACL label.add=Adicionar label.add.affinity.group=Adicionar um grupo de afinidade +label.add.baremetal.dhcp.device=Adiciona Dispositivo DHCP Baremetal +label.add.BrocadeVcs.device=Adicionar Brocade Vcs Switch label.add.by=Adicionado por label.add.by.cidr=Adicionar por CIDR label.add.by.group=Adicionar por Grupo +label.add.ciscoASA1000v=Adicone Recurso label.add.cluster=Adicionar Cluster label.add.compute.offering=Adicionar oferta de computa\u00e7\u00e3o label.add.direct.iprange=Add Direct Ip Range label.add.disk.offering=Adicionar Oferta de Disco label.add.domain=Adicionar Dom\u00ednio +label.added.brocade.vcs.switch=Adicionado novo Brocade Vcs Switch +label.added.nicira.nvp.controller=Adicionado nova Controladora Nicira NVP label.add.egress.rule=Adicionar regra egress +label.addes.new.f5=Adicionado novo F5 label.add.F5.device=Adicionar dispositivo F5 label.add.firewall=Adicionar regra de Firewall label.add.gslb=Adicionar GSLB @@ -269,12 +284,18 @@ label.add.ingress.rule=Adicionar Regra de Entrada label.adding.succeeded=Adicionado com Sucesso label.adding.user=Adicionando Usu\u00e1rio label.adding.zone=Adicionando Zona +label.add.intermediate.certificate=Adicionar certificado intermedi\u00e1rio +label.add.internal.lb=Adiciona LB Interno label.add.ip.range=Adicionar Range de IP +label.add.isolated.guest.network=Adiciona Rede Guest Isolada +label.add.isolated.network=Adiciona Rede Isolada label.additional.networks=Redes Adicionais +label.add.list.name=Nome de Lista ACL label.add.load.balancer=Adicionar Load Balance label.add.more=Adicionar Mais label.add.netScaler.device=Adicionar dispositivo Netscaler label.add.network.ACL=Adicione ACL de rede +label.add.network.acl.list=Adicionar Lista de ACL de Rede label.add.network=Adicionar Rede label.add.network.device=Adicionar Dispositivo de Rede label.add.network.offering=Adicionar oferta de rede @@ -284,7 +305,10 @@ label.add.new.NetScaler=Adicionar um novo NetScaler label.add.new.PA=Adicionar novo Palo Alto label.add.new.SRX=Adicionar um novo SRX label.add.new.tier=Adicionar nova camada +label.add.nfs.secondary.staging.store=Adiciona Armazenamento NFS de Est\u00e1gio Secund\u00e1rio label.add.NiciraNvp.device=Adicionar Controlador Nvp +label.add.NuageVsp.device=Adicionar Nuage Virtualized Services Directory (VSD) +label.add.OpenDaylight.device=Adiciona Controlador OpenDaylight label.add.PA.device=Adicionar dispositivo Palo Alto label.add.physical.network=Adicionar rede f\u00edsica label.add.pod=Adicionar POD @@ -304,6 +328,7 @@ label.add.static.route=Adicionar rota est\u00e1tica label.add.system.service.offering=Adicionar Plano para VM de Sistema label.add.template=Adicionar Template label.add.to.group=Adicionar ao grupo +label.add.ucs.manager=Adiciona Gerenciador UCS label.add.user=Adicionar Usu\u00e1rio label.add.userdata=Userdata label.add.vlan=Adicionar VLAN @@ -311,8 +336,12 @@ label.add.vm=Adicionar VM label.add.vms=Adicionar VMs label.add.vms.to.lb=Add VM(s) na regra de balanceamento de carga label.add.VM.to.tier=Adicionar m\u00e1quina virtual \u00e0 camada +label.add.vmware.datacenter=Adicionar Datacerter VMware +label.add.vnmc.device=Adiciona dispositivo VNMC +label.add.vnmc.provider=Adicione provedor VNMC label.add.volume=Adicionar Disco label.add.vpc=Adicionar VPC +label.add.vpc.offering=Adicionar Oferta VPC label.add.vpn.customer.gateway=Adicionar Gateway de VPN de usu\u00e1rio label.add.VPN.gateway=Adicionar gateway de VPN label.add.vpn.user=Adicionar usu\u00e1rio VPN @@ -327,41 +356,62 @@ label.affinity=Afinidade label.affinity.group=Grupo de Afinidade label.affinity.groups=Grupos de Afinidade label.agent.password=Senha do Agente +label.agent.state=Estado do Agente label.agent.username=Usu\u00e1rio do Agente label.agree=Concordo label.alert=Alerta +label.alert.archived=Alerta Arquivado +label.alert.deleted=Alerta Apagado +label.alert.details=Detalhes de alerta label.algorithm=Algoritmo label.allocated=Alocado label.allocation.state=Status da Aloca\u00e7\u00e3o +label.allow=Pertitir label.anti.affinity=Anti-afinidade label.anti.affinity.group=Grupo de Anti-afinidade label.anti.affinity.groups=Grupos de Anti-afinidade label.api.key=API Key +label.api.version=Ver\u00e3o da API label.apply=Aplicar label.app.name=CloudStack label.archive.alerts=Guardar alertas +label.archive=Arquivo label.archive.events=Guardar eventos label.assign=Atribuir +label.assigned.vms=VMs designadas label.assign.instance.another=Atribuir Inst\u00e2ncia para outra Conta label.assign.to.load.balancer=Atribuindo Inst\u00e2ncia ao balanceador de carga label.associated.network.id=ID de Rede Associado label.associated.network=Rede associada +label.associated.profile=Perfil Associado +label.associate.public.ip=Associa IP P\u00fablico label.attached.iso=Imagem ISO Plugada label.author.email=E-mail do autor label.author.name=Nome do autor +label.autoscale=Escalonamento Autom\u00e1tico label.availability=Availability label.availability.zone=Datacenter label.available=Dispon\u00edvel label.available.public.ips=IP P\u00fablico Dispon\u00edvel label.back=Voltar label.bandwidth=Bandwidth +label.baremetal.dhcp.devices=Dispositivos DHCP Baremetal +label.baremetal.dhcp.provider=Provedor DHCP Baremetal +label.baremetal.pxe.device=Adiciona Dispositivo PXE Baremetal +label.baremetal.pxe.devices=Dispositivo PXE Baremetal +label.baremetal.pxe.provider=Provedor PXE Baremetal label.basic=B\u00e1sico label.basic.mode=Modo B\u00e1sico +label.blade.id=ID da L\u00e2mina +label.blades=L\u00e2minas label.bootable=Inicializ\u00e1vel label.broadcast.domain.range=Range do dom\u00ednio de Broadcast label.broadcast.domain.type=Tipo de Dom\u00ednio Broadcast label.broadcast.uri=URI de broadcast +label.broadcasturi=url de broadcast label.broadcat.uri=URI de broadcast +label.brocade.vcs.address=Endere\u00e7o do Vcs Switch +label.brocade.vcs.details=Detalhes do Brocade Vcs Switch label.by.account=por Conta label.by.alert.type=Por tipo de alerta label.by.availability=By Availability @@ -383,16 +433,24 @@ label.by.type=Por Tipo label.by.zone=por Zona label.cache.mode=Tipo do cache de escrita label.cancel=Cancelar +label.capacity.bytes=Capacidade de Bytes label.capacity=Capacidade +label.capacity.iops=Capacidade de IOPS label.certificate=Certificado +label.change.affinity=Muda Afinidade label.change.service.offering=Alterar oferta de servi\u00e7o label.change.value=Alterar valor label.character=Caracter +label.chassis=Chassis label.cidr.account=CIDR ou Conta/Security Group label.cidr=CIDR label.cidr.list=CIDR de Origem label.CIDR.list=Lista CIDR label.CIDR.of.destination.network=CIDR da rede de destino +label.cisco.nexus1000v.ip.address=Endere\u00e7o IP do Nexus 1000v +label.cisco.nexus1000v.password=Senha do Nexus 1000v +label.cisco.nexus1000v.username=Usu\u00e1rio do Nexus 1000v +label.ciscovnmc.resource.details=Detalhes de recurso CiscoVNMC label.clean.up=Limpar label.clear.list=Limpar lista label.close=Fechar @@ -419,9 +477,12 @@ label.confirm.password=Confirme a senha label.congratulations=Parab\u00e9ns\! label.conserve.mode=Modo Conservativo label.console.proxy=Console proxy +label.console.proxy.vm=VM da Console Proxy label.continue.basic.install=Continuar com a instala\u00e7\u00e3o b\u00e1sica label.continue=Continuar +label.copying.iso=Copiando ISO label.corrections.saved=Altera\u00e7\u00f5es salvas +label.counter=Contador label.cpu.allocated=CPU Alocada label.cpu.allocated.for.VMs=CPU Alocada por VMs label.CPU.cap=CPU Cap @@ -431,11 +492,13 @@ label.cpu.mhz=CPU (em MHz) label.cpu.utilized=CPU Utilizada label.created.by.system=Criado pelo sistema label.created=Criado +label.create.nfs.secondary.staging.storage=Cria Armazenamento NFS de Est\u00e1gio Secund\u00e1rio label.create.nfs.secondary.staging.store=Criar storage staging secund\u00e1rio NFS label.create.project=Criar um projeto label.create.template=Criar template label.create.VPN.connection=Criar uma conex\u00e3o VPN label.cross.zones=Inter Zonas +label.custom=Customizado label.custom.disk.iops=IOPS personalizado label.custom.disk.size=Tamanho Customizado label.daily=Di\u00e1rio @@ -443,47 +506,76 @@ label.data.disk.offering=Oferta de Disco Adicional label.date=Data label.day.of.month=Dia do M\u00eas label.day.of.week=Dia da Semana +label.dc.name=Nome do DC label.dead.peer.detection=Detec\u00e7\u00e3o de correspondente morto label.decline.invitation=Rejeitar convite +label.dedicate.cluster=Cluster Dedicado label.dedicated=Dedicado +label.dedicate=Dedicado +label.dedicated.vlan.vni.ranges=Range(s) de VLAN/VNI Dedicados +label.dedicate.host=Dedica Host +label.dedicate.pod=Pod Dedicado +label.dedicate.vlan.vni.range=Range de VLAN/VNI Dedicado +label.dedicate.zone=Zona Dedicada +label.default.egress.policy=Pol\u00edtica padr\u00e3o de egress\u00e3o label.default=Padr\u00e3o label.default.use=Uso padr\u00e3o label.default.view=Vis\u00e3o Padr\u00e3o +label.delete.acl.list=Apagar Lista ACL label.delete.affinity.group=Deletar Grupo de Afinidade label.delete.alerts=Remover alertas +label.delete.BrocadeVcs=Remover Brocade Vcs Switch +label.delete.ciscoASA1000v=Apaga CiscoASA1000v +label.delete.ciscovnmc.resource=Apaga recurso CiscoVNMC label.delete.events=Remover eventos label.delete.F5=Remover F5 label.delete.gateway=delete gateway +label.delete.internal.lb=Apaga LB Interno label.delete.NetScaler=Remover NetScaler label.delete.NiciraNvp=Remover Controlador Nvp +label.delete.NuageVsp=Remover Nuage VSD +label.delete.OpenDaylight.device=Apaga Controladora OpenDaylight label.delete.PA=Remover Palo Alto label.delete.portable.ip.range=Deletar Endere\u00e7os IPs Port\u00e1teis +label.delete.profile=Apaga Perfil label.delete.project=Deletar projeto label.delete=Remover +label.delete.secondary.staging.store=Apaga Armazenamento de Est\u00e1gio Secund\u00e1rio label.delete.SRX=Remover SRX +label.delete.ucs.manager=Apaga Gerenciador UCS label.delete.VPN.connection=deletar a conex\u00e3o VPN label.delete.VPN.customer.gateway=deletar gateway de VPN de usu\u00e1rio label.delete.VPN.gateway=deletar um gateway de VPN label.delete.vpn.user=Deletar usu\u00e1rio VPN label.deleting.failed=Falha ao remover label.deleting.processing=Removendo.... +label.deny=Negar label.deployment.planner=Deployment planejado label.description=Descri\u00e7\u00e3o label.destination.physical.network.id=ID de destino da rede f\u00edsica label.destination.zone=Zona de Destino label.destroy=Apagar label.destroy.router=Destruir roteador +label.destroy.vm.graceperiod=Destruir Grace Period da VM label.detaching.disk=Desplugando Disco label.details=Detalhes label.device.id=ID do Dispositivo label.devices=Dispositivos label.dhcp=DHCP label.DHCP.server.type=Tipo de Servidor DHCP +label.direct.attached.public.ip=IP P\u00fablico COnectado Diretamente label.direct.ips=IPs Diretos +label.disable.autoscale=Desabilita Auto-escala label.disabled=Desativado +label.disable.host=Desabilita Host +label.disable.network.offering=Desabilita oferta de rede label.disable.provider=Desabilitar Provider +label.disable.vnmc.provider=Habilita provedor VNMC +label.disable.vpc.offering=Desabilitar oferta VPC label.disable.vpn=Desabilitar VPN label.disabling.vpn.access=Desativando Acesso VPN +label.disassociate.profile.blade=Desassocia Perfil de L\u00e2mina +label.disbale.vnmc.device=Desabilita dispositivo VNMC label.disk.allocated=Disco Alocado label.disk.bytes.read.rate=Taxa de Leitura do Disco (BPS) label.disk.bytes.write.rate=Taxa de Escrita no Disco (BPS) @@ -493,6 +585,7 @@ label.disk.iops.read.rate=Taxa de Leitura do Disco (IOPS) label.disk.iops.total=IOPS Total label.disk.iops.write.rate=Taxa de Escrita no Disco (IOPS) label.disk.offering=Oferta de Disco +label.disk.provisioningtype=Tipo de Provisionamento label.disk.read.bytes=Leitura do Disco (Bytes) label.disk.read.io=Leitura do Disk (I/O) label.disk.size.gb=Tamanho (em GB) @@ -502,6 +595,7 @@ label.disk.volume=Disco label.disk.write.bytes=Escrita no Disco (Bytes) label.disk.write.io=Escrita no Disco (I/O) label.display.text=Descri\u00e7\u00e3o +label.distributedrouter=Roteador Distribuido label.dns.1=DNS 1 label.dns.2=DNS 2 label.dns=DNS @@ -509,6 +603,7 @@ label.DNS.domain.for.guest.networks=Dom\u00ednio DNS para redes h\u00f3spedes label.domain.admin=Administrador de Dom\u00ednio label.domain=Dom\u00ednio label.domain.id=ID do Dom\u00ednio +label.domain.lower=dom\u00ednio label.domain.name=Nome do Dom\u00ednio label.domain.router=Roteador do Dom\u00ednio label.domain.suffix=Sufixo de Dom\u00ednio DNS (ex. xyz.com) @@ -516,7 +611,9 @@ label.done=Pronto label.double.quotes.are.not.allowed=Aspas duplas n\u00e3o s\u00e3o permitidas label.download.progress=Status do Download label.drag.new.position=Arrastar para uma nova posi\u00e7\u00e3o +label.duration.in.sec=Dura\u00e7\u00e3o (em seg) label.dynamically.scalable=Dinamicamente Escal\u00e1vel +label.edit.acl.rule=Edita regra ACL label.edit.affinity.group=Editar Grupo de Afinidade label.edit=Editar label.edit.lb.rule=Editar regra de LB @@ -533,9 +630,16 @@ label.elastic=El\u00e1stico label.elastic.IP=IP El\u00e1stico label.elastic.LB=LB El\u00e1stico label.email=Email +label.email.lower=email +label.enable.autoscale=Habilita Auto-escala +label.enable.host=Habilita Host +label.enable.network.offering=Habilita oferta de rede label.enable.provider=Habilitar provider label.enable.s3=Habilita storage secund\u00e1ria fornecida por S3 label.enable.swift=Habilitar Swift +label.enable.vnmc.device=Habilita dispositivo VNMC +label.enable.vnmc.provider=Habilita provedor VNMC +label.enable.vpc.offering=Habilitar oferta VPC label.enable.vpn=Habilitar VPN label.enabling.vpn.access=Ativando Acesso VPN label.enabling.vpn=Ativando VPN @@ -544,24 +648,31 @@ label.endpoint.or.operation=Endpoint or Operation label.endpoint=Ponto de acesso label.end.port=Porta Final label.end.reserved.system.IP=Fim dos IPs reservados para o sistema +label.end.vlan=VLAN final +label.end.vxlan=VXLAN final label.enter.token=Digite o token label.error.code=C\u00f3digo de Erro label.error=Erro +label.error.upper=ERRO label.ESP.encryption=Encripta\u00e7\u00e3o ESP label.ESP.hash=Hash ESP label.ESP.lifetime=Tempo de vida do ESP (segundos) label.ESP.policy=Pol\u00edtica ESP label.esx.host=ESX/ESXi Host +label.event.archived=Evento Arquivado +label.event.deleted=Evento Detectado label.example=Examplo label.expunge=Eliminar label.external.link=Link externo label.extractable=Extra\u00edvel +label.f5.details=Detalhes do F5 label.f5=F5 label.failed=Falhou label.featured=Featured label.fetch.latest=Obter \u00faltimos label.filterBy=Filtrar por label.firewall=Firewall +label.firstname.lower=primeiro nome label.first.name=Primeiro Nome label.format=Formato label.friday=Sexta-feira @@ -576,10 +687,24 @@ label.go.step.3=V\u00e1 para passo 3 label.go.step.4=V\u00e1 para passo 4 label.go.step.5=V\u00e1 para passo 5 label.gpu=CPU +label.group.by.account=Agrupamento por conta +label.group.by.cluster=Grupo por cluster +label.group.by.pod=Grupo por pod +label.group.by.zone=Grupo por Zona label.group=Grupo label.group.optional=Grupo (Opcional) +label.gslb.assigned.lb=Balanceamento de carga designado +label.gslb.assigned.lb.more=Designe mais balanceamento de carga +label.gslb.delete=Apaga GSLB label.gslb.details=Detalhes do GSLB label.gslb.domain.name=Nome do Dom\u00ednio GSLB +label.gslb=GSLB +label.gslb.lb.details=Detalhes de balanceamento de carga +label.gslb.lb.remove=Remova balanceamento de carga deste GSLB +label.gslb.lb.rule=Regra de balanceamento de carga +label.gslb.service.private.ip=Servi\u00e7o GSLB - IP Privado +label.gslb.service.public.ip=GSLB atende IP P\u00fablico +label.gslb.service=Servi\u00e7o GSLB label.gslb.servicetype=Tipo do Servi\u00e7o label.guest.cidr=CIDR de rede Convidado label.guest.end.ip=IP do fim do guest @@ -588,11 +713,17 @@ label.guest=Guest label.guest.ip=Endere\u00e7o IP Convidado label.guest.ip.range=Intervalo de rede convidado label.guest.netmask=M\u00e1scara de rede Guest +label.guest.network.details=Detalhes de rede convidada label.guest.networks=Redes Guest label.guest.start.ip=IP de in\u00edcio do guest label.guest.traffic=Tr\u00e1fego de h\u00f3spedes +label.guest.traffic.vswitch.name=Nome do vSwitch de Tr\u00e1fego Convidado +label.guest.traffic.vswitch.type=Tipo de vSwitch de Tr\u00e1fego Convidado label.guest.type=Tipo de Guest label.ha.enabled=HA Ativado +label.health.check=Checagem de Sa\u00fade +label.health.check.interval.in.sec=Intervalo de Health Check (em seg) +label.healthy.threshold=Limiar de Sanidade label.help=Ajuda label.hide.ingress.rule=Ocultar Regra de Entrada label.hints=Dicas @@ -604,12 +735,14 @@ label.host.name=Host Name label.hosts=Hosts label.host.tags=Tags de Host label.hourly=A cada hora +label.hvm=HVM label.hypervisor.capabilities=Recursos de Virtualizador label.hypervisor=Hipervisor label.hypervisors=Hypervisors label.hypervisor.snapshot.reserve=Reserva de Snapshot do Hypervisor label.hypervisor.type=Tipo do Hypervisor label.hypervisor.version=Vers\u00e3o de Virtualizador +label.hyperv.traffic.label=R\u00f3tulo de tr\u00e1fego HyperV label.id=ID label.IKE.DH=DH IKE label.IKE.encryption=Encripta\u00e7\u00e3o IKE @@ -617,8 +750,10 @@ label.IKE.hash=Hash IKE label.IKE.lifetime=Tempo de vida IKE (segundos) label.IKE.policy=Pol\u00edtica IKE label.info=Info +label.info.upper=INFO label.ingress.rule=Regra de Entrada label.initiated.by=Iniciado por +label.inside.port.profile=Perfil de Porta Interna label.installWizard.addClusterIntro.subtitle=O que \u00e9 um cluster? label.installWizard.addClusterIntro.title=Vamos adicionar um cluster label.installWizard.addHostIntro.subtitle=O que \u00e9 um Host ? @@ -638,9 +773,14 @@ label.installWizard.title=Ol\u00e1, seja bem vindo ao CloudStack&\#8482 label.instance=Inst\u00e2ncia label.instance.limits=Limites da Inst\u00e2ncia label.instance.name=Nome da Inst\u00e2ncia +label.instance.port=Instanciar Porta label.instances=Inst\u00e2ncias +label.instanciate.template.associate.profile.blade=Instancia Template e Associa Perfil \u00e0 L\u00e2mina +label.intermediate.certificate=Certificado intermedi\u00e1rio {0} label.internal.dns.1=DNS 1 Interno label.internal.dns.2=DNS 2 Interno +label.internal.lb.details=Detalhes de LB Interno +label.internallbvm=LbVm Interno label.internal.name=Nome interno label.interval.type=Tipo de Intervalo label.introduction.to.cloudstack=Introdu\u00e7\u00e3o ao CloudStack&\#8482 @@ -660,9 +800,20 @@ label.ip.range=Range de IP label.ip.ranges=Ranges de IP label.IPsec.preshared.key=Chave IPSec pr\u00e9 compartilhada label.ips=IPs +label.ipv4.cidr=CIDR IPv4 +label.ipv4.dns1=IPv4 DNS1 +label.ipv4.dns2=IPv4 DNS2 +label.ipv4.end.ip=IP FInal IPv4 +label.ipv4.gateway=Gateway IPV4 +label.ipv4.netmask=M\u00e1scara de Rede IPv4 +label.ipv4.start.ip=IP Inicial IPv4 label.ipv6.address=Endere\u00e7o IPv6 label.ipv6.CIDR=CIDR IPv6 +label.ipv6.dns1=IPv6 DNS1 +label.ipv6.dns2=IPv6 DNS2 +label.ipv6.end.ip=IP FInal IPv6 label.ipv6.gateway=Gateway IPv6 +label.ipv6.start.ip=IP Inicial IPv6 label.iscsi=iSCSI label.is.default=\u00c9\u0089 Padr\u00e3o label.iso.boot=ISO de Boot @@ -688,6 +839,7 @@ label.lang.dutch=Holand\u00eas (Holanda) label.lang.english=English label.lang.french=Franc\u00eas label.lang.german=Alem\u00e3o +label.lang.hungarian=H\u00fangaro label.lang.italian=Italiano label.lang.japanese=Japanese label.lang.korean=Coreano @@ -696,6 +848,7 @@ label.lang.polish=Polon\u00eas label.lang.russian=Russo label.lang.spanish=Spanish label.last.disconnected=Last Disconnected +label.lastname.lower=\u00faltimo nome label.last.name=\u00daltimo Nome label.latest.events=\u00daltimos eventos label.launch=Executar @@ -711,6 +864,7 @@ label.ldap.port=Porta do LDAP label.level=N\u00edvel label.linklocal.ip=Endere\u00e7o IP do Link Local label.load.balancer=Load Balancer +label.load.balancer.type=Tipo de Balanceamento de Carga label.load.balancing=Balanceamento de Carga label.load.balancing.policies=Pol\u00edticas de balanceamento de carga label.loading=Carregando @@ -720,14 +874,18 @@ label.login=Entrar label.logout=Sair label.lun=LUN label.LUN.number=LUN \# +label.lxc.traffic.label=R\u00f3tulo de tr\u00e1fego LXC label.make.project.owner=Criar propriet\u00e1rio de conta de projeto +label.managed=Gerenciado label.manage=Gerenciar label.management=Gerenciamento label.management.ips=Gerenciamento de Endere\u00e7os IP +label.management.server=Servidor de Gerenciamento label.manage.resources=Gerenciar Recursos label.max.cpus=M\u00e1ximo de cores de CPU label.max.guest.limit=Limite m\u00e1x. de guest label.maximum=M\u00e1ximo +label.max.instances=Inst\u00e2ncias Max label.max.memory=M\u00e1x. de mem\u00f3ria (MiB) label.max.networks=M\u00e1x. de redes label.max.primary.storage=M\u00e1x. prim\u00e1rio (GiB) @@ -786,15 +944,20 @@ label.menu.templates=Templates label.menu.virtual.appliances=Appliance Virtual label.menu.virtual.resources=Recursos Virtuais label.menu.volumes=Discos +label.menu.vpc.offerings=Ofertas VPC label.migrate.instance.to.host=Migrar inst\u00e2ncia para outro host label.migrate.instance.to=Migrar Inst\u00e2ncia para label.migrate.instance.to.ps=Migrar inst\u00e2ncia para outro storage prim\u00e1rio +label.migrate.lb.vm=Migre LB VM label.migrate.router.to=Migrar Roteador para label.migrate.systemvm.to=Migrar VM de sistema para label.migrate.to.host=Migrar para outro host label.migrate.to.storage=Migrar para storage +label.migrate.volume=Migrar Volume label.migrate.volume.to.primary.storage=Migrar volume para outro storage prim\u00e1rio label.minimum=M\u00ed\u00adnimo +label.min.instances=Inst\u00e2ncias Min +label.minute.past.hour=minuto(s) passado(s) da \u00faltima hora label.mode=Modo label.monday=Segunda label.monthly=Mensal @@ -809,13 +972,16 @@ label.my.templates=Meus templates label.name.lower=Nome label.name=Nome label.name.optional=Nome (Opcional) +label.na=N/D label.nat.port.range=Range de Portas NAT label.netmask=M\u00e1scara de Rede +label.netscaler.details=Detalhes do NetScaler label.netScaler=NetScaler label.network.ACL=ACL de rede label.network.ACLs=Network ACLs label.network.ACL.total=Total de rede ACL label.network.addVM=Adicionar rede para VM +label.network.cidr=CIDR da Rede label.network.desc=Descri\u00e7\u00e3o de Rede label.network.device=Dispositivo de Rede label.network.device.type=Tipo de Dispositivo de Rede @@ -850,12 +1016,14 @@ label.nfs.storage=Storage NFS label.nic.adapter.type=Tipo de adaptador de Rede label.nicira.controller.address=Endere\u00e7o do Controlador label.nicira.l3gatewayserviceuuid=Uuid do Servi\u00e7o de Gateway L3 +label.nicira.nvp.details=Detalhes do Nicira NVP label.nicira.transportzoneuuid=Uuid da Zona de Transporte label.nics=Adaptadores de Rede label.no.actions=Sem A\u00e7\u00f5es Dispon\u00edveis label.no.alerts=Sem Alertas Recentes label.no.data=Sem dados para mostrar label.no.errors=Sem Erros Recentes +label.no.grouping=(sem agrupamento) label.no.isos=Sem ISO Dispon\u00edvel label.no.items=Sem Itens Dispon\u00edveis label.none=Nenhum @@ -865,6 +1033,7 @@ label.not.found=N\u00e3o Encontrado label.no.thanks=N\u00e3o obrigado label.notifications=Notifica\u00e7\u00f5es label.number.of.clusters=N\u00famero de Clusters +label.number.of.cpu.sockets=O N\u00famero de Sockets de CPU label.number.of.hosts=N\u00famero de Hosts label.number.of.pods=N\u00famero de Pods label.number.of.system.vms=N\u00famero de VMs de sistema @@ -879,37 +1048,53 @@ label.opendaylight.controller=Controlador OpenDaylight label.opendaylight.controllerdetail=Detalhes do Controlador OpenDaylight label.opendaylight.controllers=Controladores OpenDaylight label.openDaylight=OpenDaylight +label.operator=Operador label.optional=Opcional label.order=Ordenar label.os.preference=Prefer\u00eancia de SO label.os.type=Tipo de SO +label.other=Outro +label.override.guest.traffic=Anula Tr\u00e1fego Convidado +label.override.public.traffic=Sobrep\u00f5e Tr\u00e1fego P\u00fablico +label.ovm.traffic.label=R\u00f3tulo de tr\u00e1fego OVM +label.ovs=OVS label.owned.public.ips=IP P\u00fablico Utilizado label.owner.account=Dono da Conta label.owner.domain=Dono do Dom\u00ednio +label.palo.alto.details=Detalhes do Palo Alto label.PA.log.profile=Palo Alto Log Profile label.PA=Palo Alto label.parent.domain=Dom\u00ednio Principal +label.passive=Passivo label.password.enabled=Senha Ativada +label.password.lower=senha label.password.reset.confirm=A senha foi recuperada para label.password=Senha label.path=Caminho (Path) label.PA.threat.profile=Palo Alto Threat Profile label.perfect.forward.secrecy=Perfect Forward Secrecy +label.persistent=Persistente label.physical.network.ID=ID da rede f\u00edsica label.physical.network=Rede F\u00edsica label.PING.CIFS.password=PING CIFS password label.PING.CIFS.username=PING CIFS username label.PING.dir=PING Directory +label.ping.path=Caminho do Ping label.PING.storage.IP=Disparar PING para IP do Storage label.planner.mode=Modo planejado label.please.specify.netscaler.info=Por favor especifique as informa\u00e7\u00f5es do Netscaler label.please.wait=Por Favor Aguarde label.plugin.details=Detalhes do plugin label.plugins=Plugins +label.pod.dedicated=Pod Dedicado label.pod.name=Nome do Pod label.pod=POD label.pods=Pods +label.polling.interval.sec=Intervalo de Polling (em seg) +label.portable.ip=IP Port\u00e1vel +label.portable.ip.range.details=Detalhes de Range de IP Port\u00e1veis label.portable.ip.ranges=Faixa de endere\u00e7os IPs Port\u00e1vel +label.portable.ips=IPs Port\u00e1veis label.port.forwarding=Encaminhamento de Porta label.port.forwarding.policies=Pol\u00edticas de redirecionamento de portas label.port=Porta @@ -932,6 +1117,7 @@ label.privatekey=PKCS\#8 Private Key label.private.network=Rede Privada label.private.port=Porta Privada label.private.zone=Zona Privada +label.profile=Perfil label.project.dashboard=Dashboard do Projeto label.project.id=ID de Projeto label.project.invite=Convidar para o projeto @@ -939,22 +1125,27 @@ label.project.name=Nome de projeto label.project=Projeto label.projects=Projetos label.project.view=Vis\u00e3o de Projeto +label.protocol.number=N\u00famero do Protocolo label.protocol=Protocolo label.provider=Provedor label.providers=Providers label.public.interface=Interface P\u00fablica label.public.ip=Endere\u00e7o IP P\u00fablico label.public.ips=IPs P\u00fablicos +label.public.load.balancer.provider=Provedor P\u00fablico de Balanceamento de Carga label.public.network=Rede P\u00fablica label.public.port=Porta P\u00fablica label.public=P\u00fablico label.public.traffic=Tr\u00e1fego P\u00fablico +label.public.traffic.vswitch.name=Nome do vSwitch de Tr\u00e1fego P\u00fablico +label.public.traffic.vswitch.type=Tipo de vSwitch de Tr\u00e1fego P\u00fablico label.public.zone=Zona P\u00fablica label.purpose=Prop\u00f3sito label.Pxe.server.type=Tipo de Servidor PXE label.qos.type=Tipo de QoS label.quickview=Visualiza\u00e7\u00e3o r\u00e1pida label.quiesce.vm=Quiesce VM +label.quiet.time.sec=Tempo Silencioso (em seg) label.rbd.id=Usu\u00e1rio Ceph label.rbd.monitor=Monitor Ceph label.rbd.pool=Pool Ceph @@ -967,9 +1158,18 @@ label.redundant.router.capability=Recurso de roteador redundante label.redundant.router=Roteador Redundantee label.redundant.state=Estado redundante label.refresh=Atualizar +label.refresh.blades=Atualizar L\u00e2minas +label.regionlevelvpc=VPC a N\u00edvel de Regi\u00e3o label.region=Regi\u00e3o label.reinstall.vm=Reinstalar VM label.related=Relacionado +label.release.account=Liberar de Conta +label.release.account.lowercase=LIberar de conta +label.release.dedicated.cluster=Libera Cluster Dedicado +label.release.dedicated.host=Libera Host Dedicado +label.release.dedicated.pod=LIberar Pod Dedicado +label.release.dedicated.vlan.range=Liberar range de VLAN dedicado +label.release.dedicated.zone=Liberar Zona Dedicada label.remind.later=Me lembre depois label.remove.ACL=Remove ACL label.remove.egress.rule=Remover regra egress @@ -977,6 +1177,7 @@ label.remove.from.load.balancer=Removendo Inst\u00e2ncia do balanceador de carga label.remove.ingress.rule=Remover regra ingress label.remove.ip.range=Remover range de IP label.remove.ldap=Remover LDAP +label.remove.network.offering=Remove oferta de rede label.remove.pf=Remover regra de redirecionamento de porta label.remove.project.account=Remover conta de projeto label.remove.region=Remover Regi\u00e3o @@ -985,32 +1186,49 @@ label.remove.static.nat.rule=Remover regra de NAT est\u00e1tico label.remove.static.route=Remover rota est\u00e1tica label.remove.tier=Remover camada label.remove.vm.from.lb=Remover VM da regra de balanceamento de carga +label.remove.vm.load.balancer=Remover VM do balanceamento de carga +label.remove.vmware.datacenter=Remover Datacenter VMware +label.remove.vpc.offering=Remover oferta VPC label.remove.vpc=remover a VPC label.removing=Removendo label.removing.user=Removendo Usu\u00e1rio +label.reource.id=ID do Recurso +label.replace.acl.list=Substituir Lista ACL +label.replace.acl=Substituir ACL label.required=Obrigat\u00f3rio +label.requires.upgrade=Requer Atualiza\u00e7\u00e3o +label.reserved.ip.range=Faixa de IP Reservada label.reserved.system.gateway=Gateway de sistema reservado label.reserved.system.ip=IP de Sistema Reservado label.reserved.system.netmask=M\u00e1scara de rede reservada do sistema label.resetVM=Restabelecer VM label.reset.VPN.connection=Resetar a conex\u00e3o VPN label.resize.new.offering.id=New Offering +label.resize.new.size=Novo Tamanho (GB) label.resize.shrink.ok=Shrink OK +label.resource.limit.exceeded=Limite de Recurso Excedido label.resource.limits=Limite de Recursos +label.resource.name=Nome do Recurso label.resource=Recurso label.resources=Recursos label.resource.state=Estado do Recurso +label.response.timeout.in.sec=Timeout de Resposta (em seg) label.restart.network=Reiniciar rede label.restart.required=Reiniciar obrigat\u00f3rio label.restart.vpc=reiniciar a VPC label.restore=Restaurar +label.retry.interval=Intervalo de repeti\u00e7\u00e3o label.review=Revisar label.revoke.project.invite=Revogar convite label.role=Fun\u00e7\u00e3o +label.root.certificate=Certificado Root label.root.disk.controller=Controlador do disco Root label.root.disk.offering=Oferta de Disco ROOT label.root.disk.size=Tamanho do disco root +label.router.vm.scaled.up=VM do Roteador Escalonada +label.routing.host=Host de Roteamento label.routing=Roteamento +label.rule.number=Regra N\u00famero label.rules=Regras label.running.vms=VMs Rodando label.s3.access_key=Chave de acesso @@ -1027,9 +1245,14 @@ label.saturday=S\u00e1bado label.save.and.continue=Salvar e continuar label.save=Salvar label.saving.processing=Salvando.... +label.scale.up.policy=Pol\u00edtica de Escalonamento label.scope=Escopo label.search=Pesquisar +label.secondary.isolated.vlan.id=ID de VLAN Secund\u00e1ria Isolada +label.secondary.staging.store=Armazenamento de Est\u00e1gio Secund\u00e1rio +label.secondary.staging.store.details=Detalhes do Armazenamento de Est\u00e1gio Secund\u00e1rio label.secondary.storage.count=Pools de Storage secund\u00e1rios +label.secondary.storage.details=Detalhes de armazenamento secund\u00e1rio label.secondary.storage.limits=Limites do Storage Secund\u00e1rio (GiB) label.secondary.storage=Storage Secund\u00e1rio label.secondary.storage.vm=VM de storage secund\u00e1rio @@ -1046,7 +1269,9 @@ label.select.instance.to.attach.volume.to=Escolha uma inst\u00e2ncia para conect label.select.iso.or.template=Selecione ISO ou template label.select.offering=Selecionar Oferta label.select.project=Selecionar Projeto +label.select.region=Selecione Regi\u00e3o label.select=Selecionar +label.select.template=Seleciona Template label.select.tier=Selecione camada label.select-view=Selecionar visualiza\u00e7\u00e3o label.select.vm.for.static.nat=Selecionar VM para NAT est\u00e1tico @@ -1054,15 +1279,18 @@ label.sent=Enviado label.server=Servidor label.service.capabilities=Recursos de servi\u00e7os label.service.offering=Plano +label.services=Servi\u00e7os label.service.state=Estado do Servi\u00e7o label.session.expired=Sess\u00e3o Expirada label.set.default.NIC=Configurar para NIC padr\u00e3o +label.settings=Ajustes label.setup=Configura\u00e7\u00e3o label.setup.network=Configurar Rede label.setup.zone=Configurar Zona label.set.up.zone.type=Configurar tipo de zona label.shared=Compatilhado label.SharedMountPoint=SharedMountPoint +label.show.advanced.settings=Mostra ajustes avan\u00e7ados label.show.ingress.rule=Mostrar Regra de Entrada label.shutdown.provider=Desabilitar provider label.site.to.site.VPN=Site-to-site VPN @@ -1075,18 +1303,27 @@ label.snapshot.limits=Limites de Snapshot label.snapshot.name=Nome do Snapshot label.snapshot.schedule=Configure Snapshots recorrentes label.snapshot=Snapshot +label.snapshot.s=Snapshot(s) label.snapshots=Snapshots +label.SNMP.community=Comunidade SNMP +label.SNMP.port=Porta SNMP label.sockets=Sockets +label.source.ip.address=Endere\u00e7o IP de origem label.source.nat=Source NAT +label.source.nat.supported=SourceNAT Supportado +label.source.port=Porta de origem label.specify.IP.ranges=Especifique range de IP label.specify.vlan=Especificar VLAN label.specify.vxlan=Especificar VXLAN label.SR.name=SR Name-Label +label.srx.details=Detalhes do SRX label.srx=SRX label.start.IP=IP do in\u00edcio label.start.lb.vm=Iniciar LB VM label.start.port=Porta de In\u00edcio label.start.reserved.system.IP=In\u00edcio dos IPs reservados para o sistema +label.start.vlan=VLAN Inicial +label.start.vxlan=VXLAN Inicial label.state=Estado label.static.nat.enabled=NAT est\u00e1tico Habilitado label.static.nat=NAT Est\u00e1tico @@ -1105,6 +1342,7 @@ label.step.4.title=Passo 4\: Rede label.step.5=Passo 5 label.step.5.title=Passo 5\: Revisar label.stickiness=Ader\u00eancia +label.stickiness.method=M\u00e9todo de Stickness label.sticky.cookie-name=Nome do Cookie label.sticky.domain=Dom\u00ednio label.sticky.expire=Expires @@ -1112,13 +1350,16 @@ label.sticky.holdtime=Tempo de espera label.sticky.indirect=Indireto label.sticky.length=Tamanho label.sticky.mode=Modo +label.sticky.name=Nome Sticky label.sticky.nocache=Sem Cache label.sticky.postonly=Apenas publicar label.sticky.prefix=Prefixo label.sticky.request-learn=Solicitar para aprender label.sticky.tablesize=Tamanho da Tabela +label.stop.lb.vm=Pare LB VM label.stop=Parar label.stopped.vms=VMs Paradas +label.storage.pool=Pool de Armazanamento label.storage=Storage label.storage.tags=Tags de Storage label.storage.traffic=Tr\u00e1fego do Storage @@ -1131,11 +1372,15 @@ label.sunday=Domingo label.super.cidr.for.guest.networks=Super CIDR para redes h\u00f3spedes label.supported.services=Servi\u00e7os Suportados label.supported.source.NAT.type=Tipo de Source NAT Suportado +label.supportsstrechedl2subnet=Suporte \u00e0 Streched L2 Subnet label.suspend.project=Suspender Projeto label.switch.type=Tipo de Switch label.system.capacity=Capacidade do Sistema +label.system.offering.for.router=Oferta do Sistema para Roteador label.system.offering=Ofertas de Sistema label.system.service.offering=System Service Offering +label.system.vm.details=Detalhes do System VM +label.system.vm.scaled.up=System VM Escalonada label.system.vms=VM de Sistemas label.system.vm.type=Tipo de VM de Sistema label.system.vm=VM de Sistema @@ -1149,12 +1394,15 @@ label.task.completed=Tarefa completa label.template.limits=Limites do Template label.template=Template label.TFTP.dir=TFTP Directory +label.tftp.root.directory=Diret\u00f3rio raiz do tftp label.theme.default=Tema Padr\u00e3o label.theme.grey=Custom - Grey label.theme.lightblue=Custom - Light Blue +label.threshold=Limiar label.thursday=Quinta label.tier=Camada label.tier.details=Detalhes da camada +label.timeout.in.second = Timeout (segundos) label.timeout=Timeout label.time=Time label.time.zone=Fuso Hor\u00e1rio @@ -1164,30 +1412,44 @@ label.total.cpu=CPU TOTAL label.total.CPU=CPU TOTAL label.total.hosts=Total de Hosts label.total.memory=Total de Mem\u00f3ria +label.total.of.ip=Total de Endere\u00e7os IPs label.total.of.vm=Total VMs label.total.storage=Totam de Storage +label.total.virtual.routers=Total de Roteadores Virtuais +label.total.virtual.routers.upgrade=Total de Roteadores Virtuais que requerem atualiza\u00e7\u00e3o label.total.vms=Total VMs label.traffic.label=Etiqueta de tr\u00e1fego label.traffic.types=Tipos de Tr\u00e1fego label.traffic.type=Tipo de Tr\u00e1fego label.tuesday=Ter\u00e7a label.type.id=Tipo do ID +label.type.lower=tipo label.type=Tipo +label.ucs=UCS label.unavailable=Indispon\u00edvel +label.unhealthy.threshold=Limiar de Insalubridade label.unlimited=Ilimitado label.untagged=N\u00e3o Marcado label.update.project.resources=Atualizar recursos de projeto label.update.ssl= Atualizar Certificado SSL label.update.ssl.cert= Atualizar Certificado SSL label.updating=Atualizando +label.upgrade.required=Atualiza\u00e7\u00e3o \u00e9 necess\u00e1ria +label.upgrade.router.newer.template=Atualize Roteador Para Usar Template Mais Novo label.upload=Enviar label.upload.volume=Enviar o Volume label.url=URL label.usage.interface=Usage Interface +label.usage.sanity.result=Resultado de Sanidade de Uso +label.usage.server=Uso do Servidor label.used=Usado +label.user.data=Dados de Usu\u00e1rio +label.username.lower=nome do usu\u00e1rio label.username=Nome de usu\u00e1rio label.users=Usu\u00e1rios label.user=Usu\u00e1rio +label.user.vm=VM do Usu\u00e1rio +label.use.vm.ips=Usa IPs da VM label.use.vm.ip=Usar IP da VM\: label.value=Valor label.vcdcname=Nome do vCenter DC @@ -1197,8 +1459,15 @@ label.vcenter.datastore=vCenter Datastore label.vcenter.host=vCenter Host label.vcenter.password=vCenter Password label.vcenter.username=vCenter Username +label.vcenter=vcenter label.vcipaddress=Endere\u00e7o IP do vCenter label.version=Vers\u00e3o +label.vgpu.max.resolution=Resulo\u00e7\u00e3o max +label.vgpu.max.vgpu.per.gpu=vGPU por GPU +label.vgpu.remaining.capacity=Capacidade restante +label.vgpu.type=Tipo de vGPU +label.vgpu=VGPU +label.vgpu.video.ram=RAM de v\u00eddeo label.view.all=Visualizar tudo label.view.console=Visualizar Console label.viewing=Visualizar @@ -1206,21 +1475,33 @@ label.view.more=Ver mais label.view.secondary.ips=Visualizar os IPs secund\u00e1rios label.view=Visualizar label.virtual.appliance=Appliance Virtual +label.virtual.appliance.details=Detalhes de appliance virtual label.virtual.appliances=Appliance Virtual +label.virtual.networking=Rede Virtual label.virtual.network=Rede Virtual label.virtual.router=Roteador Virtual +label.virtual.routers.group.account=Grupo de Roteadores Virtuais por conta +label.virtual.routers.group.cluster=Grupo de Roteadores Virtuais por cluster +label.virtual.routers.group.pod=Grupo de Roteadores Virtuais por pod +label.virtual.routers.group.zone=Grupo de Roteadores Virtuais por Zona label.virtual.routers=Roteadores Virtuais label.vlan.id=VLAN ID label.vlan.only=VLAN +label.vlan.range.details=Detalhes de range VLAN label.vlan.range=Intervalo de VLAN +label.vlan.ranges=Range(s) de VLAN label.vlan=VLAN label.vlan.vni.range=Intervalo de VLAN +label.vlan.vni.ranges=Range(s) de VLAN/VNI label.vm.add=Adicionar Inst\u00e2ncia label.vm.destroy=Apagar label.vm.display.name=Nome de exibi\u00e7\u00e3o da VM label.VMFS.datastore=VMFS datastore label.vmfs=VMFS +label.vm.id=ID da VM +label.vm.ip=Endere\u00e7o IP da VM label.vm.name=Nome da VM +label.vm.password=Senha para a VM \u00e9 label.vm.reboot=Reiniciar label.VMs.in.tier=M\u00e1quinas virtuais em camadas label.vmsnapshot.current=isCurrent @@ -1232,18 +1513,30 @@ label.vm.start=In\u00edcio label.vm.state=Estado da VM label.vm.stop=Parar label.vms=VMs +label.vmware.datacenter.id=ID do datacenter VMware +label.vmware.datacenter.name=Nome do datacenter VMware +label.vmware.datacenter.vcenter=Vcednter do datacenter VMware label.vmware.traffic.label=Etiqueta de tr\u00e1fego VMware label.vnet.id=VLAN ID label.vnet=VLAN +label.vnmc.devices=Dispositivos VNMC +label.vnmc=VNMC label.volatile=Vol\u00e1til label.volgroup=Grupo de Volume +label.volume.details=Detalhe do volume label.volume=Disco label.volume.limits=Limites de Disco +label.volume.migrated=Volume migrado label.volume.name=Nome do Disco label.volumes=Discos +label.vpc.distributedvpcrouter=Roteador VPC Distribuido label.vpc.id=VPC ID label.VPC.limits=Limites VPC +label.vpc.offering.details=Detalhes da oferta VPC +label.vpc.offering=Oferta VPC label.VPC.router.details=Detalhes de roteador de VPC +label.vpc.supportsregionlevelvpc=Suporta VPC em N\u00edvel de Regi\u00e3o +label.vpc.virtual.router=Roteador Virtual VPC label.vpc=VPC label.VPN.connection=Conex\u00e3o VPN label.vpn.customer.gateway=Gateway de VPN de usu\u00e1rio @@ -1254,18 +1547,24 @@ label.vsmctrlvlanid=Control VLAN ID label.vsmpktvlanid=Packet VLAN ID label.vsmstoragevlanid=Storage VLAN ID label.vsphere.managed=vSphere Managed +label.vswitch.name=Nome do vSwitch +label.vSwitch.type=Tipo do vSwitch label.vxlan.id=VXLAN ID label.vxlan.range=Intervalo de VXLAN label.vxlan=VXLAN label.waiting=Aguardando label.warn=Avisar +label.warn.upper=AVISO label.wednesday=Quarta-Feira label.weekly=Semanal label.welcome=Bem-Vindo label.welcome.cloud.console=Painel de Controle label.what.is.cloudstack=O que \u00e9 o CloudStack&\#8482? +label.xenserver.tools.version.61.plus=Vers\u00e3o original do XS \u00e9 6.1\\+ +label.Xenserver.Tools.Version61plus=Vers\u00e3o original do XS \u00e9 6.1\\+ label.xenserver.traffic.label=Etiqueta de tr\u00e1fego XenServer label.yes=Sim +label.zone.dedicated=Zona Dedicada label.zone.details=Detalhes de zona label.zone.id=ID da Zona label.zone.lower=Zona @@ -1321,6 +1620,7 @@ message.action.disable.physical.network=Por favor confirme que voc\u00ea deseja message.action.disable.pod=Confirma a desativa\u00e7\u00e3o do POD. message.action.disable.static.NAT=Confirme que voc\u00ea deseja desativar o NAT Est\u00e1tico. message.action.disable.zone=Confirma a desativa\u00e7\u00e3o da zona. +message.action.downloading.template=Baixando template message.action.download.iso=Por favor confirme que voc\u00ea deseja baixar esta ISO. message.action.download.template=Por favor confirme que voc\u00ea deseja baixar este template. message.action.enable.cluster=Confirma a ativa\u00e7\u00e3o do cluster. @@ -1384,6 +1684,7 @@ message.add.system.service.offering=Por favor preencha os dados abaixo para adic message.add.template=Entre com os dados para criar um novo template. message.add.volume=Entre com os dados para criar um novo disco. message.add.VPN.gateway=Favor confirmar que voc\u00ea deseja adicionar um gateway de VPN +message.admin.guide.read=Para VMs baseadas em VMware, por favor leia a sess\u00e3o sobre escalonamento din\u00e2mico no guia do administrador antes de escalonar. Voc\u00ea gostaria de continuar?\\ message.advanced.mode.desc=Escolhe este modelo de rede se deseja ter habilitar o suporte a VLAN. Este modelo permite maior flexibilidade ao administrador ao permitir ofertas de rede customizada, firewall, vpn ou load balancer bem como acesso via rede virtual ou acesso direto. message.advanced.security.group=Escolha esta op\u00e7\u00e3o se desejar utilizar Security Groups para isolamento das VMs guest. message.advanced.virtual=Escolha esta op\u00e7\u00e3o se desejar utilizar VLANs para isolamento das VMs guest. @@ -1397,6 +1698,8 @@ message.attach.volume=Preencha os seguintes dados para conectar o novo disco. Se message.basic.mode.desc=Escolha este modelo de rede se voc\u00ea *n\u00e3o* quer suporte a VLAN. Toda Inst\u00e2ncia criada neste modelo de rede estar\u00e1 ligado diretamente a um IP da rede e ser\u00e1 usado Security Groups para prover seguran\u00e7a e segrega\u00e7\u00e3o. message.change.offering.confirm=Por favor, confirme que voc\u00ea deseja mudar a oferta de servi\u00e7o desta inst\u00e2ncia virtual. message.change.password=Por favor, troque sua senha. +message.cluster.dedicated=Cluster Dedicado +message.cluster.dedication.released=Cluster dedicado liberado message.configure.all.traffic.types=Voc\u00ea tem m\u00faltiplas redes f\u00edsicas; favor configurar etiquetas para cada tipo de tr\u00e1fego clicando no bot\u00e3o Edit. message.configure.ldap=Por favor, confirme que voc\u00ea deseja configurar o LDAP. message.configuring.guest.traffic=Configurando tr\u00e1fego do guest @@ -1404,17 +1707,71 @@ message.configuring.physical.networks=Configurando redes f\u00edsicas message.configuring.public.traffic=Configurando tr\u00e1fego p\u00fablico message.configuring.storage.traffic=Configurando tr\u00e1fego de storage message.confirm.action.force.reconnect=Por favor confirme que voc\u00ea deseja for\u00e7ar a reconex\u00e3o com este host. +message.confirm.add.vnmc.provider=Por favor confirme que voc\u00ea gostaria de adicionar este provedor VNMC. +message.confirm.archive.alert=Por favor confirme que voc\u00ea deseja arquivar este alerta. +message.confirm.archive.event=Por favor confirme que voc\u00ea deseja arquivar este evento +message.confirm.archive.selected.alerts=Por favor confirme que voc\u00ea deseja arquivar os alertas selecionados +message.confirm.archive.selected.events=Por favor confirme que voc\u00ea deseja arquivar os eventos selecionados +message.confirm.attach.disk=Voc\u00ea tem certeza que deseja conectar este disco? +message.confirm.create.volume=Voc\u00ea tem certeza que deseja criar o volume? +message.confirm.current.guest.CIDR.unchanged=Gostaria de manter o CIDR da rede convidado inalterado? +message.confirm.dedicate.cluster.domain.account=Voc\u00ea realmente quer dedicar este cluster ao dom\u00ednio/conta? +message.confirm.dedicate.host.domain.account=Voc\u00ea realmente quer dedicar este host ao dom\u00ednio/conta? +message.confirm.dedicate.pod.domain.account=Voc\u00ea realmente quer dedicar este pod ao dom\u00ednio/conta? +message.confirm.dedicate.zone=Voc\u00ea realmente quer dedicar esta zona ao dom\u00ednio/conta? +message.confirm.delete.acl.list=Voc\u00ea tem certeza que deseja apagar esta lista ACL? +message.confirm.delete.alert=Voc\u00ea tem certeza que deseja apagar este alerta? +message.confirm.delete.BrocadeVcs=Por favor confirme que voc\u00ea deseja remover o Brocade Vcs Switch +message.confirm.delete.ciscoASA1000v=Favor confirmar que voc\u00ea deseja apagar este CiscoASA1000v +message.confirm.delete.ciscovnmc.resource=Por favor confirme que voc\u00ea deseja apagar este recurso CiscoVNMC message.confirm.delete.F5=Por favor confirme que voc\u00ea deseja remover o F5 +message.confirm.delete.internal.lb=Por favor confirme que voc\u00ea deseja remover este LB interno message.confirm.delete.NetScaler=Por favor confirme que voc\u00ea deseja remover o NetScaler +message.confirm.delete.NuageVsp=Por favor confirme que voc\u00ea deseja remover o message.confirm.delete.PA=Por favor, confirme que voc\u00ea deseja remover Palo Alto +message.confirm.delete.secondary.staging.store=Por favor confirme que deseja apagar Armazenamento de Est\u00e1gio Secund\u00e1rio message.confirm.delete.SRX=Por favor confirme que voc\u00ea deseja remover o SRX +message.confirm.delete.ucs.manager=Confirme se voc\u00ea deseja excluir o Gerente UCS. message.confirm.destroy.router=Por favor confirme que voc\u00ea gostaria de destruir este roteador +message.confirm.disable.host=Favor confirmar que voc\u00ea deseja desabilitar este host. +message.confirm.disable.network.offering=Voc\u00ea tem certeza que deseja deshabilitar esta oferta de rede? message.confirm.disable.provider=Por favor confirme que voc\u00ea gostaria de desabilitar este provider +message.confirm.disable.vnmc.provider=Por favor confirme que voc\u00ea gostaria de desabilitar este provedor VNMC. +message.confirm.disable.vpc.offering=Voc\u00ea tem certeza que deseja desabilitar esta oferta de VPC? +message.confirm.enable.host=Por favor confirme que voc\u00ea deseja habilitar este host. +message.confirm.enable.network.offering=Voc\u00ea tem certeza que deseja habilitar esta oferta de rede? message.confirm.enable.provider=Por favor confirme que voc\u00ea gostaria de habilitar este provider +message.confirm.enable.vnmc.provider=Por favor confirme que voc\u00ea gostaria de habilitar este provedor VNMC. +message.confirm.enable.vpc.offering=Voc\u00ea tem certeza que deseja habilitar esta oferta de VPC? message.confirm.join.project=Por favor confirme que voc\u00ea deseja entrar neste projeto +message.confirm.migrate.volume=Voc\u00ea quer migrar este volume? +message.confirm.refresh.blades=Por favor confirme que voc\u00ea deseja renovar as l\u00e2minas. +message.confirm.release.dedicated.cluster=Voc\u00ea deseja liberar este cluster dedicado? +message.confirm.release.dedicated.host=Voc\u00ea deseja liberar esta host dedicado? +message.confirm.release.dedicated.pod=Voc\u00ea deseja liberar esta pod dedicado? +message.confirm.release.dedicated.zone=Voc\u00ea deseja liberar esta zona dedicada? +message.confirm.release.dedicate.vlan.range=Confirme que voc\u00ea deseja liberar esta faixa de VLAN dedicada. +message.confirm.remove.event=Voc\u00ea tem certeza que deseja remover este evento? message.confirm.remove.IP.range=Por favor confirme que voc\u00ea deseja remover este range de IP. +message.confirm.remove.load.balancer=Por favor, confirme que voc\u00ea quer remover a VM do Balanceador de Carga +message.confirm.remove.network.offering=Voc\u00ea tem certeza que deseja remover esta oferta de rede? +message.confirm.remove.selected.alerts=Por favor confirme que voc\u00ea deseja remover os alertas selecionados +message.confirm.remove.selected.events=Por favor confirme que voc\u00ea deseja remover os eventos selecionados +message.confirm.remove.vmware.datacenter=Por favor, confirme que voc\u00ea quer remover este VMware datacenter +message.confirm.remove.vpc.offering=Voc\u00ea tem certeza que deseja remover esta oferta de VPC? +message.confirm.replace.acl.new.one=Voc\u00ea deseja substituir a ACL com uma nova? +message.confirm.scale.up.router.vm=Voc\u00ea realmente quer escalonar a VM do Roteador? +message.confirm.scale.up.system.vm=Voc\u00ea realmente quer escalonar a VM do sistema? message.confirm.shutdown.provider=Por favor confirme que voc\u00ea deseja desligar este provider +message.confirm.start.lb.vm=Confirme que voc\u00ea deseja iniciar esta LB VM +message.confirm.stop.lb.vm=Confirme que voc\u00ea deseja parar esta LB VM +message.confirm.upgrade.router.newer.template=Por favor confirme que voc\u00ea deseja atualizar o roteador para usar template mais recente. +message.confirm.upgrade.routers.account.newtemplate=Por favor confirme que voc\u00ea deseja atualizar todos os roteadores desta conta para o template mais novo. +message.confirm.upgrade.routers.cluster.newtemplate=Por favor confirme que voc\u00ea deseja atualizar todos os roteadores deste cluster para o template mais novo. +message.confirm.upgrade.routers.newtemplate=Por favor confirme que voc\u00ea deseja atualizar todos os roteadores desta zona para o template mais novo. +message.confirm.upgrade.routers.pod.newtemplate=Por favor confirme que voc\u00ea deseja atualizar todos os roteadores neste pod para o template mais novo. message.copy.iso.confirm=Confirme se voc\u00ea deseja copiar a ISO para +message.copy.template.confirm=Voc\u00ea tem certeza que deseja copiar o template ? message.copy.template=Copiar template XXX da zona para message.create.template.vm=Criar VM do template message.create.template=Voc\u00ea tem certeza que deseja criar um template ? @@ -1425,8 +1782,10 @@ message.creating.physical.networks=Criando redes fisicas message.creating.pod=Criando pod message.creating.primary.storage=Criando storage prim\u00e1rio message.creating.secondary.storage=Criando storage secund\u00e1rio +message.creating.systemVM=Criando VMs do sistema (isso pode levar algum tempo) message.creating.zone=Criando zona. message.decline.invitation=Voc\u00ea tem certeza que quer rejeitar este convite de projeto ? +message.dedicated.zone.released=Zona dedicada lioberada message.dedicate.zone=Zona dedicada message.delete.account=Confirme se voc\u00ea deseja excluir esta conta. message.delete.affinity.group=Por favor, confirme que voc\u00ea deseja remover este grupo de afinidade @@ -1450,9 +1809,13 @@ message.disable.snapshot.policy=Voc\u00ea desativou com sucesso sua pol\u00edtic message.disable.user=Por favor confirme que voc\u00ea deseja desabilitar este usu\u00e1rio. message.disable.vpn.access=Confirme se voc\u00ea deseja desativar o acesso VPN. message.disable.vpn=Voc\u00ea tem certeza que deseja desabilitar a VPN? +message.disabling.network.offering=Desabilita oferta de rede +message.disabling.vpc.offering=Desabilitando oferta VPC +message.disallowed.characters=Caracteres n\u00e3o-permitidos\: \\<\\,\\> message.download.ISO=Por favor clique 00000 para baixar o ISO message.download.template=Por favor clique 00000 para baixar o template message.download.volume=Clique 00000 para baixar o disco +message.download.volume.confirm=Por favor confirme que voc\u00ea quer baixar este volume message.edit.account=Editar ("-1" indica que n\u00e3o haver\u00e1 limites para a quantidade de recursos criado) message.edit.confirm=Por favor confirme suas altera\u00e7\u00f5es antes de clicar em "Salvar". message.edit.limits=Especifique os limites para os seguintes recursos. "-1" indica sem limite para o total de recursos criados. @@ -1463,12 +1826,20 @@ message.enabled.vpn=Seu acesso VPN Est\u00e1 ativado e pode ser acessado atrav\u message.enable.user=Por favor confirme que voc\u00ea deseja habilitar este usu\u00e1rio. message.enable.vpn.access=VPN Est\u00e1 desativada para este endere\u00e7o IP. Gostaria de ativar o acesso VPN? message.enable.vpn=Por favor confirme que voc\u00ea deseja acesso VPN habilitado para este endere\u00e7o IP. +message.enabling.network.offering=Habilitando oferta de rede message.enabling.security.group.provider=Habilitar provider de grupo de seguran\u00e7a +message.enabling.vpc.offering=Habilitando oferta VPC +message.enabling.zone.dots=Habilitando Zona.... message.enabling.zone=Habilitando zona +message.enter.seperated.list.multiple.cidrs=Por favor entre a de CIDRs separadas por v\u00edrgula, se houver mais de uma message.enter.token=Por favor entre o token que voc\u00ea recebeu no e-mail privado. message.generate.keys=Por favor confirme que voc\u00ea deseja gerar novas chaves para este usu\u00e1rio. +message.gslb.delete.confirm=Confirme que voc\u00ea deseja apagar este GSLB +message.gslb.lb.remove.confirm=Confirme que voc\u00ea deseja remover o balanceamento de carga deste GSLB message.guest.traffic.in.advanced.zone=O tr\u00e1fego de rede guest \u00e9 para comunica\u00e7\u00e3o entre m\u00e1quinas virtuais do usu\u00e1rio final. Especifique um intervalo de IDs de VLAN para transportar o tr\u00e1fego do guest para cada rede f\u00edsica. message.guest.traffic.in.basic.zone=O tr\u00e1fego de rede guest \u00e9 para comunica\u00e7\u00e3o entre m\u00e1quinas virtuais do usu\u00e1rio final. Especifique um intervalo de endere\u00e7os IP para que CloudStack possa atribuir \u00e0s VMs. Certifique-se que este intervalo n\u00e3o se sobreponha o range de IPs reservados do sistema. +message.host.dedicated=Host dedicado +message.host.dedication.released=Host dedicado liberado message.installWizard.click.retry=Click no bot\u00e3o para tentar executar novamente. message.installWizard.copy.whatIsACluster=Um cluster prov\u00ea uma maneira de agrupar hosts. Os hosts em um cluster tem hardware id\u00eantico, rodam o mesmo hypervisor, est\u00e3o na mesma subnet, acessam o mesmo storage compartilhado. Inst\u00e2ncias de m\u00e1quinas virtuais (VMs) podem ser migradas a quente - live migration - de um host para outro host no mesmo cluster, sem interromper o servi\u00e7o para o usu\u00e1rio. Um Cluster \u00e9 a terceira maior unidade organizacional em uma instala\u00e7\u00e3o CloudStack&\#8482; . Clusters est\u00e3o contidos em pods e pods est\u00e3o contidos em zonas.

O CloudStack&\#8482; permite m\u00faltiplos clusters em uma mesma cloud, entretanto para a instala\u00e7\u00e3o b\u00e1sica, n\u00f3s iremos precisar apenas de um cluster. message.installWizard.copy.whatIsAHost=Um host \u00e9 um \u00fanico computador. Os Hosts prov\u00eaem os recursos computacionais para executar as m\u00e1quinas virtuais. Cada host possu\u00ed o software do hypervisor instalado nele para gerenciar as guest VMs (Exceto os hosts bare metal, que s\u00e3o um caso especial discutido no Guia Avan\u00e7ado de Instala\u00e7\u00e3o). Por exemplo, um servidor Linux com KVM habilitado, um servidor Citrix XenServer e um servidor ESXi s\u00e3o hosts. Na Instala\u00e7\u00e3o B\u00e1sica, n\u00f3s utilizamos um \u00fanico host rodando XenServer ou KVM.

O host \u00e9 a menor unidade organizacional dentro de uma instala\u00e7\u00e3o CloudStack&\#8482; . Hosts est\u00e3o contidos dentro de Clusters, clusters est\u00e3o contidos dentro de pods e pods est\u00e3o contidos dentro de zonas. @@ -1503,12 +1874,14 @@ message.installWizard.tooltip.configureGuestTraffic.guestGateway=O gateway que o message.installWizard.tooltip.configureGuestTraffic.guestNetmask=A m\u00e1scara de rede da subrede que os guests devem usar message.installWizard.tooltip.configureGuestTraffic.guestStartIp=O range de endere\u00e7os IP que estar\u00e1 dispon\u00edvel para aloca\u00e7\u00e3o para os guests nesta zona. Caso uma Interface de Rede seja utilizada, estes IPs devem estar no mesmo CIDR que o CIDR do pod. message.installWizard.tooltip.configureGuestTraffic.name=Um nome para sua rede +message.instance.scaled.up.confirm=Voc\u00ea realmente quer escalonar sua inst\u00e2ncia? message.instanceWizard.noTemplates=Voc\u00ea n\u00e3o possui nenhum template dispon\u00edvel; por favor adicione um template compat\u00edvel e reinicie o wizard de inst\u00e2ncia. message.ip.address.changed=Seu endere\u00e7o IP pode ter mudado; voc\u00ea gostaria de atualizar a listagem ? Note que neste caso o painel de detalhes ir\u00e1 fechar. message.iso.desc=Imagem de disco contendo dados ou m\u00eddia de sistema operacional boot\u00e1vel message.join.project=Voc\u00ea agora entrou em um projeto. Por favor troque para a vis\u00e3o de Projeto para visualizar o projeto. message.launch.vm.on.private.network=Voc\u00ea deseja executar a sua inst\u00e2ncia na sua pr\u00f3pria rede privada dedicada? message.launch.zone=A zona est\u00e1 pronta para ser executada; por favor, v\u00e1 para o pr\u00f3ximo passo. +message.listView.subselect.multi=(Ctrl/Cmd-click) message.lock.account=Confirme se voc\u00ea deseja bloquear esta conta. Bloqueando a conta, todos os Usu\u00e1rios desta conta n\u00e3o estar\u00e3o mais habilitados a gerenciar os recursos na nuvem. Os recursos existentes (Cloud Server) ainda poder\u00e3o ser acessados. message.migrate.instance.confirm=Confirme o host que voc\u00ea deseja migrar a inst\u00e2ncia virtual. message.migrate.instance.to.host=Por favor confirme que voc\u00ea deseja migrar a inst\u00e2ncia para outro host. @@ -1516,8 +1889,11 @@ message.migrate.instance.to.ps=Por favor confirme que voc\u00ea deseja migrar a message.migrate.router.confirm=Por favor confirme o host que voc\u00ea deseja migrar o roteador para\: message.migrate.systemvm.confirm=Por favor confirme o host para o qual voc\u00ea deseja migrar a VM de sistema\: message.migrate.volume=Por favor confirme que voc\u00ea deseja migrar o volume para outro storage prim\u00e1rio. +message.network.addVM.desc=Por favor especifique a rede onde voc\u00ea gostaria de adicionar esta VM. Uma nova NIC ser\u00e1 adicionada a esta rede. +message.network.addVMNIC=Por favor confirme que voc\u00ea gostaria de adicionar uma nova VM NIC para esta rede. message.new.user=Especifique abaixo para adicionar novos usu\u00e1rios para a conta message.no.affinity.groups=Voc\u00ea n\u00e3o tem nenhum grupo de afinidade. Por favor, v\u00e1 para o pr\u00f3ximo passo. +message.no.host.available=Sem hosts dispon\u00edveis para Migra\u00e7\u00e3o message.no.network.support.configuration.not.true=Voc\u00ea n\u00e3o possui nenhuma zona com grupos de seguran\u00e7a habilitado. Assim sendo, n\u00e3o possui recursos adicionais de rede. Por favor continue para o passo 5. message.no.network.support=O hypervisor escolhido, vSphere, n\u00e3o possui nenhum recurso de rede adicional. Por favor, v\u00e1 para o passo 5. message.no.projects.adminOnly=Voc\u00ea n\u00e3o possui nenhum projeto.
Por favor solicite ao seu administrador a cria\u00e7\u00e3o de um novo projeto. @@ -1535,9 +1911,12 @@ message.please.select.a.configuration.for.your.zone=Por favor selecione uma conf message.please.select.a.different.public.and.management.network.before.removing=Por favor selecione uma rede p\u00fablica e de gerenciamento diferente antes de remover message.please.select.networks=Por favor selecione as redes para sua m\u00e1quina virtual. message.please.wait.while.zone.is.being.created=Por favor, espere enquanto sua zona est\u00e1 sendo criada; isto pode demorar um pouco... +message.pod.dedication.released=Pod Dedicado liberado +message.portable.ip.delete.confirm=Favor confirmar que voc\u00ea deseja apagar esta Faixa de IPs Port\u00e1veis message.project.invite.sent=Convite enviado para o usu\u00e1rio; Eles ser\u00e3o adicionados ao projeto ap\u00f3s aceitarem o convite message.public.traffic.in.advanced.zone=O tr\u00e1fego p\u00fablico \u00e9 gerado quando as VMs na nuvem acessam a internet. Os IPs acess\u00edveis ao p\u00fablico devem ser alocados para essa finalidade. Os usu\u00e1rios finais podem usar a interface do usu\u00e1rio CloudStack para adquirir esses IPs afim de implementar NAT entre a sua rede de guests e sua rede p\u00fablica.

Forne\u00e7a pelo menos um intervalo de endere\u00e7os IP para o tr\u00e1fego de internet. message.public.traffic.in.basic.zone=O tr\u00e1fego p\u00fablico \u00e9 gerado quando as VMs na nuvem acessam a Internet ou prestam servi\u00e7os aos clientes atrav\u00e9s da Internet. Os IPs acess\u00edveis ao p\u00fablico devem ser alocados para essa finalidade. Quando uma inst\u00e2ncia \u00e9 criada, um IP a partir deste conjunto de IPs p\u00fablicos ser\u00e3o destinados \u00e0 inst\u00e2ncia, al\u00e9m do endere\u00e7o IP guest. Um NAT est\u00e1tico 1-1 ser\u00e1 criada automaticamente entre o IP p\u00fablico e IP guest. Os usu\u00e1rios finais tamb\u00e9m podem usar a interface de usu\u00e1rio CloudStack para adquirir IPs adicionais afim de se implementar NAT est\u00e1tico entre suas inst\u00e2ncias e o IP p\u00fablico. +message.read.admin.guide.scaling.up=Por favor leia a sess\u00e3o sobre escalonamento din\u00e2mico no guia do administrador antes de escalonar. message.recover.vm=Por favor, confirme a recupera\u00e7\u00e3o desta VM. message.redirecting.region=Redirecionando para regi\u00e3o... message.reinstall.vm=NOTA\: Proceda com cuidado. Isso far\u00e1 com que a m\u00e1quina virtual seja re-instalada a partir do Template. Todos os datos do disco ROOT ser\u00e3o perdidos. Volumes de Dados adicionais, se houver, n\u00e3o ser\u00e3o alterados. @@ -1552,6 +1931,7 @@ message.restart.mgmt.server=Reinicie o(s) servidor(es) de gerenciamento para que message.restart.mgmt.usage.server=Por favor reinicie seu servidor(es) de gerenciamento e seu servidor(es) de utiliza\u00e7\u00e3o para as mudan\u00e7as entrarem em efeito. message.restart.network=Por favor confirme que voc\ufffd deseja reiniciar a rede message.restart.vpc=Favor confirmar que voc\u00ea deseja reiniciar a VPC +message.restoreVM=Quer restaurar a VM? message.security.group.usage=(Use Ctrl-clique para selecionar todos os Security Groups) message.select.affinity.groups=Por favor, selecione quaisquer grupos de afinidade que voc\u00ea deseja que esta VM perten\u00e7a\: message.select.a.zone=A zone tipicamente corresponde a um \u00fanico datacenter. M\u00faltiplas zonas auxiliam a cloud a ser mais confi\u00e1vel provendo isolamento f\u00edsico e redund\u00e2ncia. @@ -1560,10 +1940,14 @@ message.select.iso=Por favor selecione um ISO para sua nova inst\u00e2ncia virtu message.select.item=Por favor selecione um item. message.select.security.groups=Por favor selecione o(s) grupo(s) de seguran\u00e7a para sua nova VM message.select.template=Por favor selecione um template para sua nova inst\u00e2ncia virtual. +message.select.tier=Por favor, selecione um tier +message.set.default.NIC.manual=Por favor atualize manualmente o NIC padr\u00e3o desta VM agora. +message.set.default.NIC=Por favor confirme que voc\u00ea quer tornar este NIC o padr\u00e3o para esta VM, message.setup.physical.network.during.zone.creation=Ao adicionar uma zona avan\u00e7ada, voc\u00ea precisa configurar uma ou mais redes f\u00edsicas. Cada rede corresponde \u00e0 uma Interface de Rede no hypervisor. Cada rede f\u00edsica pode ser utilizada para transportar um ou mais tipos de tr\u00e1fego, com certas restri\u00e7\u00f5es sobre como eles podem ser combinados.
Arraste e solte um ou mais tipos de tr\u00e1fego em cada rede f\u00edsica. message.setup.physical.network.during.zone.creation.basic=Quando adicionar uma zona b\u00e1sica, voc\u00ea pode configurar uma rede f\u00edsica, que corresponde a uma Interface de Rede no hypervisor. A rede carrega diversos tipos de tr\u00e1fego.

Voc\u00ea pode adicionar e remover outros tipos de tr\u00e1fego na mesma interface de rede f\u00edsica. message.setup.successful=Cloud configurada com sucesso\! message.snapshot.schedule=Voc\u00ea pode configurar Snapshots recorrentes agendados selecionando as op\u00e7\u00f5es Dispon\u00edveis abaixo +message.specifiy.tag.key.value=Por favor especifique chave e valor da tag message.specify.url=Por favor especifique a URL message.step.1.continue=Selecione o template ou ISO para continuar message.step.1.desc=Por favor, selecione um template para a sua nova inst\u00e2ncia virtual. Voc\u00ea pode tamb\u00e9m escolher um template limpo e instalar a partir de uma imagem ISO. @@ -1573,7 +1957,10 @@ message.step.4.continue=Selecione pelo menos uma rede para continuar message.step.4.desc=Selecione a rede principal que a sua inst\u00e2ncia virtual estar\u00e1 conectada. message.storage.traffic=Tr\u00e1fego entre os recursos internos do CloudStack, incluindo todos os componentes que se comunicam com o servidor de gerenciamento tais como hosts e m\u00e1quinas virtuais de sistema CloudStack. Por favor, configure o tr\u00e1fego do storage aqui. message.suspend.project=Voc\u00ea tem certeza que deseja suspender este projeto ? +message.systems.vms.ready=VM de Sistema prontas. +message.template.copying=O template est\u00e1 sendo copiado. message.template.desc=Imagem de SO que pode ser utilizada para bootar VMs +message.tier.required=Tier \u00e9 obrigat\u00f3rio message.tooltip.dns.1=Endere\u00e7o de um servidor DNS que ser\u00e1 utilizado por todas as VMs da Zone. A faixa de IPs p\u00fablicos para essa Zone deve possuir uma rota para o servidor configurado. message.tooltip.dns.2=Um servidor DNS secund\u00e1rio para ser utilizado pelas VMs nesta zona. Os endere\u00e7os IP p\u00fablicos nesta zona devem ter rota para este servidor. message.tooltip.internal.dns.1=Nome de um servidor DNS que ser\u00e1 utilizado pelas VMs internas de sistema do CloudStack nesta zona. Os endere\u00e7os privados dos pods devem ter uma rota para este servidor. @@ -1586,19 +1973,44 @@ message.tooltip.zone.name=Um nome para a zona. message.update.os.preference=Escolha o SO de preferencia para este host. Todas Inst\u00e2ncias com preferencias similares ser\u00e3o alocadas neste host antes de tentar em outro. message.update.resource.count=Por favor confirme que voc\u00ea quer atualizar a contagem de recursos para esta conta. message.update.ssl=Envie o novo certificado SSL X.509 para ser atualizado em cada console proxy\: +message.update.ssl.failed=Atualiza\u00e7\u00e3o do Certificado SSL falhou +message.update.ssl.succeeded=Atualiza\u00e7\u00e3o do Certificado SSL feita com sucesso +message.validate.accept=Por favor entre com uma extens\u00e3o v\u00e1lida. +message.validate.creditcard=Por favor entre um n\u00famero de cart\u00e3o de cr\u00e9dito v\u00e1lido. +message.validate.date.ISO=Por favor entre com uma data v\u00e1lida (ISO). +message.validate.date=Por favor entre com uma data v\u00e1lida. +message.validate.digits=Por favor entre com d\u00edgitos apenas. +message.validate.email.address=Por favor entre um email v\u00e1lido. +message.validate.equalto=Por favor entre com o mesmo valor novamente. +message.validate.fieldrequired=Este campo \u00e9 obrigat\u00f3rio. +message.validate.fixfield=Por favor, arrume este campo. message.validate.instance.name=Nomes de inst\u00e2ncias n\u00e3o podem ter mais de 63 caracteres. Somente letras ASCII a~z, A~Z, d\u00edgitos 0~9 e h\u00edfen s\u00e3o permitidos. Deve come\u00e7ar com uma letra e terminar com uma letra ou d\u00edgito. message.validate.invalid.characters=Caracteres inv\u00e1lidos encontrados, por favor corrija. +message.validate.maxlength=Por favor entre com mais de [0] caracteres. +message.validate.max=Por favor entre com um valor menor que ou igual a {0}. +message.validate.minlength=Por favor entre com pelo menos [0] caracteres. +message.validate.number=Por favor entre um n\u00famero v\u00e1lido. +message.validate.range.length=Por favor entre com um valor com tamanho entre [0] e [1] caracteres. +message.validate.range=Por favor entre com um valor com valor entre [0] e [1]. +message.validate.URL=Por favor entre uma URL v\u00e1lida. message.virtual.network.desc=Rede virtual dedicado para sua conta. O Dom\u00ednio de broadcast Est\u00e1 na VLAN e todo acesso a internet \u00e9 roteado atrav\u00e9s do virtual router. message.vm.create.template.confirm=Criar Template reiniciar\u00e1 a VM automaticamente. message.vm.review.launch=Por favor revise a informa\u00e7\u00e3o abaixo e confirme que sua inst\u00e2ncia virtual est\u00e1 correta antes de executa-la. +message.vnmc.available.list=VNMC n\u00e3o est\u00e1 dispon\u00edvel na lista de provedores. +message.vnmc.not.available.list=VNMC n\u00e3o est\u00e1 dispon\u00edvel na lista de provedores. message.volume.create.template.confirm=Confirme se voc\u00ea deseja criar um template a partir deste disco. A cria\u00e7\u00e3o do template pode levar alguns minutos ou mais dependendo do tamanho do disco. +message.waiting.for.builtin.templates.to.load=Aguardando a carga dos templates integrados... +message.XSTools61plus.update.failed=A atualiza\u00e7\u00e3o do campo Original XS Version is 6.1\\+ falhou. Erro\: message.you.must.have.at.least.one.physical.network=Voc\u00ea deve ter pelo menos uma rede f\u00edsica +message.your.cloudstack.is.ready=Seu CLoudStack est\u00e1 pronto\! message.Zone.creation.complete=Cria\u00e7\u00e3o de zona completa message.zone.creation.complete.would.you.like.to.enable.this.zone=Cria\u00e7\u00e3o de zona completa. Voc\u00ea gostaria de habilitar esta zona? message.zone.no.network.selection=A zona que voc\u00ea selecionou n\u00e3o possui nenhuma rede para ser escolhida. message.zone.step.1.desc=Seleciona o modelo de rede para a zona. message.zone.step.2.desc=Entre a informa\u00e7\u00e3o a seguir para adicionar uma nova zona message.zone.step.3.desc=Entre a informa\u00e7\u00e3o a seguir para adicionar um novo pod +message.zoneWizard.enable.local.storage=ALERTA\: se voc\u00ea habilitar storage local para esta zona, voc\u00ea deve fazer o seguinte, dependendo se voc\u00ea quiser que suas m\u00e1quinas virtuais de sistema inicializem\:

1. Se m\u00e1quinas virtuais de sistema precisam ser iniciadas em storage prim\u00e1ria, storage prim\u00e1ria precisa ser adicionada \u00e0 zona ap\u00f3s a cria\u00e7\u00e3o. Voc\u00ea tamb\u00e9m deve ativar a zona em um estado desabilitado.

2. Se m\u00e1quinas virtuais de sistema precisam ser iniciadas em storage local, system.vm.use.local.storage precisa ser estabelecida como verdadeira antes de voc\u00ea habilitar a zona.


Voc\u00ea quer continuar? +messgae.validate.min=Por favor entre com um valor maior que ou igual a {0}. mode=Modo network.rate=Taxa de Transfer\u00eancia notification.reboot.instance=Reiniciar inst\u00e2ncia @@ -1615,6 +2027,7 @@ state.Completed=Completo state.Creating=Criando state.Declined=Recusado state.Destroyed=Destru\u00eddo +state.detached=Desanexado state.Disabled=Desativado state.Enabled=Habilitado state.Error=Erro diff --git a/client/WEB-INF/classes/resources/messages_ru_RU.properties b/client/WEB-INF/classes/resources/messages_ru_RU.properties index 94f2481a425..ee7c110fd08 100644 --- a/client/WEB-INF/classes/resources/messages_ru_RU.properties +++ b/client/WEB-INF/classes/resources/messages_ru_RU.properties @@ -21,73 +21,76 @@ confirm.enable.swift=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u04 error.could.not.enable.zone=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443 error.installWizard.message=\u0427\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043d\u0430\u0437\u0430\u0434 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. error.invalid.username.password=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0456\u0439 \u043b\u043e\u0433\u0438\u043d \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c -error.login=\u0412\u0430\u0448\u0435 \u0438\u043c\u044f/\u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438. +error.login=\u0412\u0430\u0448\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0430\u0448\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c. error.menu.select=\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432. -error.mgmt.server.inaccessible=\u0421\u0435\u0440\u0432\u0435\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0437\u0436\u0435. +error.mgmt.server.inaccessible=\u0421\u0435\u0440\u0432\u0435\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u043e\u0437\u0436\u0435. error.password.not.match=\u041f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 -error.please.specify.physical.network.tags=\u0421\u0435\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u043f\u043e\u043a\u0430 \u0432\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u0433\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438. -error.session.expired=\u0412\u0430\u0448\u0430 \u0441\u0435\u0441\u0441\u0438\u044f \u0431\u044b\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 -error.something.went.wrong.please.correct.the.following=\u0427\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0438\u0441\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 +error.please.specify.physical.network.tags=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0443\u043a\u0430\u0436\u0435\u0442\u0435 \u0442\u0435\u0433\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438. +error.session.expired=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u0438\u0441\u0442\u0435\u043a\u043b\u043e. +error.something.went.wrong.please.correct.the.following=\u0427\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043d\u0430\u0437\u0430\u0434 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. error.unable.to.reach.management.server=\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f -error.unresolved.internet.name=\u0412\u0430\u0448\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0438\u043c\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c -force.delete.domain.warning=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0438 \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0438 \u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. -force.delete=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c -force.remove.host.warning=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u044d\u0442\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u043d CloudStack \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043a\u0438 \u0432\u0441\u0435\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0443\u0437\u0435\u043b \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.. -force.remove=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c -force.stop.instance.warning=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u0443\u044e\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435/\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. -force.stop=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c +error.unresolved.internet.name=\u0412\u0430\u0448\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0438\u043c\u044f \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c. +force.delete.domain.warning=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\: \u0412\u044b\u0431\u043e\u0440 \u044d\u0442\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0438\u043c\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +force.delete=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 +force.remove.host.warning=\u0412\u044b\u0431\u043e\u0440 \u044d\u0442\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u043f\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. +force.remove=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 +force.stop.instance.warning=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435/\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. +force.stop=\u041f\u0440\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430. ICMP.code=\u041a\u043e\u0434 ICMP ICMP.type=\u0422\u0438\u043f ICMP image.directory=\u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u043e\u0431\u0440\u0430\u0437\u0430\u043c\u0438 inline=\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 instances.actions.reboot.label=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 label.about.app=\u041e CloudStack -label.about=\u041e +label.about=\u041e \u0441\u0438\u0441\u0442\u0435\u043c\u0435 label.accept.project.invitation=\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 label.account.and.security.group=\u0410\u043a\u043a\u0430\u0443\u043d\u0442, \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 label.account.id=ID \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 +label.account.lower=\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c label.account.name=\u0418\u043c\u044f \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 label.account.specific=\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430 \u0430\u043a\u043a\u0430\u0443\u043d\u043d\u0442\u0430 label.accounts=\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 label.account=\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c label.acquire.new.ip=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 IP label.acquire.new.secondary.ip=\u0417\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 -label.action.attach.disk.processing=\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430... -label.action.attach.disk=\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0434\u0438\u0441\u043a -label.action.attach.iso.processing=\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 ISO... -label.action.attach.iso=\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c ISO -label.action.cancel.maintenance.mode.processing=\u041e\u0442\u043c\u0435\u043d\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f... -label.action.cancel.maintenance.mode=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f +label.action.attach.disk.processing=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430... +label.action.attach.disk=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0438\u0441\u043a +label.action.attach.iso.processing=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 ISO... +label.action.attach.iso=\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c ISO +label.action.cancel.maintenance.mode.processing=\u0412\u044b\u0445\u043e\u0434 \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f... +label.action.cancel.maintenance.mode=\u0412\u044b\u0439\u0442\u0438 \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. label.action.change.password=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c label.action.change.service.processing=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b... label.action.change.service=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443 +label.action.copy.ISO.processing=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ISO... label.action.copy.ISO=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c ISO -label.action.copy.template=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d +label.action.copy.template.processing=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430... +label.action.copy.template=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d label.action.create.template.from.vm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 \u0412\u041c label.action.create.template.from.volume=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 \u0442\u043e\u043c\u0430 label.action.create.template.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430... label.action.create.template=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d -label.action.create.vm.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0412\u041c... -label.action.create.vm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0412\u041c -label.action.create.volume.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u043e\u043c\u0430... -label.action.create.volume=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u043e\u043c +label.action.create.vm.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b... +label.action.create.vm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 +label.action.create.volume.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430... +label.action.create.volume=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0441\u043a label.action.delete.account.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438... label.action.delete.account=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c label.action.delete.cluster.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430... label.action.delete.cluster=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 -label.action.delete.disk.offering.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430... -label.action.delete.disk.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.action.delete.disk.offering.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u0443\u0433\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430... +label.action.delete.disk.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.action.delete.domain.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u0430... label.action.delete.domain=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u043e\u043c\u0435\u043d -label.action.delete.firewall.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u0430... +label.action.delete.firewall.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430... label.action.delete.firewall=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u0430 -label.action.delete.ingress.rule.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430... -label.action.delete.ingress.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e -label.action.delete.IP.range.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 IP... -label.action.delete.IP.range=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP +label.action.delete.ingress.rule.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430... +label.action.delete.ingress.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.action.delete.IP.range.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432... +label.action.delete.IP.range=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 label.action.delete.ISO.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 ISO... label.action.delete.ISO=\u0423\u0434\u0430\u043b\u0438\u0442\u044c ISO -label.action.delete.load.balancer.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438... +label.action.delete.load.balancer.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.... label.action.delete.load.balancer=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.action.delete.network.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0438... label.action.delete.network=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0435\u0442\u044c @@ -100,8 +103,8 @@ label.action.delete.primary.storage.processing=\u0423\u0434\u0430\u043b\u0435\u0 label.action.delete.primary.storage=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.action.delete.secondary.storage.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430... label.action.delete.secondary.storage=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 -label.action.delete.security.group.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438... -label.action.delete.security.group=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 +label.action.delete.security.group.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 Security Group.... +label.action.delete.security.group=\u0423\u0434\u0430\u043b\u0438\u0442\u044c Security Group label.action.delete.service.offering.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430... label.action.delete.service.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 label.action.delete.snapshot.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u0430... @@ -117,73 +120,74 @@ label.action.delete.zone.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u label.action.delete.zone=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u043e\u043d\u0443 label.action.destroy.instance.processing=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b... label.action.destroy.instance=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 -label.action.destroy.systemvm.processing=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0412\u041c... -label.action.destroy.systemvm=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0412\u041c -label.action.detach.disk.processing=\u041e\u0442\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430... -label.action.detach.disk=\u041e\u0442\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0434\u0438\u0441\u043a -label.action.detach.iso.processing=\u041e\u0442\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 ISO -label.action.detach.iso=\u041e\u0442\u043a\u0440\u0435\u043f\u0438\u0442\u044c ISO +label.action.destroy.systemvm.processing=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0412\u041c.... +label.action.destroy.systemvm=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c +label.action.detach.disk.processing=\u041e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430.... +label.action.detach.disk=\u041e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0434\u0438\u0441\u043a +label.action.detach.iso.processing=\u041e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 ISO.... +label.action.detach.iso=\u041e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c ISO label.action.disable.account.processing=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -label.action.disable.account=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c -label.action.disable.cluster.processing=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430... -label.action.disable.cluster=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 -label.action.disable.nexusVswitch=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c NexusVswitch +label.action.disable.account=\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c +label.action.disable.cluster.processing=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430... +label.action.disable.cluster=\u041e\u0442\u043a\u043b\u044e\u0447\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 +label.action.disable.nexusVswitch=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c Nexus 1000v label.action.disable.physical.network=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c -label.action.disable.pod.processing=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d\u0434\u0430. -label.action.disable.pod=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0435\u043d\u0434 -label.action.disable.static.NAT.processing=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e NAT... -label.action.disable.static.NAT=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 NAT -label.action.disable.user.processing=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -label.action.disable.user=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -label.action.disable.zone.processing=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u044b... -label.action.disable.zone=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443 +label.action.disable.pod.processing=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d\u0434\u0430... +label.action.disable.pod=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0435\u043d\u0434. +label.action.disable.static.NAT.processing=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432.... +label.action.disable.static.NAT=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c Static NAT +label.action.disable.user.processing=\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.... +label.action.disable.user=\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f +label.action.disable.zone.processing=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u044b... +label.action.disable.zone=\u041e\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443 label.action.download.ISO=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c ISO label.action.download.template=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d -label.action.download.volume.processing=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0442\u043e\u043c\u0430... -label.action.download.volume=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u043e\u043c -label.action.edit.account=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c -label.action.edit.disk.offering=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 -label.action.edit.domain=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d -label.action.edit.global.setting=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +label.action.download.volume.processing=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0438\u0441\u043a\u0430.... +label.action.download.volume=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0438\u0441\u043a +label.action.edit.account=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c +label.action.edit.disk.offering=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 +label.action.edit.domain=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u043e\u043c\u0435\u043d +label.action.edit.global.setting=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 label.action.edit.host=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0437\u0435\u043b -label.action.edit.instance=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 -label.action.edit.ISO=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c ISO -label.action.edit.network.offering=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 -label.action.edit.network.processing=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438... -label.action.edit.network=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u044c +label.action.edit.instance=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 +label.action.edit.ISO=\u0418\u0437\u043c\u0435\u043d\u0438\u0438\u0442\u044c ISO +label.action.edit.network.offering=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 +label.action.edit.network.processing=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0442\u0438.... +label.action.edit.network=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0435\u0442\u044c label.action.edit.pod=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043d\u0434 -label.action.edit.primary.storage=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 -label.action.edit.resource.limits=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 -label.action.edit.service.offering=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 -label.action.edit.template=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d -label.action.edit.user=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -label.action.edit.zone=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043e\u043d\u0443 -label.action.enable.account.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430... -label.action.enable.account=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c +label.action.edit.primary.storage=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 +label.action.edit.resource.limits=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f +label.action.edit.service.offering=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f +label.action.edit.template=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d +label.action.edit.user=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f +label.action.edit.zone=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043e\u043d\u0443 +label.action.enable.account.processing=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.... +label.action.enable.account=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c label.action.enable.cluster.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430... label.action.enable.cluster=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 -label.action.enable.maintenance.mode.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f... -label.action.enable.maintenance.mode=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f -label.action.enable.nexusVswitch=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c NexusVswitch +label.action.enable.maintenance.mode.processing=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f..... +label.action.enable.maintenance.mode=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f +label.action.enable.nexusVswitch=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c Nexus 1000v label.action.enable.physical.network=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c label.action.enable.pod.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d\u0434\u0430.. label.action.enable.pod=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0435\u043d\u0434 -label.action.enable.static.NAT.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e NAT.. -label.action.enable.static.NAT=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 NAT -label.action.enable.user.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f... -label.action.enable.user=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -label.action.enable.zone.processing=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u044b... -label.action.enable.zone=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443 +label.action.enable.static.NAT.processing=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432.... +label.action.enable.static.NAT=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c Static NAT +label.action.enable.user.processing=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.... +label.action.enable.user=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f +label.action.enable.zone.processing=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0437\u043e\u043d\u044b... +label.action.enable.zone=\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043e\u043d\u0443 +label.action.expunge.instance=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0412\u041c label.action.force.reconnect.processing=\u041f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435... label.action.force.reconnect=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c -label.action.generate.keys.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439... -label.action.generate.keys=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 -label.action.list.nexusVswitch=\u041b\u0438\u0441\u0442 NexusVswitch -label.action.lock.account.processing=\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 +label.action.generate.keys.processing=\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439... +label.action.generate.keys=\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 +label.action.list.nexusVswitch=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Nexus 1000v +label.action.lock.account.processing=\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.... label.action.lock.account=\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c label.action.manage.cluster.processing=\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f... label.action.manage.cluster=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c -label.action.migrate.instance.processing=\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043c\u0430\u0448\u0438\u043d\u044b...... +label.action.migrate.instance.processing=\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u044b.... label.action.migrate.instance=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u0443 label.action.migrate.router.processing=\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430... label.action.migrate.router=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u043e\u0443\u0442\u0435\u0440 @@ -197,22 +201,23 @@ label.action.reboot.systemvm.processing=\u041f\u0435\u0440\u0435\u0437\u0430\u04 label.action.reboot.systemvm=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c label.action.recurring.snapshot=\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u044b\u0435 \u0441\u043d\u0438\u043c\u043a\u0438 label.action.register.iso=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f ISO +label.action.register.template=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u043e URL label.action.release.ip.processing=\u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 IP... label.action.release.ip=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c IP label.action.remove.host.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430... label.action.remove.host=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b label.action.reset.password.processing=\u0421\u0431\u0440\u043e\u0441 \u043f\u0430\u0440\u043e\u043b\u044f... label.action.reset.password=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -label.action.resize.volume.processing=Resizing Volume.... -label.action.resize.volume=Resize Volume -label.action.resource.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +label.action.resize.volume.processing=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0438\u0441\u043a\u0430.... +label.action.resize.volume=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 +label.action.resource.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u043e\u0432 label.action.restore.instance.processing=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b... label.action.restore.instance=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 label.action.revert.snapshot.processing=\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0441\u043d\u0438\u043c\u043a\u0443... label.action.revert.snapshot=\u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u0441\u043d\u0438\u043c\u043a\u0443 label.action.start.instance.processing=\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u0430\u0448\u0438\u043d\u044b... label.action.start.instance=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 -label.action.start.router.processing=\u0417\u0430\u043f\u0443\u0441\u043a \u0440\u043e\u0443\u0442\u0435\u0440\u0430 +label.action.start.router.processing=\u0417\u0430\u043f\u0443\u0441\u043a \u0440\u043e\u0443\u0442\u0435\u0440\u0430.... label.action.start.router=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u043e\u0443\u0442\u0435\u0440 label.action.start.systemvm.processing=\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0412\u041c... label.action.start.systemvm=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c @@ -225,53 +230,57 @@ label.action.stop.systemvm=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u044 label.actions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f label.action.take.snapshot.processing=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u0430... label.action.take.snapshot=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a... +label.action=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f label.action.unmanage.cluster.processing=\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c... label.action.unmanage.cluster=\u041f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c label.action.update.OS.preference.processing=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u041e\u0421... -label.action.update.OS.preference=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u041e\u0421 -label.action.update.resource.count.processing=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432... -label.action.update.resource.count=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +label.action.update.OS.preference=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041e\u0421 +label.action.update.resource.count.processing=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +label.action.update.resource.count=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0447\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 label.action.vmsnapshot.create=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0412\u041c label.action.vmsnapshot.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0412\u041c label.action.vmsnapshot.revert=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0412\u041c label.activate.project=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 label.active.sessions=\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 label.add.accounts.to=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 -label.add.accounts=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b -label.add.account.to.project=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 -label.add.account=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 +label.add.accounts=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 +label.add.account.to.project=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 +label.add.account=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c label.add.ACL=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c ACL label.add.affinity.group=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e affinity group label.add.by.cidr=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a CIDR label.add.by.group=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0433\u0440\u0443\u043f\u043f\u0435 label.add.by=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c label.add.cluster=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 -label.add.compute.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 -label.add.direct.iprange=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u0440\u044f\u043c\u044b\u0445 IP -label.add.disk.offering=\u041d\u043e\u0432\u044b\u0439 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.add.compute.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f +label.add.direct.iprange=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 +label.add.disk.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.add.domain=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043c\u0435\u043d -label.add.egress.rule=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.added.network.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0443\u0441\u043b\u0443\u0433\u0438 +label.add.egress.rule=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.add.F5.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c F5 \u0443\u0441\u0442\u0440\u043e\u0439\u0432\u043e label.add.firewall=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u0430. label.add.guest.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u043e\u0441\u0442\u0435\u0432\u0443\u044e \u0441\u0435\u0442\u044c label.add.host=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b label.adding.cluster=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 -label.adding.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c +label.adding.failed=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c label.adding.pod=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d\u0434\u0430 label.adding.processing=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435... -label.add.ingress.rule=\u041d\u043e\u0432\u043e\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.add.ingress.rule=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.adding.succeeded=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e label.adding=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u044b label.adding.user=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f label.adding.zone=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u044b -label.add.ip.range=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP +label.add.ip.range=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 +label.add.isolated.guest.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0433\u043e\u0441\u0442\u0435\u0432\u0443\u044e \u0441\u0435\u0442\u044c +label.add.isolated.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c label.additional.networks=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 -label.add.load.balancer=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 +label.add.load.balancer=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.add.more=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435 label.add.netScaler.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c Netscaler \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e label.add.network.ACL=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u0443\u044e ACL label.add.network.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e -label.add.network.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.add.network.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b label.add.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u044c label.add.new.F5=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 F5 label.add.new.gateway=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0448\u043b\u044e\u0437 @@ -283,96 +292,101 @@ label.add.NiciraNvp.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u04 label.add.PA.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Palo Alto label.add.physical.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c label.add.pod=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0435\u043d\u0434 -label.add.port.forwarding.rule=\u0414\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 -label.add.primary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 +label.add.port.forwarding.rule=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 +label.add.primary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 label.add.region=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d label.add.resources=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 label.add.route=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 label.add.rule=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.add.secondary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.add.security.group=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 -label.add.service.offering=\u041d\u043e\u0432\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.add.service.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443 label.add.SRX.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c SRX \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e label.add.static.nat.rule=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e NAT label.add.static.route=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 -label.add.system.service.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.add.system.service.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431 label.add.template=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d label.add.to.group=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 label.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c label.add.user=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f label.add.vlan=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c VLAN label.add.vms.to.lb=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 -label.add.vms=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041c +label.add.vms=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041c-\u044b label.add.VM.to.tier=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041c \u043a tier label.add.vm=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041c -label.add.volume=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043c +label.add.volume=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0441\u043a +label.add.vpc.offering=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 VPC label.add.vpc=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c VPC label.add.vpn.customer.gateway=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c VPN \u0448\u043b\u044e\u0437 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 label.add.VPN.gateway=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c VPN \u0448\u043b\u044e\u0437 label.add.vpn.user=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f VPN label.add.vxlan=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c VXLAN label.add.zone=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u043e\u043d\u0443 -label.admin.accounts=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0441\u043a\u0438\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 +label.admin.accounts=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 label.admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 -label.advanced.mode=\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u0440\u0435\u0436\u0438\u043c +label.advanced.mode=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c label.advanced.search=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a -label.advanced=\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 +label.advanced=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 label.affinity=\ \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c label.agent.password=\u041f\u0430\u0440\u043e\u043b\u044c \u0430\u0433\u0435\u043d\u0442\u0430 label.agent.username=\u0418\u043c\u044f \u0430\u0433\u0435\u043d\u0442\u0430 label.agree=\u0421\u043e\u0433\u043b\u0430\u0441\u0435\u043d label.alert=\u0422\u0440\u0435\u0432\u043e\u0433\u0430 label.algorithm=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c -label.allocated=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e -label.allocation.state=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f +label.allocated=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e +label.allocation.state=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f label.api.key=\u041a\u043b\u044e\u0447 API +label.api.version=\u0412\u0435\u0440\u0441\u0438\u044f API label.apply=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c label.app.name=CloudStack label.archive.alerts=\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0432\u043e\u0433\u0438 -label.archive.events=\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f +label.archive.events=\u0410\u0440\u0445\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f label.assign.to.load.balancer=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 -label.assign=\u041f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c -label.associated.network.id=\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 ID \u0441\u0435\u0442\u0438 +label.assign=\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e +label.associated.network.id=ID \u0421\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 label.associated.network=\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c -label.attached.iso=\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 ISO +label.associate.public.ip=\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0435 IP +label.attached.iso=\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0439 ISO label.author.email=E-mail \u0430\u0432\u0442\u043e\u0440\u0430 label.author.name=\u0418\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0430 label.availability=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c label.availability.zone=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0437\u043e\u043d\u044b -label.available.public.ips=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 +label.available.public.ips=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430 label.available=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e label.back=\u041d\u0430\u0437\u0430\u0434 label.bandwidth=\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c -label.basic.mode=\u041f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0436\u0438\u043c -label.basic=\u041f\u0440\u043e\u0441\u0442\u043e\u0439 +label.basic.mode=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c +label.basic=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 label.bootable=\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 label.broadcast.domain.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 label.broadcast.domain.type=\u0422\u0438\u043f \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 label.broadcast.uri=\u0428\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 URI label.broadcat.uri=\u0428\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 URI -label.by.account=\u041f\u043e \u0443\u0447\u0451\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 +label.by.account=\u041f\u043e \u0443\u0447\u0435\u0442\u043d\u044b\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c label.by.alert.type=\u041f\u043e \u0442\u0438\u043f\u0443 \u0442\u0440\u0435\u0432\u043e\u0433\u0438 label.by.availability=\u041f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 label.by.date.end=\u041f\u043e \u0434\u0430\u0442\u0435(\u043a\u043e\u043d\u0435\u0446) label.by.date.start=\u041f\u043e \u0434\u0430\u0442\u0435(\u043d\u0430\u0447\u0430\u043b\u043e) label.by.domain=\u0414\u043e \u0434\u043e\u043c\u0435\u043d\u0443 -label.by.end.date=\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e +label.by.end.date=\u041f\u043e \u0434\u0430\u0442\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f label.by.event.type=\u041f\u043e \u0442\u0438\u043f\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044f label.by.level=\u041f\u043e \u0443\u0440\u043e\u0432\u043d\u044e label.by.pod=\u041f\u043e \u0441\u0442\u0435\u043d\u0434\u0443 -label.by.role=\u041f\u043e \u0440\u043e\u043b\u0438 -label.by.start.date=\u041f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 +label.by.role=\u041f\u043e \u0440\u043e\u043b\u044f\u043c +label.by.start.date=\u041f\u043e \u0434\u0430\u0442\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 label.by.state=\u041f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e -label.bytes.received=\u0411\u0430\u0439\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d -label.bytes.sent=\u0411\u0430\u0439\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e +label.bytes.received=\u0411\u0430\u0439\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e +label.bytes.sent=\u0411\u0430\u0439\u0442\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e label.by.traffic.type=\u041f\u043e \u0442\u0438\u043f\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 label.by.type.id=\u041f\u043e \u0442\u0438\u043f\u0443 ID label.by.type=\u041f\u043e \u0442\u0438\u043f\u0443 label.by.zone=\u041f\u043e \u0437\u043e\u043d\u0435 label.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 +label.capacity.bytes=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0411\u0430\u0439\u0442 +label.capacity.iops=\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e IOPS label.capacity=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c label.certificate=\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 -label.change.service.offering=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.change.service.offering=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f label.change.value=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 label.character=\u0421\u0438\u043c\u0432\u043e\u043b\u043e\u0432 label.cidr.account=CIDR \u0438\u043b\u0438 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c/\u0433\u0440\u0443\u043f\u043f\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 @@ -383,7 +397,7 @@ label.CIDR.of.destination.network=CIDR \u0441\u0435\u0442\u0438 \u043d\u0430\u04 label.clean.up=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c label.clear.list=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a label.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c -label.cloud.console=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u043a\u043e\u043c +label.cloud.console=\u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u043a\u043e\u043c label.cloud.managed=\u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f label.cluster.name=\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 label.clusters=\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u044b @@ -394,7 +408,7 @@ label.code=\u041a\u043e\u0434 label.community=\u0421\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e label.compute.and.storage=\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.compute.offerings=\u0423\u0441\u043b\u0443\u0433\u0438 \u0432\u044b\u0447\u0435\u0441\u043b\u0435\u043d\u0438\u044f -label.compute.offering=\u0412\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 +label.compute.offering=\u0423\u0441\u043b\u0443\u0433\u0430 \u0432\u044b\u0447\u0435\u0441\u043b\u0435\u043d\u0438\u044f label.compute=\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 label.configuration=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f label.configure.network.ACLs=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ACL \u0441\u0435\u0442\u0438 @@ -404,17 +418,18 @@ label.confirmation=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\ label.confirm.password=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c label.congratulations=\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c\! label.conserve.mode=\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c -label.console.proxy=\u041f\u0440\u043e\u043a\u0441\u0438 +label.console.proxy=\u041f\u0440\u043e\u043a\u0441\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 label.continue.basic.install=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 label.continue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c +label.copying.iso=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ISO label.corrections.saved=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b -label.cpu.allocated.for.VMs=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0426\u041f\u0423 \u0434\u043b\u044f \u0412\u041c -label.cpu.allocated=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0426\u041f\u0423 +label.cpu.allocated.for.VMs=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c CPU +label.cpu.allocated=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 CPU label.CPU.cap=CPU Cap label.cpu=CPU label.cpu.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f CPU label.cpu.mhz=CPU (\u0432 \u041c\u0433\u0446) -label.cpu.utilized=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CPU +label.cpu.utilized=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e CPU label.created.by.system=\u0421\u043e\u0437\u0434\u0430\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 label.created=\u0421\u043e\u0437\u0434\u0430\u043d\u043e label.create.project=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 @@ -422,18 +437,19 @@ label.create.template=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0 label.create.VPN.connection=\u0421\u043e\u0437\u0434\u0430\u0442\u044c VPN \u043f\u043e\u0434\u043b\u044e\u0447\u0435\u043d\u0438\u0435 label.cross.zones=\u041e\u0431\u0449\u0438\u0435 \u0434\u043b\u044f \u0437\u043e\u043d label.custom.disk.iops=\u0421\u0432\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e IPOS -label.custom.disk.size=\u0421\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 +label.custom.disk.size=\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 label.daily=\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e -label.data.disk.offering=\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u0441\u043a\u0430 +label.data.disk.offering=\u0423\u0441\u043b\u0443\u0433\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.date=\u0414\u0430\u0442\u0430 label.day.of.month=\u0414\u0435\u043d\u044c \u043c\u0435\u0441\u044f\u0446\u0430 label.day.of.week=\u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438 label.dead.peer.detection=Dead Peer Detection label.decline.invitation=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 label.dedicated=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 +label.default.egress.policy=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e label.default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e label.default.use=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e -label.default.view=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 +label.default.view=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0432\u0438\u0434 label.delete.affinity.group=\u0423\u0434\u0430\u043b\u0438\u0442\u044c affinity group label.delete.alerts=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u0432\u043e\u0433\u0438 label.delete.events=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f @@ -442,6 +458,7 @@ label.delete.gateway=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0448\u043b\u04 label.delete.NetScaler=\u0423\u0434\u0430\u043b\u0438\u0442\u044c NetScaler label.delete.NiciraNvp=\u0423\u0434\u0430\u043b\u0438\u0442\u044c Nvp \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 label.delete.PA=\u0423\u0434\u0430\u043b\u0438\u0442\u044c Palo Alto +label.delete.profile=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c label.delete.project=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 label.delete.SRX=\u0423\u0434\u0430\u043b\u0438\u0442\u044c SRX label.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c @@ -449,25 +466,30 @@ label.delete.VPN.connection=\u0423\u0434\u0430\u043b\u0438\u0442\u044c VPN \u043 label.delete.VPN.customer.gateway=\u0423\u0434\u0430\u043b\u0438\u0442\u044c VPN \u0448\u043b\u044e\u0437 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 label.delete.VPN.gateway=\u0423\u0434\u0430\u043b\u0438\u0442\u044c VPN \u0448\u043b\u044e\u0437 label.delete.vpn.user=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f VPN -label.deleting.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0434\u0430\u043b\u0438\u0442\u044c +label.deleting.failed=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c label.deleting.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435... label.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 label.destination.physical.network.id=ID \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438 label.destination.zone=\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0437\u043e\u043d\u0430 label.destroy.router=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u043e\u0443\u0442\u0435\u0440 label.destroy=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c -label.detaching.disk=\u041e\u0442\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430 +label.detaching.disk=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430 label.details=\u0414\u0435\u0442\u0430\u043b\u0438 label.device.id=ID \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 label.devices=\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e label.dhcp=DHCP label.DHCP.server.type=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 DHCP +label.direct.attached.public.ip=\u0412\u044b\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP label.direct.ips=\u041f\u0440\u044f\u043c\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 +label.disable.autoscale=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0430\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 label.disabled=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e +label.disable.host=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0445\u043e\u0441\u0442 +label.disable.network.offering=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0443\u0441\u043b\u0443\u0433\u0438 label.disable.provider=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 +label.disable.vpc.offering=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 VPC label.disable.vpn=\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN label.disabling.vpn.access=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a VPN -label.disk.allocated=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 +label.disk.allocated=\u0417\u0430\u043d\u044f\u0442\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.disk.bytes.read.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0430 (BPS) label.disk.bytes.write.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u043a\u0430 (BPS) label.disk.iops.max=\u041c\u0430\u043a\u0441. IOPS @@ -475,13 +497,13 @@ label.disk.iops.min=\u041c\u0438\u043d. IOPS label.disk.iops.read.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u043a\u0430 (IOPS) label.disk.iops.total=\u0412\u0441\u0435\u0433\u043e IOPS label.disk.iops.write.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0438\u0441\u043a\u0430 (IOPS) -label.disk.offering=\u0414\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.disk.offering=\u0423\u0441\u043b\u0443\u0433\u0430 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.disk.read.bytes=\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e \u0441 \u0434\u0438\u0441\u043a\u0430 (\u0411\u0430\u0439\u0442) label.disk.read.io=\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e \u0441 \u0434\u0438\u0441\u043a\u0430 (IO) label.disk.size.gb=\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 (\u0432 \u0413\u0411) label.disk.size=\u0420\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 label.disk.total=\u0412\u0441\u0435\u0433\u043e \u0432 \u0434\u0438\u0441\u043a\u0430\u0445 -label.disk.volume=\u0422\u043e\u043c \u0434\u0438\u0441\u043a\u0430 +label.disk.volume=\u041e\u0431\u044a\u0435\u043c \u0434\u0438\u0441\u043a\u0430 label.disk.write.bytes=\u0417\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 \u0434\u0438\u0441\u043a (\u0411\u0430\u0439\u0442) label.disk.write.io=\u0417\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 \u0434\u0438\u0441\u043a (IO) label.display.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 @@ -491,41 +513,49 @@ label.dns=DNS label.DNS.domain.for.guest.networks=DNS \u0434\u043e\u043c\u0435\u043d \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0441\u0435\u0442\u0438 label.domain.admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043c\u0435\u043d\u0430 label.domain.id=ID \u0434\u043e\u043c\u0435\u043d\u0430 +label.domain.lower=\u0414\u043e\u043c\u0435\u043d label.domain.name=\u0418\u043c\u044f \u0434\u043e\u043c\u0435\u043d\u0430 label.domain.router=\u041c\u0430\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440 label.domain.suffix=\u0421\u0443\u0444\u0444\u0438\u043a\u0441 \u0434\u043e\u043c\u0435\u043d\u0430 DNS (\u043d\u043f\u0440. xyz.com) label.domain=\u0414\u043e\u043c\u0435\u043d label.done=\u0413\u043e\u0442\u043e\u0432\u043e -label.double.quotes.are.not.allowed=\u0414\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b +label.double.quotes.are.not.allowed=\u0414\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f label.download.progress=\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.drag.new.position=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e +label.dynamically.scalable=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 label.edit.affinity.group=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c affinity group label.edit.lb.rule=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c LB \u043f\u0440\u0430\u0432\u0438\u043b\u0430 -label.edit.network.details=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u0441\u0435\u0442\u0438 +label.edit.network.details=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 label.edit.project.details=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 +label.edit.region=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d label.edit.tags=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u044d\u0433\u0438 label.edit.traffic.type=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0438\u043f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 label.edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c label.edit.vpc=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c VPC label.egress.default.policy=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e label.egress.rules=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 -label.egress.rule=\u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.egress.rule=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.elastic.IP=\u0413\u0438\u0431\u043a\u0438\u0439 IP label.elastic.LB=\u0413\u0438\u0431\u043a\u0438\u0439 LB label.elastic=\u0413\u0438\u0431\u043a\u0438\u0439 label.email=E-mail +label.email.lower=E-mail +label.enable.autoscale=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0430\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 +label.enable.host=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0445\u043e\u0441\u0442 +label.enable.network.offering=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0443\u0441\u043b\u0443\u0433\u0443 label.enable.provider=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 label.enable.s3=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c S3-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.enable.swift=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c Swift +label.enable.vpc.offering=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 VPC label.enable.vpn=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN -label.enabling.vpn.access=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a VPN -label.enabling.vpn=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 VPN +label.enabling.vpn.access=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e VPN +label.enabling.vpn=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f VPN label.end.IP=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 IP label.endpoint.or.operation=\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f label.endpoint=\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 -label.end.port=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 +label.end.port=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u043e\u0440\u0442 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 label.end.reserved.system.IP=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 -label.enter.token=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0430\u043b\u043e\u043d +label.enter.token=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u043e\u043a\u0435\u043d label.error.code=\u041a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 label.error=\u041e\u0448\u0438\u0431\u043a\u0430 label.ESP.encryption=\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 ESP @@ -534,14 +564,16 @@ label.ESP.lifetime=\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 label.ESP.policy=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 ESP label.esx.host=\u0423\u0437\u0435\u043b ESX/ESXi label.example=\u041f\u0440\u0438\u043c\u0435\u0440 +label.expunge=\u0423\u0434\u0430\u043b\u0451\u043d label.external.link=\u0412\u043d\u0435\u0448\u043d\u0435\u0435 \u043f\u043e\u0434\u043b\u044e\u0447\u0435\u043d\u0438\u0435 label.extractable=\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c\u044b\u0439 label.f5=F5 label.failed=\u041d\u0435\u0443\u0434\u0430\u0447\u043d\u043e -label.featured=\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 +label.featured=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 label.fetch.latest=\u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 label.filterBy=\u0424\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c label.firewall=\u0424\u0430\u0435\u0440\u0432\u043e\u043b +label.firstname.lower=\u0418\u043c\u044f label.first.name=\u0418\u043c\u044f label.format=\u0424\u043e\u0440\u043c\u0430\u0442 label.friday=\u041f\u044f\u0442\u043d\u0438\u0446\u0430 @@ -550,14 +582,16 @@ label.full=\u041f\u043e\u043b\u043d\u044b\u0439 label.gateway=\u0428\u043b\u044e\u0437 label.general.alerts=\u041e\u0431\u0449\u0438\u0435 \u0442\u0440\u0435\u0432\u043e\u0433\u0438 label.generating.url=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 URL -label.gluster.volume=\u0422\u043e\u043c +label.gluster.volume=\u0414\u0438\u0441\u043a label.go.step.2=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0448\u0430\u0433\u0443 2 label.go.step.3=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0448\u0430\u0433\u0443 3 label.go.step.4=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0448\u0430\u0433\u0443 4 label.go.step.5=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0448\u0430\u0433\u0443 5 -label.gpu=CPU -label.group.optional=\u0413\u0440\u0443\u043f\u043f\u0430 (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) +label.gpu=GPU +label.group.optional=\u0413\u0440\u0443\u043f\u043f\u0430 (\u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e) label.group=\u0413\u0440\u0443\u043f\u043f\u0430 +label.gslb.lb.details=\u0414\u0435\u0442\u0430\u043b\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 +label.gslb.lb.rule=\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.guest.cidr=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 CIDR label.guest.end.ip=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 IP. label.guest.gateway=\u0428\u043b\u044e\u0437 @@ -569,18 +603,18 @@ label.guest.start.ip=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u04 label.guest.traffic=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a label.guest.type=\u0422\u0438\u043f \u0433\u043e\u0441\u0442\u044f label.guest=\u0413\u043e\u0441\u0442\u044c -label.ha.enabled=HA \u0432\u043a\u043b\u044e\u0447\u0435\u043d +label.ha.enabled=\u041e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 label.help=\u041f\u043e\u043c\u043e\u0449\u044c -label.hide.ingress.rule=\u0421\u043a\u0440\u044b\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.hide.ingress.rule=\u0421\u043a\u0440\u044b\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.hints=\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 label.home=\u0413\u043b\u0430\u0432\u043d\u0430\u044f -label.host.alerts=\u0422\u0440\u0435\u0432\u043e\u0433\u0438 \u0443\u0437\u043b\u0430 +label.host.alerts=\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u0430 label.host.MAC=MAC \u0443\u0437\u043b\u0430 label.host.name=\u0418\u043c\u044f \u0443\u0437\u043b\u0430 label.hosts=\u0423\u0437\u043b\u044b label.host.tags=\u041c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u0430 label.host=\u0423\u0437\u0435\u043b -label.hourly=\u0427\u0430\u0441\u043e\u0432\u0430\u044f +label.hourly=\u0415\u0436\u0435\u0447\u0430\u0441\u043d\u043e label.hypervisor.capabilities=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430 label.hypervisors=\u0413\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u044b label.hypervisor.type=\u0422\u0438\u043f \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430 @@ -593,8 +627,8 @@ label.IKE.hash=IKE Hash label.IKE.lifetime=IKE lifetime (second) label.IKE.policy=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 IKE label.info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f -label.ingress.rule=\u0412\u043d\u0443\u0442\u0440\u0438\u043d\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e -label.initiated.by=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c +label.ingress.rule=\u0412\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.initiated.by=\u0418\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043e label.installWizard.addClusterIntro.subtitle=\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 "\u041a\u043b\u0430\u0441\u0442\u0435\u0440"? label.installWizard.addClusterIntro.title=\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 label.installWizard.addHostIntro.subtitle=\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 "\u0423\u0437\u0435\u043b"? @@ -611,7 +645,7 @@ label.installWizard.addZone.title=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u04 label.installWizard.click.launch=\u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 label.installWizard.subtitle=\u042d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 \u0432\u0430\u0448 CloudStack. label.installWizard.title=\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0438 \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 CloudStack\! -label.instance.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u043c\u0430\u0448\u0438\u043d\u044b +label.instance.limits=\u041b\u0438\u043c\u0438\u0442 \u043c\u0430\u0448\u0438\u043d label.instance.name=\u0418\u043c\u044f \u043c\u0430\u0448\u0438\u043d\u044b label.instances=\u041c\u0430\u0448\u0438\u043d\u044b label.instance=\u041c\u0430\u0448\u0438\u043d\u0430 @@ -627,13 +661,13 @@ label.invited.accounts=\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0451\u043d\u0 label.invite.to=\u041f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u0442\u044c label.invite=\u041f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u0442\u044c label.ip.address=IP-\u0430\u0434\u0440\u0435\u0441 -label.ipaddress=IP-\u0430\u0434\u0440\u0435\u0441 -label.ip.allocations=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f IP +label.ipaddress=IP \u0430\u0434\u0440\u0435\u0441\u0441\u0430 +label.ip.allocations=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 IP label.ip=IP -label.ip.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 IP +label.ip.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 IP label.ip.or.fqdn=IP \u0438\u043b\u0438 FQDN -label.ip.ranges=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b IP -label.ip.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP +label.ip.ranges=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 +label.ip.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 label.IPsec.preshared.key=IPsec Preshared-Key label.ips=IP label.iscsi=iSCSI @@ -644,9 +678,9 @@ label.isolated.networks=\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u label.isolation.method=\u041c\u0435\u0442\u043e\u0434 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 label.isolation.mode=\u0420\u0435\u0436\u0438\u043c \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 label.isolation.uri=\u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f URI -label.is.redundant.router=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 -label.is.shared=\u043e\u0431\u0449\u0438\u0435 -label.is.system=\u0415\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 +label.is.redundant.router=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 +label.is.shared=\u041e\u0431\u0449\u0438\u0439 +label.is.system=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 label.item.listing=\u0421\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 label.keep=\u0425\u0440\u0430\u043d\u0438\u0442\u044c label.keyboard.type=\u0422\u0438\u043f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b @@ -659,8 +693,9 @@ label.lang.japanese=\u042f\u043f\u043e\u043d\u0441\u043a\u0438\u0439 label.lang.korean=\u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438\u0439 label.lang.russian=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 label.lang.spanish=\u0418\u0441\u043f\u0430\u043d\u0441\u043a\u0438\u0439 -label.last.disconnected=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 -label.last.name=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u043c\u044f +label.last.disconnected=\u0412\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f +label.lastname.lower=\u0424\u0430\u043c\u0438\u043b\u0438\u044f +label.last.name=\u0424\u0430\u043c\u0438\u043b\u0438\u044f label.latest.events=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f label.launch=\u0417\u0430\u043f\u0443\u0441\u043a label.launch.vm=\u0417\u0430\u043f\u0443\u0441\u043a \u0412\u041c @@ -671,23 +706,26 @@ label.lb.algorithm.source=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a label.LB.isolation=\u0418\u0437\u043e\u043b\u044f\u0446\u0438\u044f LB label.level=\u0423\u0440\u043e\u0432\u0435\u043d\u044c label.linklocal.ip=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 -label.load.balancer=\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 +label.load.balancer=\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.load.balancing.policies=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.load.balancing=\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 label.loading=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 +label.local.storage.enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0412\u041c label.local.storage=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.local=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 -label.login=\u0412\u0445\u043e\u0434 -label.logout=\u0412\u044b\u0445\u043e\u0434 +label.login=\u0412\u043e\u0439\u0442\u0438 +label.logout=\u0412\u044b\u0439\u0442\u0438 label.lun=LUN label.LUN.number=LUN \# label.make.project.owner=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 +label.managed=\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 label.management.ips=\u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f IP \u0430\u0434\u0440\u0435\u0441\u0441\u0430\u043c\u0438 +label.management.server=\u0421\u0435\u0440\u0432\u0435\u0440 \u0443\u043f\u0440\u0430\u043b\u0435\u043d\u0438\u044f label.management=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 label.manage.resources=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 label.manage=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 label.max.cpus=\u041c\u0430\u043a\u0441. \u044f\u0434\u0435\u0440 \u0426\u041f -label.max.guest.limit=\u041f\u0440\u0435\u0434\u0435\u043b \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439 +label.max.guest.limit=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439 label.maximum=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c label.max.memory=\u041c\u0430\u043a\u0441. \u043f\u0430\u043c\u044f\u0442\u0438 (\u0432 \u041c\u0438\u0411) label.max.networks=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u0435\u0442\u0435\u0439 @@ -697,32 +735,32 @@ label.max.secondary.storage=\u041c\u0430\u043a\u0441. \u0432\u0442\u043e\u0440\u label.max.snapshots=\u041c\u0430\u043a\u0441. \u0441\u043d\u0438\u043c\u043a\u043e\u0432 label.max.templates=\u041c\u0430\u043a\u0441. \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 label.max.vms=\u041c\u0430\u043a\u0441. \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0412\u041c -label.max.volumes=\u041c\u0430\u043a\u0441. \u0442\u043e\u043c\u043e\u0432 +label.max.volumes=\u041c\u0430\u043a\u0441. \u0434\u0438\u0441\u043a\u043e\u0432 label.max.vpcs=\u041c\u0430\u043a\u0441. VPC label.may.continue=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c. label.md5.checksum=\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c MD5 \u0441\u0443\u043c\u043c\u0443 -label.memory.allocated=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u0438 +label.memory.allocated=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u0438 label.memory.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 (\u0432 \u041c\u0438\u0411) label.memory.mb=\u041f\u0430\u043c\u044f\u0442\u044c (\u0432 \u041c\u0411) label.memory.total=\u0412\u0441\u0435\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 label.memory=\u041f\u0430\u043c\u044f\u0442\u044c -label.memory.used=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 +label.memory.used=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u0438 label.menu.accounts=\u0423\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 -label.menu.alerts=\u0422\u0440\u0435\u0432\u043e\u0433\u0438 +label.menu.alerts=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f label.menu.all.accounts=\u0412\u0441\u0435 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 label.menu.all.instances=\u0412\u0441\u0435 \u043c\u0430\u0448\u0438\u043d\u044b label.menu.community.isos=ISO-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 label.menu.community.templates=\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 label.menu.configuration=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f -label.menu.dashboard=\u0413\u043b\u0430\u0432\u043d\u0430\u044f +label.menu.dashboard=\u041f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f label.menu.destroyed.instances=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b -label.menu.disk.offerings=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u043e\u0432 +label.menu.disk.offerings=\u0423\u0441\u043b\u0443\u0433\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.menu.domains=\u0414\u043e\u043c\u0435\u043d\u044b label.menu.events=\u0421\u043e\u0431\u044b\u0442\u0438\u044f label.menu.featured.isos=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0435 ISO label.menu.featured.templates=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b -label.menu.global.settings=\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -label.menu.infrastructure=\u0418\u043d\u0444\u043e\u0440\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 +label.menu.global.settings=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +label.menu.infrastructure=\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 label.menu.instances=\u041c\u0430\u0448\u0438\u043d\u044b label.menu.ipaddresses=IP-\u0430\u0434\u0440\u0435\u0441\u0430 label.menu.isos=ISO @@ -730,14 +768,15 @@ label.menu.my.accounts=\u041c\u043e\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u label.menu.my.instances=\u041c\u043e\u0438 \u043c\u0430\u0448\u0438\u043d\u044b label.menu.my.isos=\u041c\u043e\u0438 ISO label.menu.my.templates=\u041c\u043e\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b -label.menu.network.offerings=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 +label.menu.network.offerings=\u0423\u0441\u043b\u0443\u0433\u0438 \u0441\u0435\u0442\u0438 label.menu.network=\u0421\u0435\u0442\u044c label.menu.physical.resources=\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b label.menu.regions=\u0420\u0435\u0433\u0438\u043e\u043d -label.menu.running.instances=\u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b -label.menu.security.groups=\u0413\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 -label.menu.service.offerings=\u0423\u0441\u043b\u0443\u0433\u0438 +label.menu.running.instances=\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043c\u0430\u0448\u0438\u043d\u044b +label.menu.security.groups=Security Groups +label.menu.service.offerings=\u0423\u0441\u043b\u0443\u0433\u0438 \u0441\u043b\u0443\u0436\u0431 label.menu.snapshots=\u0421\u043d\u0438\u043c\u043a\u0438 +label.menu.sshkeypair=SSH KeyPair label.menu.stopped.instances=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b label.menu.storage=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.menu.system.service.offerings=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b @@ -746,7 +785,8 @@ label.menu.system.vms=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0 label.menu.templates=\u0428\u0430\u0431\u043b\u043e\u043d\u044b label.menu.virtual.appliances=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 label.menu.virtual.resources=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b -label.menu.volumes=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f +label.menu.volumes=\u0414\u0438\u0441\u043a\u0438 +label.menu.vpc.offerings=\u0423\u0441\u043b\u0443\u0433\u0438 VPS label.migrate.instance.to.host=\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043c\u0430\u0448\u0438\u043d\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0437\u0435\u043b label.migrate.instance.to.ps=\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043c\u0430\u0448\u0438\u043d\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.migrate.instance.to=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u0443 \u0432 @@ -754,12 +794,14 @@ label.migrate.router.to=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \ label.migrate.systemvm.to=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c \u0432 label.migrate.to.host=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u0443\u0437\u0435\u043b label.migrate.to.storage=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 -label.migrate.volume.to.primary.storage=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0442\u043e\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 +label.migrate.volume.to.primary.storage=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0434\u0438\u0441\u043a \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 +label.migrate.volume=\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0438\u0441\u043a\u0430 label.minimum=\u041c\u0438\u043d\u0438\u043c\u0443\u043c +label.minute.past.hour=\u041c\u0438\u043d\u0443\u0442 label.mode=\u0420\u0435\u0436\u0438\u043c label.monday=\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a label.monthly=\u041a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0441\u044f\u0446 -label.more.templates=\u0411\u043e\u043b\u044c\u0448\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 +label.more.templates=\u0415\u0449\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b label.move.down.row=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0438\u0436\u0435 label.move.to.bottom=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u0437 label.move.to.top=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u044b\u0439 \u0432\u0435\u0440\u0445 @@ -768,27 +810,28 @@ label.my.account=\u041c\u043e\u044f \u0443\u0447\u0451\u0442\u043d\u0430\u044f \ label.my.network=\u041c\u043e\u044f \u0441\u0435\u0442\u044c label.my.templates=\u041c\u043e\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b label.name.lower=\u0418\u043c\u044f -label.name.optional=\u0418\u043c\u044f (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e) +label.name.optional=\u0418\u043c\u044f (\u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e) label.name=\u0418\u043c\u044f -label.nat.port.range=NAT \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 +label.nat.port.range=\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 NAT label.netmask=\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430 label.netScaler=NetScaler -label.network.ACL=ACL \u0441\u0435\u0442\u0438 label.network.ACLs=\u0421\u0435\u0442\u0435\u0432\u044b\u0435 ACL -label.network.ACL.total=\u0412\u0441\u0435\u0433\u043e ACL \u0441\u0435\u0442\u0438 +label.network.ACL.total=\u0412\u0441\u0435\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 ACL +label.network.ACL=\u0421\u0435\u0442\u0435\u0432\u044b\u0435 ACL +label.network.addVM=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0442\u044c \u0432 \u0412\u041c label.network.desc=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 label.network.device.type=\u0422\u0438\u043f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 label.network.device=\u0421\u0435\u0442\u0435\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e -label.network.domain.text=\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043c\u0435\u043d\u0430 \u0441\u0435\u0442\u0438 -label.network.domain=\u0414\u043e\u043c\u0435\u043d \u0441\u0435\u0442\u0438 +label.network.domain.text=\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u043e\u043c\u0435\u043d +label.network.domain=\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0434\u043e\u043c\u0435\u043d label.network.id=ID \u0441\u0435\u0442\u0438 label.networking.and.security=\u0421\u0435\u0442\u044c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c label.network.label.display.for.blank.value=\u0418\u0441\u043f. \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0448\u043b\u044e\u0437 label.network.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 label.network.name=\u0418\u043c\u044f \u0441\u0435\u0442\u0438 -label.network.offering.display.text=\u0441\u0435\u0442\u044c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 -label.network.offering.id=\u0441\u0435\u0442\u044c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e ID -label.network.offering.name=\u0441\u0435\u0442\u044c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u0418\u043c\u044f +label.network.offering.display.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0441\u043b\u0443\u0433\u0438 +label.network.offering.id=ID \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0441\u043b\u0443\u0433\u0438 +label.network.offering.name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u0441\u043b\u0443\u0433\u0438 label.network.offering=\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u0443\u0441\u043b\u0443\u0433\u0438 label.network.rate.megabytes=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0438 (MB/s) label.network.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0438 @@ -803,7 +846,7 @@ label.new.project=\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\ label.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c label.new.vm=\u041d\u043e\u0432\u0430\u044f \u0412\u041c label.next=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 -label.nexusVswitch=Nexus Vswitch +label.nexusVswitch=Nexus 1000v label.nfs=NFS label.nfs.server=\u0421\u0435\u0440\u0432\u0435\u0440 NFS label.nfs.storage=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 NFS @@ -811,15 +854,15 @@ label.nic.adapter.type=\u0422\u0438\u043f \u0441\u0435\u0442\u0435\u0432\u043e\u label.nicira.controller.address=\u0410\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 label.nicira.l3gatewayserviceuuid=L3 Gateway Service Uuid label.nicira.transportzoneuuid=Transport Zone Uuid -label.nics=\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (NIC) -label.no.actions=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 +label.nics=\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b +label.no.actions=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 label.no.alerts=\u0422\u0440\u0435\u0432\u043e\u0433 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e label.no.data=\u041d\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 label.no.errors=\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e label.no.isos=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 ISO -label.no.items=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 +label.no.items=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 label.none=\u041d\u0435\u0442 -label.no.security.groups=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c +label.no.security.groups=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 label.not.found=\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e label.no.thanks=\u041d\u0435\u0442, \u0441\u043f\u0430\u0441\u0438\u0431\u043e label.notifications=\u041e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f @@ -827,24 +870,27 @@ label.no=\u041d\u0435\u0442 label.number.of.clusters=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 label.number.of.hosts=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 label.number.of.pods=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0435\u043d\u0434\u043e\u0432 -label.number.of.system.vms=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d +label.number.of.system.vms=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0412\u041c label.number.of.virtual.routers=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 label.number.of.zones=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043e\u043d -label.num.cpu.cores=\u041a\u043e\u043b. CPU +label.num.cpu.cores=\u041a\u043e\u043b-\u0432\u043e \u044f\u0434\u0435\u0440 CPU label.numretries=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a label.ocfs2=OCFS2 -label.offer.ha=\u041f\u0440\u0435\u0434\u043e\u0441\u0442. HA +label.offer.ha=\u0423\u0441\u043b\u0443\u0433\u0430 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 label.ok=OK label.optional=\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e label.order=\u041e\u0447\u0435\u0440\u0435\u0434\u044c label.os.preference=\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u041e\u0421 label.os.type=\u0422\u0438\u043f \u041e\u0421 -label.owned.public.ips=\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 +label.owned.public.ips=\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0435 IP \u0430\u0434\u0440\u0435\u0441\u0430 label.owner.account=\u0423\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 label.owner.domain=\u0414\u043e\u043c\u0435\u043d \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 label.parent.domain=\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0434\u043e\u043c\u0435\u043d label.password.enabled=\u041f\u0430\u0440\u043e\u043b\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d +label.password.lower=\u041f\u0430\u0440\u043e\u043b\u044c +label.password.reset.confirm=\u041f\u0430\u0440\u043e\u043b\u044c \u0431\u044b\u043b \u0441\u0431\u0440\u043e\u0448\u0435\u043d \u0432 label.password=\u041f\u0430\u0440\u043e\u043b\u044c +label.PA=static NAT label.path=\u041f\u0443\u0442\u044c label.perfect.forward.secrecy=Perfect Forward Secrecy label.physical.network.ID=ID \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438 @@ -860,27 +906,28 @@ label.plugins=\u041f\u043b\u0430\u0433\u0438\u043d\u044b label.pod.name=\u0418\u043c\u044f \u0441\u0442\u0435\u043d\u0434\u0430 label.pods=\u0421\u0442\u0435\u043d\u0434\u044b label.pod=\u0421\u0442\u0435\u043d\u0434 -label.port.forwarding.policies=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0440\u0442\u043e\u0432 -label.port.forwarding=\u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u043f\u043e\u0440\u0442\u043e\u0432 +label.port.forwarding.policies=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u043e\u0432 +label.port.forwarding=\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u043e\u0432 label.port.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u0440\u0442\u043e\u0432 label.PreSetup=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 label.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 label.prev=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0448\u0438\u0439 -label.primary.allocated=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 +label.primary.allocated=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.primary.network=\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0442\u044c -label.primary.storage.count=\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f -label.primary.storage.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (\u0432 \u0413\u0438\u0411) +label.primary.storage.count=\u041f\u0443\u043b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 +label.primary.storage.limits=\u041b\u0438\u043c\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (GiB) label.primary.storage=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 -label.primary.used=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 +label.primary.used=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.private.Gateway=\u0427\u0430\u0441\u0442\u043d\u044b\u0439 \u0448\u043b\u044e\u0437 label.private.interface=\u0427\u0430\u0441\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 -label.private.ip.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043d\u044b\u0445 IP +label.private.ip.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043d\u044b\u0445 IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 label.private.ips=\u0427\u0430\u0441\u0442\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 -label.private.ip=\u0427\u0430\u0441\u0442\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 +label.private.ip=\u0427\u0430\u0441\u0442\u043d\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441 label.privatekey=\u0427\u0430\u0441\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 PKCS\#8 label.private.network=\u0427\u0430\u0441\u0442\u043d\u0430\u044f \u0441\u0435\u0442\u044c label.private.port=\u0427\u0430\u0441\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 label.private.zone=\u0427\u0430\u0441\u0442\u043d\u0430\u044f \u0437\u043e\u043d\u0430 +label.profile=\u041f\u0440\u043e\u0444\u0438\u043b\u044c label.project.dashboard=\u041f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 label.project.id=ID \u043f\u0440\u043e\u0435\u043a\u0442\u0430 label.project.invite=\u041f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 @@ -890,6 +937,7 @@ label.project=\u041f\u0440\u043e\u0435\u043a\u0442 label.project.view=\u041f\u0440\u043e\u0435\u043a\u0442\u044b label.protocol=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b label.providers=\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438 +label.provider=\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438 label.public.interface=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 label.public.ips=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 label.public.ip=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441 @@ -903,38 +951,47 @@ label.Pxe.server.type=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0 label.qos.type=\u0422\u0438\u043f QoS label.quickview=\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 label.reboot=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c -label.recent.errors=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 +label.recent.errors=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 +label.recover.vm=\u0412\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0412\u041c label.redundant.router.capability=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430 label.redundant.router=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 label.redundant.state=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0430 label.refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c label.region=\u0420\u0435\u0433\u0438\u043e\u043d +label.reinstall.vm=\u041f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0412\u041c label.related=\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 label.remind.later=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435 label.remove.ACL=\u0423\u0434\u0430\u043b\u0438\u0442\u044c ACL -label.remove.egress.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.remove.egress.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.remove.from.load.balancer=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 -label.remove.ingress.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.remove.ingress.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.remove.ip.range=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP -label.remove.pf=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0440\u0442\u0430 +label.remove.network.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u0443\u0441\u043b\u0443\u0433\u0443 +label.remove.pf=\u0414\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 label.remove.project.account=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 label.remove.region=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d label.remove.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e -label.remove.static.nat.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e NAT +label.remove.static.nat.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e static NAT label.remove.static.route=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 label.remove.tier=\u0423\u0434\u0430\u043b\u0438\u0442\u044c tier label.remove.vm.from.lb=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0412\u041c \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 +label.remove.vm.load.balancer=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0412\u041c \u0441 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 +label.remove.vpc.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 VPC label.remove.vpc=\u0423\u0434\u0430\u043b\u0438\u0442\u044c VPC label.removing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 label.removing.user=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f label.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f +label.reserved.ip.range=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 IP \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d label.reserved.system.gateway=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u043b\u044e\u0437 label.reserved.system.ip=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 IP label.reserved.system.netmask=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u043c\u0430\u0441\u043a\u0430 +label.resetVM=\u0421\u0431\u0440\u043e\u0441 \u0412\u041c label.reset.VPN.connection=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c VPN \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 -label.resize.new.offering.id=New Offering +label.resize.new.offering.id=\u041d\u043e\u0432\u0430\u044f \u0443\u0441\u043b\u0443\u0433\u0430 +label.resize.new.size=\u041d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 (GB) label.resize.shrink.ok=Shrink OK -label.resource.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +label.resource.limit.exceeded=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043b\u0438\u043c\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +label.resource.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 label.resource.state=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 label.resources=\u0420\u0435\u0441\u0443\u0440\u0441\u044b label.resource=\u0420\u0435\u0441\u0443\u0440\u0441 @@ -945,10 +1002,11 @@ label.restore=\u0412\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c label.review=\u041e\u0431\u0437\u043e\u0440 label.revoke.project.invite=\u041e\u0442\u043e\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 label.role=\u0420\u043e\u043b\u044c -label.root.disk.controller=\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 -label.root.disk.offering=\u0420\u0435\u0441\u0443\u0440\u0441 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 +label.root.disk.controller=\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 +label.root.disk.offering=\u0423\u0441\u043b\u0443\u0433\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 label.root.disk.size=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 label.routing=\u041c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f +label.rule.number=\u041d\u043e\u043c\u0435\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 label.rules=\u041f\u0440\u0430\u0432\u0438\u043b\u0430 label.running.vms=\u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0412\u041c label.s3.access_key=\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 @@ -966,10 +1024,10 @@ label.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c label.saving.processing=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435... label.scope=\u041e\u0445\u0432\u0430\u0442 label.search=\u041f\u043e\u0438\u0441\u043a -label.secondary.storage.count=\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f -label.secondary.storage.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (\u0432 \u0413\u0438\u0411) +label.secondary.storage.count=\u041f\u0443\u043b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 +label.secondary.storage.limits=\u041b\u0438\u043c\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 (GiB) label.secondary.storage=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 -label.secondary.storage.vm=\u0412\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 +label.secondary.storage.vm=\u0412\u041c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.secondary.used=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.secret.key=\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 label.security.group.name=\u0418\u043c\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 @@ -978,11 +1036,13 @@ label.security.groups=\u0413\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u0 label.security.group=\u0413\u0440\u0443\u043f\u043f\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 label.select.a.template=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d label.select.a.zone=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u043e\u043d\u0443 -label.select.instance.to.attach.volume.to=\u0412\u044b\u0431\u0438\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044c\u0435\u043c\u0430 +label.select.instance.to.attach.volume.to=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0430\u0448\u0438\u043d\u0443 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0438\u0441\u043a\u0430 label.select.instance=\u0412\u044b\u0431\u0438\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 label.select.iso.or.template=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 ISO \u0438\u043b\u0438 \u0448\u0430\u0431\u043b\u043e\u043d label.select.offering=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 label.select.project=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 +label.select.region=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d +label.select.template=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d label.select.tier=\u0412\u044b\u0431\u0440\u0430\u0442\u044c Tier label.select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c label.select-view=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0438\u0434 @@ -992,20 +1052,25 @@ label.server=\u0421\u0435\u0440\u0432\u0435\u0440 label.service.capabilities=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043b\u0443\u0436\u0431\u044b label.service.offering=\u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 label.service.state=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431 -label.session.expired=\u0412\u0440\u0435\u043c\u044f \u0441\u0435\u0441\u0441\u0438\u0438 \u0432\u044b\u0448\u043b\u043e +label.session.expired=\u0421\u0435\u0430\u043d\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d +label.set.default.NIC=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c NIC \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +label.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 label.setup.network=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0442\u0438 label.setup=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 label.set.up.zone.type=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0438\u043f \u0437\u043e\u043d\u044b label.setup.zone=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u043e\u043d\u044b label.SharedMountPoint=\u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f\u0422\u043e\u0447\u043a\u0430\u0414\u043e\u0441\u0442\u0443\u043f\u0430 label.shared=\u041e\u0431\u0449\u0438\u0439 -label.show.ingress.rule=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e +label.show.advanced.settings=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +label.show.ingress.rule=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e label.shutdown.provider=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 +label.site.to.site.VPN=Site-to-site VPN label.size=\u0420\u0430\u0437\u043c\u0435\u0440 -label.skip.guide=\u042f \u0443\u0436\u0435 \u0432\u0435\u043b\u0438\u043a\u0438\u0439 \u043c\u0430\u0441\u0442\u0435\u0440 CloudStack, \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e -label.snapshot.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u0441\u043d\u0438\u043c\u043a\u043e\u0432 +label.skip.guide=\u042f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b CloudStack, \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e +label.snapshot.limits=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043d\u0438\u043c\u043a\u043e\u0432 label.snapshot.name=\u0418\u043c\u044f \u0441\u043d\u0438\u043c\u043a\u0430 label.snapshot.schedule=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u044b\u0445 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 +label.snapshot.s=\u0421\u043d\u0438\u043c\u043a\u0438 label.snapshots=\u0421\u043d\u0438\u043c\u043a\u0438 label.snapshot=\u0421\u043d\u0438\u043c\u043e\u043a label.source.nat=Source NAT @@ -1028,14 +1093,14 @@ label.step.1.title=\u0428\u0430\u0433 1\: \u0412\u044b\u0431\u0435\u0440 label.step.1=\u0428\u0430\u0433 1 label.step.2.title=\u0428\u0430\u0433 2\: \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 label.step.2=\u0428\u0430\u0433 2 -label.step.3.title=\u0428\u0430\u0433 3\: \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.step.3.title=Step 3\: \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u043b\u0443\u0433\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 label.step.3=\u0428\u0430\u0433 3 label.step.4.title=Step 4\: \u0421\u0435\u0442\u044c label.step.4=\u0428\u0430\u0433 4 label.step.5.title=Step 5\: \u041e\u0431\u0437\u043e\u0440 label.step.5=\u0428\u0430\u0433 5 label.stickiness=\u041b\u0438\u043f\u043a\u0438\u0439 -label.sticky.cookie-name=Cookie \u0438\u043c\u044f +label.sticky.cookie-name=Cookie name label.sticky.domain=\u0414\u043e\u043c\u0435\u043d label.sticky.expire=\u0418\u0441\u0442\u0435\u043a\u0430\u0435\u0442 label.sticky.holdtime=\u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f @@ -1043,12 +1108,13 @@ label.sticky.indirect=\u041a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0439 label.sticky.length=\u0414\u043b\u0438\u043d\u0430 label.sticky.mode=\u0420\u0435\u0436\u0438\u043c label.sticky.nocache=\u041d\u0435\u0442 \u043a\u044d\u0448\u0430 -label.sticky.postonly=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e +label.sticky.postonly=\u0422\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 label.sticky.prefix=\u041f\u0440\u0435\u0444\u0438\u043a\u0441 label.sticky.request-learn=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435. label.sticky.tablesize=\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b label.stopped.vms=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0412\u041c label.stop=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c +label.storage.pool=\u041f\u0443\u043b \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.storage.tags=\u041c\u0435\u0442\u043a\u0438 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.storage.traffic=\u0422\u0440\u0430\u0444\u0438\u043a \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.storage.type=\u0422\u0438\u043f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 @@ -1064,8 +1130,9 @@ label.supported.source.NAT.type=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438 label.suspend.project=\u041f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 label.switch.type=\u0422\u0438\u043f \u0441\u0432\u0438\u0447\u0430 label.system.capacity=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b -label.system.offering=\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f -label.system.service.offering=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 +label.system.offering=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b +label.system.service.offering=\u0423\u0441\u043b\u0443\u0433\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431 +label.system.vm.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0441\u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 \u0412\u041c label.system.vms=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0412\u041c label.system.vm.type=\u0422\u0438\u043f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0412\u041c label.system.vm=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0412\u041c @@ -1086,19 +1153,22 @@ label.timeout=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043 label.time=\u0412\u0440\u0435\u043c\u044f label.time.zone=\u0427\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 label.timezone=\u0427\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 -label.token=\u0422\u0430\u043b\u043e\u043d +label.token=\u0422\u043e\u043a\u0435\u043d label.total.cpu=\u0412\u0441\u0435\u0433\u043e CPU label.total.CPU=\u0412\u0441\u0435\u0433\u043e CPU label.total.hosts=\u0412\u0441\u0435\u0433\u043e \u0443\u0437\u043b\u043e\u0432 label.total.memory=\u0412\u0441\u0435\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 +label.total.of.ip=\u0412\u0441\u0435\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 label.total.of.vm=\u0412\u0441\u0435\u0433\u043e \u0412\u041c -label.total.storage=\u0412\u0441\u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 +label.total.storage=\u0412\u0441\u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f +label.total.virtual.routers=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 label.total.vms=\u0412\u0441\u0435\u0433\u043e \u0412\u041c label.traffic.label=\u0422\u0440\u0430\u0444\u0438\u043a label.traffic.types=\u0422\u0438\u043f\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430 label.traffic.type=\u0422\u0438\u043f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 label.tuesday=\u0412\u0442\u043e\u0440\u043d\u0438\u043a label.type.id=ID \u0442\u0438\u043f\u0430 +label.type.lower=\u0422\u0438\u043f label.type=\u0422\u0438\u043f label.unavailable=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e label.unlimited=\u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e @@ -1108,13 +1178,16 @@ label.update.ssl.cert= \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u label.update.ssl= \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b SSL label.updating=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 label.upload=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c -label.upload.volume=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c +label.upload.volume=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0438\u0441\u043a label.url=URL label.usage.interface=\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f +label.usage.server=\u0421\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 label.used=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e +label.username.lower=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f label.username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f label.users=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 label.user=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c +label.use.vm.ips=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0412\u041c IPs label.use.vm.ip=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 IP \u0412\u041c\: label.value=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 label.vcdcname=\u0418\u043c\u044f vCenter DC @@ -1126,6 +1199,7 @@ label.vcenter.password=\u041f\u0430\u0440\u043e\u043b\u044c vCenter label.vcenter.username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f vCenter label.vcipaddress=vCenter IP \u0410\u0434\u0440\u0435\u0441\u0441 label.version=\u0412\u0435\u0440\u0441\u0438\u044f +label.vgpu.remaining.capacity=\u041e\u0441\u0442\u0430\u0448\u0438\u0435\u0441\u044f \u0435\u043c\u043a\u043e\u0441\u0442\u044c label.view.all=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0451 label.view.console=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c label.viewing=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 @@ -1134,6 +1208,9 @@ label.view.secondary.ips=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434 label.view=\u0412\u0438\u0434 label.virtual.appliances=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 label.virtual.appliance=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e +label.virtual.machines=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b +label.virtual.machine=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 +label.virtual.networking=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430t \u0441\u0435\u0442\u0438 label.virtual.network=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c label.virtual.routers=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 label.virtual.router=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 @@ -1141,12 +1218,13 @@ label.vlan.id=ID VLAN label.vlan.only=VLAN label.vlan.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d VLAN label.vlan=VLAN -label.vlan.vni.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d VLAN +label.vlan.vni.range=VLAN/VNI Range label.vm.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b label.vm.destroy=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c label.vm.display.name=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0412\u041c label.VMFS.datastore=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 VMFS label.vmfs=VMFS +label.vm.ip=\u0412\u041c IP-\u0430\u0434\u0440\u0435\u0441 label.vm.name=\u0418\u043c\u044f VM label.vm.reboot=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c label.VMs.in.tier=Tier \u0412\u041c @@ -1162,12 +1240,17 @@ label.vms=\u0412\u041c label.vmware.traffic.label=\u041c\u0435\u0442\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 VMware label.vnet.id=ID VLAN label.vnet=VLAN -label.volgroup=\u0413\u0440\u0443\u043f\u043f\u0430 \u0442\u043e\u043c\u0430 -label.volume.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u0442\u043e\u043c\u043e\u0432 +label.volgroup=\u0413\u0440\u0443\u043f\u043f\u0430 \u0434\u0438\u0441\u043a\u0430 +label.volume.details=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0434\u0438\u0441\u043a\u0435 +label.volume.limits=\u041a\u043e\u043b\u0438\u0447\u0435\u0442\u0441\u0432\u043e \u0434\u0438\u0441\u043a\u043e\u0432 +label.volume.migrated=\u0414\u0438\u0441\u043a \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043d label.volume.name=\u0418\u043c\u044f \u0442\u043e\u043c\u0430 label.volumes=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f label.volume=\u0422\u043e\u043c label.vpc.id=VPC ID +label.VPC.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f VPC +label.vpc.offering.details=\u0414\u0435\u0442\u0430\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0438 VPC +label.vpc.offering=\u0423\u0441\u043b\u0443\u0433\u0430 VPC label.VPC.router.details=\u0414\u0435\u0442\u0430\u043b\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430 VPC label.vpc=VPC label.VPN.connection=VPN \u043f\u043e\u0434\u043b\u044e\u0447\u0435\u043d\u0438\u0435 @@ -1175,10 +1258,10 @@ label.vpn.customer.gateway=VPN \u0448\u043b\u044e\u0437 \u043a\u043b\u0438\u0435 label.VPN.customer.gateway=VPN \u0448\u043b\u044e\u0437 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 label.VPN.gateway=VPN \u0448\u043b\u044e\u0437 label.vpn=VPN -label.vsmctrlvlanid=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 VLAN ID -label.vsmpktvlanid=\u041f\u0430\u043a\u0435\u0442 VLAN ID -label.vsmstoragevlanid=\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 VLAN ID -label.vsphere.managed=\u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 vSphere +label.vsmctrlvlanid=Control VLAN ID +label.vsmpktvlanid=Packet VLAN ID +label.vsmstoragevlanid=Storage VLAN ID +label.vsphere.managed=vSphere Managed label.vxlan.id=VXLAN ID label.vxlan.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d Range label.vxlan=VXLAN @@ -1186,9 +1269,9 @@ label.waiting=\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 label.warn=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435 label.wednesday=\u0421\u0440\u0435\u0434\u0430 label.weekly=\u0415\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e -label.welcome.cloud.console=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f +label.welcome.cloud.console=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043d\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f label.welcome=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c -label.what.is.cloudstack=\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 CloudStack? +label.what.is.cloudstack=\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 CloudStack&\#8482? label.xenserver.traffic.label=\u041c\u0435\u0442\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 XenServer label.yes=\u0414\u0430 label.zone.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u043e\u043d\u044b @@ -1206,82 +1289,82 @@ label.zoneWizard.trafficType.guest=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0 label.zoneWizard.trafficType.management=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\: \u0422\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c CloudStack, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043b\u044e\u0431\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0443\u0437\u043b\u044b \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b. label.zoneWizard.trafficType.public=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439\: \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438 \u0432 \u043e\u0431\u043b\u0430\u043a\u0435 label.zoneWizard.trafficType.storage=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\: \u0422\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u043c\u0438 \u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u0441\u043d\u0438\u043c\u043a\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. -managed.state=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f -message.acquire.ip.nic=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u0439 IP \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e NIC.
\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 IP \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. +managed.state=\u0420\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f +message.acquire.ip.nic=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 IP \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.
\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 IP \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. message.acquire.new.ip=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c "\u0431\u0435\u043b\u044b\u0439" IP \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u0438. message.acquire.new.ip.vpc=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c "\u0431\u0435\u043b\u044b\u0439" IP \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e VPC. message.acquire.public.ip=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u043e\u043d\u0443, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0439 IP. message.action.cancel.maintenance.mode=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. -message.action.cancel.maintenance=\u0423\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u0448\u0435\u043b \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043b\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442. -message.action.change.service.warning.for.instance=\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430. -message.action.change.service.warning.for.router=\u0414\u043b\u044f \u0440\u043e\u0443\u0442\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430. -message.action.delete.cluster=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. -message.action.delete.disk.offering=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441. -message.action.delete.domain=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u043e\u043c\u0435\u043d. -message.action.delete.external.firewall=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0444\u0430\u0435\u0440\u0432\u043e\u043b. \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0444\u0430\u0435\u0440\u0432\u043e\u043b\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. -message.action.delete.external.load.balancer=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0435, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. -message.action.delete.ingress.rule=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e. -message.action.delete.ISO.for.all.zones=\u042d\u0442\u043e ISO, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432\u0441\u0435\u043c\u0438 \u0437\u043e\u043d\u0430\u043c\u0438. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u043e \u0432\u0441\u0435\u0445 \u0437\u043e\u043d. -message.action.delete.ISO=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 ISO. -message.action.delete.network=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0435\u0442\u044c. -message.action.delete.nexusVswitch=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e nexusVswitch. +message.action.cancel.maintenance=\u0423\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u044b\u0448\u0435\u043b \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442. +message.action.change.service.warning.for.instance=\u041f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0412\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 +message.action.change.service.warning.for.router=\u0414\u043b\u044f \u0441\u043c\u0435\u043d\u044b \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0441\u043b\u0443\u0433 \u0412\u0430\u0448 \u0440\u043e\u0443\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d +message.action.delete.cluster=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. +message.action.delete.disk.offering=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u042b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0443\u0441\u043b\u0443\u0433\u0443 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 +message.action.delete.domain=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u043e\u043c\u0435\u043d. +message.action.delete.external.firewall=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0444\u0430\u0435\u0440\u0432\u043e\u043b. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0435\u043d\u0438\u0435\: \u0415\u0441\u043b\u0438 \u0412\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u044d\u0442\u043e\u0442 \u0436\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0444\u0430\u0435\u0440\u0432\u043e\u043b, \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. +message.action.delete.external.load.balancer=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0435\u043d\u0438\u0435\: \u0415\u0441\u043b\u0438 \u0412\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u044d\u0442\u043e\u0442 \u0436\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0444\u0430\u0435\u0440\u0432\u043e\u043b, \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 +message.action.delete.ingress.rule=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e. +message.action.delete.ISO.for.all.zones=ISO \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0437\u043e\u043d\u0430\u043c\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0432\u0441\u0435\u0445 \u0437\u043e\u043d. +message.action.delete.ISO=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 ISO. +message.action.delete.network=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0435\u0442\u044c. +message.action.delete.nexusVswitch=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e nexus 1000v message.action.delete.nic=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 NIC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u0442 \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0438\u0437 \u0412\u041c. -message.action.delete.physical.network=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c -message.action.delete.pod=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0442\u0435\u043d\u0434. -message.action.delete.primary.storage=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. -message.action.delete.secondary.storage=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. -message.action.delete.security.group=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0433\u0440\u0443\u043f\u043f\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. -message.action.delete.service.offering=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441. -message.action.delete.snapshot=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a. -message.action.delete.system.service.offering=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0441\u0443\u0440\u0441 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431. -message.action.delete.template.for.all.zones=\u0428\u0430\u0431\u043b\u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0437\u043e\u043d\u0430\u0445. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u043e \u0432\u0441\u0435\u0445 \u0437\u043e\u043d. -message.action.delete.template=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d. -message.action.delete.volume=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u043e\u043c. -message.action.delete.zone=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443. -message.action.destroy.instance=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. -message.action.destroy.systemvm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. -message.action.disable.cluster=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. -message.action.disable.nexusVswitch=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 nexusVswitch. +message.action.delete.physical.network=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c +message.action.delete.pod=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0442\u0435\u043d\u0434. +message.action.delete.primary.storage=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. +message.action.delete.secondary.storage=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 +message.action.delete.security.group=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 security group. +message.action.delete.service.offering=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u042b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0443\u0441\u043b\u0443\u0433\u0443 \u0441\u043b\u0443\u0436\u0431 +message.action.delete.snapshot=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a. +message.action.delete.system.service.offering=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441. +message.action.delete.template.for.all.zones=\u042d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0437\u043e\u043d\u0430\u0445. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0437\u043e\u043d\u0430\u0445. +message.action.delete.template=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u043a \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d. +message.action.delete.volume=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u043e\u043c. +message.action.delete.zone=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443. +message.action.destroy.instance=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. +message.action.destroy.systemvm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c. +message.action.disable.cluster=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. +message.action.disable.nexusVswitch=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e nexusVswitch. message.action.disable.physical.network=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c. -message.action.disable.pod=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443. -message.action.disable.static.NAT=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 NAT. -message.action.disable.zone=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443 +message.action.disable.pod=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0442\u0435\u043d\u0434. +message.action.disable.static.NAT=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e \u0430\u0434\u0440\u0435\u0441\u043e\u0432. +message.action.disable.zone=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0437\u043e\u043d\u0443. message.action.download.iso=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 ISO. message.action.download.template=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d. -message.action.enable.cluster=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. -message.action.enable.maintenance=\u0423\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0432\u043e\u0448\u0435\u043b \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0412\u041c \u0432 \u044d\u0442\u043e\u043c \u0443\u0437\u043b\u0435 \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0432\u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043c\u0438\u043d\u0443\u0442\u0430\u043c. -message.action.enable.nexusVswitch=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e nexusVswitch. +message.action.enable.cluster=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440. +message.action.enable.maintenance=\u0412\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u043d\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. +message.action.enable.nexusVswitch=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e nexus 1000v. message.action.enable.physical.network=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c. message.action.enable.pod=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0442\u0435\u043d\u0434. -message.action.enable.zone=\u041f\u043e\u0442\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443 -message.action.force.reconnect=\u0423\u0437\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442. -message.action.host.enable.maintenance.mode=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0437\u043b\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0443 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0443\u0437\u043b\u044b. -message.action.instance.reset.password=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c root \u044d\u0442\u043e\u0439 \u0412\u041c. +message.action.enable.zone=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443. +message.action.force.reconnect=\u0412\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0434\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043d\u0443\u0442. +message.action.host.enable.maintenance.mode=\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. +message.action.instance.reset.password=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. message.action.manage.cluster=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f. -message.action.primarystorage.enable.maintenance.mode=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435\: \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u0432\u0441\u0435 \u0412\u041c \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? +message.action.primarystorage.enable.maintenance.mode=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\: \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432\u0441\u0435\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0435\u0433\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? message.action.reboot.instance=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. message.action.reboot.router=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u043e\u0443\u0442\u0435\u0440. -message.action.reboot.systemvm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0412\u041c. -message.action.release.ip=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 IP-\u0430\u0434\u0440\u0435\u0441. +message.action.reboot.systemvm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c. +message.action.release.ip=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 IP \u0430\u0434\u0440\u0435\u0441. message.action.remove.host=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e/\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f/\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435 \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u043d\u0435\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u043c\u0438 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e. message.action.reset.password.off=\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e -message.action.reset.password.warning=\u041c\u0430\u0448\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f -message.action.restore.instance=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. +message.action.reset.password.warning=\u041f\u0435\u0440\u0435\u0434 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u0412\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430. +message.action.restore.instance=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. message.action.revert.snapshot=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0438\u0441\u043a \u043a \u044d\u0442\u043e\u043c\u0443 \u0442\u043e\u043c \u0441\u043d\u0438\u043c\u043a\u0443 -message.action.start.instance=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. -message.action.start.router=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u043e\u0443\u0442\u0435\u0440. +message.action.start.instance=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. +message.action.start.router=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u043e\u0443\u0442\u0435\u0440. message.action.start.systemvm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c. -message.action.stop.instance=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. +message.action.stop.instance=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u043c\u0430\u0448\u0438\u043d\u0443. message.action.stop.router=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u043e\u0443\u0442\u0435\u0440. -message.action.stop.systemvm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0412\u041c. -message.action.take.snapshot=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u043c\u0430. +message.action.stop.systemvm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. +message.action.take.snapshot=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u044d\u0442\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430. message.action.unmanage.cluster=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c. message.action.vmsnapshot.delete=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a \u0412\u041c. message.action.vmsnapshot.revert=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0412\u041c message.activate.project=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442? -message.add.cluster=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0437\u043e\u043d\u044b , \u043c\u043e\u0434\u0443\u043b\u044c -message.add.cluster.zone=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0437\u043e\u043d\u044b -message.add.disk.offering=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430 +message.add.cluster=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u0432 \u0437\u043e\u043d\u0435 , pod +message.add.cluster.zone=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u043e\u0432 \u0432 \u0437\u043e\u043d\u0435 +message.add.disk.offering=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 message.add.domain=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d, \u0433\u0434\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0430\u0448 \u0434\u043e\u043c\u0435\u043d message.add.firewall=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0435\u0440\u0432\u043e\u043b \u0432 \u0437\u043e\u043d\u0443 message.add.guest.network=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u043e\u0441\u0442\u0435\u0432\u0443\u044e \u0441\u0435\u0442\u044c @@ -1292,7 +1375,7 @@ message.adding.Netscaler.provider=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u04 message.add.ip.range.direct.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c IP-\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0441\u0435\u0442\u0438 \u0432 \u0437\u043e\u043d\u0435 message.add.ip.range.to.pod=

\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u0441\u0442\u0435\u043d\u0434\:

message.add.ip.range=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0437\u043e\u043d\u044b -message.additional.networks.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u043a\u0443\u0434\u0430 \u0432\u0430\u0448\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b. +message.additional.networks.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0412\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430. message.add.load.balancer=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0437\u043e\u043d\u0443 message.add.load.balancer.under.ip=\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 IP\: message.add.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0434\u043b\u044f \u0437\u043e\u043d\u044b\: @@ -1300,26 +1383,26 @@ message.add.new.gateway.to.vpc=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441 message.add.pod.during.zone.creation=\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0435\u043d\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u043c. \u0421\u0442\u0435\u043d\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u0437\u043b\u044b \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 IP \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0435\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 IP \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u044b \u043e\u0431\u043b\u0430\u043a\u0430. message.add.pod=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u0434\u043b\u044f \u0437\u043e\u043d\u044b message.add.primary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0437\u043e\u043d\u044b , \u0441\u0442\u0435\u043d\u0434\u0430 -message.add.primary=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 +message.add.primary=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0437\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 message.add.region=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430. message.add.secondary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u0437\u043e\u043d\u0443 -message.add.service.offering=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430. -message.add.system.service.offering=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431. -message.add.template=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 -message.add.volume=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u043e\u043c\u0430 +message.add.service.offering=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430. +message.add.system.service.offering=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0443\u0441\u043b\u0443\u0433\u0438 +message.add.template=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 +message.add.volume=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430. message.add.VPN.gateway=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c VPN \u0448\u043b\u044e\u0437 -message.advanced.mode.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0435\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 VLAN. \u042d\u0442\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u0435\u0442\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043c\u0435\u0436\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u044d\u043a\u0440\u0430\u043d, VPN, \u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. -message.advanced.security.group=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. -message.advanced.virtual=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0439 \u0437\u043e\u043d\u044b \u0441\u0435\u0442\u0438 VLAN, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. +message.advanced.mode.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u0443 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0435\u0441\u043b\u0438 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e VLAN. \u042d\u0442\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u0430\u043a \u0444\u0430\u0435\u0440\u0432\u043e\u043b, \u0412\u041f\u041d, \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0435 \u0438\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. +message.advanced.security.group=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u043e, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c security groups \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. +message.advanced.virtual=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u043e, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c VLAN \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. message.after.enable.s3=S3-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043a\u0438\u043d\u0435\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c S3 \u0441\u043d\u043e\u0432\u0430. message.after.enable.swift=Swift \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043a\u0438\u043d\u0435\u0442\u0435 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c Swift \u0441\u043d\u043e\u0432\u0430 message.alert.state.detected=\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0441\u0438\u0433\u043d\u0430\u043b \u0442\u0440\u0435\u0432\u043e\u0433\u0438 -message.allow.vpn.access=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f VPN-\u0434\u043e\u0441\u0442\u0443\u043f\u0430. -message.apply.snapshot.policy=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043d\u0438\u043c\u043a\u0430 \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b. -message.attach.iso.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c ISO \u0432 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440. -message.attach.volume=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e. \u0414\u043b\u044f Windows, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 -message.basic.mode.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0435\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b *not* \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u043b\u044e\u0431\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 VLAN. \u0412\u0441\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0435\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d IP \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0441\u0435\u0442\u0438 \u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0435\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438. -message.change.offering.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e VM. +message.allow.vpn.access=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c VPN \u0434\u043e\u0441\u0442\u0443\u043f. +message.apply.snapshot.policy=\u0412\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439. +message.attach.iso.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c ISO \u043a \u044d\u0442\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. +message.attach.volume=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u0438\u043d\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430. \u0415\u0441\u043b\u0438 \u0412\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435 \u0434\u0438\u0441\u043a \u043a \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 Windows, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b \u0434\u0438\u0441\u043a \u0431\u044b\u043b \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d. +message.basic.mode.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u0442\u0443 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0435\u0441\u043b\u0438 \u0412\u044b *\u043d\u0435* \u0445\u043e\u0442\u0438\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 VLAN. \u0412\u0441\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 IP \u0430\u0434\u0440\u0435\u0441. \u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b Security groups. +message.change.offering.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0438 \u0441\u043b\u0443\u0436\u0431 \u044d\u0442\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. message.change.password=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0432\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c. message.configure.all.traffic.types=\u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u0442\u0435\u0439, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u043d\u0430\u0436\u0430\u0432 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c. message.configuring.guest.traffic=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 @@ -1337,11 +1420,11 @@ message.confirm.enable.provider=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434 message.confirm.join.project=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443. message.confirm.remove.IP.range=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP. message.confirm.shutdown.provider=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 -message.copy.iso.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c ISO \u0434\u043e +message.copy.iso.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0412\u0430\u0448 ISO \u0432 message.copy.template=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d XXX \u0438\u0437 \u0437\u043e\u043d\u044b \u0432 message.create.template=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d? -message.create.template.vm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b -message.create.template.volume=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u0438\u0441\u043a\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c\: . \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043d\u0443\u0442 \u0434\u043e \u0434\u043e\u043b\u044c\u0448\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0442\u043e\u043c\u0430. +message.create.template.vm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 +message.create.template.volume=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438\u0437 \u0412\u0430\u0448\u0435\u0433\u043e \u0434\u0438\u0441\u043a\u0430\: . \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0412\u0430\u0448\u0435\u0433\u043e \u0434\u0438\u0441\u043a\u0430. message.creating.cluster=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 message.creating.guest.network=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u043e\u0441\u0442\u0435\u0432\u0443\u044e \u0441\u0435\u0442\u044c message.creating.physical.networks=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u0442\u0435\u0439 @@ -1351,7 +1434,7 @@ message.creating.secondary.storage=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0 message.creating.zone=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u043e\u043d\u044b message.decline.invitation=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442. message.dedicate.zone=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430 -message.delete.account=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043a\u043a\u0430\u0443\u043d\u0442. +message.delete.account=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. message.delete.affinity.group=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 affinity group message.delete.gateway=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0448\u043b\u044e\u0437. message.delete.project=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442? @@ -1364,41 +1447,42 @@ message.desc.basic.zone=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u message.desc.cluster=\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435. \u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443 \u0443\u0437\u043b\u043e\u0432. \u0423\u0437\u043b\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0443\u0437\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0435\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449. message.desc.host=\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b (\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440) \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0412\u041c, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0441\u0435\u0439\u0447\u0430\u0441. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0437\u043b\u0430 \u0432 CloudStack \u0432\u0430\u0436\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430 \u043d\u0430 \u0443\u0437\u0435\u043b, \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 IP \u043a \u0443\u0437\u043b\u0443 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f CloudStack.

\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f DNS \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 IP, \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043a \u041e\u0421 (\u043e\u0431\u044b\u0447\u043d\u043e root), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u043a\u0438 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432. message.desc.primary.storage=\u041a\u0430\u0436\u0434\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430. -message.desc.secondary.storage=\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c NFS \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0438 \u0438\u0445 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0412\u041c, \u043e\u0431\u0440\u0430\u0437\u043e\u0432 ISO \u0438 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0412\u041c. \u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u0437\u043e\u043d\u044b.

\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u0443\u0442\u044c. +message.desc.secondary.storage=\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c NFS \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0438 \u0438\u0445 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0412\u041c, \u043e\u0431\u0440\u0430\u0437\u043e\u0432 ISO \u0438 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0412\u041c. \u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u0437\u043e\u043d\u044b.

\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u0443\u0442\u044c. message.desc.zone=layer 3 message.detach.disk=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u0438\u0441\u043a? -message.detach.iso.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c ISO \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. -message.disable.account=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u041f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430, \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u043e\u0431\u043b\u0430\u043a\u0430. \u0412\u0441\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044b. -message.disable.snapshot.policy=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u043d\u0438\u043c\u043a\u0430 \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b. +message.detach.iso.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c ISO \u043e\u0442 \u044d\u0442\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. +message.disable.account=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u041e\u0431\u043b\u0430\u043a\u0430. \u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b. +message.disable.snapshot.policy=\u0412\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439. message.disable.user=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. -message.disable.vpn.access=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN \u0434\u043e\u0441\u0442\u0443\u043f +message.disable.vpn.access=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c VPN \u0434\u043e\u0441\u0442\u0443\u043f. message.disable.vpn=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN? message.download.ISO=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 00000 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 message.download.template=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 00000\u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 -message.download.volume=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 00000 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u043e\u043c\u0430 +message.download.volume.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 00000 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0438\u0441\u043a\u0430 +message.download.volume=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 00000 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0438\u0441\u043a\u0430 message.edit.account=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 "-1" \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430) -message.edit.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c". -message.edit.limits=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0434\u043b\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 "-1" \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430. -message.edit.traffic.type=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0442\u043a\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0430. -message.enable.account=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. +message.edit.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0436\u0430\u0442\u044c \\'\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\\'. +message.edit.limits=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. "-1" \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. +message.edit.traffic.type=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043c\u0435\u0442\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0430. +message.enable.account=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. message.enabled.vpn.ip.sec=\u0412\u0430\u0448 IPSec pre-shared \u043a\u043b\u044e\u0447 -message.enabled.vpn=\u0412\u0430\u0448 VPN \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0447\u0435\u0440\u0435\u0437 IP +message.enabled.vpn=\u0412\u0430\u0448 VPN \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d. \u0414\u043e\u0441\u0442\u0443\u043f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d \u0447\u0435\u0440\u0435\u0437 IP \u0430\u0434\u0440\u0435\u0441 message.enable.user=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. -message.enable.vpn.access=\u0421\u0435\u0439\u0447\u0430\u0441 VPN \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e IP-a\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d. \u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN-\u0434\u043e\u0441\u0442\u0443\u043f? +message.enable.vpn.access=VPN \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e IP \u0430\u0434\u0440\u0435\u0441\u0430. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c VPN? message.enable.vpn=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a VPN \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430. -message.enabling.security.group.provider=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0437\u0430\u0441\u0438\u0449\u0435\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 +message.enabling.security.group.provider=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 message.enabling.zone=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443 message.enter.token=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 \u043f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0438\u0441\u044c\u043c\u0435 message.generate.keys=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. -message.guest.traffic.in.advanced.zone=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0441\u0435\u0442\u0438 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 VLAN \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0433\u043e\u0441\u0442\u044f \u0442\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438. +message.guest.traffic.in.advanced.zone=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0438\u0442 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 VLAN \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438. message.guest.traffic.in.basic.zone=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 IP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 CloudStack \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043b\u044f \u0412\u041c. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. message.installWizard.click.retry=\u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a. -message.installWizard.copy.whatIsACluster=\u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u044b \u0443\u0437\u043b\u043e\u0432. \u0423\u0437\u043b\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u043c \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u0435\u0440\u0435, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u0431\u0449\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443. \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b "\u0432\u0436\u0438\u0432\u0443\u044e" \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u0443\u0436\u0431 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041a\u043b\u0430\u0441\u0442\u0435\u0440 - \u0442\u0440\u0435\u0442\u044c\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 CloudStack&\#8482;. \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u044b \u0440\u0430\u0441\u043f\u043e\u043e\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043d\u0434\u0430\u0445, \u0430 \u0441\u0442\u0435\u043d\u0434\u044b - \u0432 \u0437\u043e\u043d\u0430\u0445.

CloudStack&\#8482; \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u043d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u044d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. +message.installWizard.copy.whatIsACluster=\u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443 \u0443\u0437\u043b\u043e\u0432. \u0423\u0437\u043b\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u043c \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u0435\u0440\u0435, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u043e\u0431\u0449\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443. \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b (\u0412\u041c) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b "\u0432\u0436\u0438\u0432\u0443\u044e" \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041a\u043b\u0430\u0441\u0442\u0435\u0440 - \u0442\u0440\u0435\u0442\u044c\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 CloudStack&\#8482. \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043d\u0434\u0430\u0445, \u0430 \u0441\u0442\u0435\u043d\u0434\u044b - \u0432 \u0437\u043e\u043d\u0430\u0445.

CloudStack&\#8482; \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u043d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u044d\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. message.installWizard.copy.whatIsAHost=\u0423\u0437\u0435\u043b - \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u0423\u0437\u043b\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0433\u043e\u0441\u0442\u0435\u0432\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d. \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0412\u041c (\u043a\u0440\u043e\u043c\u0435 \u0443\u0437\u043b\u043e\u0432 BareMetal, \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b \u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e Linux-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 KVM, \u0441\u0435\u0440\u0432\u0435\u0440 Citrix XenServer \u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 ESXI. \u041f\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b \u0441 XenServer.

\u0423\u0437\u0435\u043b - \u044d\u0442\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 CloudStack&\#8482;, \u0434\u0430\u043b\u0435\u0435 \u0443\u0437\u043b\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445, \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b - \u0432 \u0441\u0442\u0435\u043d\u0434\u0430\u0445, \u0441\u0442\u0435\u043d\u0434\u044b - \u0432 \u0437\u043e\u043d\u0430\u0445. message.installWizard.copy.whatIsAPod=\u0421\u0442\u0435\u043d\u0434, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0439\u043a\u0443 \u0441 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438. \u0423\u0437\u043b\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0442\u0435\u043d\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0435\u0442\u0438.

\u0421\u0442\u0435\u043d\u0434 - \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 CloudStack&\#8482;. \u0421\u0442\u0435\u043d\u0434\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u043e\u043d\u0430\u0445. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0435\u043d\u0434\u043e\u0432, \u043d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432 \u0437\u043e\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0441\u0442\u0435\u043d\u0434. message.installWizard.copy.whatIsAZone=\u0417\u043e\u043d\u0430 - \u044d\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u0430\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 CloudStack&\#8482;. \u0417\u043e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u043c\u0443 \u0426\u041e\u0414, \u0445\u043e\u0442\u044f \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043e\u043d \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0426\u041e\u0414. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0438 \u0441\u0435\u0442\u044c, \u0430 \u0441\u0430\u043c\u0438 \u0437\u043e\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438. message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482 - \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043f\u043b\u0430\u0444\u0442\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445, \u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0438 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u00ab\u0418\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441\u00bb (IaaS). CloudStack&\#8482 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0442\u044c\u044e, \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u0413\u043b\u0430\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, CloudStack&\#8482 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.

CloudStack&\#8482 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0438 \u0446\u0435\u043b\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u043b\u0430\u043a\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0438 \u0411\u0435\u0437\u043d\u0435\u0441-\u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f. -message.installWizard.copy.whatIsPrimaryStorage=CloudStack&\#8482; - \u044d\u0442\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c iSCSI \u0438\u043b\u0438 NFS-\u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a.

\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043e \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0442\u043e\u043c\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0412\u041c, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u0432 \u0443\u0437\u043b\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u0438\u0445 \u0443\u0437\u043b\u0430\u0445. +message.installWizard.copy.whatIsPrimaryStorage=CloudStack&\#8482; - \u044d\u0442\u043e \u043e\u0431\u043b\u0430\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c iSCSI \u0438\u043b\u0438 NFS-\u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a.

\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0438 \u0442\u0430\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0442\u043e\u043c\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0412\u041c, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u0432 \u0443\u0437\u043b\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u043e\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u044f\u0434\u043e\u043c \u0441 \u0443\u0437\u043b\u043e\u043c. message.installWizard.copy.whatIsSecondaryStorage=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043e \u043a \u0437\u043e\u043d\u0435 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435\:
  • \u0428\u0430\u0431\u043b\u043e\u043d\u044b - \u043e\u0431\u0440\u0430\u0437\u044b \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0412\u041c \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.
  • \u041e\u0431\u0440\u0430\u0437\u044b ISO - \u044d\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u041e\u0421
  • \u0421\u043d\u0438\u043c\u043a\u0438 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0442\u043e\u043c\u043e\u0432 - \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0412\u041c, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430
message.installWizard.now.building=\u0412\u0430\u0448\u0435 \u043e\u0431\u043b\u0430\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f... message.installWizard.tooltip.addCluster.name=\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u043c\u044f, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 Cloudstack. @@ -1406,12 +1490,12 @@ message.installWizard.tooltip.addHost.hostname=\u0418\u043c\u044f DNS \u0438\u04 message.installWizard.tooltip.addHost.password=\u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0441 \u0432\u0430\u0448\u0435\u0433\u043e XenServer) message.installWizard.tooltip.addHost.username=\u041e\u0431\u044b\u0447\u043d\u043e root. message.installWizard.tooltip.addPod.name=\u0418\u043c\u044f \u0441\u0442\u0435\u043d\u0434\u0430 -message.installWizard.tooltip.addPod.reservedSystemEndIp=\u042d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f CloudStack \u0434\u043b\u044f \u0412\u041c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438. \u042d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0435\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. +message.installWizard.tooltip.addPod.reservedSystemEndIp=\u042d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0412\u041c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438. \u042d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0435\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. message.installWizard.tooltip.addPod.reservedSystemGateway=\u0428\u043b\u044e\u0437 \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430. message.installWizard.tooltip.addPod.reservedSystemNetmask=\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439. message.installWizard.tooltip.addPod.reservedSystemStartIp=\u042d\u0442\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f CloudStack \u0434\u043b\u044f \u0412\u041c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438. \u042d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0435\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. message.installWizard.tooltip.addPrimaryStorage.name=\u0418\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. -message.installWizard.tooltip.addPrimaryStorage.path=(\u0434\u043b\u044f NFS) \u0412 NFS \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u044d\u043a\u043f\u043e\u0440\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u0443\u0442\u044c (\u0434\u043b\u044f \u041e\u0442\u043a\u0440\u044b\u0442\u043e\u0439\u0422\u043e\u0447\u043a\u0438\u0414\u043e\u0441\u0442\u0443\u043f\u0430). \u0412 KVM \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, "/mnt/primary". +message.installWizard.tooltip.addPrimaryStorage.path=(\u0434\u043b\u044f NFS) \u0412 NFS \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u044d\u043a\u043f\u043e\u0440\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041f\u0443\u0442\u044c (\u0434\u043b\u044f SharedMountPoint). \u0412 KVM \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, "/mnt/primary". message.installWizard.tooltip.addPrimaryStorage.server=(\u0434\u043b\u044f NFS, iSCSI \u0438\u043b\u0438 PreSetup) IP-\u0430\u0434\u0440\u0435\u0441 \u0438\u043b\u0438 \u0438\u043c\u044f DNS \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. message.installWizard.tooltip.addSecondaryStorage.nfsServer=IP-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 NFS, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 message.installWizard.tooltip.addSecondaryStorage.path=\u041f\u0443\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. @@ -1422,26 +1506,26 @@ message.installWizard.tooltip.addZone.internaldns2=\u042d\u0442\u043e c\u0435\u0 message.installWizard.tooltip.addZone.name=\u0418\u043c\u044f \u0437\u043e\u043d\u044b message.installWizard.tooltip.configureGuestTraffic.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u0438 message.installWizard.tooltip.configureGuestTraffic.guestEndIp=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (NIC) \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 (CIDR) \u0441\u0442\u0435\u043d\u0434\u0430. -message.installWizard.tooltip.configureGuestTraffic.guestGateway=\u0428\u043b\u044e\u0437 \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u044f\u043c\u0438 +message.installWizard.tooltip.configureGuestTraffic.guestGateway=\u0428\u043b\u044e\u0437, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0433\u043e\u0441\u0442\u044f\u043c\u0438 message.installWizard.tooltip.configureGuestTraffic.guestNetmask=\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439. message.installWizard.tooltip.configureGuestTraffic.guestStartIp=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (NIC) \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 (CIDR) \u0441\u0442\u0435\u043d\u0434\u0430. -message.installWizard.tooltip.configureGuestTraffic.name=\u0418\u043c\u044f \u044d\u0442\u043e\u0439 \u0441\u0435\u0442\u0438 +message.installWizard.tooltip.configureGuestTraffic.name=\u0418\u043c\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u0441\u0435\u0442\u0438 message.instanceWizard.noTemplates=\u0412\u044b \u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432; \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u0430\u0448\u0438\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d. message.ip.address.changed=\u0412\u0430\u0448\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b, \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432? \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442\u0430. -message.iso.desc=\u041e\u0431\u0440\u0430\u0437 \u0434\u0438\u0441\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u041e\u0421. -message.join.project=\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 "\u041f\u0440\u043e\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0438\u0434" \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. -message.launch.vm.on.private.network=\u0425\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0412\u041c \u0432 \u0432\u0430\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438? +message.iso.desc=\u041e\u0431\u0440\u0430\u0437 \u0434\u0438\u0441\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u041e\u0421 +message.join.project=\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430". +message.launch.vm.on.private.network=\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0412\u0430\u043c \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u0438? message.launch.zone=\u0417\u043e\u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443. message.lock.account=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u0412\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043f\u043e\u0442\u0435\u0440\u044f\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u042d\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. -message.migrate.instance.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. +message.migrate.instance.confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. message.migrate.instance.to.host=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0437\u0435\u043b. message.migrate.instance.to.ps=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. -message.migrate.router.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u043e\u0443\u0442\u0435\u0440 \u0432 \u0443\u0437\u0435\u043b -message.migrate.systemvm.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u043e\u0443\u0442\u0435\u0440 \u0432 \u0443\u0437\u0435\u043b -message.migrate.volume=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0442\u043e\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. +message.migrate.router.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u043e\u0443\u0442\u0435\u0440 \u0432 \u0443\u0437\u0435\u043b\: +message.migrate.systemvm.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0412\u041c \u0432 \u0443\u0437\u0435\u043b +message.migrate.volume=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0434\u0438\u0441\u043a \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. message.new.user=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0443\u0447\u0451\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. message.no.affinity.groups=\u0412\u044b \u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0435 affinity groups. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443. -message.no.network.support.configuration.not.true=\u041d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0437\u043e\u043d\u0435 \u043d\u0435\u0442 \u0433\u0440\u0443\u043f\u043f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0448\u0430\u0433\u0443 5. +message.no.network.support.configuration.not.true=\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b security group \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0437\u043e\u043d\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0448\u0430\u0433\u0443 5. message.no.network.support=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 (vSphere) \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0448\u0430\u0433\u0443 5. message.no.projects.adminOnly=\u0423 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.
\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. message.no.projects=\u0423 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.
\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 "\u041f\u0440\u043e\u0435\u043a\u0442\u044b" @@ -1459,41 +1543,43 @@ message.please.select.a.different.public.and.management.network.before.removing= message.please.select.networks=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b message.please.wait.while.zone.is.being.created=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u043e\u043d\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f... message.project.invite.sent=\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e; \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f. -message.public.traffic.in.advanced.zone=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0412\u041c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 IP \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0438\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CloudStack UI \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f IP \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f NAT, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e.

\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. +message.public.traffic.in.advanced.zone=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0412\u041c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 IP \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CloudStack UI \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f IP \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f NAT, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e.

\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. message.public.traffic.in.basic.zone=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0412\u041c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 \u0438\u043b\u0438 \u043f\u0440\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0441\u043b\u0443\u0436\u0431 \u0447\u0435\u0440\u0435\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 IP \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0412\u041c, \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 Ip \u043f\u0440\u0438\u0432\u044f\u0436\u0435\u0442\u0441\u044f \u043a \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 IP. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 1-1 NAT \u0434\u043e\u043b\u0436\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0441\u0435\u0442\u044c\u044e. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CloudStack UI \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e NAT \u043c\u0435\u0436\u0434\u0443 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438 \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e. +message.recover.vm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0412\u041c message.redirecting.region=\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u043e\u043d +message.reinstall.vm=\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: C\u043e\u0431\u043b\u044e\u0434\u0430\u0439\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0412\u041c \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430; \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u0438\u0441\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0438\u0441\u043a\u0438, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f, \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b. message.remove.region=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u043e\u043d \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f? message.remove.vpc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 VPC -message.remove.vpn.access=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a VPN \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. +message.remove.vpn.access=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN \u0434\u043e\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. message.reset.password.warning.notPasswordEnabled=\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u043d \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f message.reset.password.warning.notStopped=\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 message.reset.VPN.connection=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e VPN \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. -message.restart.mgmt.server=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440(\u044b) \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. -message.restart.mgmt.usage.server=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0441\u0438\u043b\u0443. +message.restart.mgmt.server=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440(\u044b) \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443. +message.restart.mgmt.usage.server=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0441\u0438\u043b\u0443. message.restart.network=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0442\u044c. message.restart.vpc=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c VPC -message.security.group.usage=(\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 Ctrl-\u043a\u043b\u0438\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438) +message.security.group.usage=(\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 Ctrl-click \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b\u0445 security groups) message.select.affinity.groups=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043b\u044e\u0431\u044b\u0435 affinity groups, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430\: -message.select.a.zone=\u0417\u043e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u043c\u0443 \u0446\u0435\u043d\u0442\u0440\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043e\u043d\u044b\u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u043a\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c. +message.select.a.zone=\u0417\u043e\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u043e\u043c\u0443 \u0446\u0435\u043d\u0442\u0440\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u043a\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u0438 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c. message.select.instance=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440. message.select.iso=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0431\u0440\u0430\u0437 ISO \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0412\u041c message.select.item=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 -message.select.security.groups=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u0443/\u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0412\u041c +message.select.security.groups=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u0443(\u044b) \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0412\u041c message.select.template=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0412\u041c message.setup.physical.network.during.zone.creation.basic=\u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0437\u043e\u043d\u0443, \u0432\u044b \u043c\u043e\u0436\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0443\u0435\u0442 NIC \u043d\u0430 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440. \u0421\u0435\u0442\u044c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u043e\u0432 \u0442\u0440\u0430\u0444\u0438\u043a\u0430.

\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c drag and drop \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0435\u0442\u0438. message.setup.physical.network.during.zone.creation=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u043e\u043d\u044b, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u0442\u0435\u0439. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430. \u041a\u0430\u043a\u0436\u0434\u0430\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0435\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0432\u0438\u0434\u043e\u0432 \u0442\u0440\u0430\u0444\u0438\u043a\u0430.

\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u043e\u0432 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438. message.setup.successful=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0431\u043b\u0430\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430\! -message.snapshot.schedule=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043d\u0438\u043c\u043e\u043a\u0438, \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0438\u0436\u0435 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0432 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f +message.snapshot.schedule=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439, \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 message.specify.url=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 URL -message.step.1.continue=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u043b\u0438 ISO \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. -message.step.1.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437 ISO \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430. -message.step.2.continue=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. -message.step.3.continue=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. -message.step.4.continue=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0443 \u0441\u0435\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. -message.step.4.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0435\u0442\u044c, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430. +message.step.1.continue=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u043b\u0438 ISO \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. +message.step.1.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u043d\u043e\u0432\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0412\u044b \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u0430 ISO. +message.step.2.continue=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u043b\u0443\u0433\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f +message.step.3.continue=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f +message.step.4.continue=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u0443 \u0441\u0435\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f. +message.step.4.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0412\u0430\u0448\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430. message.storage.traffic=\u0422\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 CloudStack, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0443\u0437\u043b\u044b \u0438 CloudStack \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0412\u041c. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0442\u0440\u0430\u0444\u0438\u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c. message.suspend.project=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442? -message.template.desc=\u041e\u0431\u0440\u0430\u0437 \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0432 \u0412\u041c +message.template.desc=\u041e\u0431\u0440\u0430\u0437 \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u0432 \u0412\u041c message.tooltip.dns.1=\u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 DNS \u0434\u043b\u044f \u0412\u041c \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. message.tooltip.dns.2=\u0418\u043c\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 DNS \u0434\u043b\u044f \u0412\u041c \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. message.tooltip.internal.dns.1=\u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 DNS \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0412\u041c CloudStack \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. \u0427\u0430\u0441\u0442\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0442\u0435\u043d\u0434\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. @@ -1503,22 +1589,22 @@ message.tooltip.pod.name=\u0418\u043c\u044f \u0434\u043b\u044f \u0441\u0442\u043 message.tooltip.reserved.system.gateway=\u0428\u043b\u044e\u0437 \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 message.tooltip.reserved.system.netmask=\u041f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441\u0435\u0442\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u0441\u0435\u0442\u044c \u0441\u0442\u0435\u043d\u0434\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CIDR. message.tooltip.zone.name=\u0418\u043c\u044f \u0434\u043b\u044f \u0437\u043e\u043d\u044b -message.update.os.preference=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u041e\u0421 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430. \u0412\u0441\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0443\u0437\u0435\u043b, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e. +message.update.os.preference=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u041e\u0421 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u041e\u0421 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435. message.update.resource.count=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430. -message.update.ssl=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 X.509 SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u043a\u0441\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440\: +message.update.ssl=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 X.509 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\: message.validate.instance.name=\u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043b\u0438\u043d\u0435\u0435 63 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0422\u043e\u043b\u044c\u043a\u043e ASCII, \u0431\u0443\u043a\u0432\u044b a~z, A~Z, \u0446\u044b\u0444\u0440\u044b 0~9, \u0434\u0435\u0444\u0438\u0441 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u0414\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0443\u043a\u0432\u044b \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u043a\u0432\u043e\u0439 \u0438\u043b\u0438 \u0446\u0438\u0444\u0440\u043e\u0439. message.validate.invalid.characters=\u041d\u0430\u0439\u0434\u0435\u043d\u044b \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b; \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u0430\u0432\u044c\u0442\u0435. -message.virtual.network.desc=\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0428\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 VLAN \u0438 \u0432\u0435\u0441\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0442\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u0430. -message.vm.create.template.confirm=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0412\u041c +message.virtual.network.desc=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c. \u0428\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u0412\u0430\u0448\u0435\u0433\u043e VLAN \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c. +message.vm.create.template.confirm=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432\u0438\u0440\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b message.vm.review.launch=\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0430\u0448\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. message.volume.create.template.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u043c\u0430. \u042d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0442\u043e\u043c\u0430. message.you.must.have.at.least.one.physical.network=\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c message.Zone.creation.complete=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u043e\u043d\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e message.zone.creation.complete.would.you.like.to.enable.this.zone=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u043e\u043d\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u0425\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u043e\u043d\u0443? message.zone.no.network.selection=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0435\u0442\u0438. -message.zone.step.1.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0441\u0435\u0442\u0438 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. -message.zone.step.2.desc=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0437\u043e\u043d\u044b -message.zone.step.3.desc=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430 +message.zone.step.1.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u0412\u0430\u0448\u0435\u0439 \u0437\u043e\u043d\u044b. +message.zone.step.2.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u043e\u043d\u044b +message.zone.step.3.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0421\u0442\u0435\u043d\u0434\u0430 mode=\u0420\u0435\u0436\u0438\u043c network.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0435\u0442\u0438 notification.reboot.instance=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 @@ -1535,11 +1621,12 @@ state.Completed=\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e state.Creating=\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f state.Declined=\u041e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e state.Destroyed=\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u043e +state.detached=\u041e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043e state.Disabled=\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e state.Enabled=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e state.Error=\u041e\u0448\u0438\u0431\u043a\u0430 state.Expunging=\u0423\u0434\u0430\u043b\u0451\u043d -state.Migrating=\u041c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 +state.Migrating=\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f state.Pending=\u041e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f state.Ready=\u0413\u043e\u0442\u043e\u0432 state.Running=\u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043e diff --git a/client/WEB-INF/classes/resources/messages_zh_CN.properties b/client/WEB-INF/classes/resources/messages_zh_CN.properties index 69e9b00d65d..69845385614 100644 --- a/client/WEB-INF/classes/resources/messages_zh_CN.properties +++ b/client/WEB-INF/classes/resources/messages_zh_CN.properties @@ -14,63 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -label.add.ldap.account=\u6dfb\u52a0 LDAP \u5e10\u6237 -label.vm.ip=VM IP \u5730\u5740 -message.listView.subselect.multi=(\u6309\u4f4f Ctrl/Cmd \u5e76\u5355\u51fb) -label.use.vm.ips=\u4f7f\u7528 VM IP -label.reinstall.vm=\u91cd\u65b0\u5b89\u88c5 VM -message.reinstall.vm=\u6ce8\u610f\: \u8bf7\u8c28\u614e\u64cd\u4f5c\u3002\u8fd9\u5c06\u5bfc\u81f4\u4ece\u6a21\u677f\u91cd\u65b0\u5b89\u88c5 VM\uff0c\u5e76\u4e14\u5f15\u5bfc\u78c1\u76d8\u4e0a\u5b58\u50a8\u7684\u6570\u636e\u5c06\u4e22\u5931\u3002\u989d\u5916\u7684\u6570\u636e\u5377(\u5982\u679c\u5b58\u5728)\u5c06\u65e0\u6cd5\u8bbf\u95ee\u3002 -label.recover.vm=\u6062\u590d VM -message.recover.vm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u6062\u590d\u6b64 VM\u3002 -label.port=\u7aef\u53e3 -label.remove.ldap=\u5220\u9664 LDAP -label.configure.ldap=\u914d\u7f6e LDAP -label.ldap.configuration=LDAP \u914d\u7f6e -label.ldap.port=LDAP \u7aef\u53e3 -label.create.nfs.secondary.staging.store=\u521b\u5efa NFS \u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 -label.volatile=\u53ef\u53d8 -label.planner.mode=\u89c4\u5212\u5668\u6a21\u5f0f -label.deployment.planner=\u90e8\u7f72\u89c4\u5212\u5668 -label.quiesce.vm=\u9759\u9ed8 VM -label.smb.username=SMB \u7528\u6237\u540d -label.smb.password=SMB \u5bc6\u7801 -label.smb.domain=SMB \u57df -label.hypervisors=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f -label.home=\u9996\u9875 -label.sockets=CPU \u63d2\u69fd -label.root.disk.size=\u6839\u78c1\u76d8\u5927\u5c0f -label.s3.nfs.server=S3 NFS \u670d\u52a1\u5668 -label.s3.nfs.path=S3 NFS \u8def\u5f84 -label.delete.events=\u5220\u9664\u4e8b\u4ef6 -label.delete.alerts=\u5220\u9664\u8b66\u62a5 -label.archive.alerts=\u5b58\u6863\u8b66\u62a5 -label.archive.events=\u5b58\u6863\u4e8b\u4ef6 -label.by.alert.type=\u6309\u8b66\u62a5\u7c7b\u578b -label.by.event.type=\u6309\u4e8b\u4ef6\u7c7b\u578b -label.by.date.start=\u6309\u65e5\u671f(\u5f00\u59cb\u65e5\u671f) -label.by.date.end=\u6309\u65e5\u671f(\u7ed3\u675f\u65e5\u671f) -label.switch.type=\u4ea4\u6362\u673a\u7c7b\u578b -label.service.state=\u670d\u52a1\u72b6\u6001 -label.egress.default.policy=\u51fa\u53e3\u9ed8\u8ba4\u7b56\u7565 -label.routing=\u6b63\u5728\u8def\u7531 -label.hvm=HVM -label.about=\u5173\u4e8e -label.app.name=CloudStack -label.about.app=\u5173\u4e8e CloudStack -label.custom.disk.iops=\u81ea\u5b9a\u4e49 IOPS -label.disk.iops.min=\u6700\u5c0f IOPS -label.disk.iops.max=\u6700\u5927 IOPS -label.disk.iops.total=\u603b IOPS -label.hypervisor.snapshot.reserve=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u5feb\u7167\u9884\u7559 -label.secondary.ips=\u4e8c\u7ea7 IP -label.edit.secondary.ips=\u7f16\u8f91\u4e8c\u7ea7 IP -label.view.secondary.ips=\u67e5\u770b\u4e8c\u7ea7 IP -message.validate.invalid.characters=\u67e5\u627e\u5230\u65e0\u6548\u5b57\u7b26\uff0c\u8bf7\u66f4\u6b63\u3002 -message.acquire.ip.nic=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u83b7\u53d6\u6b64 NIC \u7684\u65b0\u4e8c\u7ea7 IP\u3002
\u6ce8\u610f\: \u60a8\u9700\u8981\u5728\u865a\u62df\u673a\u5185\u90e8\u624b\u52a8\u914d\u7f6e\u65b0\u83b7\u53d6\u7684\u4e8c\u7ea7 IP\u3002 -message.select.affinity.groups=\u8bf7\u9009\u62e9\u60a8\u5e0c\u671b\u6b64 VM \u6240\u5c5e\u7684\u4efb\u4f55\u5173\u8054\u6027\u7ec4\: -message.no.affinity.groups=\u60a8\u6ca1\u6709\u4efb\u4f55\u5173\u8054\u6027\u7ec4\u3002\u8bf7\u7ee7\u7eed\u6267\u884c\u4e0b\u4e00\u6b65\u64cd\u4f5c\u3002 -label.action.delete.nic=\u79fb\u9664 NIC -message.action.delete.nic=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u79fb\u9664\u6b64 NIC\uff0c\u6b64\u64cd\u4f5c\u8fd8\u5c06\u4ece VM \u4e2d\u79fb\u9664\u5173\u8054\u7684\u7f51\u7edc\u3002 + changed.item.properties=\u66f4\u6539\u9879\u76ee\u5c5e\u6027 confirm.enable.s3=\u8bf7\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\u4ee5\u542f\u7528\u5bf9 S3 \u652f\u6301\u7684\u4e8c\u7ea7\u5b58\u50a8\u7684\u652f\u6301 confirm.enable.swift=\u8bf7\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\u4ee5\u542f\u7528\u5bf9 SWIFT \u7684\u652f\u6301 @@ -87,7 +31,6 @@ error.session.expired=\u60a8\u7684\u4f1a\u8bdd\u5df2\u8fc7\u671f\u3002 error.something.went.wrong.please.correct.the.following=\u51fa\u73b0\u95ee\u9898\uff1b\u8bf7\u66f4\u6b63\u4ee5\u4e0b\u5404\u9879 error.unable.to.reach.management.server=\u65e0\u6cd5\u8bbf\u95ee\u7ba1\u7406\u670d\u52a1\u5668 error.unresolved.internet.name=\u65e0\u6cd5\u89e3\u6790\u60a8\u7684 Internet \u540d\u79f0\u3002 -label.extractable=\u53ef\u63d0\u53d6 force.delete.domain.warning=\u8b66\u544a\: \u9009\u62e9\u6b64\u9009\u9879\u5c06\u5bfc\u81f4\u5220\u9664\u6240\u6709\u5b50\u57df\u4ee5\u53ca\u6240\u6709\u76f8\u5173\u8054\u7684\u5e10\u6237\u53ca\u5176\u8d44\u6e90\u3002 force.delete=\u5f3a\u5236\u5220\u9664 force.remove.host.warning=\u8b66\u544a\: \u9009\u62e9\u6b64\u9009\u9879\u5c06\u5bfc\u81f4 CloudStack \u5728\u4ece\u7fa4\u96c6\u4e2d\u79fb\u9664\u6b64\u4e3b\u673a\u4e4b\u524d\uff0c\u5f3a\u5236\u505c\u6b62\u6240\u6709\u6b63\u5728\u8fd0\u884c\u7684\u865a\u62df\u673a\u3002 @@ -99,13 +42,20 @@ ICMP.type=ICMP \u7c7b\u578b image.directory=\u56fe\u7247\u76ee\u5f55 inline=\u5185\u8054 instances.actions.reboot.label=\u91cd\u65b0\u542f\u52a8\u5b9e\u4f8b +label.about.app=\u5173\u4e8e CloudStack +label.about=\u5173\u4e8e label.accept.project.invitation=\u63a5\u53d7\u9879\u76ee\u9080\u8bf7 label.account.and.security.group=\u5e10\u6237\u3001\u5b89\u5168\u7ec4 label.account.id=\u5e10\u6237 ID +label.account.lower=\u5e10\u6237 label.account.name=\u5e10\u6237\u540d\u79f0 label.account.specific=\u5e10\u6237\u4e13\u7528 -label.account=\u5e10\u6237 label.accounts=\u5e10\u6237 +label.account=\u5e10\u6237 +label.acl=ACL +label.acl.id=ACL ID +label.acl.name=ACL \u540d\u79f0 +label.acl.replaced=ACL \u5df2\u66ff\u6362 label.acquire.new.ip=\u83b7\u53d6\u65b0 IP label.acquire.new.secondary.ip=\u83b7\u53d6\u65b0\u4e8c\u7ea7 IP label.action.attach.disk.processing=\u6b63\u5728\u9644\u52a0\u78c1\u76d8... @@ -117,9 +67,7 @@ label.action.cancel.maintenance.mode=\u53d6\u6d88\u7ef4\u62a4\u6a21\u5f0f label.action.change.password=\u66f4\u6539\u5bc6\u7801 label.action.change.service.processing=\u6b63\u5728\u66f4\u6539\u670d\u52a1... label.action.change.service=\u66f4\u6539\u670d\u52a1 -label.action.copy.ISO.processing=\u6b63\u5728\u590d\u5236 ISO... label.action.copy.ISO=\u590d\u5236 ISO -label.action.copy.template.processing=\u6b63\u5728\u590d\u5236\u6a21\u677f... label.action.copy.template=\u590d\u5236\u6a21\u677f label.action.create.template.from.vm=\u57fa\u4e8e VM \u521b\u5efa\u6a21\u677f label.action.create.template.from.volume=\u57fa\u4e8e\u5377\u521b\u5efa\u6a21\u677f @@ -150,6 +98,7 @@ label.action.delete.load.balancer=\u5220\u9664\u8d1f\u8f7d\u5e73\u8861\u5668\u89 label.action.delete.network.processing=\u6b63\u5728\u5220\u9664\u7f51\u7edc... label.action.delete.network=\u5220\u9664\u7f51\u7edc label.action.delete.nexusVswitch=\u5220\u9664 Nexus 1000v +label.action.delete.nic=\u79fb\u9664 NIC label.action.delete.physical.network=\u5220\u9664\u7269\u7406\u7f51\u7edc label.action.delete.pod.processing=\u6b63\u5728\u5220\u9664\u63d0\u4f9b\u70b9... label.action.delete.pod=\u5220\u9664\u63d0\u4f9b\u70b9 @@ -231,8 +180,8 @@ label.action.enable.user.processing=\u6b63\u5728\u542f\u7528\u7528\u6237... label.action.enable.user=\u542f\u7528\u7528\u6237 label.action.enable.zone.processing=\u6b63\u5728\u542f\u7528\u8d44\u6e90\u57df... label.action.enable.zone=\u542f\u7528\u8d44\u6e90\u57df -label.action.expunge.instance=\u5220\u9664\u5b9e\u4f8b label.action.expunge.instance.processing=\u6b63\u5728\u5220\u9664\u5b9e\u4f8b... +label.action.expunge.instance=\u5220\u9664\u5b9e\u4f8b label.action.force.reconnect.processing=\u6b63\u5728\u91cd\u65b0\u8fde\u63a5... label.action.force.reconnect=\u5f3a\u5236\u91cd\u65b0\u8fde\u63a5 label.action.generate.keys.processing=\u6b63\u5728\u751f\u6210\u5bc6\u94a5... @@ -256,7 +205,6 @@ label.action.reboot.systemvm.processing=\u6b63\u5728\u91cd\u65b0\u542f\u52a8\u7c label.action.reboot.systemvm=\u91cd\u65b0\u542f\u52a8\u7cfb\u7edf VM label.action.recurring.snapshot=\u91cd\u73b0\u5feb\u7167 label.action.register.iso=\u6ce8\u518c ISO -label.action.register.template=\u6ce8\u518c\u6a21\u677f label.action.release.ip.processing=\u6b63\u5728\u91ca\u653e IP... label.action.release.ip=\u91ca\u653e IP label.action.remove.host.processing=\u6b63\u5728\u5220\u9664\u4e3b\u673a... @@ -268,6 +216,8 @@ label.action.resize.volume=\u8c03\u6574\u5377\u5927\u5c0f label.action.resource.limits=\u8d44\u6e90\u9650\u5236 label.action.restore.instance.processing=\u6b63\u5728\u8fd8\u539f\u5b9e\u4f8b... label.action.restore.instance=\u8fd8\u539f\u5b9e\u4f8b +label.action.revert.snapshot.processing=\u6b63\u5728\u8fd8\u539f\u5230\u5feb\u7167... +label.action.revert.snapshot=\u8fd8\u539f\u5230\u5feb\u7167 label.action.start.instance.processing=\u6b63\u5728\u542f\u52a8\u5b9e\u4f8b... label.action.start.instance=\u542f\u52a8\u5b9e\u4f8b label.action.start.router.processing=\u6b63\u5728\u542f\u52a8\u8def\u7531\u5668... @@ -280,10 +230,10 @@ label.action.stop.router.processing=\u6b63\u5728\u505c\u6b62\u8def\u7531\u5668.. label.action.stop.router=\u505c\u6b62\u8def\u7531\u5668 label.action.stop.systemvm.processing=\u6b63\u5728\u505c\u6b62\u7cfb\u7edf VM... label.action.stop.systemvm=\u505c\u6b62\u7cfb\u7edf VM +label.actions=\u64cd\u4f5c label.action.take.snapshot.processing=\u6b63\u5728\u521b\u5efa\u5feb\u7167... label.action.take.snapshot=\u521b\u5efa\u5feb\u7167 -label.action.revert.snapshot.processing=\u6b63\u5728\u8fd8\u539f\u5230\u5feb\u7167... -label.action.revert.snapshot=\u8fd8\u539f\u5230\u5feb\u7167 +label.action=\u64cd\u4f5c label.action.unmanage.cluster.processing=\u6b63\u5728\u53d6\u6d88\u6258\u7ba1\u7fa4\u96c6... label.action.unmanage.cluster=\u53d6\u6d88\u6258\u7ba1\u7fa4\u96c6 label.action.update.OS.preference.processing=\u6b63\u5728\u66f4\u65b0\u64cd\u4f5c\u7cfb\u7edf\u9996\u9009\u9879... @@ -293,36 +243,55 @@ label.action.update.resource.count=\u66f4\u65b0\u8d44\u6e90\u6570\u91cf label.action.vmsnapshot.create=\u521b\u5efa VM \u5feb\u7167 label.action.vmsnapshot.delete=\u5220\u9664 VM \u5feb\u7167 label.action.vmsnapshot.revert=\u8fd8\u539f\u5230 VM \u5feb\u7167 -label.actions=\u64cd\u4f5c label.activate.project=\u6fc0\u6d3b\u9879\u76ee label.active.sessions=\u6d3b\u52a8\u4f1a\u8bdd -label.add.account.to.project=\u5411\u9879\u76ee\u4e2d\u6dfb\u52a0\u5e10\u6237 -label.add.account=\u6dfb\u52a0\u5e10\u6237 label.add.accounts.to=\u6dfb\u52a0\u5e10\u6237\u81f3 label.add.accounts=\u6dfb\u52a0\u5e10\u6237 +label.add.account.to.project=\u5411\u9879\u76ee\u4e2d\u6dfb\u52a0\u5e10\u6237 +label.add.account=\u6dfb\u52a0\u5e10\u6237 +label.add.acl.list=\u6dfb\u52a0 ACL \u5217\u8868 label.add.ACL=\u6dfb\u52a0 ACL label.add.affinity.group=\u6dfb\u52a0\u65b0\u5173\u8054\u6027\u7ec4 -label.add.BigSwitchBcf.device=\u6dfb\u52a0 BigSwitch BCF \u63a7\u5236\u5668 +label.add.baremetal.dhcp.device=\u6dfb\u52a0\u88f8\u673a DHCP \u8bbe\u5907 +label.add.BrocadeVcs.device=\u6dfb\u52a0 Brocade Vcs \u4ea4\u6362\u673a label.add.by.cidr=\u6309 CIDR \u6dfb\u52a0 label.add.by.group=\u6309\u7ec4\u6dfb\u52a0 label.add.by=\u6dfb\u52a0\u65b9\u5f0f +label.add.ciscoASA1000v=\u6dfb\u52a0 CiscoASA1000v \u8d44\u6e90 label.add.cluster=\u6dfb\u52a0\u7fa4\u96c6 label.add.compute.offering=\u6dfb\u52a0\u8ba1\u7b97\u65b9\u6848 label.add.direct.iprange=\u6dfb\u52a0\u76f4\u63a5 IP \u8303\u56f4 label.add.disk.offering=\u6dfb\u52a0\u78c1\u76d8\u65b9\u6848 label.add.domain=\u6dfb\u52a0\u57df +label.added.brocade.vcs.switch=\u5df2\u6dfb\u52a0\u65b0 Brocade Vcs \u4ea4\u6362\u673a +label.added.network.offering=\u5df2\u6dfb\u52a0\u7f51\u7edc\u65b9\u6848 +label.added.nicira.nvp.controller=\u5df2\u6dfb\u52a0\u65b0 Nicira NVP \u63a7\u5236\u5668 label.add.egress.rule=\u6dfb\u52a0\u51fa\u53e3\u89c4\u5219 +label.addes.new.f5=\u5df2\u6dfb\u52a0\u65b0 F5 label.add.F5.device=\u6dfb\u52a0 F5 \u8bbe\u5907 label.add.firewall=\u6dfb\u52a0\u9632\u706b\u5899\u89c4\u5219 +label.add.gslb=\u6dfb\u52a0 GSLB label.add.guest.network=\u6dfb\u52a0\u6765\u5bbe\u7f51\u7edc -label.add.isolated.guest.network=\u6dfb\u52a0\u9694\u79bb\u7684\u6765\u5bbe\u7f51\u7edc label.add.host=\u6dfb\u52a0\u4e3b\u673a +label.adding.cluster=\u6b63\u5728\u6dfb\u52a0\u7fa4\u96c6 +label.adding.failed=\u6dfb\u52a0\u5931\u8d25 +label.adding.pod=\u6b63\u5728\u6dfb\u52a0\u63d0\u4f9b\u70b9 +label.adding.processing=\u6b63\u5728\u6dfb\u52a0... label.add.ingress.rule=\u6dfb\u52a0\u5165\u53e3\u89c4\u5219 +label.adding.succeeded=\u5df2\u6210\u529f\u6dfb\u52a0 +label.adding=\u6b63\u5728\u6dfb\u52a0 +label.adding.user=\u6b63\u5728\u6dfb\u52a0\u7528\u6237 +label.adding.zone=\u6b63\u5728\u6dfb\u52a0\u8d44\u6e90\u57df label.add.intermediate.certificate=\u6dfb\u52a0\u4e2d\u95f4\u8bc1\u4e66 +label.add.internal.lb=\u6dfb\u52a0\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668 label.add.ip.range=\u6dfb\u52a0 IP \u8303\u56f4 +label.add.isolated.network=\u6dfb\u52a0\u9694\u79bb\u7f51\u7edc +label.additional.networks=\u5176\u4ed6\u7f51\u7edc +label.add.list.name=ACL \u5217\u8868\u540d\u79f0 label.add.load.balancer=\u6dfb\u52a0\u8d1f\u8f7d\u5e73\u8861\u5668 label.add.more=\u6dfb\u52a0\u66f4\u591a label.add.netScaler.device=\u6dfb\u52a0 Netscaler \u8bbe\u5907 +label.add.network.acl.list=\u6dfb\u52a0\u7f51\u7edc ACL \u5217\u8868 label.add.network.ACL=\u6dfb\u52a0\u7f51\u7edc ACL label.add.network.device=\u6dfb\u52a0\u7f51\u7edc\u8bbe\u5907 label.add.network.offering=\u6dfb\u52a0\u7f51\u7edc\u65b9\u6848 @@ -330,14 +299,17 @@ label.add.network=\u6dfb\u52a0\u7f51\u7edc label.add.new.F5=\u6dfb\u52a0\u65b0 F5 label.add.new.gateway=\u6dfb\u52a0\u65b0\u7f51\u5173 label.add.new.NetScaler=\u6dfb\u52a0\u65b0 NetScaler -label.add.new.SRX=\u6dfb\u52a0\u65b0 SRX label.add.new.PA=\u6dfb\u52a0\u65b0 Palo Alto +label.add.new.SRX=\u6dfb\u52a0\u65b0 SRX label.add.new.tier=\u6dfb\u52a0\u65b0\u5c42 +label.add.nfs.secondary.staging.store=\u6dfb\u52a0 NFS \u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 label.add.NiciraNvp.device=\u6dfb\u52a0 Nvp \u63a7\u5236\u5668 label.add.NuageVsp.device=\u6dfb\u52a0 Nuage \u865a\u62df\u670d\u52a1\u76ee\u5f55(VSD) -label.add.BrocadeVcs.device=\u6dfb\u52a0 Brocade Vcs \u4ea4\u6362\u673a +label.add.OpenDaylight.device=\u6dfb\u52a0 OpenDaylight \u63a7\u5236\u5668 +label.add.PA.device=\u6dfb\u52a0 Palo Alto \u8bbe\u5907 label.add.physical.network=\u6dfb\u52a0\u7269\u7406\u7f51\u7edc label.add.pod=\u6dfb\u52a0\u63d0\u4f9b\u70b9 +label.add.portable.ip.range=\u6dfb\u52a0\u53ef\u79fb\u690d IP \u8303\u56f4 label.add.port.forwarding.rule=\u6dfb\u52a0\u7aef\u53e3\u8f6c\u53d1\u89c4\u5219 label.add.primary.storage=\u6dfb\u52a0\u4e3b\u5b58\u50a8 label.add.region=\u6dfb\u52a0\u5730\u7406\u533a\u57df @@ -348,204 +320,267 @@ label.add.secondary.storage=\u6dfb\u52a0\u4e8c\u7ea7\u5b58\u50a8 label.add.security.group=\u6dfb\u52a0\u5b89\u5168\u7ec4 label.add.service.offering=\u6dfb\u52a0\u670d\u52a1\u65b9\u6848 label.add.SRX.device=\u6dfb\u52a0 SRX \u8bbe\u5907 -label.add.PA.device=\u6dfb\u52a0 Palo Alto \u8bbe\u5907 label.add.static.nat.rule=\u6dfb\u52a0\u9759\u6001 NAT \u89c4\u5219 label.add.static.route=\u6dfb\u52a0\u9759\u6001\u8def\u7531 label.add.system.service.offering=\u6dfb\u52a0\u7cfb\u7edf\u670d\u52a1\u65b9\u6848 label.add.template=\u6dfb\u52a0\u6a21\u677f label.add.to.group=\u6dfb\u52a0\u5230\u7ec4 -label.add.user=\u6dfb\u52a0\u7528\u6237 +label.add=\u6dfb\u52a0 +label.add.ucs.manager=\u6dfb\u52a0 UCS \u7ba1\u7406\u5668 label.add.userdata=\u7528\u6237\u6570\u636e +label.add.user=\u6dfb\u52a0\u7528\u6237 label.add.vlan=\u6dfb\u52a0 VLAN -label.add.vxlan=\u6dfb\u52a0 VXLAN -label.add.VM.to.tier=\u5411\u5c42\u4e2d\u6dfb\u52a0 VM -label.add.vm=\u6dfb\u52a0 VM label.add.vms.to.lb=\u5411\u8d1f\u8f7d\u5e73\u8861\u5668\u89c4\u5219\u4e2d\u6dfb\u52a0 VM label.add.vms=\u6dfb\u52a0 VM +label.add.VM.to.tier=\u5411\u5c42\u4e2d\u6dfb\u52a0 VM +label.add.vm=\u6dfb\u52a0 VM +label.add.vmware.datacenter=\u6dfb\u52a0 VMware \u6570\u636e\u4e2d\u5fc3 +label.add.vnmc.device=\u6dfb\u52a0 VNMC \u8bbe\u5907 +label.add.vnmc.provider=\u6dfb\u52a0 VNMC \u63d0\u4f9b\u7a0b\u5e8f label.add.volume=\u6dfb\u52a0\u5377 +label.add.vpc.offering=\u6dfb\u52a0 VPC \u65b9\u6848 label.add.vpc=\u6dfb\u52a0 VPC label.add.vpn.customer.gateway=\u6dfb\u52a0 VPN \u5ba2\u6237\u7f51\u5173 label.add.VPN.gateway=\u6dfb\u52a0 VPN \u7f51\u5173 label.add.vpn.user=\u6dfb\u52a0 VPN \u7528\u6237 +label.add.vxlan=\u6dfb\u52a0 VXLAN label.add.zone=\u6dfb\u52a0\u8d44\u6e90\u57df -label.add=\u6dfb\u52a0 -label.adding.cluster=\u6b63\u5728\u6dfb\u52a0\u7fa4\u96c6 -label.adding.failed=\u6dfb\u52a0\u5931\u8d25 -label.adding.pod=\u6b63\u5728\u6dfb\u52a0\u63d0\u4f9b\u70b9 -label.adding.processing=\u6b63\u5728\u6dfb\u52a0... -label.adding.succeeded=\u5df2\u6210\u529f\u6dfb\u52a0 -label.adding.user=\u6b63\u5728\u6dfb\u52a0\u7528\u6237 -label.adding.zone=\u6b63\u5728\u6dfb\u52a0\u8d44\u6e90\u57df -label.adding=\u6b63\u5728\u6dfb\u52a0 -label.additional.networks=\u5176\u4ed6\u7f51\u7edc label.admin.accounts=\u7ba1\u7406\u5458\u5e10\u6237 label.admin=\u7ba1\u7406\u5458 label.advanced.mode=\u9ad8\u7ea7\u6a21\u5f0f label.advanced.search=\u9ad8\u7ea7\u641c\u7d22 label.advanced=\u9ad8\u7ea7 -label.affinity.group=\u5173\u8054\u6027\u7ec4 label.affinity.groups=\u5173\u8054\u6027\u7ec4 +label.affinity.group=\u5173\u8054\u6027\u7ec4 label.affinity=\u5173\u8054\u6027 label.agent.password=\u4ee3\u7406\u5bc6\u7801 -label.agent.port=\u4ee3\u7406\u7aef\u53e3 +label.agent.state=\u4ee3\u7406\u72b6\u6001 label.agent.username=\u4ee3\u7406\u7528\u6237\u540d label.agree=\u540c\u610f +label.alert.archived=\u8b66\u62a5\u5df2\u5b58\u6863 +label.alert.deleted=\u8b66\u62a5\u5df2\u5220\u9664 +label.alert.details=\u8b66\u62a5\u8be6\u7ec6\u4fe1\u606f label.alert=\u8b66\u62a5 label.algorithm=\u7b97\u6cd5 label.allocated=\u5df2\u5206\u914d label.allocation.state=\u5206\u914d\u72b6\u6001 -label.anti.affinity.group=\u53cd\u5173\u8054\u6027\u7ec4 +label.allow=\u5141\u8bb8 label.anti.affinity.groups=\u53cd\u5173\u8054\u6027\u7ec4 +label.anti.affinity.group=\u53cd\u5173\u8054\u6027\u7ec4 label.anti.affinity=\u53cd\u5173\u8054\u6027 label.api.key=API \u5bc6\u94a5 label.api.version=API \u7248\u672c label.apply=\u5e94\u7528 +label.app.name=CloudStack +label.archive.alerts=\u5b58\u6863\u8b66\u62a5 +label.archive.events=\u5b58\u6863\u4e8b\u4ef6 +label.archive=\u5b58\u6863 +label.assigned.vms=\u5df2\u5206\u914d\u7684 VM +label.assign.instance.another=\u5c06\u5b9e\u4f8b\u5206\u914d\u7ed9\u5176\u4ed6\u5e10\u6237 label.assign.to.load.balancer=\u6b63\u5728\u5c06\u5b9e\u4f8b\u5206\u914d\u7ed9\u8d1f\u8f7d\u5e73\u8861\u5668 label.assign=\u5206\u914d label.associated.network.id=\u5df2\u5173\u8054\u7f51\u7edc ID label.associated.network=\u5173\u8054\u7f51\u7edc +label.associated.profile=\u5df2\u5173\u8054\u914d\u7f6e\u6587\u4ef6 +label.associate.public.ip=\u5173\u8054\u516c\u7528 IP label.attached.iso=\u5df2\u9644\u52a0 ISO label.author.email=\u4f5c\u8005\u7535\u5b50\u90ae\u4ef6 label.author.name=\u4f5c\u8005\u59d3\u540d -label.availability.zone=\u53ef\u7528\u8d44\u6e90\u57df +label.autoscale=\u81ea\u52a8\u6269\u5c55 label.availability=\u53ef\u7528\u6027 +label.availability.zone=\u53ef\u7528\u8d44\u6e90\u57df label.available.public.ips=\u53ef\u7528\u516c\u7528 IP \u5730\u5740 label.available=\u53ef\u7528 label.back=\u540e\u9000 label.bandwidth=\u5e26\u5bbd +label.baremetal.dhcp.devices=\u88f8\u673a DHCP \u8bbe\u5907 +label.baremetal.dhcp.provider=\u88f8\u673a DHCP \u63d0\u4f9b\u7a0b\u5e8f +label.baremetal.pxe.devices=\u88f8\u673a PXE \u8bbe\u5907 +label.baremetal.pxe.device=\u6dfb\u52a0\u88f8\u673a PXE \u8bbe\u5907 +label.baremetal.pxe.provider=\u88f8\u673a PXE \u63d0\u4f9b\u7a0b\u5e8f label.basic.mode=\u57fa\u672c\u6a21\u5f0f label.basic=\u57fa\u672c -label.bigswitch.controller.address=BigSwitch Vns \u63a7\u5236\u5668\u5730\u5740 +label.blade.id=\u5200\u7247\u5f0f\u670d\u52a1\u5668 ID +label.blades=\u5200\u7247\u5f0f\u670d\u52a1\u5668 label.bootable=\u53ef\u542f\u52a8 label.broadcast.domain.range=\u5e7f\u64ad\u57df\u8303\u56f4 label.broadcast.domain.type=\u5e7f\u64ad\u57df\u7c7b\u578b label.broadcast.uri=\u5e7f\u64ad URI +label.broadcasturi=\u5e7f\u64ad URI +label.broadcat.uri=\u5e7f\u64ad URI +label.brocade.vcs.address=Vcs \u4ea4\u6362\u673a\u5730\u5740 +label.brocade.vcs.details=Brocade Vcs \u4ea4\u6362\u673a\u8be6\u7ec6\u4fe1\u606f label.by.account=\u6309\u5e10\u6237 +label.by.alert.type=\u6309\u8b66\u62a5\u7c7b\u578b label.by.availability=\u6309\u53ef\u7528\u6027 +label.by.date.end=\u6309\u65e5\u671f(\u7ed3\u675f\u65e5\u671f) +label.by.date.start=\u6309\u65e5\u671f(\u5f00\u59cb\u65e5\u671f) label.by.domain=\u6309\u57df label.by.end.date=\u6309\u7ed3\u675f\u65e5\u671f +label.by.event.type=\u6309\u4e8b\u4ef6\u7c7b\u578b label.by.level=\u6309\u7ea7\u522b label.by.pod=\u6309\u63d0\u4f9b\u70b9 label.by.role=\u6309\u89d2\u8272 label.by.start.date=\u6309\u5f00\u59cb\u65e5\u671f label.by.state=\u6309\u72b6\u6001 +label.bytes.received=\u63a5\u6536\u7684\u5b57\u8282\u6570 +label.bytes.sent=\u53d1\u9001\u7684\u5b57\u8282\u6570 label.by.traffic.type=\u6309\u6d41\u91cf\u7c7b\u578b label.by.type.id=\u6309\u7c7b\u578b ID label.by.type=\u6309\u7c7b\u578b label.by.zone=\u6309\u8d44\u6e90\u57df -label.bytes.received=\u63a5\u6536\u7684\u5b57\u8282\u6570 -label.bytes.sent=\u53d1\u9001\u7684\u5b57\u8282\u6570 +label.cache.mode=\u5199\u5165\u7f13\u5b58\u7c7b\u578b label.cancel=\u53d6\u6d88 -label.capacity=\u5bb9\u91cf label.capacity.bytes=\u5bb9\u91cf(\u5b57\u8282) label.capacity.iops=\u5bb9\u91cf IOPS +label.capacity=\u5bb9\u91cf label.certificate=\u670d\u52a1\u5668\u8bc1\u4e66 +label.change.affinity=\u66f4\u6539\u5173\u8054\u6027 label.change.service.offering=\u66f4\u6539\u670d\u52a1\u65b9\u6848 label.change.value=\u66f4\u6539\u503c label.character=\u5b57\u7b26 -label.md5.checksum=MD5 \u6821\u9a8c\u548c +label.chassis=\u673a\u7bb1 label.cidr.account=CIDR \u6216\u5e10\u6237/\u5b89\u5168\u7ec4 +label.cidr=CIDR label.CIDR.list=CIDR \u5217\u8868 label.cidr.list=\u6e90 CIDR label.CIDR.of.destination.network=\u76ee\u7684\u5730\u7f51\u7edc\u7684 CIDR -label.cidr=CIDR +label.cisco.nexus1000v.ip.address=Nexus 1000v IP \u5730\u5740 +label.cisco.nexus1000v.password=Nexus 1000v \u5bc6\u7801 +label.cisco.nexus1000v.username=Nexus 1000v \u7528\u6237\u540d +label.ciscovnmc.resource.details=CiscoVNMC \u8d44\u6e90\u8be6\u7ec6\u4fe1\u606f label.clean.up=\u6e05\u7406 -label.make.redundant=\u8bbe\u4e3a\u5197\u4f59 label.clear.list=\u6e05\u9664\u5217\u8868 label.close=\u5173\u95ed label.cloud.console=\u4e91\u7ba1\u7406\u63a7\u5236\u53f0 label.cloud.managed=\u7531 Cloud.com \u7ba1\u7406 label.cluster.name=\u7fa4\u96c6\u540d\u79f0 +label.clusters=\u7fa4\u96c6 label.cluster.type=\u7fa4\u96c6\u7c7b\u578b label.cluster=\u7fa4\u96c6 -label.clusters=\u7fa4\u96c6 label.clvm=CLVM -label.rbd=RBD -label.rbd.monitor=Ceph \u76d1\u89c6\u5668 -label.rbd.pool=Ceph \u6c60 -label.rbd.id=Cephx \u7528\u6237 -label.rbd.secret=Cephx \u5bc6\u94a5 label.code=\u4ee3\u7801 label.community=\u793e\u533a label.compute.and.storage=\u8ba1\u7b97\u4e0e\u5b58\u50a8 -label.compute.offering=\u8ba1\u7b97\u65b9\u6848 label.compute.offerings=\u8ba1\u7b97\u65b9\u6848 +label.compute.offering=\u8ba1\u7b97\u65b9\u6848 label.compute=\u8ba1\u7b97 label.configuration=\u914d\u7f6e +label.configure.ldap=\u914d\u7f6e LDAP label.configure.network.ACLs=\u914d\u7f6e\u7f51\u7edc ACL -label.configure.vpc=\u914d\u7f6e VPC label.configure=\u914d\u7f6e -label.confirm.password=\u786e\u8ba4\u5bc6\u7801 +label.configure.vpc=\u914d\u7f6e VPC label.confirmation=\u786e\u8ba4 +label.confirm.password=\u786e\u8ba4\u5bc6\u7801 label.congratulations=\u795d\u8d3a\u60a8\! label.conserve.mode=\u4fdd\u62a4\u6a21\u5f0f label.console.proxy=\u63a7\u5236\u53f0\u4ee3\u7406 +label.console.proxy.vm=\u63a7\u5236\u53f0\u4ee3\u7406 VM label.continue.basic.install=\u7ee7\u7eed\u6267\u884c\u57fa\u672c\u5b89\u88c5 label.continue=\u7ee7\u7eed +label.copying.iso=\u6b63\u5728\u590d\u5236 ISO label.corrections.saved=\u5df2\u4fdd\u5b58\u4fee\u6b63 +label.counter=\u8ba1\u6570\u5668 label.cpu.allocated.for.VMs=\u5df2\u5206\u914d\u7ed9 VM \u7684 CPU label.cpu.allocated=\u5df2\u5206\u914d\u7684 CPU label.CPU.cap=CPU \u4e0a\u9650 +label.cpu=CPU label.cpu.limits=CPU \u9650\u5236 label.cpu.mhz=CPU (MHz) label.cpu.utilized=CPU \u5229\u7528\u7387 -label.cpu=CPU +label.created.by.system=\u7531\u7cfb\u7edf\u521b\u5efa +label.created=\u521b\u5efa\u65e5\u671f +label.create.nfs.secondary.staging.storage=\u521b\u5efa NFS \u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 +label.create.nfs.secondary.staging.store=\u521b\u5efa NFS \u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 label.create.project=\u521b\u5efa\u9879\u76ee label.create.template=\u521b\u5efa\u6a21\u677f label.create.VPN.connection=\u521b\u5efa VPN \u8fde\u63a5 -label.created.by.system=\u7531\u7cfb\u7edf\u521b\u5efa -label.created=\u521b\u5efa\u65e5\u671f label.cross.zones=\u8de8\u8d44\u6e90\u57df +label.custom.disk.iops=\u81ea\u5b9a\u4e49 IOPS label.custom.disk.size=\u81ea\u5b9a\u4e49\u78c1\u76d8\u5927\u5c0f +label.custom=\u81ea\u5b9a\u4e49 label.daily=\u6bcf\u5929 label.data.disk.offering=\u6570\u636e\u78c1\u76d8\u65b9\u6848 label.date=\u65e5\u671f label.day.of.month=\u65e5\u671f label.day.of.week=\u661f\u671f +label.dc.name=\u6570\u636e\u4e2d\u5fc3\u540d\u79f0 label.dead.peer.detection=\u5931\u6548\u5bf9\u7b49\u4f53\u68c0\u6d4b label.decline.invitation=\u62d2\u7edd\u9080\u8bf7 +label.dedicate.cluster=\u5c06\u7fa4\u96c6\u4e13\u7528 label.dedicated=\u4e13\u7528 +label.dedicated.vlan.vni.ranges=VLAN/VNI \u8303\u56f4\u5df2\u4e13\u7528 +label.dedicate.host=\u5c06\u4e3b\u673a\u4e13\u7528 +label.dedicate.pod=\u5c06\u63d0\u4f9b\u70b9\u4e13\u7528 +label.dedicate=\u4e13\u7528 +label.dedicate.vlan.vni.range=\u5c06 VLAN/VNI \u8303\u56f4\u4e13\u7528 +label.dedicate.zone=\u5c06\u8d44\u6e90\u57df\u4e13\u7528 +label.default.egress.policy=\u9ed8\u8ba4\u51fa\u53e3\u89c4\u5219 +label.default=\u9ed8\u8ba4\u8bbe\u7f6e label.default.use=\u9ed8\u8ba4\u4f7f\u7528 label.default.view=\u9ed8\u8ba4\u89c6\u56fe -label.default=\u9ed8\u8ba4\u8bbe\u7f6e +label.delete.acl.list=\u5220\u9664 ACL \u5217\u8868 label.delete.affinity.group=\u5220\u9664\u5173\u8054\u6027\u7ec4 -label.delete.BigSwitchBcf=\u5220\u9664 BigSwitch BCF \u63a7\u5236\u5668 +label.delete.alerts=\u5220\u9664\u8b66\u62a5 +label.delete.BrocadeVcs=\u5220\u9664 Brocade Vcs \u4ea4\u6362\u673a +label.delete.ciscoASA1000v=\u5220\u9664 CiscoASA1000v +label.delete.ciscovnmc.resource=\u5220\u9664 CiscoVNMC \u8d44\u6e90 +label.delete.events=\u5220\u9664\u4e8b\u4ef6 label.delete.F5=\u5220\u9664 F5 label.delete.gateway=\u5220\u9664\u7f51\u5173 +label.delete.internal.lb=\u5220\u9664\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668 label.delete.NetScaler=\u5220\u9664 NetScaler label.delete.NiciraNvp=\u5220\u9664 Nvp \u63a7\u5236\u5668 label.delete.NuageVsp=\u5220\u9664 Nuage VSD -label.delete.BrocadeVcs=\u5220\u9664 Brocade Vcs \u4ea4\u6362\u673a -label.delete.project=\u5220\u9664\u9879\u76ee -label.delete.SRX=\u5220\u9664 SRX +label.delete.OpenDaylight.device=\u5220\u9664 OpenDaylight \u63a7\u5236\u5668 label.delete.PA=\u5220\u9664 Palo Alto +label.delete.portable.ip.range=\u5220\u9664\u53ef\u79fb\u690d IP \u8303\u56f4 +label.delete.profile=\u5220\u9664\u914d\u7f6e\u6587\u4ef6 +label.delete.project=\u5220\u9664\u9879\u76ee +label.delete.secondary.staging.store=\u5220\u9664\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 +label.delete.SRX=\u5220\u9664 SRX +label.delete=\u5220\u9664 +label.delete.ucs.manager=\u5220\u9664 UCS Manager label.delete.VPN.connection=\u5220\u9664 VPN \u8fde\u63a5 label.delete.VPN.customer.gateway=\u5220\u9664 VPN \u5ba2\u6237\u7f51\u5173 label.delete.VPN.gateway=\u5220\u9664 VPN \u7f51\u5173 label.delete.vpn.user=\u5220\u9664 VPN \u7528\u6237 -label.delete=\u5220\u9664 label.deleting.failed=\u5220\u9664\u5931\u8d25 label.deleting.processing=\u6b63\u5728\u5220\u9664... +label.deny=\u62d2\u7edd +label.deployment.planner=\u90e8\u7f72\u89c4\u5212\u5668 label.description=\u8bf4\u660e label.destination.physical.network.id=\u76ee\u6807\u7269\u7406\u7f51\u7edc ID label.destination.zone=\u76ee\u6807\u8d44\u6e90\u57df label.destroy.router=\u9500\u6bc1\u8def\u7531\u5668 label.destroy=\u9500\u6bc1 +label.destroy.vm.graceperiod=\u9500\u6bc1 VM \u5bbd\u9650\u671f label.detaching.disk=\u6b63\u5728\u53d6\u6d88\u9644\u52a0\u78c1\u76d8 label.details=\u8be6\u7ec6\u4fe1\u606f label.device.id=\u8bbe\u5907 ID label.devices=\u8bbe\u5907 -label.DHCP.server.type=DHCP \u670d\u52a1\u5668\u7c7b\u578b label.dhcp=DHCP +label.DHCP.server.type=DHCP \u670d\u52a1\u5668\u7c7b\u578b +label.direct.attached.public.ip=\u76f4\u8fde\u516c\u7528 IP label.direct.ips=\u5171\u4eab\u7f51\u7edc IP -label.disable.provider=\u7981\u7528\u63d0\u4f9b\u7a0b\u5e8f -label.disable.vpn=\u7981\u7528\u8fdc\u7a0b\u8bbf\u95ee VPN +label.disable.autoscale=\u7981\u7528\u81ea\u52a8\u7f29\u653e label.disabled=\u5df2\u7981\u7528 -label.disabling.vpn.access=\u7981\u7528 VPN \u8bbf\u95ee +label.disable.host=\u7981\u7528\u4e3b\u673a +label.disable.network.offering=\u7981\u7528\u7f51\u7edc\u65b9\u6848 +label.disable.provider=\u7981\u7528\u63d0\u4f9b\u7a0b\u5e8f +label.disable.vnmc.provider=\u7981\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f +label.disable.vpc.offering=\u7981\u7528 VPC \u65b9\u6848 +label.disable.vpn=\u7981\u7528\u8fdc\u7a0b\u8bbf\u95ee VPN +label.disabling.vpn.access=\u6b63\u5728\u7981\u7528 VPN \u8bbf\u95ee +label.disassociate.profile.blade=\u53d6\u6d88\u5c06\u914d\u7f6e\u6587\u4ef6\u4e0e\u5200\u7247\u5f0f\u670d\u52a1\u5668\u5173\u8054 +label.disbale.vnmc.device=\u7981\u7528 VNMC \u8bbe\u5907 label.disk.allocated=\u5df2\u5206\u914d\u7684\u78c1\u76d8 label.disk.bytes.read.rate=\u78c1\u76d8\u8bfb\u53d6\u901f\u5ea6(BPS) label.disk.bytes.write.rate=\u78c1\u76d8\u5199\u5165\u901f\u5ea6(BPS) +label.disk.iops.max=\u6700\u5927 IOPS +label.disk.iops.min=\u6700\u5c0f IOPS label.disk.iops.read.rate=\u78c1\u76d8\u8bfb\u53d6\u901f\u5ea6(IOPS) +label.disk.iops.total=\u603b IOPS label.disk.iops.write.rate=\u78c1\u76d8\u5199\u5165\u901f\u5ea6(IOPS) label.disk.offering=\u78c1\u76d8\u65b9\u6848 label.disk.provisioningtype=\u7f6e\u5907\u7c7b\u578b @@ -560,10 +595,11 @@ label.disk.write.io=\u78c1\u76d8\u5199\u5165(IO) label.display.text=\u663e\u793a\u6587\u672c label.dns.1=DNS 1 label.dns.2=DNS 2 -label.DNS.domain.for.guest.networks=\u6765\u5bbe\u7f51\u7edc\u7684 DNS \u57df label.dns=DNS +label.DNS.domain.for.guest.networks=\u6765\u5bbe\u7f51\u7edc\u7684 DNS \u57df label.domain.admin=\u57df\u7ba1\u7406\u5458 label.domain.id=\u57df ID +label.domain.lower=\u57df label.domain.name=\u57df\u540d label.domain.router=\u57df\u8def\u7531\u5668 label.domain.suffix=DNS \u57df\u540e\u7f00(\u4f8b\u5982 xyz.com) @@ -572,50 +608,65 @@ label.done=\u5b8c\u6210 label.double.quotes.are.not.allowed=\u4e0d\u5141\u8bb8\u4f7f\u7528\u53cc\u5f15\u53f7 label.download.progress=\u4e0b\u8f7d\u8fdb\u5ea6 label.drag.new.position=\u62d6\u52a8\u5230\u65b0\u4f4d\u7f6e +label.dynamically.scalable=\u53ef\u52a8\u6001\u6269\u5c55 +label.edit.acl.rule=\u7f16\u8f91 ACL \u89c4\u5219 label.edit.affinity.group=\u7f16\u8f91\u5173\u8054\u6027\u7ec4 label.edit.lb.rule=\u7f16\u8f91\u8d1f\u8f7d\u5e73\u8861\u5668\u89c4\u5219 label.edit.network.details=\u7f16\u8f91\u7f51\u7edc\u8be6\u60c5 label.edit.project.details=\u7f16\u8f91\u9879\u76ee\u8be6\u60c5 +label.edit.region=\u7f16\u8f91\u5730\u7406\u533a\u57df label.edit.tags=\u7f16\u8f91\u6807\u7b7e label.edit.traffic.type=\u7f16\u8f91\u6d41\u91cf\u7c7b\u578b -label.edit.vpc=\u7f16\u8f91 VPC label.edit=\u7f16\u8f91 -label.egress.rule=\u51fa\u53e3\u89c4\u5219 +label.edit.vpc=\u7f16\u8f91 VPC +label.egress.default.policy=\u51fa\u53e3\u9ed8\u8ba4\u7b56\u7565 label.egress.rules=\u51fa\u53e3\u89c4\u5219 +label.egress.rule=\u51fa\u53e3\u89c4\u5219 label.elastic.IP=\u5f39\u6027 IP label.elastic.LB=\u5f39\u6027\u8d1f\u8f7d\u5e73\u8861\u5668 label.elastic=\u5f39\u6027 +label.email.lower=\u7535\u5b50\u90ae\u4ef6 label.email=\u7535\u5b50\u90ae\u4ef6 +label.enable.autoscale=\u542f\u7528\u81ea\u52a8\u7f29\u653e +label.enable.host=\u542f\u7528\u4e3b\u673a +label.enable.network.offering=\u542f\u7528\u7f51\u7edc\u65b9\u6848 label.enable.provider=\u542f\u7528\u63d0\u4f9b\u7a0b\u5e8f label.enable.s3=\u542f\u7528 S3 \u652f\u6301\u7684\u4e8c\u7ea7\u5b58\u50a8 label.enable.swift=\u542f\u7528 SWIFT +label.enable.vnmc.device=\u542f\u7528 VNMC \u8bbe\u5907 +label.enable.vnmc.provider=\u542f\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f +label.enable.vpc.offering=\u542f\u7528 VPC \u65b9\u6848 label.enable.vpn=\u542f\u7528\u8fdc\u7a0b\u8bbf\u95ee VPN -label.enabling.vpn.access=\u542f\u7528 VPN \u8bbf\u95ee -label.enabling.vpn=\u542f\u7528 VPN +label.enabling.vpn.access=\u6b63\u5728\u542f\u7528 VPN \u8bbf\u95ee +label.enabling.vpn=\u6b63\u5728\u542f\u7528 VPN label.end.IP=\u7ed3\u675f IP -label.end.port=\u7ed3\u675f\u7aef\u53e3 -label.end.reserved.system.IP=\u7ed3\u675f\u9884\u7559\u7cfb\u7edf IP -label.end.vlan=\u7ed3\u675f Vlan -label.end.vxlan=\u7ed3\u675f Vxlan label.endpoint.or.operation=\u7aef\u70b9\u6216\u64cd\u4f5c label.endpoint=\u7aef\u70b9 +label.end.port=\u7ed3\u675f\u7aef\u53e3 +label.end.reserved.system.IP=\u7ed3\u675f\u9884\u7559\u7cfb\u7edf IP label.enter.token=\u8f93\u5165\u4ee4\u724c label.error.code=\u9519\u8bef\u4ee3\u7801 label.error=\u9519\u8bef +label.error.upper=\u9519\u8bef label.ESP.encryption=ESP \u52a0\u5bc6\u7b97\u6cd5 label.ESP.hash=ESP \u54c8\u5e0c\u7b97\u6cd5 label.ESP.lifetime=ESP \u4f7f\u7528\u671f\u9650(\u7b2c\u4e8c\u9636\u6bb5) label.ESP.policy=ESP \u7b56\u7565 label.esx.host=ESX/ESXi \u4e3b\u673a +label.event.archived=\u4e8b\u4ef6\u5df2\u5b58\u6863 +label.event.deleted=\u4e8b\u4ef6\u5df2\u5220\u9664 label.example=\u793a\u4f8b label.expunge=\u5220\u9664 label.external.link=\u5916\u90e8\u94fe\u63a5 +label.extractable=\u53ef\u63d0\u53d6 +label.f5.details=F5 \u8be6\u7ec6\u4fe1\u606f label.f5=F5 label.failed=\u5931\u8d25 label.featured=\u7cbe\u9009 label.fetch.latest=\u63d0\u53d6\u6700\u65b0\u5185\u5bb9 label.filterBy=\u8fc7\u6ee4\u4f9d\u636e label.firewall=\u9632\u706b\u5899 +label.firstname.lower=\u540d\u5b57 label.first.name=\u540d\u5b57 label.format=\u683c\u5f0f label.friday=\u661f\u671f\u4e94 @@ -629,34 +680,63 @@ label.go.step.2=\u8f6c\u81f3\u6b65\u9aa4 2 label.go.step.3=\u8f6c\u81f3\u6b65\u9aa4 3 label.go.step.4=\u8f6c\u81f3\u6b65\u9aa4 4 label.go.step.5=\u8f6c\u81f3\u6b65\u9aa4 5 +label.gpu=GPU +label.group.by.account=\u6309\u5e10\u6237\u5206\u7ec4 +label.group.by.cluster=\u6309\u7fa4\u96c6\u5206\u7ec4 +label.group.by.pod=\u6309\u63d0\u4f9b\u70b9\u5206\u7ec4 +label.group.by.zone=\u6309\u8d44\u6e90\u57df\u5206\u7ec4 label.group.optional=\u7ec4(\u53ef\u9009) label.group=\u7ec4 +label.gslb.assigned.lb.more=\u5206\u914d\u66f4\u591a\u8d1f\u8f7d\u5e73\u8861 +label.gslb.assigned.lb=\u5df2\u5206\u914d\u8d1f\u8f7d\u5e73\u8861 +label.gslb.delete=\u5220\u9664 GSLB +label.gslb.details=GSLB \u8be6\u7ec6\u4fe1\u606f +label.gslb.domain.name=GSLB \u57df\u540d +label.gslb=GSLB +label.gslb.lb.details=\u8d1f\u8f7d\u5e73\u8861\u8be6\u7ec6\u4fe1\u606f +label.gslb.lb.remove=\u4ece\u6b64 GSLB \u4e2d\u5220\u9664\u8d1f\u8f7d\u5e73\u8861 +label.gslb.lb.rule=\u8d1f\u8f7d\u5e73\u8861\u89c4\u5219 +label.gslb.service=GSLB \u670d\u52a1 +label.gslb.service.private.ip=GSLB \u670d\u52a1\u4e13\u7528 IP +label.gslb.service.public.ip=GSLB \u670d\u52a1\u516c\u7528 IP +label.gslb.servicetype=\u670d\u52a1\u7c7b\u578b label.guest.cidr=\u6765\u5bbe CIDR label.guest.end.ip=\u6765\u5bbe\u7ed3\u675f IP label.guest.gateway=\u6765\u5bbe\u7f51\u5173 label.guest.ip.range=\u6765\u5bbe IP \u8303\u56f4 label.guest.ip=\u6765\u5bbe IP \u5730\u5740 label.guest.netmask=\u6765\u5bbe\u7f51\u7edc\u63a9\u7801 +label.guest.network.details=\u6765\u5bbe\u7f51\u7edc\u8be6\u7ec6\u4fe1\u606f label.guest.networks=\u6765\u5bbe\u7f51\u7edc label.guest.start.ip=\u6765\u5bbe\u8d77\u59cb IP label.guest.traffic=\u6765\u5bbe\u6d41\u91cf +label.guest.traffic.vswitch.name=\u6765\u5bbe\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u540d\u79f0 +label.guest.traffic.vswitch.type=\u6765\u5bbe\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u7c7b\u578b label.guest.type=\u6765\u5bbe\u7c7b\u578b label.guest=\u6765\u5bbe -label.ha.enabled=\u542f\u7528\u9ad8\u53ef\u7528\u6027 +label.ha.enabled=\u5df2\u542f\u7528\u9ad8\u53ef\u7528\u6027 +label.health.check.interval.in.sec=\u8fd0\u884c\u72b6\u51b5\u68c0\u67e5\u65f6\u95f4\u95f4\u9694(\u79d2) +label.health.check=\u8fd0\u884c\u72b6\u51b5\u68c0\u67e5 +label.healthy.threshold=\u6b63\u5e38\u9608\u503c label.help=\u5e2e\u52a9 label.hide.ingress.rule=\u9690\u85cf\u5165\u53e3\u89c4\u5219 label.hints=\u63d0\u793a +label.home=\u9996\u9875 label.host.alerts=\u4e3b\u673a\u8b66\u62a5 label.host.MAC=\u4e3b\u673a MAC label.host.name=\u4e3b\u673a\u540d\u79f0 +label.hosts=\u4e3b\u673a label.host.tags=\u4e3b\u673a\u6807\u7b7e label.host=\u4e3b\u673a -label.hosts=\u4e3b\u673a label.hourly=\u6bcf\u5c0f\u65f6 +label.hvm=HVM label.hypervisor.capabilities=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u529f\u80fd +label.hypervisor.snapshot.reserve=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u5feb\u7167\u9884\u7559 +label.hypervisors=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f label.hypervisor.type=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u7c7b\u578b -label.hypervisor.version=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u7248\u672c label.hypervisor=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f +label.hypervisor.version=\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u7248\u672c +label.hyperv.traffic.label=HyperV \u6d41\u91cf\u6807\u7b7e label.id=ID label.IKE.DH=IKE DH \u7b97\u6cd5 label.IKE.encryption=IKE \u52a0\u5bc6\u7b97\u6cd5 @@ -664,8 +744,10 @@ label.IKE.hash=IKE \u54c8\u5e0c\u7b97\u6cd5 label.IKE.lifetime=IKE \u4f7f\u7528\u671f\u9650(\u7b2c\u4e8c\u9636\u6bb5) label.IKE.policy=IKE \u7b56\u7565 label.info=\u4fe1\u606f +label.info.upper=\u4fe1\u606f label.ingress.rule=\u5165\u53e3\u89c4\u5219 label.initiated.by=\u542f\u52a8\u8005 +label.inside.port.profile=\u5185\u90e8\u7aef\u53e3\u914d\u7f6e\u6587\u4ef6 label.installWizard.addClusterIntro.subtitle=\u4ec0\u4e48\u662f\u7fa4\u96c6? label.installWizard.addClusterIntro.title=\u6dfb\u52a0\u4e00\u4e2a\u7fa4\u96c6 label.installWizard.addHostIntro.subtitle=\u4ec0\u4e48\u662f\u4e3b\u673a? @@ -676,53 +758,71 @@ label.installWizard.addPrimaryStorageIntro.subtitle=\u4ec0\u4e48\u662f\u4e3b\u5b label.installWizard.addPrimaryStorageIntro.title=\u6dfb\u52a0\u4e00\u4e2a\u4e3b\u5b58\u50a8 label.installWizard.addSecondaryStorageIntro.subtitle=\u4ec0\u4e48\u662f\u4e8c\u7ea7\u5b58\u50a8? label.installWizard.addSecondaryStorageIntro.title=\u6dfb\u52a0\u4e00\u4e2a\u4e8c\u7ea7\u5b58\u50a8 -label.installWizard.addZone.title=\u6dfb\u52a0\u8d44\u6e90\u57df label.installWizard.addZoneIntro.subtitle=\u4ec0\u4e48\u662f\u8d44\u6e90\u57df? label.installWizard.addZoneIntro.title=\u6dfb\u52a0\u4e00\u4e2a\u8d44\u6e90\u57df +label.installWizard.addZone.title=\u6dfb\u52a0\u8d44\u6e90\u57df label.installWizard.click.launch=\u8bf7\u5355\u51fb\u201c\u542f\u52a8\u201d\u6309\u94ae\u3002 -label.installWizard.subtitle=\u672c\u6559\u7a0b\u5c06\u5e2e\u52a9\u60a8\u8bbe\u7f6e CloudStack&\#8482 \u5b89\u88c5 +label.installWizard.subtitle=\u6b64\u6559\u7a0b\u5c06\u5e2e\u52a9\u60a8\u8bbe\u7f6e CloudStack&\#8482 \u5b89\u88c5 label.installWizard.title=\u60a8\u597d\uff0c\u6b22\u8fce\u4f7f\u7528 CloudStack&\#8482 label.instance.limits=\u5b9e\u4f8b\u9650\u5236 label.instance.name=\u5b9e\u4f8b\u540d\u79f0 -label.instance=\u5b9e\u4f8b +label.instance.port=\u5b9e\u4f8b\u7aef\u53e3 label.instances=\u5b9e\u4f8b +label.instance=\u5b9e\u4f8b +label.instanciate.template.associate.profile.blade=\u5c06\u6a21\u677f\u5b9e\u4f8b\u5316\u5e76\u5c06\u914d\u7f6e\u6587\u4ef6\u4e0e\u5200\u7247\u5f0f\u670d\u52a1\u5668\u5173\u8054 label.intermediate.certificate=\u4e2d\u95f4\u8bc1\u4e66 {0} label.internal.dns.1=\u5185\u90e8 DNS 1 label.internal.dns.2=\u5185\u90e8 DNS 2 +label.internal.lb.details=\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668\u8be6\u7ec6\u4fe1\u606f +label.internallbvm=InternalLbVm label.internal.name=\u5185\u90e8\u540d\u79f0 label.interval.type=\u95f4\u9694\u7c7b\u578b label.introduction.to.cloudstack=CloudStack&\#8482 \u7b80\u4ecb label.invalid.integer=\u65e0\u6548\u6574\u6570 label.invalid.number=\u65e0\u6548\u6570\u5b57 label.invitations=\u9080\u8bf7 +label.invited.accounts=\u5df2\u9080\u8bf7\u7684\u5e10\u6237 label.invite.to=\u9080\u8bf7\u52a0\u5165 label.invite=\u9080\u8bf7 -label.invited.accounts=\u5df2\u9080\u8bf7\u7684\u5e10\u6237 label.ip.address=IP \u5730\u5740 +label.ipaddress=IP \u5730\u5740 label.ip.allocations=IP \u5206\u914d +label.ip=IP label.ip.limits=\u516c\u7528 IP \u9650\u5236 label.ip.or.fqdn=IP \u6216 FQDN label.ip.range=IP \u8303\u56f4 label.ip.ranges=IP \u8303\u56f4 -label.ip=IP -label.ipaddress=IP \u5730\u5740 -label.ips=IP label.IPsec.preshared.key=IPsec \u9884\u5171\u4eab\u5bc6\u94a5 -label.is.default=\u662f\u5426\u4e3a\u9ed8\u8ba4\u8bbe\u7f6e -label.is.redundant.router=\u5197\u4f59 -label.is.shared=\u662f\u5426\u5171\u4eab -label.is.system=\u662f\u5426\u4e3a\u7cfb\u7edf +label.ips=IP +label.ipv4.cidr=IPv4 CIDR +label.ipv4.dns1=IPv4 DNS1 +label.ipv4.dns2=IPv4 DNS2 +label.ipv4.end.ip=IPv4 \u7ed3\u675f IP +label.ipv4.gateway=IPv4 \u7f51\u5173 +label.ipv4.netmask=IPv4 \u7f51\u7edc\u63a9\u7801 +label.ipv4.start.ip=IPv4 \u8d77\u59cb IP +label.ipv6.address=IPv6 IP \u5730\u5740 +label.ipv6.CIDR=IPv6 CIDR +label.ipv6.dns1=IPv6 DNS1 +label.ipv6.dns2=IPv6 DNS2 +label.ipv6.end.ip=IPv6 \u7ed3\u675f IP +label.ipv6.gateway=IPv6 \u7f51\u5173 +label.ipv6.start.ip=IPv6 \u8d77\u59cb IP label.iscsi=iSCSI +label.is.default=\u662f\u5426\u4e3a\u9ed8\u8ba4\u8bbe\u7f6e label.iso.boot=ISO \u542f\u52a8 label.iso=ISO label.isolated.networks=\u9694\u79bb\u7f51\u7edc label.isolation.method=\u9694\u79bb\u65b9\u6cd5 label.isolation.mode=\u9694\u79bb\u6a21\u5f0f label.isolation.uri=\u9694\u79bb URI +label.is.redundant.router=\u5197\u4f59 +label.is.shared=\u662f\u5426\u5171\u4eab +label.is.system=\u662f\u5426\u4e3a\u7cfb\u7edf label.item.listing=\u9879\u76ee\u5217\u8868 label.keep=\u4fdd\u7559 -label.key=\u5bc6\u94a5 label.keyboard.type=\u952e\u76d8\u7c7b\u578b +label.key=\u5bc6\u94a5 label.kvm.traffic.label=KVM \u6d41\u91cf\u6807\u7b7e label.label=\u6807\u7b7e label.lang.arabic=\u963f\u62c9\u4f2f\u8bed @@ -740,41 +840,45 @@ label.lang.norwegian=\u632a\u5a01\u8bed label.lang.polish=\u6ce2\u5170\u8bed label.lang.russian=\u4fc4\u8bed label.lang.spanish=\u897f\u73ed\u7259\u8bed -label.lang.hungarian=\u5308\u7259\u5229\u8bed label.last.disconnected=\u4e0a\u6b21\u65ad\u5f00\u8fde\u63a5\u65f6\u95f4 +label.lastname.lower=\u59d3\u6c0f label.last.name=\u59d3\u6c0f label.latest.events=\u6700\u65b0\u4e8b\u4ef6 +label.launch=\u542f\u52a8 label.launch.vm=\u542f\u52a8 VM label.launch.zone=\u542f\u52a8\u8d44\u6e90\u57df -label.launch=\u542f\u52a8 -label.lb.algorithm.leastconn=\u6700\u5c11\u8fde\u63a5 +label.lb.algorithm.leastconn=\u6700\u5c11\u8fde\u63a5\u7b97\u6cd5 label.lb.algorithm.roundrobin=\u8f6e\u5faa -label.lb.algorithm.source=\u6e90 +label.lb.algorithm.source=\u6e90\u7b97\u6cd5 label.LB.isolation=\u8d1f\u8f7d\u5e73\u8861\u5668\u9694\u79bb +label.ldap.configuration=LDAP \u914d\u7f6e +label.ldap.group.name=LDAP \u7ec4 +label.ldap.port=LDAP \u7aef\u53e3 label.level=\u7ea7\u522b label.linklocal.ip=\u94fe\u63a5\u672c\u5730 IP \u5730\u5740 +label.load.balancer.type=\u8d1f\u8f7d\u5e73\u8861\u5668\u7c7b\u578b label.load.balancer=\u8d1f\u8f7d\u5e73\u8861\u5668 label.load.balancing.policies=\u8d1f\u8f7d\u5e73\u8861\u7b56\u7565 label.load.balancing=\u8d1f\u8f7d\u5e73\u8861 label.loading=\u6b63\u5728\u52a0\u8f7d -label.local.storage.enabled=\u542f\u7528\u672c\u5730\u5b58\u50a8 -label.local.storage.enabled.system.vms=\u4e3a\u7cfb\u7edf VM \u542f\u7528\u672c\u5730\u5b58\u50a8 label.local.storage=\u672c\u5730\u5b58\u50a8 label.local=\u672c\u5730 label.login=\u767b\u5f55 label.logout=\u6ce8\u9500 -label.saml.login=SAML \u767b\u5f55 -label.LUN.number=LUN \u53f7 label.lun=LUN +label.LUN.number=LUN \u53f7 +label.lxc.traffic.label=LXC \u6d41\u91cf\u6807\u7b7e label.make.project.owner=\u8bbe\u4e3a\u5e10\u6237\u9879\u76ee\u6240\u6709\u8005 -label.manage.resources=\u7ba1\u7406\u8d44\u6e90 -label.management.server=\u7ba1\u7406\u670d\u52a1\u5668 -label.manage=\u6258\u7ba1 label.managed=\u6258\u7ba1 label.management.ips=\u7ba1\u7406\u7c7b IP \u5730\u5740 +label.management.server=\u7ba1\u7406\u670d\u52a1\u5668 label.management=\u7ba1\u7406 +label.manage.resources=\u7ba1\u7406\u8d44\u6e90 +label.manage=\u6258\u7ba1 label.max.cpus=\u6700\u5927 CPU \u5185\u6838\u6570 label.max.guest.limit=\u6700\u5927\u6765\u5bbe\u6570\u9650\u5236 +label.maximum=\u6700\u5927\u503c +label.max.instances=\u6700\u5927\u5b9e\u4f8b\u6570 label.max.memory=\u6700\u5927\u5185\u5b58(MiB) label.max.networks=\u6700\u5927\u7f51\u7edc\u6570 label.max.primary.storage=\u6700\u5927\u4e3b\u5b58\u50a8(GiB) @@ -785,14 +889,14 @@ label.max.templates=\u6700\u5927\u6a21\u677f\u6570 label.max.vms=\u6700\u5927\u7528\u6237 VM \u6570 label.max.volumes=\u6700\u5927\u5377\u6570 label.max.vpcs=\u6700\u5927 VPC \u6570 -label.maximum=\u6700\u5927\u503c label.may.continue=\u60a8\u73b0\u5728\u53ef\u4ee5\u7ee7\u7eed\u8fdb\u884c\u64cd\u4f5c\u3002 +label.md5.checksum=MD5 \u6821\u9a8c\u548c label.memory.allocated=\u5df2\u5206\u914d\u7684\u5185\u5b58 label.memory.limits=\u5185\u5b58\u9650\u5236(MiB) label.memory.mb=\u5185\u5b58(MB) label.memory.total=\u5185\u5b58\u603b\u91cf -label.memory.used=\u5df2\u4f7f\u7528\u7684\u5185\u5b58 label.memory=\u5185\u5b58 +label.memory.used=\u5df2\u4f7f\u7528\u7684\u5185\u5b58 label.menu.accounts=\u5e10\u6237 label.menu.alerts=\u8b66\u62a5 label.menu.all.accounts=\u6240\u6709\u5e10\u6237 @@ -827,24 +931,25 @@ label.menu.snapshots=\u5feb\u7167 label.menu.stopped.instances=\u5df2\u505c\u6b62\u7684\u5b9e\u4f8b label.menu.storage=\u5b58\u50a8 label.menu.system.service.offerings=\u7cfb\u7edf\u65b9\u6848 -label.menu.system.vms=\u7cfb\u7edf VM label.menu.system=\u7cfb\u7edf +label.menu.system.vms=\u7cfb\u7edf VM label.menu.templates=\u6a21\u677f label.menu.virtual.appliances=\u865a\u62df\u8bbe\u5907 label.menu.virtual.resources=\u865a\u62df\u8d44\u6e90 label.menu.volumes=\u5377 -label.menu.sshkeypair=SSH \u5bc6\u94a5\u5bf9 +label.menu.vpc.offerings=VPC \u65b9\u6848 label.migrate.instance.to.host=\u5c06\u5b9e\u4f8b\u8fc1\u79fb\u5230\u5176\u4ed6\u4e3b\u673a label.migrate.instance.to.ps=\u5c06\u5b9e\u4f8b\u8fc1\u79fb\u5230\u5176\u4ed6\u4e3b\u5b58\u50a8 label.migrate.instance.to=\u8fc1\u79fb\u5b9e\u4f8b\u81f3 +label.migrate.lb.vm=\u8fc1\u79fb LB VM label.migrate.router.to=\u8fc1\u79fb\u8def\u7531\u5668\u81f3 label.migrate.systemvm.to=\u8fc1\u79fb\u7cfb\u7edf VM \u81f3 label.migrate.to.host=\u8fc1\u79fb\u5230\u4e3b\u673a label.migrate.to.storage=\u8fc1\u79fb\u5230\u5b58\u50a8 label.migrate.volume.to.primary.storage=\u5c06\u5377\u8fc1\u79fb\u5230\u5176\u4ed6\u4e3b\u5b58\u50a8 -label.migrate.volume=\u8fc1\u79fb\u5377 label.minimum=\u6700\u5c0f\u503c -label.minute.past.hour=\u5206 +label.min.instances=\u6700\u5c0f\u5b9e\u4f8b\u6570 +label.mode=\u6a21\u5f0f label.monday=\u661f\u671f\u4e00 label.monthly=\u6bcf\u6708 label.more.templates=\u66f4\u591a\u6a21\u677f @@ -855,21 +960,26 @@ label.move.up.row=\u5411\u4e0a\u79fb\u52a8\u4e00\u884c label.my.account=\u6211\u7684\u5e10\u6237 label.my.network=\u6211\u7684\u7f51\u7edc label.my.templates=\u6211\u7684\u6a21\u677f -label.na=\u4e0d\u9002\u7528 +label.name.lower=\u540d\u79f0 label.name.optional=\u540d\u79f0(\u53ef\u9009) label.name=\u540d\u79f0 label.nat.port.range=NAT \u7aef\u53e3\u8303\u56f4 +label.na=\u65e0 label.netmask=\u7f51\u7edc\u63a9\u7801 +label.netscaler.details=NetScaler \u8be6\u7ec6\u4fe1\u606f label.netScaler=NetScaler +label.network.ACLs=\u7f51\u7edc ACL label.network.ACL.total=\u7f51\u7edc ACL \u603b\u6570 label.network.ACL=\u7f51\u7edc ACL -label.network.ACLs=\u7f51\u7edc ACL +label.network.addVM=\u5c06\u7f51\u7edc\u6dfb\u52a0\u5230 VM +label.network.cidr=\u7f51\u7edc CIDR label.network.desc=\u7f51\u7edc\u63cf\u8ff0 label.network.device.type=\u7f51\u7edc\u8bbe\u5907\u7c7b\u578b label.network.device=\u7f51\u7edc\u8bbe\u5907 label.network.domain.text=\u7f51\u7edc\u57df label.network.domain=\u7f51\u7edc\u57df label.network.id=\u7f51\u7edc ID +label.networking.and.security=\u7f51\u7edc\u8fde\u63a5\u4e0e\u5b89\u5168 label.network.label.display.for.blank.value=\u4f7f\u7528\u9ed8\u8ba4\u7f51\u5173 label.network.limits=\u7f51\u7edc\u9650\u5236 label.network.name=\u7f51\u7edc\u540d\u79f0 @@ -881,85 +991,108 @@ label.network.rate.megabytes=\u7f51\u7edc\u901f\u7387(MB/\u79d2) label.network.rate=\u7f51\u7edc\u901f\u7387(MB/\u79d2) label.network.read=\u7f51\u7edc\u8bfb\u53d6\u91cf label.network.service.providers=\u7f51\u7edc\u670d\u52a1\u63d0\u4f9b\u7a0b\u5e8f -label.network.type=\u7f51\u7edc\u7c7b\u578b -label.network.write=\u7f51\u7edc\u5199\u5165\u91cf -label.network=\u7f51\u7edc -label.networking.and.security=\u7f51\u7edc\u8fde\u63a5\u4e0e\u5b89\u5168 label.networks=\u7f51\u7edc +label.network.type=\u7f51\u7edc\u7c7b\u578b +label.network=\u7f51\u7edc +label.network.write=\u7f51\u7edc\u5199\u5165\u91cf label.new.password=\u65b0\u5bc6\u7801 label.new.project=\u65b0\u5efa\u9879\u76ee -label.new.vm=\u65b0\u5efa VM label.new=\u65b0\u5efa +label.new.vm=\u65b0\u5efa VM label.next=\u4e0b\u4e00\u6b65 label.nexusVswitch=Nexus 1000v +label.nfs=NFS label.nfs.server=NFS \u670d\u52a1\u5668 label.nfs.storage=NFS \u5b58\u50a8 -label.nfs=NFS label.nic.adapter.type=NIC \u9002\u914d\u5668\u7c7b\u578b label.nicira.controller.address=\u63a7\u5236\u5668\u5730\u5740 label.nicira.l3gatewayserviceuuid=L3 Gateway Service UUID +label.nicira.nvp.details=Nicira NVP \u8be6\u7ec6\u4fe1\u606f label.nicira.transportzoneuuid=\u4f20\u8f93\u8d44\u6e90\u57df UUID -label.brocade.vcs.address=Vcs \u4ea4\u6362\u673a\u5730\u5740 label.nics=NIC label.no.actions=\u65e0\u53ef\u7528\u64cd\u4f5c label.no.alerts=\u65e0\u6700\u8fd1\u53d1\u51fa\u7684\u8b66\u62a5 label.no.data=\u65e0\u53ef\u663e\u793a\u7684\u6570\u636e label.no.errors=\u65e0\u6700\u8fd1\u51fa\u73b0\u7684\u9519\u8bef +label.no.grouping=(\u672a\u5206\u7ec4) label.no.isos=\u65e0\u53ef\u7528 ISO label.no.items=\u65e0\u53ef\u7528\u9879\u76ee -label.no.security.groups=\u65e0\u53ef\u7528\u5b89\u5168\u7ec4 -label.no.thanks=\u4e0d\uff0c\u8c22\u8c22 -label.no=\u5426 label.none=\u65e0 +label.no.security.groups=\u65e0\u53ef\u7528\u5b89\u5168\u7ec4 label.not.found=\u672a\u627e\u5230 +label.no.thanks=\u4e0d\uff0c\u8c22\u8c22 label.notifications=\u901a\u77e5 -label.num.cpu.cores=CPU \u5185\u6838\u6570 +label.no=\u5426 label.number.of.clusters=\u7fa4\u96c6\u6570\u91cf +label.number.of.cpu.sockets=CPU \u63d2\u69fd\u6570 label.number.of.hosts=\u4e3b\u673a\u6570\u91cf label.number.of.pods=\u63d0\u4f9b\u70b9\u6570\u91cf label.number.of.system.vms=\u7cfb\u7edf VM \u6570 label.number.of.virtual.routers=\u865a\u62df\u8def\u7531\u5668\u6570 label.number.of.zones=\u8d44\u6e90\u57df\u6570\u91cf +label.num.cpu.cores=CPU \u5185\u6838\u6570 label.numretries=\u91cd\u8bd5\u6b21\u6570 label.ocfs2=OCFS2 label.offer.ha=\u63d0\u4f9b\u9ad8\u53ef\u7528\u6027 label.ok=\u786e\u5b9a +label.opendaylight.controllerdetail=OpenDaylight \u63a7\u5236\u5668\u8be6\u7ec6\u4fe1\u606f +label.opendaylight.controller=OpenDaylight \u63a7\u5236\u5668 +label.opendaylight.controllers=OpenDaylight \u63a7\u5236\u5668 +label.openDaylight=OpenDaylight +label.operator=\u8fd0\u7b97\u7b26 label.optional=\u53ef\u9009 label.order=\u6392\u5e8f label.os.preference=\u64cd\u4f5c\u7cfb\u7edf\u9996\u9009\u9879 label.os.type=\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b -label.ovm3.vip=\u4e3b\u673a VIP IP -label.ovm3.pool=\u672c\u673a\u6c60 -label.ovm3.cluster=\u672c\u673a\u7fa4\u96c6 +label.other=\u5176\u4ed6 +label.override.guest.traffic=\u66ff\u4ee3\u6765\u5bbe\u6d41\u91cf +label.override.public.traffic=\u66ff\u4ee3\u516c\u5171\u6d41\u91cf +label.ovm.traffic.label=OVM \u6d41\u91cf\u6807\u7b7e +label.ovs=OVS label.owned.public.ips=\u62e5\u6709\u7684\u516c\u7528 IP \u5730\u5740\u6570 label.owner.account=\u6240\u6709\u8005\u5e10\u6237 label.owner.domain=\u6240\u6709\u8005\u57df +label.palo.alto.details=Palo Alto \u8be6\u7ec6\u4fe1\u606f label.PA.log.profile=Palo Alto \u65e5\u5fd7\u914d\u7f6e\u6587\u4ef6 -label.PA.threat.profile=Palo Alto \u5a01\u80c1\u914d\u7f6e\u6587\u4ef6 +label.PA=Palo Alto label.parent.domain=\u7236\u57df -label.password.enabled=\u542f\u7528\u5bc6\u7801 +label.passive=\u88ab\u52a8 +label.password.enabled=\u5df2\u542f\u7528\u5bc6\u7801 +label.password.lower=\u5bc6\u7801 +label.password.reset.confirm=\u5bc6\u7801\u5df2\u91cd\u7f6e\u4e3a label.password=\u5bc6\u7801 +label.PA.threat.profile=Palo Alto \u5a01\u80c1\u914d\u7f6e\u6587\u4ef6 label.path=\u8def\u5f84 label.perfect.forward.secrecy=\u5b8c\u5168\u6b63\u5411\u4fdd\u5bc6 +label.persistent=\u6c38\u4e45 label.physical.network.ID=\u7269\u7406\u7f51\u7edc ID label.physical.network=\u7269\u7406\u7f51\u7edc label.PING.CIFS.password=PING CIFS \u5bc6\u7801 label.PING.CIFS.username=PING CIFS \u7528\u6237\u540d label.PING.dir=PING \u76ee\u5f55 +label.ping.path=Ping \u8def\u5f84 label.PING.storage.IP=PING \u5b58\u50a8 IP +label.planner.mode=\u89c4\u5212\u5668\u6a21\u5f0f label.please.specify.netscaler.info=\u8bf7\u6307\u5b9a NetScaler \u4fe1\u606f label.please.wait=\u8bf7\u7a0d\u5019 label.plugin.details=\u63d2\u4ef6\u8be6\u7ec6\u4fe1\u606f label.plugins=\u63d2\u4ef6 +label.pod.dedicated=\u63d0\u4f9b\u70b9\u5df2\u4e13\u7528 label.pod.name=\u63d0\u4f9b\u70b9\u540d\u79f0 -label.pod=\u63d0\u4f9b\u70b9 label.pods=\u63d0\u4f9b\u70b9 +label.pod=\u63d0\u4f9b\u70b9 +label.polling.interval.sec=\u8f6e\u8be2\u65f6\u95f4\u95f4\u9694(\u79d2) +label.portable.ip.range.details=\u53ef\u79fb\u690d IP \u8303\u56f4\u8be6\u7ec6\u4fe1\u606f +label.portable.ip.ranges=\u53ef\u79fb\u690d IP \u8303\u56f4 +label.portable.ips=\u53ef\u79fb\u690d IP +label.portable.ip=\u53ef\u79fb\u690d IP label.port.forwarding.policies=\u7aef\u53e3\u8f6c\u53d1\u7b56\u7565 label.port.forwarding=\u7aef\u53e3\u8f6c\u53d1 label.port.range=\u7aef\u53e3\u8303\u56f4 +label.port=\u7aef\u53e3 label.PreSetup=PreSetup -label.prev=\u4e0a\u4e00\u9875 label.previous=\u4e0a\u4e00\u6b65 +label.prev=\u4e0a\u4e00\u9875 label.primary.allocated=\u5df2\u5206\u914d\u7684\u4e3b\u5b58\u50a8 label.primary.network=\u4e3b\u7f51\u7edc label.primary.storage.count=\u4e3b\u5b58\u50a8\u6c60 @@ -969,48 +1102,73 @@ label.primary.used=\u5df2\u4f7f\u7528\u7684\u4e3b\u5b58\u50a8 label.private.Gateway=\u4e13\u7528\u7f51\u5173 label.private.interface=\u4e13\u7528\u63a5\u53e3 label.private.ip.range=\u4e13\u7528 IP \u8303\u56f4 -label.private.ip=\u4e13\u7528 IP \u5730\u5740 label.private.ips=\u4e13\u7528 IP \u5730\u5740 +label.private.ip=\u4e13\u7528 IP \u5730\u5740 +label.privatekey=PKCS\#8 \u79c1\u94a5 label.private.network=\u4e13\u7528\u7f51\u7edc label.private.port=\u4e13\u7528\u7aef\u53e3 label.private.zone=\u4e13\u7528\u8d44\u6e90\u57df -label.privatekey=PKCS\#8 \u79c1\u94a5 +label.profile=\u914d\u7f6e\u6587\u4ef6 label.project.dashboard=\u9879\u76ee\u63a7\u5236\u677f label.project.id=\u9879\u76ee ID label.project.invite=\u9080\u8bf7\u52a0\u5165\u9879\u76ee label.project.name=\u9879\u76ee\u540d\u79f0 -label.project.view=\u9879\u76ee\u89c6\u56fe -label.project=\u9879\u76ee label.projects=\u9879\u76ee +label.project=\u9879\u76ee +label.project.view=\u9879\u76ee\u89c6\u56fe +label.protocol.number=\u534f\u8bae\u7f16\u53f7 label.protocol=\u534f\u8bae -label.provider=\u63d0\u4f9b\u7a0b\u5e8f label.providers=\u63d0\u4f9b\u7a0b\u5e8f +label.provider=\u63d0\u4f9b\u7a0b\u5e8f label.public.interface=\u516c\u7528\u63a5\u53e3 -label.public.ip=\u516c\u7528 IP \u5730\u5740 label.public.ips=\u516c\u7528 IP \u5730\u5740 +label.public.ip=\u516c\u7528 IP \u5730\u5740 +label.public.load.balancer.provider=\u516c\u7528\u8d1f\u8f7d\u5e73\u8861\u5668\u63d0\u4f9b\u7a0b\u5e8f label.public.network=\u516c\u7528\u7f51\u7edc label.public.port=\u516c\u7528\u7aef\u53e3 label.public.traffic=\u516c\u5171\u6d41\u91cf -label.public.zone=\u516c\u7528\u8d44\u6e90\u57df +label.public.traffic.vswitch.name=\u516c\u5171\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u540d\u79f0 +label.public.traffic.vswitch.type=\u516c\u5171\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u7c7b\u578b label.public=\u516c\u7528 +label.public.zone=\u516c\u7528\u8d44\u6e90\u57df label.purpose=\u76ee\u7684 label.Pxe.server.type=Pxe \u670d\u52a1\u5668\u7c7b\u578b +label.qos.type=QoS \u7c7b\u578b label.quickview=\u5feb\u901f\u67e5\u770b +label.quiesce.vm=\u9759\u9ed8 VM +label.quiet.time.sec=\u5b89\u9759\u65f6\u95f4(\u79d2) +label.rbd.id=Cephx \u7528\u6237 +label.rbd.monitor=Ceph \u76d1\u89c6\u5668 +label.rbd.pool=Ceph \u6c60 +label.rbd=RBD +label.rbd.secret=Cephx \u5bc6\u94a5 label.reboot=\u91cd\u65b0\u542f\u52a8 label.recent.errors=\u6700\u8fd1\u51fa\u73b0\u7684\u9519\u8bef +label.recover.vm=\u6062\u590d VM label.redundant.router.capability=\u5197\u4f59\u8def\u7531\u5668\u529f\u80fd label.redundant.router=\u5197\u4f59\u8def\u7531\u5668 -label.redundant.vpc=\u5197\u4f59 VPC label.redundant.state=\u5197\u4f59\u72b6\u6001 +label.refresh.blades=\u5237\u65b0\u5200\u7247\u5f0f\u670d\u52a1\u5668 label.refresh=\u5237\u65b0 +label.regionlevelvpc=\u5730\u7406\u533a\u57df\u7ea7 VPC label.region=\u5730\u7406\u533a\u57df +label.reinstall.vm=\u91cd\u65b0\u5b89\u88c5 VM label.related=\u76f8\u5173\u8054 +label.release.account.lowercase=\u4ece\u5e10\u6237\u4e2d\u91ca\u653e +label.release.account=\u4ece\u5e10\u6237\u4e2d\u91ca\u653e +label.release.dedicated.cluster=\u91ca\u653e\u4e13\u7528\u7fa4\u96c6 +label.release.dedicated.host=\u91ca\u653e\u4e13\u7528\u4e3b\u673a +label.release.dedicated.pod=\u91ca\u653e\u4e13\u7528\u63d0\u4f9b\u70b9 +label.release.dedicated.vlan.range=\u91ca\u653e\u4e13\u7528 VLAN \u8303\u56f4 +label.release.dedicated.zone=\u91ca\u653e\u4e13\u7528\u8d44\u6e90\u57df label.remind.later=\u4ee5\u540e\u63d0\u9192\u6211 label.remove.ACL=\u5220\u9664 ACL label.remove.egress.rule=\u5220\u9664\u51fa\u53e3\u89c4\u5219 label.remove.from.load.balancer=\u6b63\u5728\u4ece\u8d1f\u8f7d\u5e73\u8861\u5668\u4e2d\u5220\u9664\u5b9e\u4f8b label.remove.ingress.rule=\u5220\u9664\u5165\u53e3\u89c4\u5219 label.remove.ip.range=\u5220\u9664 IP \u8303\u56f4 +label.remove.ldap=\u5220\u9664 LDAP +label.remove.network.offering=\u5220\u9664\u7f51\u7edc\u65b9\u6848 label.remove.pf=\u5220\u9664\u7aef\u53e3\u8f6c\u53d1\u89c4\u5219 label.remove.project.account=\u4ece\u9879\u76ee\u4e2d\u5220\u9664\u5e10\u6237 label.remove.region=\u5220\u9664\u5730\u7406\u533a\u57df @@ -1019,25 +1177,35 @@ label.remove.static.nat.rule=\u5220\u9664\u9759\u6001 NAT \u89c4\u5219 label.remove.static.route=\u5220\u9664\u9759\u6001\u8def\u7531 label.remove.tier=\u5220\u9664\u5c42 label.remove.vm.from.lb=\u4ece\u8d1f\u8f7d\u5e73\u8861\u5668\u89c4\u5219\u4e2d\u5220\u9664 VM +label.remove.vm.load.balancer=\u4ece\u8d1f\u8f7d\u5e73\u8861\u5668\u4e2d\u5220\u9664 VM +label.remove.vmware.datacenter=\u5220\u9664 VMware \u6570\u636e\u4e2d\u5fc3 +label.remove.vpc.offering=\u5220\u9664 VPC \u65b9\u6848 label.remove.vpc=\u5220\u9664 VPC -label.removing.user=\u6b63\u5728\u5220\u9664\u7528\u6237 label.removing=\u6b63\u5728\u5220\u9664 +label.removing.user=\u6b63\u5728\u5220\u9664\u7528\u6237 +label.reource.id=\u8d44\u6e90 ID +label.replace.acl.list=\u66ff\u6362 ACL \u5217\u8868 +label.replace.acl=\u66ff\u6362 ACL label.required=\u5fc5\u586b\u9879 +label.requires.upgrade=\u9700\u8981\u5347\u7ea7 +label.reserved.ip.range=\u9884\u7559 IP \u8303\u56f4 label.reserved.system.gateway=\u9884\u7559\u7684\u7cfb\u7edf\u7f51\u5173 label.reserved.system.ip=\u9884\u7559\u7684\u7cfb\u7edf IP label.reserved.system.netmask=\u9884\u7559\u7684\u7cfb\u7edf\u7f51\u7edc\u63a9\u7801 +label.resetVM=\u91cd\u7f6e VM label.reset.VPN.connection=\u91cd\u7f6e VPN \u8fde\u63a5 label.resize.new.offering.id=\u65b0\u65b9\u6848 -label.resize.new.size=\u65b0\u5927\u5c0f(GB) -label.resize.shrink.ok=\u5141\u8bb8\u7f29\u5c0f +label.resize.shrink.ok=\u662f\u5426\u786e\u5b9e\u8981\u7f29\u5c0f\u5377\u5927\u5c0f +label.resource.limit.exceeded=\u5df2\u8d85\u51fa\u8d44\u6e90\u9650\u5236 label.resource.limits=\u8d44\u6e90\u9650\u5236 +label.resource.name=\u8d44\u6e90\u540d\u79f0 label.resource.state=\u8d44\u6e90\u72b6\u6001 -label.resource=\u8d44\u6e90 label.resources=\u8d44\u6e90 +label.resource=\u8d44\u6e90 +label.response.timeout.in.sec=\u54cd\u5e94\u8d85\u65f6(\u79d2) label.restart.network=\u91cd\u65b0\u542f\u52a8\u7f51\u7edc label.restart.required=\u9700\u8981\u91cd\u65b0\u542f\u52a8 label.restart.vpc=\u91cd\u65b0\u542f\u52a8 VPC -message.restart.vpc.remark=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u91cd\u65b0\u542f\u52a8 VPC

\u5907\u6ce8: \u5c06\u975e\u5197\u4f59 VPC \u8bbe\u4e3a\u5197\u4f59\u4f1a\u5f3a\u5236\u6267\u884c\u6e05\u7406\u3002\u7f51\u7edc\u5c06\u5728\u51e0\u5206\u949f\u5185\u4e0d\u53ef\u7528.

label.restore=\u8fd8\u539f label.retry.interval=\u91cd\u8bd5\u65f6\u95f4\u95f4\u9694 label.review=\u6838\u5bf9 @@ -1046,6 +1214,11 @@ label.role=\u89d2\u8272 label.root.certificate=\u6839\u8bc1\u4e66 label.root.disk.controller=\u6839\u78c1\u76d8\u63a7\u5236\u5668 label.root.disk.offering=\u6839\u78c1\u76d8\u65b9\u6848 +label.root.disk.size=\u6839\u78c1\u76d8\u5927\u5c0f +label.router.vm.scaled.up=\u5df2\u6269\u5c55\u8def\u7531\u5668 VM +label.routing.host=\u6b63\u5728\u8def\u7531\u4e3b\u673a +label.routing=\u6b63\u5728\u8def\u7531 +label.rule.number=\u89c4\u5219\u7f16\u53f7 label.rules=\u89c4\u5219 label.running.vms=\u6b63\u5728\u8fd0\u884c\u7684 VM label.s3.access_key=\u8bbf\u95ee\u5bc6\u94a5 @@ -1053,6 +1226,8 @@ label.s3.bucket=\u5b58\u50a8\u6876 label.s3.connection_timeout=\u8fde\u63a5\u8d85\u65f6 label.s3.endpoint=\u7aef\u70b9 label.s3.max_error_retry=\u6700\u5927\u9519\u8bef\u91cd\u8bd5\u6b21\u6570 +label.s3.nfs.path=S3 NFS \u8def\u5f84 +label.s3.nfs.server=S3 NFS \u670d\u52a1\u5668 label.s3.secret_key=\u5bc6\u94a5 label.s3.socket_timeout=\u5957\u63a5\u5b57\u8d85\u65f6 label.s3.use_https=\u4f7f\u7528 HTTPS @@ -1060,19 +1235,23 @@ label.saturday=\u661f\u671f\u516d label.save.and.continue=\u4fdd\u5b58\u5e76\u7ee7\u7eed label.save=\u4fdd\u5b58 label.saving.processing=\u6b63\u5728\u4fdd\u5b58... +label.scale.up.policy=\u6269\u5c55\u7b56\u7565 label.scope=\u8303\u56f4 label.search=\u641c\u7d22 +label.secondary.isolated.vlan.id=\u4e8c\u7ea7\u9694\u79bb VLAN ID +label.secondary.staging.store.details=\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8\u8be6\u7ec6\u4fe1\u606f +label.secondary.staging.store=\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 label.secondary.storage.count=\u4e8c\u7ea7\u5b58\u50a8\u6c60 +label.secondary.storage.details=\u4e8c\u7ea7\u5b58\u50a8\u8be6\u7ec6\u4fe1\u606f label.secondary.storage.limits=\u4e8c\u7ea7\u5b58\u50a8\u9650\u5236(GiB) -label.secondary.storage.vm=\u4e8c\u7ea7\u5b58\u50a8 VM label.secondary.storage=\u4e8c\u7ea7\u5b58\u50a8 +label.secondary.storage.vm=\u4e8c\u7ea7\u5b58\u50a8 VM label.secondary.used=\u5df2\u4f7f\u7528\u7684\u4e8c\u7ea7\u5b58\u50a8 label.secret.key=\u5bc6\u94a5 label.security.group.name=\u5b89\u5168\u7ec4\u540d\u79f0 -label.security.group=\u5b89\u5168\u7ec4 -label.security.groups.enabled=\u542f\u7528\u5b89\u5168\u7ec4 +label.security.groups.enabled=\u5df2\u542f\u7528\u5b89\u5168\u7ec4 label.security.groups=\u5b89\u5168\u7ec4 -label.select-view=\u9009\u62e9\u89c6\u56fe +label.security.group=\u5b89\u5168\u7ec4 label.select.a.template=\u9009\u62e9\u4e00\u4e2a\u6a21\u677f label.select.a.zone=\u9009\u62e9\u4e00\u4e2a\u8d44\u6e90\u57df label.select.instance.to.attach.volume.to=\u9009\u62e9\u8981\u5c06\u5377\u9644\u52a0\u5230\u7684\u5b9e\u4f8b @@ -1080,48 +1259,63 @@ label.select.instance=\u9009\u62e9\u5b9e\u4f8b label.select.iso.or.template=\u9009\u62e9 ISO \u6216\u6a21\u677f label.select.offering=\u9009\u62e9\u65b9\u6848 label.select.project=\u9009\u62e9\u9879\u76ee +label.select.region=\u9009\u62e9\u5730\u7406\u533a\u57df +label.select.template=\u9009\u62e9\u6a21\u677f label.select.tier=\u9009\u62e9\u5c42 -label.select.vm.for.static.nat=\u4e3a\u9759\u6001 NAT \u9009\u62e9 VM label.select=\u9009\u62e9 +label.select-view=\u9009\u62e9\u89c6\u56fe +label.select.vm.for.static.nat=\u4e3a\u9759\u6001 NAT \u9009\u62e9 VM label.sent=\u5df2\u53d1\u9001 label.server=\u670d\u52a1\u5668 label.service.capabilities=\u670d\u52a1\u529f\u80fd label.service.offering=\u670d\u52a1\u65b9\u6848 +label.service.state=\u670d\u52a1\u72b6\u6001 +label.services=\u670d\u52a1 label.session.expired=\u4f1a\u8bdd\u5df2\u8fc7\u671f -label.set.up.zone.type=\u8bbe\u7f6e\u8d44\u6e90\u57df\u7c7b\u578b +label.set.default.NIC=\u8bbe\u7f6e\u9ed8\u8ba4 NIC +label.settings=\u8bbe\u7f6e label.setup.network=\u8bbe\u7f6e\u7f51\u7edc -label.setup.zone=\u8bbe\u7f6e\u8d44\u6e90\u57df label.setup=\u8bbe\u7f6e -label.shared=\u5df2\u5171\u4eab +label.set.up.zone.type=\u8bbe\u7f6e\u8d44\u6e90\u57df\u7c7b\u578b +label.setup.zone=\u8bbe\u7f6e\u8d44\u6e90\u57df label.SharedMountPoint=SharedMountPoint +label.shared=\u5df2\u5171\u4eab +label.show.advanced.settings=\u663e\u793a\u9ad8\u7ea7\u8bbe\u7f6e label.show.ingress.rule=\u663e\u793a\u5165\u53e3\u89c4\u5219 label.shutdown.provider=\u5173\u95ed\u63d0\u4f9b\u7a0b\u5e8f label.site.to.site.VPN=\u70b9\u5bf9\u70b9 VPN label.size=\u5927\u5c0f label.skip.guide=\u6211\u4ee5\u524d\u4f7f\u7528\u8fc7 CloudStack\uff0c\u8df3\u8fc7\u6b64\u6307\u5357 +label.smb.domain=SMB \u57df +label.smb.password=SMB \u5bc6\u7801 +label.smb.username=SMB \u7528\u6237\u540d label.snapshot.limits=\u5feb\u7167\u9650\u5236 label.snapshot.name=\u5feb\u7167\u540d\u79f0 -label.snapshot.s=\u5feb\u7167 label.snapshot.schedule=\u8bbe\u7f6e\u91cd\u73b0\u5feb\u7167 -label.snapshot=\u5feb\u7167 label.snapshots=\u5feb\u7167 +label.snapshot=\u5feb\u7167 +label.SNMP.community=SNMP \u793e\u533a +label.SNMP.port=SNMP \u7aef\u53e3 +label.sockets=CPU \u63d2\u69fd +label.source.ip.address=\u6e90 IP \u5730\u5740 +label.source.nat.supported=\u652f\u6301 SourceNAT label.source.nat=\u6e90 NAT +label.source.port=\u6e90\u7aef\u53e3 label.specify.IP.ranges=\u6307\u5b9a IP \u8303\u56f4 label.specify.vlan=\u6307\u5b9a VLAN label.specify.vxlan=\u6307\u5b9a VXLAN label.SR.name=SR \u540d\u79f0\u6807\u7b7e +label.srx.details=SRX \u8be6\u7ec6\u4fe1\u606f label.srx=SRX -label.PA=Palo Alto label.start.IP=\u8d77\u59cb IP +label.start.lb.vm=\u542f\u52a8 LB VM label.start.port=\u8d77\u59cb\u7aef\u53e3 label.start.reserved.system.IP=\u8d77\u59cb\u9884\u7559\u7cfb\u7edf IP -label.start.vlan=\u542f\u52a8 Vlan -label.start.vxlan=\u542f\u52a8 Vxlan label.state=\u72b6\u6001 -label.static.nat.enabled=\u542f\u7528\u9759\u6001 NAT +label.static.nat.enabled=\u5df2\u542f\u7528\u9759\u6001 NAT label.static.nat.to=\u9759\u6001 NAT \u76ee\u6807 -label.static.nat.vm.details=\u9759\u6001 NAT VM \u8be6\u60c5 label.static.nat=\u9759\u6001 NAT +label.static.nat.vm.details=\u9759\u6001 NAT VM \u8be6\u60c5 label.statistics=\u7edf\u8ba1\u6570\u636e label.status=\u72b6\u6001 label.step.1.title=\u6b65\u9aa4 1\: \u9009\u62e9\u4e00\u4e2a\u6a21\u677f @@ -1134,6 +1328,7 @@ label.step.4.title=\u6b65\u9aa4 4\: \u7f51\u7edc label.step.4=\u6b65\u9aa4 4 label.step.5.title=\u6b65\u9aa4 5\: \u6838\u5bf9 label.step.5=\u6b65\u9aa4 5 +label.stickiness.method=\u7c98\u6027\u65b9\u6cd5 label.stickiness=\u7c98\u6027 label.sticky.cookie-name=Cookie \u540d\u79f0 label.sticky.domain=\u57df @@ -1142,84 +1337,105 @@ label.sticky.holdtime=\u6301\u7eed\u65f6\u95f4 label.sticky.indirect=indirect label.sticky.length=\u957f\u5ea6 label.sticky.mode=\u6a21\u5f0f +label.sticky.name=\u7c98\u6027\u540d\u79f0 label.sticky.nocache=nocache label.sticky.postonly=postonly label.sticky.prefix=prefix label.sticky.request-learn=request-learn label.sticky.tablesize=\u8868\u5927\u5c0f -label.stop=\u505c\u6b62 +label.stop.lb.vm=\u505c\u6b62 LB VM label.stopped.vms=\u5df2\u505c\u6b62\u7684 VM +label.stop=\u505c\u6b62 +label.storage.pool=\u5b58\u50a8\u6c60 label.storage.tags=\u5b58\u50a8\u6807\u7b7e label.storage.traffic=\u5b58\u50a8\u6d41\u91cf label.storage.type=\u5b58\u50a8\u7c7b\u578b -label.qos.type=QoS \u7c7b\u578b -label.cache.mode=\u5199\u5165\u7f13\u5b58\u7c7b\u578b label.storage=\u5b58\u50a8 label.subdomain.access=\u5b50\u57df\u8bbf\u95ee -label.submit=\u63d0\u4ea4 label.submitted.by=[\u63d0\u4ea4\u8005\: ] +label.submit=\u63d0\u4ea4 label.succeeded=\u6210\u529f label.sunday=\u661f\u671f\u65e5 label.super.cidr.for.guest.networks=\u6765\u5bbe\u7f51\u7edc\u7684\u8d85\u7ea7 CIDR label.supported.services=\u652f\u6301\u7684\u670d\u52a1 label.supported.source.NAT.type=\u652f\u6301\u7684\u6e90 NAT \u7c7b\u578b +label.supportsstrechedl2subnet=\u652f\u6301\u6269\u5c55\u4e8c\u7ea7\u5b50\u7f51 label.suspend.project=\u6682\u505c\u9879\u76ee +label.switch.type=\u4ea4\u6362\u673a\u7c7b\u578b label.system.capacity=\u7cfb\u7edf\u5bb9\u91cf +label.system.offering.for.router=\u8def\u7531\u5668\u7684\u7cfb\u7edf\u65b9\u6848 label.system.offering=\u7cfb\u7edf\u65b9\u6848 label.system.service.offering=\u7cfb\u7edf\u670d\u52a1\u65b9\u6848 +label.system.vm.details=\u7cfb\u7edf VM \u8be6\u7ec6\u4fe1\u606f +label.system.vm.scaled.up=\u5df2\u6269\u5c55\u7cfb\u7edf VM +label.system.vms=\u7cfb\u7edf VM label.system.vm.type=\u7cfb\u7edf VM \u7c7b\u578b label.system.vm=\u7cfb\u7edf VM -label.system.vms=\u7cfb\u7edf VM label.system.wide.capacity=\u6574\u4e2a\u7cfb\u7edf\u7684\u5bb9\u91cf label.tagged=\u5df2\u6807\u8bb0 +label.tag.key=\u6807\u8bb0\u5bc6\u94a5 label.tags=\u6807\u7b7e +label.tag.value=\u6807\u8bb0\u503c label.target.iqn=\u76ee\u6807 IQN label.task.completed=\u5df2\u5b8c\u6210\u4efb\u52a1 label.template.limits=\u6a21\u677f\u9650\u5236 label.template=\u6a21\u677f label.TFTP.dir=TFTP \u76ee\u5f55 +label.tftp.root.directory=Tftp \u6839\u76ee\u5f55 label.theme.default=\u9ed8\u8ba4\u4e3b\u9898 label.theme.grey=\u81ea\u5b9a\u4e49 - \u7070\u8272 label.theme.lightblue=\u81ea\u5b9a\u4e49 - \u6de1\u84dd\u8272 +label.threshold=\u9608\u503c label.thursday=\u661f\u671f\u56db label.tier.details=\u5c42\u8be6\u7ec6\u4fe1\u606f label.tier=\u5c42 -label.time.zone=\u65f6\u533a -label.time=\u65f6\u95f4 -label.timeout.in.second = \u8d85\u65f6(\u79d2) label.timeout=\u8d85\u65f6 +label.time=\u65f6\u95f4 +label.time.zone=\u65f6\u533a label.timezone=\u65f6\u533a label.token=\u4ee4\u724c +label.total.cpu=CPU \u603b\u91cf label.total.CPU=CPU \u603b\u91cf -label.total.cpu=\u603b CPU label.total.hosts=\u603b\u4e3b\u673a\u6570 label.total.memory=\u5185\u5b58\u603b\u91cf -label.total.of.ip=\u603b IP \u5730\u5740\u6570 label.total.of.vm=\u603b VM \u6570 label.total.storage=\u5b58\u50a8\u603b\u91cf +label.total.virtual.routers=\u865a\u62df\u8def\u7531\u5668\u603b\u6570 +label.total.virtual.routers.upgrade=\u9700\u8981\u5347\u7ea7\u7684\u865a\u62df\u8def\u7531\u5668\u603b\u6570 label.total.vms=\u603b VM \u6570 label.traffic.label=\u6d41\u91cf\u6807\u7b7e -label.traffic.type=\u6d41\u91cf\u7c7b\u578b label.traffic.types=\u6d41\u91cf\u7c7b\u578b +label.traffic.type=\u6d41\u91cf\u7c7b\u578b label.tuesday=\u661f\u671f\u4e8c label.type.id=\u7c7b\u578b ID +label.type.lower=\u7c7b\u578b label.type=\u7c7b\u578b +label.ucs=UCS label.unavailable=\u4e0d\u53ef\u7528 +label.unhealthy.threshold=\u4e0d\u6b63\u5e38\u9608\u503c label.unlimited=\u65e0\u9650\u5236 label.untagged=\u5df2\u53d6\u6d88\u6807\u8bb0 label.update.project.resources=\u66f4\u65b0\u9879\u76ee\u8d44\u6e90 label.update.ssl.cert= SSL \u8bc1\u4e66 label.update.ssl= SSL \u8bc1\u4e66 label.updating=\u6b63\u5728\u66f4\u65b0 -label.upload.volume=\u4e0a\u8f7d\u5377 +label.upgrade.required=\u9700\u8981\u5347\u7ea7 +label.upgrade.router.newer.template=\u5347\u7ea7\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f label.upload=\u4e0a\u8f7d +label.upload.volume=\u4e0a\u8f7d\u5377 label.url=URL label.usage.interface=\u4f7f\u7528\u754c\u9762 -label.use.vm.ip=\u4f7f\u7528 VM IP\: +label.usage.sanity.result=\u4f7f\u7528\u5065\u5168\u6027\u68c0\u67e5\u7ed3\u679c +label.usage.server=\u4f7f\u7528\u670d\u52a1\u5668 label.used=\u5df2\u4f7f\u7528 -label.user=\u7528\u6237 +label.user.data=\u7528\u6237\u6570\u636e +label.username.lower=\u7528\u6237\u540d label.username=\u7528\u6237\u540d label.users=\u7528\u6237 +label.user=\u7528\u6237 +label.user.vm=\u7528\u6237 VM +label.use.vm.ips=\u4f7f\u7528 VM IP +label.use.vm.ip=\u4f7f\u7528 VM IP\: label.value=\u503c label.vcdcname=vCenter DC \u540d\u79f0 label.vcenter.cluster=vCenter \u7fa4\u96c6 @@ -1228,396 +1444,132 @@ label.vcenter.datastore=vCenter \u6570\u636e\u5b58\u50a8 label.vcenter.host=vCenter \u4e3b\u673a label.vcenter.password=vCenter \u5bc6\u7801 label.vcenter.username=vCenter \u7528\u6237\u540d +label.vcenter=vCenter label.vcipaddress=vCenter IP \u5730\u5740 label.version=\u7248\u672c +label.vgpu.max.resolution=\u6700\u5927\u5206\u8fa8\u7387 +label.vgpu.max.vgpu.per.gpu=\u6bcf\u4e2a GPU \u7684 vGPU \u6570 +label.vgpu.remaining.capacity=\u5269\u4f59\u5bb9\u91cf +label.vgpu.type=vGPU \u7c7b\u578b +label.vgpu=VGPU +label.vgpu.video.ram=\u89c6\u9891 RAM label.view.all=\u67e5\u770b\u5168\u90e8 label.view.console=\u67e5\u770b\u63a7\u5236\u53f0 -label.view.more=\u67e5\u770b\u66f4\u591a -label.view=\u67e5\u770b label.viewing=\u67e5\u770b -label.virtual.appliance=\u865a\u62df\u8bbe\u5907 +label.view.more=\u67e5\u770b\u66f4\u591a +label.view.secondary.ips=\u67e5\u770b\u4e8c\u7ea7 IP +label.view=\u67e5\u770b +label.virtual.appliance.details=\u865a\u62df\u8bbe\u5907\u8be6\u7ec6\u4fe1\u606f label.virtual.appliances=\u865a\u62df\u8bbe\u5907 +label.virtual.appliance=\u865a\u62df\u8bbe\u5907 label.virtual.machines=\u865a\u62df\u673a -label.virtual.machine=\u865a\u62df\u673a +label.virtual.networking=\u865a\u62df\u7f51\u7edc\u8fde\u63a5 label.virtual.network=\u865a\u62df\u7f51\u7edc -label.virtual.router=\u865a\u62df\u8def\u7531\u5668 +label.virtual.routers.group.account=\u865a\u62df\u8def\u7531\u5668(\u6309\u5e10\u6237\u5206\u7ec4) +label.virtual.routers.group.cluster=\u865a\u62df\u8def\u7531\u5668(\u6309\u7fa4\u96c6\u5206\u7ec4) +label.virtual.routers.group.pod=\u865a\u62df\u8def\u7531\u5668(\u6309\u63d0\u4f9b\u70b9\u5206\u7ec4) +label.virtual.routers.group.zone=\u865a\u62df\u8def\u7531\u5668(\u6309\u8d44\u6e90\u57df\u5206\u7ec4) label.virtual.routers=\u865a\u62df\u8def\u7531\u5668 +label.virtual.router=\u865a\u62df\u8def\u7531\u5668 label.vlan.id=VLAN/VNI ID +label.vlan.only=VLAN +label.vlan.range.details=VLAN \u8303\u56f4\u8be6\u7ec6\u4fe1\u606f +label.vlan.ranges=VLAN \u8303\u56f4 label.vlan.range=VLAN/VNI \u8303\u56f4 label.vlan=VLAN -label.vnet=VLAN/VNI -label.vnet.id=VLAN/VNI ID -label.vxlan.id=VXLAN ID -label.vxlan.range=VXLAN \u8303\u56f4 -label.vxlan=VXLAN +label.vlan.vni.ranges=VLAN/VNI \u8303\u56f4 +label.vlan.vni.range=VLAN/VNI \u8303\u56f4 label.vm.add=\u6dfb\u52a0\u5b9e\u4f8b label.vm.destroy=\u9500\u6bc1 label.vm.display.name=VM \u663e\u793a\u540d\u79f0 -label.vm.name=VM \u540d\u79f0 -label.vm.reboot=\u91cd\u65b0\u542f\u52a8 -label.vm.start=\u542f\u52a8 -label.vm.state=VM \u72b6\u6001 -label.vm.stop=\u505c\u6b62 label.VMFS.datastore=VMFS \u6570\u636e\u5b58\u50a8 label.vmfs=VMFS +label.vm.id=VM ID +label.vm.ip=VM IP \u5730\u5740 +label.vm.name=VM \u540d\u79f0 +label.vm.password=VM \u7684\u5bc6\u7801 +label.vm.reboot=\u91cd\u65b0\u542f\u52a8 label.VMs.in.tier=\u5c42\u4e2d\u7684 VM -label.vms=VM label.vmsnapshot.current=\u6700\u65b0\u7248\u672c label.vmsnapshot.memory=\u5feb\u7167\u5185\u5b58 label.vmsnapshot.parentname=\u7236\u540d\u79f0 label.vmsnapshot.type=\u7c7b\u578b label.vmsnapshot=VM \u5feb\u7167 +label.vm.start=\u542f\u52a8 +label.vm.state=VM \u72b6\u6001 +label.vm.stop=\u505c\u6b62 +label.vms=VM +label.vmware.datacenter.id=VMware \u6570\u636e\u4e2d\u5fc3 ID +label.vmware.datacenter.name=VMware \u6570\u636e\u4e2d\u5fc3\u540d\u79f0 +label.vmware.datacenter.vcenter=VMware \u6570\u636e\u4e2d\u5fc3 vCenter label.vmware.traffic.label=VMware \u6d41\u91cf\u6807\u7b7e +label.vnet.id=VLAN/VNI ID +label.vnet=VLAN/VNI +label.vnmc.devices=VNMC \u8bbe\u5907 +label.vnmc=VNMC +label.volatile=\u53ef\u53d8 label.volgroup=\u5377\u7ec4 +label.volume.details=\u5377\u8be6\u7ec6\u4fe1\u606f label.volume.limits=\u5377\u9650\u5236 +label.volume.migrated=\u5377\u5df2\u8fc1\u79fb label.volume.name=\u5377\u540d\u79f0 -label.volume=\u5377 label.volumes=\u5377 +label.volume=\u5377 +label.vpc.distributedvpcrouter=\u5206\u5e03\u5f0f VPC \u8def\u7531\u5668 label.vpc.id=VPC ID +label.VPC.limits=VPC \u9650\u5236 +label.vpc.offering.details=VPC \u65b9\u6848\u8be6\u7ec6\u4fe1\u606f +label.vpc.offering=VPC \u65b9\u6848 label.VPC.router.details=VPC \u8def\u7531\u5668\u8be6\u7ec6\u4fe1\u606f +label.vpc.supportsregionlevelvpc=\u652f\u6301\u5730\u7406\u533a\u57df\u7ea7 VPC +label.vpc.virtual.router=VPC \u865a\u62df\u8def\u7531\u5668 label.vpc=VPC label.VPN.connection=VPN \u8fde\u63a5 -label.VPN.customer.gateway=VPN \u5ba2\u6237\u7f51\u5173 label.vpn.customer.gateway=VPN \u5ba2\u6237\u7f51\u5173 +label.VPN.customer.gateway=VPN \u5ba2\u6237\u7f51\u5173 label.VPN.gateway=VPN \u7f51\u5173 label.vpn=VPN label.vsmctrlvlanid=\u63a7\u5236 VLAN ID label.vsmpktvlanid=\u6570\u636e\u5305 VLAN ID label.vsmstoragevlanid=\u5b58\u50a8 VLAN ID label.vsphere.managed=\u7531 vSphere \u7ba1\u7406 +label.vswitch.name=vSwitch \u540d\u79f0 +label.vSwitch.type=vSwitch \u7c7b\u578b +label.vxlan.id=VXLAN ID +label.vxlan.range=VXLAN \u8303\u56f4 +label.vxlan=VXLAN label.waiting=\u6b63\u5728\u7b49\u5f85 label.warn=\u8b66\u544a -label.warning=\u8b66\u544a +label.warn.upper=\u8b66\u544a label.wednesday=\u661f\u671f\u4e09 label.weekly=\u6bcf\u5468 label.welcome.cloud.console=\u6b22\u8fce\u4f7f\u7528\u7ba1\u7406\u63a7\u5236\u53f0 label.welcome=\u6b22\u8fce label.what.is.cloudstack=\u4ec0\u4e48\u662f CloudStack&\#8482? +label.xenserver.tools.version.61.plus=\u539f\u59cb XS \u7248\u672c\u4e3a 6.1+ +label.Xenserver.Tools.Version61plus=\u539f\u59cb XS \u7248\u672c\u4e3a 6.1+ label.xenserver.traffic.label=XenServer \u6d41\u91cf\u6807\u7b7e label.yes=\u662f +label.zone.dedicated=\u8d44\u6e90\u57df\u5df2\u4e13\u7528 label.zone.details=\u8d44\u6e90\u57df\u8be6\u7ec6\u4fe1\u606f label.zone.id=\u8d44\u6e90\u57df ID +label.zone.lower=\u8d44\u6e90\u57df label.zone.step.1.title=\u6b65\u9aa4 1\: \u9009\u62e9\u4e00\u4e2a\u7f51\u7edc label.zone.step.2.title=\u6b65\u9aa4 2\: \u6dfb\u52a0\u4e00\u4e2a\u8d44\u6e90\u57df label.zone.step.3.title=\u6b65\u9aa4 3\: \u6dfb\u52a0\u4e00\u4e2a\u63d0\u4f9b\u70b9 label.zone.step.4.title=\u6b65\u9aa4 4\: \u6dfb\u52a0\u4e00\u4e2a IP \u8303\u56f4 -label.zone.type=\u8d44\u6e90\u57df\u7c7b\u578b -label.zone.wide=\u6574\u4e2a\u8d44\u6e90\u57df -label.zone=\u8d44\u6e90\u57df label.zones=\u8d44\u6e90\u57df +label.zone.type=\u8d44\u6e90\u57df\u7c7b\u578b +label.zone=\u8d44\u6e90\u57df +label.zone.wide=\u6574\u4e2a\u8d44\u6e90\u57df label.zoneWizard.trafficType.guest=\u6765\u5bbe\: \u6700\u7ec8\u7528\u6237\u865a\u62df\u673a\u4e4b\u95f4\u7684\u6d41\u91cf label.zoneWizard.trafficType.management=\u7ba1\u7406\: CloudStack \u7684\u5185\u90e8\u8d44\u6e90(\u5305\u62ec\u4e0e\u7ba1\u7406\u670d\u52a1\u5668\u901a\u4fe1\u7684\u4efb\u4f55\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e3b\u673a\u548c CloudStack \u7cfb\u7edf VM)\u4e4b\u95f4\u7684\u6d41\u91cf label.zoneWizard.trafficType.public=\u516c\u7528\: \u4e91\u4e2d Internet \u4e0e\u865a\u62df\u673a\u4e4b\u95f4\u7684\u6d41\u91cf\u3002 label.zoneWizard.trafficType.storage=\u5b58\u50a8\: \u4e3b\u5b58\u50a8\u670d\u52a1\u5668\u4e0e\u4e8c\u7ea7\u5b58\u50a8\u670d\u52a1\u5668(\u4f8b\u5982 VM \u6a21\u677f\u4e0e\u5feb\u7167)\u4e4b\u95f4\u7684\u6d41\u91cf -label.ldap.group.name=LDAP \u7ec4 -label.password.reset.confirm=\u5bc6\u7801\u5df2\u91cd\u7f6e\u4e3a -label.provider=\u63d0\u4f9b\u7a0b\u5e8f -label.resetVM=\u91cd\u7f6e VM -label.openDaylight=OpenDaylight -label.assign.instance.another=\u5c06\u5b9e\u4f8b\u5206\u914d\u7ed9\u5176\u4ed6\u5e10\u6237 -label.network.addVM=\u4e3a VM \u6dfb\u52a0\u7f51\u7edc -label.set.default.NIC=\u8bbe\u7f6e\u9ed8\u8ba4 NIC -label.Xenserver.Tools.Version61plus=\u539f\u59cb XS \u7248\u672c\u4e3a 6.1+ -label.supportsstrechedl2subnet=\u652f\u6301\u6269\u5c55\u4e8c\u7ea7\u5b50\u7f51 -label.menu.vpc.offerings=VPC \u65b9\u6848 -label.vpc.offering=VPC \u65b9\u6848 -label.regionlevelvpc=\u5730\u7406\u533a\u57df\u7ea7 VPC -label.add.vpc.offering=\u6dfb\u52a0 VPC \u65b9\u6848 -label.distributedrouter=\u5206\u5e03\u5f0f\u8def\u7531\u5668 -label.vpc.offering.details=VPC \u65b9\u6848\u8be6\u7ec6\u4fe1\u606f -label.disable.vpc.offering=\u7981\u7528 VPC \u65b9\u6848 -label.enable.vpc.offering=\u542f\u7528 VPC \u65b9\u6848 -label.remove.vpc.offering=\u5220\u9664 VPC \u65b9\u6848 -label.vpc.distributedvpcrouter=\u5206\u5e03\u5f0f VPC \u8def\u7531\u5668 -label.vpc.supportsregionlevelvpc=\u652f\u6301\u5730\u7406\u533a\u57df\u7ea7 VPC -label.dynamically.scalable=\u53ef\u52a8\u6001\u6269\u5c55 -label.instance.scaled.up=\u5df2\u6269\u5c55\u5b9e\u4f8b -label.tag.key=\u6807\u8bb0\u5bc6\u94a5 -label.tag.value=\u6807\u8bb0\u503c -label.ipv6.address=IPv6 IP \u5730\u5740 -label.ipv6.gateway=IPv6 \u7f51\u5173 -label.ipv6.CIDR=IPv6 CIDR -label.VPC.limits=VPC \u9650\u5236 -label.edit.region=\u7f16\u8f91\u5730\u7406\u533a\u57df -label.gslb.domain.name=GSLB \u57df\u540d -label.add.gslb=\u6dfb\u52a0 GSLB -label.gslb.servicetype=\u670d\u52a1\u7c7b\u578b -label.gslb.details=GSLB \u8be6\u7ec6\u4fe1\u606f -label.gslb.delete=\u5220\u9664 GSLB -label.opendaylight.controller=OpenDaylight \u63a7\u5236\u5668 -label.opendaylight.controllers=OpenDaylight \u63a7\u5236\u5668 -label.portable.ip.ranges=\u53ef\u79fb\u690d IP \u8303\u56f4 -label.add.portable.ip.range=\u6dfb\u52a0\u53ef\u79fb\u690d IP \u8303\u56f4 -label.delete.portable.ip.range=\u5220\u9664\u53ef\u79fb\u690d IP \u8303\u56f4 -label.opendaylight.controllerdetail=OpenDaylight \u63a7\u5236\u5668\u8be6\u7ec6\u4fe1\u606f -label.portable.ip.range.details=\u53ef\u79fb\u690d IP \u8303\u56f4\u8be6\u7ec6\u4fe1\u606f -label.portable.ips=\u53ef\u79fb\u690d IP -label.gslb.assigned.lb=\u5df2\u5206\u914d\u8d1f\u8f7d\u5e73\u8861 -label.gslb.assigned.lb.more=\u5206\u914d\u66f4\u591a\u8d1f\u8f7d\u5e73\u8861 -label.gslb.lb.rule=\u8d1f\u8f7d\u5e73\u8861\u89c4\u5219 -label.gslb.lb.details=\u8d1f\u8f7d\u5e73\u8861\u8be6\u7ec6\u4fe1\u606f -label.gslb.lb.remove=\u4ece\u6b64 GSLB \u4e2d\u5220\u9664\u8d1f\u8f7d\u5e73\u8861 -label.enable.autoscale=\u542f\u7528\u81ea\u52a8\u7f29\u653e -label.disable.autoscale=\u7981\u7528\u81ea\u52a8\u7f29\u653e -label.min.instances=\u6700\u5c0f\u5b9e\u4f8b\u6570 -label.max.instances=\u6700\u5927\u5b9e\u4f8b\u6570 -label.add.OpenDaylight.device=\u6dfb\u52a0 OpenDaylight \u63a7\u5236\u5668 -label.show.advanced.settings=\u663e\u793a\u9ad8\u7ea7\u8bbe\u7f6e -label.delete.OpenDaylight.device=\u5220\u9664 OpenDaylight \u63a7\u5236\u5668 -label.polling.interval.sec=\u8f6e\u8be2\u65f6\u95f4\u95f4\u9694(\u79d2) -label.quiet.time.sec=\u5b89\u9759\u65f6\u95f4(\u79d2) -label.destroy.vm.graceperiod=\u9500\u6bc1 VM \u5bbd\u9650\u671f -label.SNMP.community=SNMP \u793e\u533a -label.SNMP.port=SNMP \u7aef\u53e3 -label.add.ucs.manager=\u6dfb\u52a0 UCS \u7ba1\u7406\u5668 -label.ovm.traffic.label=OVM \u6d41\u91cf\u6807\u7b7e -label.lxc.traffic.label=LXC \u6d41\u91cf\u6807\u7b7e -label.hyperv.traffic.label=HyperV \u6d41\u91cf\u6807\u7b7e -label.resource.name=\u8d44\u6e90\u540d\u79f0 -label.reource.id=\u8d44\u6e90 ID -label.vnmc.devices=VNMC \u8bbe\u5907 -label.add.vnmc.provider=\u6dfb\u52a0 VNMC \u63d0\u4f9b\u7a0b\u5e8f -label.enable.vnmc.provider=\u542f\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f -label.add.vnmc.device=\u6dfb\u52a0 VNMC \u8bbe\u5907 -label.ciscovnmc.resource.details=CiscoVNMC \u8d44\u6e90\u8be6\u7ec6\u4fe1\u606f -label.delete.ciscovnmc.resource=\u5220\u9664 CiscoVNMC \u8d44\u6e90 -label.enable.vnmc.device=\u542f\u7528 VNMC \u8bbe\u5907 -label.disbale.vnmc.device=\u7981\u7528 VNMC \u8bbe\u5907 -label.disable.vnmc.provider=\u7981\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f -label.services=\u670d\u52a1 -label.secondary.staging.store=\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 -label.release.account=\u4ece\u5e10\u6237\u4e2d\u91ca\u653e -label.release.account.lowercase=\u4ece\u5e10\u6237\u4e2d\u91ca\u653e -label.vlan.vni.ranges=VLAN/VNI \u8303\u56f4 -label.dedicated.vlan.vni.ranges=VLAN/VNI \u8303\u56f4\u5df2\u4e13\u7528 -label.dedicate.vlan.vni.range=\u5c06 VLAN/VNI \u8303\u56f4\u4e13\u7528 -label.vlan.vni.range=VLAN/VNI \u8303\u56f4 -label.vlan.range.details=VLAN \u8303\u56f4\u8be6\u7ec6\u4fe1\u606f -label.release.dedicated.vlan.range=\u91ca\u653e\u4e13\u7528 VLAN \u8303\u56f4 -label.broadcat.uri=\u5e7f\u64ad URI -label.ipv4.cidr=IPv4 CIDR -label.guest.network.details=\u6765\u5bbe\u7f51\u7edc\u8be6\u7ec6\u4fe1\u606f -label.ipv4.gateway=IPv4 \u7f51\u5173 -label.release.dedicated.vlan.range=\u91ca\u653e\u4e13\u7528 VLAN \u8303\u56f4 -label.vlan.ranges=VLAN \u8303\u56f4 -label.virtual.appliance.details=\u865a\u62df\u8bbe\u5907\u8be6\u7ec6\u4fe1\u606f -label.start.lb.vm=\u542f\u52a8 LB VM -label.stop.lb.vm=\u505c\u6b62 LB VM -label.migrate.lb.vm=\u8fc1\u79fb LB VM -label.vpc.virtual.router=VPC \u865a\u62df\u8def\u7531\u5668 -label.ovs=OVS -label.gslb.service=GSLB \u670d\u52a1 -label.gslb.service.public.ip=GSLB \u670d\u52a1\u516c\u7528 IP -label.gslb.service.private.ip=GSLB \u670d\u52a1\u4e13\u7528 IP -label.baremetal.dhcp.provider=\u88f8\u673a DHCP \u63d0\u4f9b\u7a0b\u5e8f -label.add.baremetal.dhcp.device=\u6dfb\u52a0\u88f8\u673a DHCP \u8bbe\u5907 -label.baremetal.pxe.provider=\u88f8\u673a PXE \u63d0\u4f9b\u7a0b\u5e8f -label.baremetal.pxe.device=\u6dfb\u52a0\u88f8\u673a PXE \u8bbe\u5907 -label.tftp.root.directory=Tftp \u6839\u76ee\u5f55 -label.add.vmware.datacenter=\u6dfb\u52a0 VMware \u6570\u636e\u4e2d\u5fc3 -label.remove.vmware.datacenter=\u5220\u9664 VMware \u6570\u636e\u4e2d\u5fc3 -label.dc.name=\u6570\u636e\u4e2d\u5fc3\u540d\u79f0 -label.vcenter=vCenter -label.dedicate.zone=\u5c06\u8d44\u6e90\u57df\u4e13\u7528 -label.zone.dedicated=\u8d44\u6e90\u57df\u5df2\u4e13\u7528 -label.release.dedicated.zone=\u91ca\u653e\u4e13\u7528\u8d44\u6e90\u57df -label.ipv6.dns1=IPv6 DNS1 -label.ipv6.dns2=IPv6 DNS2 -label.vmware.datacenter.name=VMware \u6570\u636e\u4e2d\u5fc3\u540d\u79f0 -label.vmware.datacenter.vcenter=VMware \u6570\u636e\u4e2d\u5fc3 vCenter -label.vmware.datacenter.id=VMware \u6570\u636e\u4e2d\u5fc3 ID -label.system.vm.details=\u7cfb\u7edf VM \u8be6\u7ec6\u4fe1\u606f -label.system.vm.scaled.up=\u5df2\u6269\u5c55\u7cfb\u7edf VM -label.console.proxy.vm=\u63a7\u5236\u53f0\u4ee3\u7406 VM -label.settings=\u8bbe\u7f6e -label.requires.upgrade=\u9700\u8981\u5347\u7ea7 -label.upgrade.router.newer.template=\u5347\u7ea7\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f -label.router.vm.scaled.up=\u5df2\u6269\u5c55\u8def\u7531\u5668 VM -label.total.virtual.routers=\u865a\u62df\u8def\u7531\u5668\u603b\u6570 -label.upgrade.required=\u9700\u8981\u5347\u7ea7 -label.virtual.routers.group.zone=\u865a\u62df\u8def\u7531\u5668(\u6309\u8d44\u6e90\u57df\u5206\u7ec4) -label.total.virtual.routers.upgrade=\u9700\u8981\u5347\u7ea7\u7684\u865a\u62df\u8def\u7531\u5668\u603b\u6570 -label.virtual.routers.group.pod=\u865a\u62df\u8def\u7531\u5668(\u6309\u63d0\u4f9b\u70b9\u5206\u7ec4) -label.virtual.routers.group.cluster=\u865a\u62df\u8def\u7531\u5668(\u6309\u7fa4\u96c6\u5206\u7ec4) -label.zone.lower=\u8d44\u6e90\u57df -label.virtual.routers.group.account=\u865a\u62df\u8def\u7531\u5668(\u6309\u5e10\u6237\u5206\u7ec4) -label.netscaler.details=NetScaler \u8be6\u7ec6\u4fe1\u606f -label.baremetal.dhcp.devices=\u88f8\u673a DHCP \u8bbe\u5907 -label.baremetal.pxe.devices=\u88f8\u673a PXE \u8bbe\u5907 -label.addes.new.f5=\u5df2\u6dfb\u52a0\u65b0 F5 -label.f5.details=F5 \u8be6\u7ec6\u4fe1\u606f -label.srx.details=SRX \u8be6\u7ec6\u4fe1\u606f -label.palo.alto.details=Palo Alto \u8be6\u7ec6\u4fe1\u606f -label.added.nicira.nvp.controller=\u5df2\u6dfb\u52a0\u65b0 Nicira NVP \u63a7\u5236\u5668 -label.nicira.nvp.details=Nicira NVP \u8be6\u7ec6\u4fe1\u606f -label.added.brocade.vcs.switch=\u5df2\u6dfb\u52a0\u65b0 Brocade Vcs \u4ea4\u6362\u673a -label.brocade.vcs.details=Brocade Vcs \u4ea4\u6362\u673a\u8be6\u7ec6\u4fe1\u606f -label.added.new.bigswitch.bcf.controller=\u5df2\u6dfb\u52a0\u65b0 BigSwitch BCF \u63a7\u5236\u5668 -label.bigswitch.bcf.details=BigSwitch BCF \u8be6\u7ec6\u4fe1\u606f -label.bigswitch.bcf.nat=\u5df2\u542f\u7528 BigSwitch BCF NAT -label.dedicate=\u4e13\u7528 -label.dedicate.pod=\u5c06\u63d0\u4f9b\u70b9\u4e13\u7528 -label.pod.dedicated=\u63d0\u4f9b\u70b9\u5df2\u4e13\u7528 -label.release.dedicated.pod=\u91ca\u653e\u4e13\u7528\u63d0\u4f9b\u70b9 -label.override.public.traffic=\u66ff\u4ee3\u516c\u5171\u6d41\u91cf -label.public.traffic.vswitch.type=\u516c\u5171\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u7c7b\u578b -label.public.traffic.vswitch.name=\u516c\u5171\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u540d\u79f0 -label.override.guest.traffic=\u66ff\u4ee3\u6765\u5bbe\u6d41\u91cf -label.guest.traffic.vswitch.type=\u6765\u5bbe\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u7c7b\u578b -label.guest.traffic.vswitch.name=\u6765\u5bbe\u6d41\u91cf\u865a\u62df\u4ea4\u6362\u673a\u540d\u79f0 -label.cisco.nexus1000v.ip.address=Nexus 1000v IP \u5730\u5740 -label.cisco.nexus1000v.username=Nexus 1000v \u7528\u6237\u540d -label.cisco.nexus1000v.password=Nexus 1000v \u5bc6\u7801 -label.dedicate.cluster=\u5c06\u7fa4\u96c6\u4e13\u7528 -label.release.dedicated.cluster=\u91ca\u653e\u4e13\u7528\u7fa4\u96c6 -label.dedicate.host=\u5c06\u4e3b\u673a\u4e13\u7528 -label.release.dedicated.host=\u91ca\u653e\u4e13\u7528\u4e3b\u673a -label.number.of.cpu.sockets=CPU \u63d2\u69fd\u6570 -label.delete.ucs.manager=\u5220\u9664 UCS Manager -label.blades=\u5200\u7247\u5f0f\u670d\u52a1\u5668 -label.chassis=\u673a\u7bb1 -label.blade.id=\u5200\u7247\u5f0f\u670d\u52a1\u5668 ID -label.associated.profile=\u5df2\u5173\u8054\u914d\u7f6e\u6587\u4ef6 -label.refresh.blades=\u5237\u65b0\u5200\u7247\u5f0f\u670d\u52a1\u5668 -label.instanciate.template.associate.profile.blade=\u5c06\u6a21\u677f\u5b9e\u4f8b\u5316\u5e76\u5c06\u914d\u7f6e\u6587\u4ef6\u4e0e\u5200\u7247\u5f0f\u670d\u52a1\u5668\u5173\u8054 -label.select.template=\u9009\u62e9\u6a21\u677f -label.profile=\u914d\u7f6e\u6587\u4ef6 -label.delete.profile=\u5220\u9664\u914d\u7f6e\u6587\u4ef6 -label.disassociate.profile.blade=\u53d6\u6d88\u5c06\u914d\u7f6e\u6587\u4ef6\u4e0e\u5200\u7247\u5f0f\u670d\u52a1\u5668\u5173\u8054 -label.secondary.storage.details=\u4e8c\u7ea7\u5b58\u50a8\u8be6\u7ec6\u4fe1\u606f -label.secondary.staging.store.details=\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8\u8be6\u7ec6\u4fe1\u606f -label.add.nfs.secondary.staging.store=\u6dfb\u52a0 NFS \u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 -label.delete.secondary.staging.store=\u5220\u9664\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 -label.ipv4.start.ip=IPv4 \u8d77\u59cb IP -label.ipv4.end.ip=IPv4 \u7ed3\u675f IP -label.ipv6.start.ip=IPv6 \u8d77\u59cb IP -label.ipv6.end.ip=IPv6 \u7ed3\u675f IP -label.vm.password=VM \u7684\u5bc6\u7801 -label.group.by.zone=\u6309\u8d44\u6e90\u57df\u5206\u7ec4 -label.group.by.pod=\u6309\u63d0\u4f9b\u70b9\u5206\u7ec4 -label.group.by.cluster=\u6309\u7fa4\u96c6\u5206\u7ec4 -label.group.by.account=\u6309\u5e10\u6237\u5206\u7ec4 -label.no.grouping=(\u672a\u5206\u7ec4) -label.create.nfs.secondary.staging.storage=\u521b\u5efa NFS \u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8 -label.username.lower=\u7528\u6237\u540d -label.password.lower=\u5bc6\u7801 -label.email.lower=\u7535\u5b50\u90ae\u4ef6 -label.firstname.lower=\u540d\u5b57 -label.lastname.lower=\u59d3\u6c0f -label.domain.lower=\u57df -label.account.lower=\u5e10\u6237 -label.type.lower=\u7c7b\u578b -label.rule.number=\u89c4\u5219\u7f16\u53f7 -label.action=\u64cd\u4f5c -label.name.lower=\u540d\u79f0 -label.ucs=UCS -label.change.affinity=\u66f4\u6539\u5173\u8054\u6027 -label.persistent=\u6c38\u4e45 -label.broadcasturi=\u5e7f\u64ad URI -label.network.cidr=\u7f51\u7edc CIDR -label.reserved.ip.range=\u9884\u7559 IP \u8303\u56f4 -label.autoscale=\u81ea\u52a8\u6269\u5c55 -label.health.check=\u8fd0\u884c\u72b6\u51b5\u68c0\u67e5 -label.public.load.balancer.provider=\u516c\u7528\u8d1f\u8f7d\u5e73\u8861\u5668\u63d0\u4f9b\u7a0b\u5e8f -label.add.isolated.network=\u6dfb\u52a0\u9694\u79bb\u7f51\u7edc -label.add.isolated.guest.network=\u6dfb\u52a0\u9694\u79bb\u7684\u6765\u5bbe\u7f51\u7edc -label.vlan.only=VLAN -label.secondary.isolated.vlan.id=\u4e8c\u7ea7\u9694\u79bb VLAN ID -label.ipv4.netmask=IPv4 \u7f51\u7edc\u63a9\u7801 -label.custom=\u81ea\u5b9a\u4e49 -label.disable.network.offering=\u7981\u7528\u7f51\u7edc\u65b9\u6848 -label.enable.network.offering=\u542f\u7528\u7f51\u7edc\u65b9\u6848 -label.remove.network.offering=\u5220\u9664\u7f51\u7edc\u65b9\u6848 -label.system.offering.for.router=\u8def\u7531\u5668\u7684\u7cfb\u7edf\u65b9\u6848 -label.mode=\u6a21\u5f0f -label.associate.public.ip=\u5173\u8054\u516c\u7528 IP -label.acl=ACL -label.user.data=\u7528\u6237\u6570\u636e -label.virtual.networking=\u865a\u62df\u7f51\u7edc\u8fde\u63a5 -label.allow=\u5141\u8bb8 -label.deny=\u62d2\u7edd -label.default.egress.policy=\u9ed8\u8ba4\u51fa\u53e3\u89c4\u5219 -label.xenserver.tools.version.61.plus=\u539f\u59cb XS \u7248\u672c\u4e3a 6.1+ -label.gpu=GPU -label.vgpu.type=vGPU \u7c7b\u578b -label.vgpu.video.ram=\u89c6\u9891 RAM -label.vgpu.max.resolution=\u6700\u5927\u5206\u8fa8\u7387 -label.vgpu.max.vgpu.per.gpu=\u6bcf\u4e2a GPU \u7684 vGPU \u6570 -label.vgpu.remaining.capacity=\u5269\u4f59\u5bb9\u91cf -label.routing.host=\u6b63\u5728\u8def\u7531\u4e3b\u673a -label.usage.server=\u4f7f\u7528\u670d\u52a1\u5668 -label.user.vm=\u7528\u6237 VM -label.resource.limit.exceeded=\u5df2\u8d85\u51fa\u8d44\u6e90\u9650\u5236 -label.direct.attached.public.ip=\u76f4\u8fde\u516c\u7528 IP -label.usage.sanity.result=\u4f7f\u7528\u5065\u5168\u6027\u68c0\u67e5\u7ed3\u679c -label.select.region=\u9009\u62e9\u5730\u7406\u533a\u57df -label.info.upper=\u4fe1\u606f -label.warn.upper=\u8b66\u544a -label.error.upper=\u9519\u8bef -label.event.deleted=\u4e8b\u4ef6\u5df2\u5220\u9664 -label.add.ciscoASA1000v=\u6dfb\u52a0 CiscoASA1000v \u8d44\u6e90 -label.delete.ciscoASA1000v=\u5220\u9664 CiscoASA1000v -label.inside.port.profile=\u5185\u90e8\u7aef\u53e3\u914d\u7f6e\u6587\u4ef6 -label.archive=\u5b58\u6863 -label.event.archived=\u4e8b\u4ef6\u5df2\u5b58\u6863 -label.alert.details=\u8b66\u62a5\u8be6\u7ec6\u4fe1\u606f -label.alert.deleted=\u8b66\u62a5\u5df2\u5220\u9664 -label.alert.archived=\u8b66\u62a5\u5df2\u5b58\u6863 -label.volume.details=\u5377\u8be6\u7ec6\u4fe1\u606f -label.volume.migrated=\u5377\u5df2\u8fc1\u79fb -label.storage.pool=\u5b58\u50a8\u6c60 -label.enable.host=\u542f\u7528\u4e3b\u673a -label.disable.host=\u7981\u7528\u4e3b\u673a -label.copying.iso=\u6b63\u5728\u590d\u5236 ISO -label.add.internal.lb=\u6dfb\u52a0\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668 -label.internal.lb.details=\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668\u8be6\u7ec6\u4fe1\u606f -label.delete.internal.lb=\u5220\u9664\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668 -label.remove.vm.load.balancer=\u4ece\u8d1f\u8f7d\u5e73\u8861\u5668\u4e2d\u5220\u9664 VM -label.add.acl.list=\u6dfb\u52a0 ACL \u5217\u8868 -label.add.list.name=ACL \u5217\u8868\u540d\u79f0 -label.add.network.acl.list=\u6dfb\u52a0\u7f51\u7edc ACL \u5217\u8868 -label.delete.acl.list=\u5220\u9664 ACL \u5217\u8868 -label.acl.replaced=ACL \u5df2\u66ff\u6362 -label.ipv4.dns1=IPv4 DNS1 -label.ipv4.dns2=IPv4 DNS2 -label.protocol.number=\u534f\u8bae\u7f16\u53f7 -label.edit.acl.rule=\u7f16\u8f91 ACL \u89c4\u5219 -label.source.ip.address=\u6e90 IP \u5730\u5740 -label.source.port=\u6e90\u7aef\u53e3 -label.instance.port=\u5b9e\u4f8b\u7aef\u53e3 -label.assigned.vms=\u5df2\u5206\u914d\u7684 VM -label.replace.acl=\u66ff\u6362 ACL -label.source.nat.supported=\u652f\u6301 SourceNAT -label.acl.name=ACL \u540d\u79f0 -label.acl.id=ACL ID -label.passive=\u88ab\u52a8 -label.replace.acl.list=\u66ff\u6362 ACL \u5217\u8868 -label.vswitch.name=vSwitch \u540d\u79f0 -label.vSwitch.type=vSwitch \u7c7b\u578b -label.ping.path=Ping \u8def\u5f84 -label.response.timeout.in.sec=\u54cd\u5e94\u8d85\u65f6(\u79d2) -label.health.check.interval.in.sec=\u8fd0\u884c\u72b6\u51b5\u68c0\u67e5\u65f6\u95f4\u95f4\u9694(\u79d2) -label.healthy.threshold=\u6b63\u5e38\u9608\u503c -label.unhealthy.threshold=\u4e0d\u6b63\u5e38\u9608\u503c -label.other=\u5176\u4ed6 -label.vm.id=VM ID -label.vnmc=VNMC -label.scale.up.policy=\u6269\u5c55\u7b56\u7565 -label.counter=\u8ba1\u6570\u5668 -label.operator=\u8fd0\u7b97\u7b26 -label.threshold=\u9608\u503c -label.load.balancer.type=\u8d1f\u8f7d\u5e73\u8861\u5668\u7c7b\u578b -label.vgpu=VGPU -label.sticky.name=\u7c98\u6027\u540d\u79f0 -label.stickiness.method=\u7c98\u6027\u65b9\u6cd5 -label.gslb=GSLB -label.portable.ip=\u53ef\u79fb\u690d IP -label.internallbvm=InternalLbVm -label.agent.state=\u4ee3\u7406\u72b6\u6001 -label.duration.in.sec=\u6301\u7eed\u65f6\u95f4(\u79d2) managed.state=\u6258\u7ba1\u72b6\u6001 -message.acquire.new.ip.vpc=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64 VPC \u83b7\u53d6\u4e00\u4e2a\u65b0 IP\u3002 +message.acquire.ip.nic=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u83b7\u53d6\u6b64 NIC \u7684\u65b0\u4e8c\u7ea7 IP\u3002
\u6ce8\u610f\: \u60a8\u9700\u8981\u5728\u865a\u62df\u673a\u5185\u90e8\u624b\u52a8\u914d\u7f6e\u65b0\u83b7\u53d6\u7684\u4e8c\u7ea7 IP\u3002 message.acquire.new.ip=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64\u7f51\u7edc\u83b7\u53d6\u4e00\u4e2a\u65b0 IP\u3002 +message.acquire.new.ip.vpc=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64 VPC \u83b7\u53d6\u4e00\u4e2a\u65b0 IP\u3002 message.acquire.public.ip=\u8bf7\u9009\u62e9\u4e00\u4e2a\u8981\u4ece\u4e2d\u83b7\u53d6\u65b0 IP \u7684\u8d44\u6e90\u57df\u3002 message.action.cancel.maintenance.mode=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u53d6\u6d88\u6b64\u7ef4\u62a4\u6a21\u5f0f\u3002 message.action.cancel.maintenance=\u5df2\u6210\u529f\u53d6\u6d88\u7ef4\u62a4\u60a8\u7684\u4e3b\u673a\u3002\u6b64\u8fc7\u7a0b\u53ef\u80fd\u9700\u8981\u957f\u8fbe\u51e0\u5206\u949f\u65f6\u95f4\u3002 @@ -1633,6 +1585,7 @@ message.action.delete.ISO.for.all.zones=\u6b64 ISO \u7531\u6240\u6709\u8d44\u6e9 message.action.delete.ISO=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 ISO\u3002 message.action.delete.network=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64\u7f51\u7edc\u3002 message.action.delete.nexusVswitch=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 Nexus 1000v +message.action.delete.nic=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u79fb\u9664\u6b64 NIC\uff0c\u6b64\u64cd\u4f5c\u8fd8\u5c06\u4ece VM \u4e2d\u79fb\u9664\u5173\u8054\u7684\u7f51\u7edc\u3002 message.action.delete.physical.network=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64\u7269\u7406\u7f51\u7edc message.action.delete.pod=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64\u63d0\u4f9b\u70b9\u3002 message.action.delete.primary.storage=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64\u4e3b\u5b58\u50a8\u3002 @@ -1653,6 +1606,7 @@ message.action.disable.physical.network=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u89 message.action.disable.pod=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u6b64\u63d0\u4f9b\u70b9\u3002 message.action.disable.static.NAT=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u9759\u6001 NAT\u3002 message.action.disable.zone=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u6b64\u8d44\u6e90\u57df\u3002 +message.action.downloading.template=\u6b63\u5728\u4e0b\u8f7d\u6a21\u677f\u3002 message.action.download.iso=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e0b\u8f7d\u6b64 ISO\u3002 message.action.download.template=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e0b\u8f7d\u6b64\u6a21\u677f\u3002 message.action.enable.cluster=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u6b64\u7fa4\u96c6\u3002 @@ -1675,6 +1629,7 @@ message.action.remove.host=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u966 message.action.reset.password.off=\u60a8\u7684\u5b9e\u4f8b\u5f53\u524d\u4e0d\u652f\u6301\u6b64\u529f\u80fd\u3002 message.action.reset.password.warning=\u5fc5\u987b\u5148\u505c\u6b62\u60a8\u7684\u5b9e\u4f8b\uff0c\u7136\u540e\u518d\u5c1d\u8bd5\u66f4\u6539\u5176\u5f53\u524d\u7684\u5bc6\u7801\u3002 message.action.restore.instance=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u8fd8\u539f\u6b64\u5b9e\u4f8b\u3002 +message.action.revert.snapshot=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\u62e5\u6709\u7684\u5377\u8fd8\u539f\u4e3a\u6b64\u5feb\u7167\u3002 message.action.start.instance=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u52a8\u6b64\u5b9e\u4f8b\u3002 message.action.start.router=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u52a8\u6b64\u8def\u7531\u5668\u3002 message.action.start.systemvm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u52a8\u6b64\u7cfb\u7edf VM\u3002 @@ -1682,23 +1637,26 @@ message.action.stop.instance=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u505c\u6 message.action.stop.router=\u6b64\u865a\u62df\u8def\u7531\u5668\u63d0\u4f9b\u7684\u6240\u6709\u670d\u52a1\u90fd\u5c06\u4e2d\u65ad\u3002\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u505c\u6b62\u6b64\u8def\u7531\u5668\u3002 message.action.stop.systemvm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u505c\u6b62\u6b64\u7cfb\u7edf VM\u3002 message.action.take.snapshot=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u521b\u5efa\u6b64\u5377\u7684\u5feb\u7167\u3002 -message.action.revert.snapshot=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\u62e5\u6709\u7684\u5377\u8fd8\u539f\u4e3a\u6b64\u5feb\u7167\u3002 message.action.unmanage.cluster=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u53d6\u6d88\u6258\u7ba1\u6b64\u7fa4\u96c6\u3002 message.action.vmsnapshot.delete=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 VM \u5feb\u7167\u3002 message.action.vmsnapshot.revert=\u8fd8\u539f VM \u5feb\u7167 message.activate.project=\u662f\u5426\u786e\u5b9e\u8981\u6fc0\u6d3b\u6b64\u9879\u76ee? -message.add.cluster.zone=\u5411\u8d44\u6e90\u57df \u4e2d\u6dfb\u52a0\u4e00\u4e2a\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u6258\u7ba1\u7684\u7fa4\u96c6 message.add.cluster=\u5411\u8d44\u6e90\u57df \u3001\u63d0\u4f9b\u70b9 \u4e2d\u6dfb\u52a0\u4e00\u4e2a\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u6258\u7ba1\u7684\u7fa4\u96c6 +message.add.cluster.zone=\u5411\u8d44\u6e90\u57df \u4e2d\u6dfb\u52a0\u4e00\u4e2a\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u6258\u7ba1\u7684\u7fa4\u96c6 message.add.disk.offering=\u8bf7\u6307\u5b9a\u4ee5\u4e0b\u53c2\u6570\u4ee5\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u78c1\u76d8\u65b9\u6848 message.add.domain=\u8bf7\u6307\u5b9a\u8981\u5728\u6b64\u57df\u4e0b\u521b\u5efa\u7684\u5b50\u57df message.add.firewall=\u5411\u8d44\u6e90\u57df\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u9632\u706b\u5899 message.add.guest.network=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u6dfb\u52a0\u4e00\u4e2a\u6765\u5bbe\u7f51\u7edc message.add.host=\u8bf7\u6307\u5b9a\u4ee5\u4e0b\u53c2\u6570\u4ee5\u6dfb\u52a0\u4e00\u53f0\u65b0\u4e3b\u673a +message.adding.host=\u6b63\u5728\u6dfb\u52a0\u4e3b\u673a +message.adding.Netscaler.device=\u6b63\u5728\u6dfb\u52a0 NetScaler \u8bbe\u5907 +message.adding.Netscaler.provider=\u6b63\u5728\u6dfb\u52a0 NetScaler \u63d0\u4f9b\u7a0b\u5e8f message.add.ip.range.direct.network=\u5411\u8d44\u6e90\u57df \u4e2d\u7684\u76f4\u63a5\u7f51\u7edc \u6dfb\u52a0\u4e00\u4e2a IP \u8303\u56f4 message.add.ip.range.to.pod=

\u5411\u63d0\u4f9b\u70b9\u6dfb\u52a0\u4e00\u4e2a IP \u8303\u56f4\:

message.add.ip.range=\u5411\u8d44\u6e90\u57df\u4e2d\u7684\u516c\u7528\u7f51\u7edc\u6dfb\u52a0\u4e00\u4e2a IP \u8303\u56f4 -message.add.load.balancer.under.ip=\u5df2\u5728\u4ee5\u4e0b IP \u4e0b\u6dfb\u52a0\u8d1f\u8f7d\u5e73\u8861\u5668\u89c4\u5219\: +message.additional.networks.desc=\u8bf7\u9009\u62e9\u865a\u62df\u673a\u8981\u8fde\u63a5\u5230\u7684\u5176\u4ed6\u7f51\u7edc\u3002 message.add.load.balancer=\u5411\u8d44\u6e90\u57df\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u8d1f\u8f7d\u5e73\u8861\u5668 +message.add.load.balancer.under.ip=\u5df2\u5728\u4ee5\u4e0b IP \u4e0b\u6dfb\u52a0\u8d1f\u8f7d\u5e73\u8861\u5668\u89c4\u5219\: message.add.network=\u4e3a\u8d44\u6e90\u57df \u6dfb\u52a0\u4e00\u4e2a\u65b0\u7f51\u7edc message.add.new.gateway.to.vpc=\u8bf7\u6307\u5b9a\u5c06\u65b0\u7f51\u5173\u6dfb\u52a0\u5230\u6b64 VPC \u6240\u9700\u7684\u4fe1\u606f\u3002 message.add.pod.during.zone.creation=\u6bcf\u4e2a\u8d44\u6e90\u57df\u4e2d\u5fc5\u987b\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u63d0\u4f9b\u70b9\uff0c\u73b0\u5728\u6211\u4eec\u5c06\u6dfb\u52a0\u7b2c\u4e00\u4e2a\u63d0\u4f9b\u70b9\u3002\u63d0\u4f9b\u70b9\u4e2d\u5305\u542b\u4e3b\u673a\u548c\u4e3b\u5b58\u50a8\u670d\u52a1\u5668\uff0c\u60a8\u5c06\u5728\u968f\u540e\u7684\u67d0\u4e2a\u6b65\u9aa4\u4e2d\u6dfb\u52a0\u8fd9\u4e9b\u4e3b\u673a\u548c\u670d\u52a1\u5668\u3002\u9996\u5148\uff0c\u8bf7\u4e3a CloudStack \u7684\u5185\u90e8\u7ba1\u7406\u6d41\u91cf\u914d\u7f6e\u4e00\u4e2a\u9884\u7559 IP \u5730\u5740\u8303\u56f4\u3002\u9884\u7559\u7684 IP \u8303\u56f4\u5bf9\u4e91\u4e2d\u7684\u6bcf\u4e2a\u8d44\u6e90\u57df\u6765\u8bf4\u5fc5\u987b\u552f\u4e00\u3002 @@ -1712,10 +1670,7 @@ message.add.system.service.offering=\u8bf7\u586b\u5199\u4ee5\u4e0b\u6570\u636e\u message.add.template=\u8bf7\u8f93\u5165\u4ee5\u4e0b\u6570\u636e\u4ee5\u521b\u5efa\u65b0\u6a21\u677f message.add.volume=\u8bf7\u586b\u5199\u4ee5\u4e0b\u6570\u636e\u4ee5\u6dfb\u52a0\u4e00\u4e2a\u65b0\u5377\u3002 message.add.VPN.gateway=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u6dfb\u52a0 VPN \u7f51\u5173 -message.adding.host=\u6b63\u5728\u6dfb\u52a0\u4e3b\u673a -message.adding.Netscaler.device=\u6b63\u5728\u6dfb\u52a0 NetScaler \u8bbe\u5907 -message.adding.Netscaler.provider=\u6b63\u5728\u6dfb\u52a0 NetScaler \u63d0\u4f9b\u7a0b\u5e8f -message.additional.networks.desc=\u8bf7\u9009\u62e9\u865a\u62df\u673a\u8981\u8fde\u63a5\u5230\u7684\u5176\u4ed6\u7f51\u7edc\u3002 +message.admin.guide.read=\u5bf9\u4e8e\u57fa\u4e8e VMware \u7684 VM\uff0c\u8bf7\u5148\u9605\u8bfb\u7ba1\u7406\u6307\u5357\u4e2d\u7684\u52a8\u6001\u6269\u5c55\u90e8\u5206\uff0c\u7136\u540e\u518d\u8fdb\u884c\u6269\u5c55\u3002\u662f\u5426\u8981\u7ee7\u7eed?, message.advanced.mode.desc=\u5982\u679c\u8981\u542f\u7528 VLAN \u652f\u6301\uff0c\u8bf7\u9009\u62e9\u6b64\u7f51\u7edc\u6a21\u5f0f\u3002\u6b64\u7f51\u7edc\u6a21\u5f0f\u5728\u5141\u8bb8\u7ba1\u7406\u5458\u63d0\u4f9b\u9632\u706b\u5899\u3001VPN \u6216\u8d1f\u8f7d\u5e73\u8861\u5668\u652f\u6301\u7b49\u81ea\u5b9a\u4e49\u7f51\u7edc\u65b9\u6848\u4ee5\u53ca\u542f\u7528\u76f4\u63a5\u7f51\u7edc\u8fde\u63a5\u4e0e\u865a\u62df\u7f51\u7edc\u8fde\u63a5\u7b49\u65b9\u9762\u63d0\u4f9b\u4e86\u6700\u5927\u7684\u7075\u6d3b\u6027\u3002 message.advanced.security.group=\u5982\u679c\u8981\u4f7f\u7528\u5b89\u5168\u7ec4\u63d0\u4f9b\u6765\u5bbe VM \u9694\u79bb\uff0c\u8bf7\u9009\u62e9\u6b64\u6a21\u5f0f\u3002 message.advanced.virtual=\u5982\u679c\u8981\u4f7f\u7528\u6574\u4e2a\u8d44\u6e90\u57df\u7684 VLAN \u63d0\u4f9b\u6765\u5bbe VM \u9694\u79bb\uff0c\u8bf7\u9009\u62e9\u6b64\u6a21\u5f0f\u3002 @@ -1729,57 +1684,94 @@ message.attach.volume=\u8bf7\u586b\u5199\u4ee5\u4e0b\u6570\u636e\u4ee5\u9644\u52 message.basic.mode.desc=\u5982\u679c\u60a8*\u4e0d*\u5e0c\u671b\u542f\u7528\u4efb\u4f55 VLAN \u652f\u6301\uff0c\u8bf7\u9009\u62e9\u6b64\u7f51\u7edc\u6a21\u5f0f\u3002\u5c06\u76f4\u63a5\u4ece\u6b64\u7f51\u7edc\u4e2d\u4e3a\u5728\u6b64\u7f51\u7edc\u6a21\u5f0f\u4e0b\u521b\u5efa\u7684\u6240\u6709\u865a\u62df\u673a\u5b9e\u4f8b\u5206\u914d\u4e00\u4e2a IP\uff0c\u5e76\u4f7f\u7528\u5b89\u5168\u7ec4\u63d0\u4f9b\u5b89\u5168\u6027\u548c\u9694\u79bb\u3002 message.change.offering.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u66f4\u6539\u6b64\u865a\u62df\u5b9e\u4f8b\u7684\u670d\u52a1\u65b9\u6848\u3002 message.change.password=\u8bf7\u66f4\u6539\u60a8\u7684\u5bc6\u7801\u3002 +message.cluster.dedicated=\u7fa4\u96c6\u5df2\u4e13\u7528 +message.cluster.dedication.released=\u5df2\u91ca\u653e\u4e13\u7528\u7fa4\u96c6 message.configure.all.traffic.types=\u60a8\u6709\u591a\u4e2a\u7269\u7406\u7f51\u7edc\uff0c\u8bf7\u5355\u51fb\u201c\u7f16\u8f91\u201d\u6309\u94ae\u4e3a\u6bcf\u79cd\u6d41\u91cf\u7c7b\u578b\u914d\u7f6e\u6807\u7b7e\u3002 +message.configure.ldap=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u914d\u7f6e LDAP\u3002 message.configuring.guest.traffic=\u6b63\u5728\u914d\u7f6e\u6765\u5bbe\u6d41\u91cf message.configuring.physical.networks=\u6b63\u5728\u914d\u7f6e\u7269\u7406\u7f51\u7edc message.configuring.public.traffic=\u6b63\u5728\u914d\u7f6e\u516c\u5171\u6d41\u91cf message.configuring.storage.traffic=\u6b63\u5728\u914d\u7f6e\u5b58\u50a8\u6d41\u91cf message.confirm.action.force.reconnect=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5f3a\u5236\u91cd\u65b0\u8fde\u63a5\u6b64\u4e3b\u673a\u3002 -message.confirm.delete.F5=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 F5 -message.confirm.delete.BigSwitchBcf=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 BigSwitch BCF \u63a7\u5236\u5668 -message.confirm.delete.BrocadeVcs=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Brocade Vcs \u4ea4\u6362\u673a -message.confirm.delete.NetScaler=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 NetScaler -message.confirm.delete.NuageVsp=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Nuage \u865a\u62df\u670d\u52a1\u76ee\u5f55 -message.confirm.delete.SRX=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 SRX -message.confirm.delete.PA=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Palo Alto -message.confirm.destroy.router=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u9500\u6bc1\u6b64\u8def\u7531\u5668 -message.confirm.disable.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u6b64\u63d0\u4f9b\u7a0b\u5e8f -message.confirm.enable.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u6b64\u63d0\u4f9b\u7a0b\u5e8f -message.confirm.join.project=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u52a0\u5165\u6b64\u9879\u76ee\u3002 -message.confirm.remove.IP.range=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 IP \u8303\u56f4\u3002 -message.confirm.shutdown.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5173\u95ed\u6b64\u63d0\u4f9b\u7a0b\u5e8f -message.confirm.current.guest.CIDR.unchanged=\u662f\u5426\u8981\u4f7f\u5f53\u524d\u6765\u5bbe\u7f51\u7edc CIDR \u4fdd\u6301\u4e0d\u53d8? -message.confirm.delete.ciscoASA1000v=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 CiscoASA1000v -message.confirm.remove.selected.events=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u9009\u5b9a\u4e8b\u4ef6 -message.confirm.archive.selected.events=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u9009\u5b9a\u4e8b\u4ef6 -message.confirm.remove.event=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u4e8b\u4ef6? -message.confirm.archive.event=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u6b64\u4e8b\u4ef6\u3002 -message.confirm.remove.selected.alerts=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u9009\u5b9a\u8b66\u62a5 -message.confirm.archive.selected.alerts=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u9009\u5b9a\u8b66\u62a5 -message.confirm.delete.alert=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u8b66\u62a5? +message.confirm.add.vnmc.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u6dfb\u52a0 VNMC \u63d0\u4f9b\u7a0b\u5e8f\u3002 message.confirm.archive.alert=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u6b64\u8b66\u62a5\u3002 -message.confirm.migrate.volume=\u662f\u5426\u8981\u8fc1\u79fb\u6b64\u5377? +message.confirm.archive.event=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u6b64\u4e8b\u4ef6\u3002 +message.confirm.archive.selected.alerts=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u9009\u5b9a\u8b66\u62a5 +message.confirm.archive.selected.events=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5b58\u6863\u9009\u5b9a\u4e8b\u4ef6 message.confirm.attach.disk=\u662f\u5426\u786e\u5b9e\u8981\u9644\u52a0\u78c1\u76d8? message.confirm.create.volume=\u662f\u5426\u786e\u5b9e\u8981\u521b\u5efa\u5377? -message.confirm.enable.host=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u4e3b\u673a -message.confirm.disable.host=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u4e3b\u673a -message.confirm.delete.internal.lb=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668 -message.confirm.remove.load.balancer=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4ece\u8d1f\u8f7d\u5e73\u8861\u5668\u4e2d\u5220\u9664 VM +message.confirm.current.guest.CIDR.unchanged=\u662f\u5426\u8981\u4f7f\u5f53\u524d\u6765\u5bbe\u7f51\u7edc CIDR \u4fdd\u6301\u4e0d\u53d8? +message.confirm.dedicate.cluster.domain.account=\u662f\u5426\u786e\u5b9e\u8981\u5c06\u6b64\u7fa4\u96c6\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? +message.confirm.dedicate.host.domain.account=\u662f\u5426\u786e\u5b9e\u8981\u5c06\u6b64\u4e3b\u673a\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? +message.confirm.dedicate.pod.domain.account=\u662f\u5426\u786e\u5b9e\u8981\u5c06\u6b64\u63d0\u4f9b\u70b9\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? +message.confirm.dedicate.zone=\u662f\u5426\u8981\u5c06\u6b64\u8d44\u6e90\u57df\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? message.confirm.delete.acl.list=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64 ACL \u5217\u8868? +message.confirm.delete.alert=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u8b66\u62a5? +message.confirm.delete.BrocadeVcs=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Brocade Vcs \u4ea4\u6362\u673a +message.confirm.delete.ciscoASA1000v=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 CiscoASA1000v +message.confirm.delete.ciscovnmc.resource=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Cisco VNMC \u8d44\u6e90 +message.confirm.delete.F5=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 F5 +message.confirm.delete.internal.lb=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u5185\u90e8\u8d1f\u8f7d\u5e73\u8861\u5668 +message.confirm.delete.NetScaler=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 NetScaler +message.confirm.delete.NuageVsp=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Nuage \u865a\u62df\u670d\u52a1\u76ee\u5f55 +message.confirm.delete.PA=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Palo Alto +message.confirm.delete.secondary.staging.store=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8\u3002 +message.confirm.delete.SRX=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 SRX +message.confirm.delete.ucs.manager=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 UCS Manager +message.confirm.destroy.router=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u9500\u6bc1\u6b64\u8def\u7531\u5668 +message.confirm.disable.host=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u4e3b\u673a +message.confirm.disable.network.offering=\u662f\u5426\u786e\u5b9e\u8981\u7981\u7528\u6b64\u7f51\u7edc\u65b9\u6848? +message.confirm.disable.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u6b64\u63d0\u4f9b\u7a0b\u5e8f +message.confirm.disable.vnmc.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f\u3002 +message.confirm.disable.vpc.offering=\u662f\u5426\u786e\u5b9e\u8981\u7981\u7528\u6b64 VPC \u65b9\u6848? +message.confirm.enable.host=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u4e3b\u673a +message.confirm.enable.network.offering=\u662f\u5426\u786e\u5b9e\u8981\u542f\u7528\u6b64\u7f51\u7edc\u65b9\u6848? +message.confirm.enable.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u6b64\u63d0\u4f9b\u7a0b\u5e8f +message.confirm.enable.vnmc.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f\u3002 +message.confirm.enable.vpc.offering=\u662f\u5426\u786e\u5b9e\u8981\u542f\u7528\u6b64 VPC \u65b9\u6848? +message.confirm.join.project=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u52a0\u5165\u6b64\u9879\u76ee\u3002 +message.confirm.migrate.volume=\u662f\u5426\u8981\u8fc1\u79fb\u6b64\u5377? +message.confirm.refresh.blades=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5237\u65b0\u5200\u7247\u5f0f\u670d\u52a1\u5668\u3002 +message.confirm.release.dedicated.cluster=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u7fa4\u96c6? +message.confirm.release.dedicated.host=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u4e3b\u673a? +message.confirm.release.dedicated.pod=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u63d0\u4f9b\u70b9? +message.confirm.release.dedicated.zone=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u8d44\u6e90\u57df? +message.confirm.release.dedicate.vlan.range=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u91ca\u653e\u4e13\u7528 VLAN \u8303\u56f4 +message.confirm.remove.event=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u4e8b\u4ef6? +message.confirm.remove.IP.range=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 IP \u8303\u56f4\u3002 +message.confirm.remove.load.balancer=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4ece\u8d1f\u8f7d\u5e73\u8861\u5668\u4e2d\u5220\u9664 VM +message.confirm.remove.network.offering=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u7f51\u7edc\u65b9\u6848? +message.confirm.remove.selected.alerts=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u9009\u5b9a\u8b66\u62a5 +message.confirm.remove.selected.events=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u9009\u5b9a\u4e8b\u4ef6 +message.confirm.remove.vmware.datacenter=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 VMware \u6570\u636e\u4e2d\u5fc3 +message.confirm.remove.vpc.offering=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64 VPC \u65b9\u6848? message.confirm.replace.acl.new.one=\u662f\u5426\u8981\u5c06\u6b64 ACL \u66ff\u6362\u4e3a\u65b0 ACL? +message.confirm.scale.up.router.vm=\u662f\u5426\u786e\u5b9e\u8981\u6269\u5c55\u8def\u7531\u5668 VM? +message.confirm.scale.up.system.vm=\u662f\u5426\u786e\u5b9e\u8981\u6269\u5c55\u7cfb\u7edf VM? +message.confirm.shutdown.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5173\u95ed\u6b64\u63d0\u4f9b\u7a0b\u5e8f +message.confirm.start.lb.vm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u52a8 LB VM +message.confirm.stop.lb.vm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u505c\u6b62 LB VM +message.confirm.upgrade.router.newer.template=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f +message.confirm.upgrade.routers.account.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u5e10\u6237\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f +message.confirm.upgrade.routers.cluster.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u7fa4\u96c6\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f +message.confirm.upgrade.routers.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u8d44\u6e90\u57df\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f +message.confirm.upgrade.routers.pod.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u63d0\u4f9b\u70b9\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f message.copy.iso.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06 ISO \u590d\u5236\u5230 +message.copy.template.confirm=\u662f\u5426\u786e\u5b9e\u8981\u590d\u5236\u6a21\u677f? message.copy.template=\u5c06\u6a21\u677f XXX \u4ece\u8d44\u6e90\u57df \u590d\u5236\u5230 +message.create.template=\u662f\u5426\u786e\u5b9e\u8981\u521b\u5efa\u6a21\u677f? message.create.template.vm=\u57fa\u4e8e\u6a21\u677f \u521b\u5efa VM message.create.template.volume=\u8bf7\u5148\u6307\u5b9a\u4ee5\u4e0b\u4fe1\u606f\uff0c\u7136\u540e\u518d\u521b\u5efa\u78c1\u76d8\u5377 \u7684\u6a21\u677f\u3002\u521b\u5efa\u6a21\u677f\u53ef\u80fd\u9700\u8981\u51e0\u5206\u949f\u5230\u66f4\u957f\u7684\u65f6\u95f4\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u78c1\u76d8\u5377\u7684\u5927\u5c0f\u3002 -message.create.template=\u662f\u5426\u786e\u5b9e\u8981\u521b\u5efa\u6a21\u677f? message.creating.cluster=\u6b63\u5728\u521b\u5efa\u7fa4\u96c6 message.creating.guest.network=\u6b63\u5728\u521b\u5efa\u6765\u5bbe\u7f51\u7edc message.creating.physical.networks=\u6b63\u5728\u521b\u5efa\u7269\u7406\u7f51\u7edc message.creating.pod=\u6b63\u5728\u521b\u5efa\u63d0\u4f9b\u70b9 message.creating.primary.storage=\u6b63\u5728\u521b\u5efa\u4e3b\u5b58\u50a8 message.creating.secondary.storage=\u6b63\u5728\u521b\u5efa\u4e8c\u7ea7\u5b58\u50a8 +message.creating.systemVM=\u6b63\u5728\u521b\u5efa\u7cfb\u7edf VM (\u6b64\u64cd\u4f5c\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u65f6\u95f4) message.creating.zone=\u6b63\u5728\u521b\u5efa\u8d44\u6e90\u57df message.decline.invitation=\u662f\u5426\u786e\u5b9e\u8981\u62d2\u7edd\u6b64\u9879\u76ee\u9080\u8bf7? +message.dedicated.zone.released=\u5df2\u91ca\u653e\u4e13\u7528\u8d44\u6e90\u57df message.dedicate.zone=\u6b63\u5728\u5c06\u8d44\u6e90\u57df\u4e13\u7528 message.delete.account=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64\u5e10\u6237\u3002 message.delete.affinity.group=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64\u5173\u8054\u6027\u7ec4\u3002 @@ -1803,26 +1795,36 @@ message.disable.snapshot.policy=\u60a8\u5df2\u6210\u529f\u7981\u7528\u5f53\u524d message.disable.user=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u6b64\u7528\u6237\u3002 message.disable.vpn.access=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528\u8fdc\u7a0b\u8bbf\u95ee VPN\u3002 message.disable.vpn=\u662f\u5426\u786e\u5b9e\u8981\u7981\u7528 VPN? +message.disabling.network.offering=\u6b63\u5728\u7981\u7528\u7f51\u7edc\u65b9\u6848 +message.disabling.vpc.offering=\u6b63\u5728\u7981\u7528 VPC \u65b9\u6848 +message.disallowed.characters=\u7981\u7528\u5b57\u7b26\: <,> message.download.ISO=\u8bf7\u5355\u51fb 00000 \u4e0b\u8f7d ISO message.download.template=\u8bf7\u5355\u51fb 00000 \u4e0b\u8f7d\u6a21\u677f -message.download.volume.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e0b\u8f7d\u6b64\u5377 message.download.volume=\u8bf7\u5355\u51fb 00000 \u4e0b\u8f7d\u5377 message.edit.account=\u7f16\u8f91(\u201c-1\u201d\u8868\u793a\u5bf9\u8981\u521b\u5efa\u7684\u8d44\u6e90\u6570\u91cf\u6ca1\u6709\u4efb\u4f55\u9650\u5236) message.edit.confirm=\u8bf7\u5148\u786e\u8ba4\u60a8\u6240\u505a\u7684\u66f4\u6539\uff0c\u7136\u540e\u5355\u51fb\u201c\u4fdd\u5b58\u201d\u3002 message.edit.limits=\u8bf7\u6307\u5b9a\u5bf9\u4ee5\u4e0b\u8d44\u6e90\u7684\u9650\u5236\u3002\u201c-1\u201d\u8868\u793a\u4e0d\u9650\u5236\u8981\u521b\u5efa\u7684\u8d44\u6e90\u6570\u3002 message.edit.traffic.type=\u8bf7\u6307\u5b9a\u60a8\u5e0c\u671b\u4e0e\u6b64\u6d41\u91cf\u7c7b\u578b\u5173\u8054\u7684\u6d41\u91cf\u6807\u7b7e\u3002 message.enable.account=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u6b64\u5e10\u6237\u3002 +message.enabled.vpn.ip.sec=\u60a8\u7684 IPSec \u9884\u5171\u4eab\u5bc6\u94a5 +message.enabled.vpn=\u60a8\u7684\u8fdc\u7a0b\u8bbf\u95ee VPN \u5f53\u524d\u5df2\u542f\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7 IP \u8fdb\u884c\u8bbf\u95ee message.enable.user=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528\u6b64\u7528\u6237\u3002 message.enable.vpn.access=\u5f53\u524d\u5df2\u5bf9\u6b64 IP \u5730\u5740\u7981\u7528\u4e86 VPN\u3002\u662f\u5426\u8981\u542f\u7528 VPN \u8bbf\u95ee? message.enable.vpn=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5bf9\u6b64 IP \u5730\u5740\u542f\u7528\u8fdc\u7a0b\u8bbf\u95ee VPN\u3002 -message.enabled.vpn.ip.sec=\u60a8\u7684 IPSec \u9884\u5171\u4eab\u5bc6\u94a5 -message.enabled.vpn=\u60a8\u7684\u8fdc\u7a0b\u8bbf\u95ee VPN \u5f53\u524d\u5df2\u542f\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7 IP \u8fdb\u884c\u8bbf\u95ee -message.enabling.security.group.provider=\u542f\u7528\u5b89\u5168\u7ec4\u63d0\u4f9b\u7a0b\u5e8f -message.enabling.zone=\u542f\u7528\u8d44\u6e90\u57df +message.enabling.network.offering=\u6b63\u5728\u542f\u7528\u7f51\u7edc\u65b9\u6848 +message.enabling.security.group.provider=\u6b63\u5728\u542f\u7528\u5b89\u5168\u7ec4\u63d0\u4f9b\u7a0b\u5e8f +message.enabling.vpc.offering=\u6b63\u5728\u542f\u7528 VPC \u65b9\u6848 +message.enabling.zone.dots=\u6b63\u5728\u542f\u7528\u8d44\u6e90\u57df... +message.enabling.zone=\u6b63\u5728\u542f\u7528\u8d44\u6e90\u57df +message.enter.seperated.list.multiple.cidrs=\u5982\u679c\u5b58\u5728\u591a\u4e2a CIDR\uff0c\u8bf7\u8f93\u5165\u7528\u9017\u53f7\u5206\u9694\u7684 CIDR \u5217\u8868 message.enter.token=\u8bf7\u8f93\u5165\u60a8\u5728\u9080\u8bf7\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u7684\u4ee4\u724c\u3002 message.generate.keys=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64\u7528\u6237\u751f\u6210\u65b0\u5bc6\u94a5\u3002 +message.gslb.delete.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 GSLB +message.gslb.lb.remove.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4ece GSLB \u4e2d\u5220\u9664\u8d1f\u8f7d\u5e73\u8861 message.guest.traffic.in.advanced.zone=\u6765\u5bbe\u7f51\u7edc\u6d41\u91cf\u662f\u6307\u6700\u7ec8\u7528\u6237\u865a\u62df\u673a\u4e4b\u95f4\u7684\u901a\u4fe1\u3002\u6307\u5b9a\u4e00\u4e2a VLAN ID \u8303\u56f4\u53ef\u4f20\u9001\u6bcf\u4e2a\u7269\u7406\u7f51\u7edc\u7684\u6765\u5bbe\u6d41\u91cf\u3002 message.guest.traffic.in.basic.zone=\u6765\u5bbe\u7f51\u7edc\u6d41\u91cf\u662f\u6307\u6700\u7ec8\u7528\u6237\u865a\u62df\u673a\u4e4b\u95f4\u7684\u901a\u4fe1\u3002\u5e94\u6307\u5b9a\u4e00\u4e2a CloudStack \u53ef\u4ee5\u5206\u914d\u7ed9\u6765\u5bbe VM \u7684 IP \u5730\u5740\u8303\u56f4\u3002\u8bf7\u786e\u4fdd\u6b64\u8303\u56f4\u4e0e\u9884\u7559\u7684\u7cfb\u7edf IP \u8303\u56f4\u4e0d\u91cd\u53e0\u3002 +message.host.dedicated=\u4e3b\u673a\u5df2\u4e13\u7528 +message.host.dedication.released=\u5df2\u91ca\u653e\u4e13\u7528\u4e3b\u673a message.installWizard.click.retry=\u8bf7\u5355\u51fb\u6b64\u6309\u94ae\u91cd\u65b0\u5c1d\u8bd5\u542f\u52a8\u3002 message.installWizard.copy.whatIsACluster=\u7fa4\u96c6\u63d0\u4f9b\u4e86\u4e00\u79cd\u7f16\u7ec4\u4e3b\u673a\u7684\u65b9\u6cd5\u3002\u7fa4\u96c6\u4e2d\u7684\u6240\u6709\u4e3b\u673a\u90fd\u5177\u6709\u76f8\u540c\u7684\u786c\u4ef6\uff0c\u8fd0\u884c\u76f8\u540c\u7684\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\uff0c\u4f4d\u4e8e\u540c\u4e00\u5b50\u7f51\u4e2d\uff0c\u5e76\u8bbf\u95ee\u76f8\u540c\u7684\u5171\u4eab\u5b58\u50a8\u3002\u53ef\u4ee5\u5b9e\u65f6\u5c06\u865a\u62df\u673a\u5b9e\u4f8b(VM)\u4ece\u4e00\u53f0\u4e3b\u673a\u8fc1\u79fb\u5230\u540c\u4e00\u7fa4\u96c6\u5185\u7684\u5176\u4ed6\u4e3b\u673a\uff0c\u800c\u65e0\u9700\u4e2d\u65ad\u5411\u7528\u6237\u63d0\u4f9b\u670d\u52a1\u3002\u7fa4\u96c6\u662f CloudStack&\#8482; \u90e8\u7f72\u4e2d\u7684\u7b2c\u4e09\u5927\u7ec4\u7ec7\u5355\u4f4d\u3002\u7fa4\u96c6\u5305\u542b\u5728\u63d0\u4f9b\u70b9\u4e2d\uff0c\u63d0\u4f9b\u70b9\u5305\u542b\u5728\u8d44\u6e90\u57df\u4e2d\u3002

CloudStack&\#8482; \u5141\u8bb8\u4e91\u90e8\u7f72\u4e2d\u5b58\u5728\u591a\u4e2a\u7fa4\u96c6\uff0c\u4f46\u5bf9\u4e8e\u57fa\u672c\u5b89\u88c5\uff0c\u6211\u4eec\u53ea\u9700\u8981\u4e00\u4e2a\u7fa4\u96c6\u3002 message.installWizard.copy.whatIsAHost=\u4e3b\u673a\u662f\u6307\u4e00\u53f0\u8ba1\u7b97\u673a\u3002\u4e3b\u673a\u63d0\u4f9b\u8fd0\u884c\u6765\u5bbe\u865a\u62df\u673a\u7684\u8ba1\u7b97\u8d44\u6e90\u3002\u6bcf\u53f0\u4e3b\u673a\u4e0a\u90fd\u5b89\u88c5\u6709\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u8f6f\u4ef6\uff0c\u7528\u4e8e\u7ba1\u7406\u6765\u5bbe VM (\u88f8\u673a\u4e3b\u673a\u9664\u5916\uff0c\u5c06\u5728\u201c\u9ad8\u7ea7\u5b89\u88c5\u6307\u5357\u201d\u4e2d\u8ba8\u8bba\u8fd9\u4e00\u7279\u6b8a\u6848\u4f8b)\u3002\u4f8b\u5982\uff0c\u542f\u7528\u4e86 KVM \u7684 Linux \u670d\u52a1\u5668\u3001Citrix XenServer \u670d\u52a1\u5668\u548c ESXi \u670d\u52a1\u5668\u90fd\u53ef\u7528\u4f5c\u4e3b\u673a\u3002\u5728\u57fa\u672c\u5b89\u88c5\u4e2d\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u4e00\u53f0\u8fd0\u884c XenServer \u7684\u4e3b\u673a\u3002

\u4e3b\u673a\u662f CloudStack&\#8482; \u90e8\u7f72\u4e2d\u6700\u5c0f\u7684\u7ec4\u7ec7\u5355\u4f4d\u3002\u4e3b\u673a\u5305\u542b\u5728\u7fa4\u96c6\u4e2d\uff0c\u7fa4\u96c6\u5305\u542b\u5728\u63d0\u4f9b\u70b9\u4e2d\uff0c\u63d0\u4f9b\u70b9\u5305\u542b\u5728\u8d44\u6e90\u57df\u4e2d\u3002 @@ -1857,12 +1859,14 @@ message.installWizard.tooltip.configureGuestTraffic.guestGateway=\u6765\u5bbe\u5 message.installWizard.tooltip.configureGuestTraffic.guestNetmask=\u6765\u5bbe\u5e94\u4f7f\u7528\u7684\u5b50\u7f51\u4e0a\u6b63\u5728\u4f7f\u7528\u7684\u7f51\u7edc\u63a9\u7801 message.installWizard.tooltip.configureGuestTraffic.guestStartIp=\u80fd\u591f\u5206\u914d\u7ed9\u6b64\u8d44\u6e90\u57df\u4e2d\u7684\u6765\u5bbe\u7684 IP \u5730\u5740\u8303\u56f4\u3002\u5982\u679c\u4f7f\u7528\u4e00\u4e2a NIC\uff0c\u8fd9\u4e9b IP \u5e94\u4f4d\u4e8e\u4e0e\u63d0\u4f9b\u70b9 CIDR \u76f8\u540c\u7684 CIDR \u4e2d\u3002 message.installWizard.tooltip.configureGuestTraffic.name=\u60a8\u7684\u7f51\u7edc\u540d\u79f0 +message.instance.scaled.up.confirm=\u662f\u5426\u786e\u5b9e\u8981\u6269\u5c55\u60a8\u7684\u5b9e\u4f8b? message.instanceWizard.noTemplates=\u60a8\u6ca1\u6709\u4efb\u4f55\u53ef\u7528\u6a21\u677f\uff1b\u8bf7\u6dfb\u52a0\u4e00\u4e2a\u517c\u5bb9\u7684\u6a21\u677f\uff0c\u7136\u540e\u91cd\u65b0\u542f\u52a8\u5b9e\u4f8b\u5411\u5bfc\u3002 message.ip.address.changed=\u60a8\u7684 IP \u5730\u5740\u53ef\u80fd\u5df2\u53d1\u751f\u53d8\u5316\uff1b\u662f\u5426\u8981\u5237\u65b0\u6b64\u5217\u8868? \u8bf7\u6ce8\u610f\uff0c\u5237\u65b0\u6b64\u5217\u8868\u65f6\uff0c\u201c\u8be6\u7ec6\u4fe1\u606f\u201d\u7a97\u683c\u5c06\u5173\u95ed\u3002 message.iso.desc=\u78c1\u76d8\u6620\u50cf\uff0c\u5176\u4e2d\u5305\u542b\u64cd\u4f5c\u7cfb\u7edf\u7684\u6570\u636e\u6216\u53ef\u542f\u52a8\u4ecb\u8d28 message.join.project=\u60a8\u73b0\u5728\u5df2\u52a0\u5165\u4e86\u4e00\u4e2a\u9879\u76ee\u3002\u8bf7\u5207\u6362\u5230\u201c\u9879\u76ee\u89c6\u56fe\u201d\u4ee5\u67e5\u770b\u9879\u76ee\u3002 message.launch.vm.on.private.network=\u662f\u5426\u8981\u5728\u60a8\u7684\u79c1\u4eba\u4e13\u7528\u7f51\u7edc\u4e2d\u542f\u52a8\u5b9e\u4f8b? message.launch.zone=\u8d44\u6e90\u57df\u5df2\u51c6\u5907\u5c31\u7eea\uff0c\u53ef\u968f\u65f6\u542f\u52a8\uff1b\u8bf7\u7ee7\u7eed\u6267\u884c\u4e0b\u4e00\u6b65\u9aa4\u3002 +message.listView.subselect.multi=(\u6309\u4f4f Ctrl/Cmd \u5e76\u5355\u51fb) message.lock.account=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u9501\u5b9a\u6b64\u5e10\u6237\u3002\u901a\u8fc7\u9501\u5b9a\u6b64\u5e10\u6237\uff0c\u6b64\u5e10\u6237\u7684\u6240\u6709\u7528\u6237\u5c06\u4e0d\u518d\u80fd\u591f\u7ba1\u7406\u5404\u81ea\u7684\u4e91\u8d44\u6e90\uff0c\u4f46\u4ecd\u7136\u53ef\u4ee5\u8bbf\u95ee\u73b0\u6709\u8d44\u6e90\u3002 message.migrate.instance.confirm=\u8bf7\u786e\u8ba4\u8981\u5c06\u865a\u62df\u5b9e\u4f8b\u8fc1\u79fb\u5230\u7684\u4e3b\u673a\u3002 message.migrate.instance.to.host=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\u5b9e\u4f8b\u8fc1\u79fb\u5230\u5176\u4ed6\u4e3b\u673a\u3002 @@ -1870,7 +1874,11 @@ message.migrate.instance.to.ps=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\ message.migrate.router.confirm=\u8bf7\u786e\u8ba4\u60a8\u8981\u5c06\u8def\u7531\u5668\u8fc1\u79fb\u5230\u7684\u4e3b\u673a\: message.migrate.systemvm.confirm=\u8bf7\u786e\u8ba4\u60a8\u8981\u5c06\u7cfb\u7edf VM \u8fc1\u79fb\u5230\u7684\u4e3b\u673a\: message.migrate.volume=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\u5377\u8fc1\u79fb\u5230\u5176\u4ed6\u4e3b\u5b58\u50a8\u3002 +message.network.addVM.desc=\u8bf7\u6307\u5b9a\u8981\u5c06\u6b64 VM \u6dfb\u52a0\u5230\u7684\u7f51\u7edc\u3002\u5c06\u4e3a\u6b64\u7f51\u7edc\u6dfb\u52a0\u4e00\u4e2a\u65b0 NIC\u3002 +message.network.addVMNIC=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64\u7f51\u7edc\u6dfb\u52a0\u4e00\u4e2a\u65b0 VM NIC\u3002 message.new.user=\u8bf7\u6307\u5b9a\u4ee5\u4e0b\u4fe1\u606f\u4ee5\u5411\u5e10\u6237\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7528\u6237 +message.no.affinity.groups=\u60a8\u6ca1\u6709\u4efb\u4f55\u5173\u8054\u6027\u7ec4\u3002\u8bf7\u7ee7\u7eed\u6267\u884c\u4e0b\u4e00\u6b65\u64cd\u4f5c\u3002 +message.no.host.available=\u6ca1\u6709\u53ef\u7528\u4e8e\u8fc1\u79fb\u7684\u4e3b\u673a message.no.network.support.configuration.not.true=\u60a8\u7684\u6240\u6709\u8d44\u6e90\u57df\u90fd\u672a\u542f\u7528\u5b89\u5168\u7ec4\uff0c\u56e0\u6b64\u65e0\u5176\u4ed6\u7f51\u7edc\u529f\u80fd\u3002\u8bf7\u7ee7\u7eed\u6267\u884c\u6b65\u9aa4 5\u3002 message.no.network.support=\u60a8\u9009\u62e9\u7684\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f vSphere \u6ca1\u6709\u4efb\u4f55\u5176\u4ed6\u7f51\u7edc\u529f\u80fd\u3002\u8bf7\u7ee7\u7eed\u6267\u884c\u6b65\u9aa4 5\u3002 message.no.projects.adminOnly=\u60a8\u6ca1\u6709\u4efb\u4f55\u9879\u76ee\u3002
\u8bf7\u8981\u6c42\u7ba1\u7406\u5458\u521b\u5efa\u4e00\u4e2a\u65b0\u9879\u76ee\u3002 @@ -1888,10 +1896,16 @@ message.please.select.a.configuration.for.your.zone=\u8bf7\u4e3a\u60a8\u7684\u8d message.please.select.a.different.public.and.management.network.before.removing=\u8bf7\u5148\u9009\u62e9\u5176\u4ed6\u516c\u7528\u7ba1\u7406\u7f51\u7edc\uff0c\u7136\u540e\u518d\u5220\u9664 message.please.select.networks=\u8bf7\u4e3a\u60a8\u7684\u865a\u62df\u673a\u9009\u62e9\u7f51\u7edc\u3002 message.please.wait.while.zone.is.being.created=\u6b63\u5728\u521b\u5efa\u8d44\u6e90\u57df\uff0c\u8bf7\u7a0d\u5019\uff1b\u6b64\u64cd\u4f5c\u53ef\u80fd\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u624d\u80fd\u5b8c\u6210... +message.pod.dedication.released=\u5df2\u91ca\u653e\u4e13\u7528\u63d0\u4f9b\u70b9 +message.portable.ip.delete.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u53ef\u79fb\u690d IP \u8303\u56f4 message.project.invite.sent=\u53d1\u9001\u7ed9\u7528\u6237\u7684\u9080\u8bf7\uff1b\u7528\u6237\u63a5\u53d7\u9080\u8bf7\u540e\uff0c\u5c06\u52a0\u5165\u5230\u9879\u76ee\u4e2d message.public.traffic.in.advanced.zone=\u4e91\u4e2d\u7684 VM \u8bbf\u95ee Internet \u65f6\u5c06\u751f\u6210\u516c\u5171\u6d41\u91cf\uff0c\u4f46\u5fc5\u987b\u5206\u914d\u53ef\u516c\u5f00\u8bbf\u95ee\u7684 IP \u624d\u80fd\u5b9e\u73b0\u3002\u6700\u7ec8\u7528\u6237\u53ef\u4ee5\u4f7f\u7528 CloudStack UI \u83b7\u53d6\u8fd9\u4e9b IP\uff0c\u4ee5\u5728\u5176\u6765\u5bbe\u7f51\u7edc\u4e0e\u516c\u7528\u7f51\u7edc\u4e4b\u95f4\u6267\u884c NAT\u3002

\u8bf7\u81f3\u5c11\u4e3a Internet \u6d41\u91cf\u63d0\u4f9b\u4e00\u4e2a IP \u5730\u5740\u8303\u56f4\u3002 message.public.traffic.in.basic.zone=\u4e91\u4e2d\u7684 VM \u8bbf\u95ee Internet \u6216\u901a\u8fc7 Internet \u5411\u5ba2\u6237\u7aef\u63d0\u4f9b\u670d\u52a1\u65f6\u5c06\u751f\u6210\u516c\u5171\u6d41\u91cf\uff0c\u4f46\u5fc5\u987b\u5206\u914d\u53ef\u516c\u5f00\u8bbf\u95ee\u7684 IP \u624d\u80fd\u5b9e\u73b0\u3002\u521b\u5efa\u5b9e\u4f8b\u65f6\uff0c\u5c06\u628a\u8fd9\u4e00\u7ec4\u516c\u7528 IP \u4e2d\u7684 IP (\u6765\u5bbe IP \u5730\u5740\u9664\u5916)\u5206\u914d\u7ed9\u6b64\u5b9e\u4f8b\u3002\u9759\u6001 1-1 NAT \u5c06\u5728\u516c\u7528 IP \u4e0e\u6765\u5bbe IP \u4e4b\u95f4\u81ea\u52a8\u8bbe\u7f6e\u3002\u6700\u7ec8\u7528\u6237\u8fd8\u53ef\u4ee5\u4f7f\u7528 CloudStack UI \u83b7\u53d6\u5176\u4ed6 IP\uff0c\u4ee5\u5728\u5176\u5b9e\u4f8b\u4e0e\u516c\u7528 IP \u4e4b\u95f4\u6267\u884c\u9759\u6001 NAT\u3002 +message.read.admin.guide.scaling.up=\u5f00\u59cb\u6269\u5c55\u4e4b\u524d\uff0c\u8bf7\u9605\u8bfb\u7ba1\u7406\u6307\u5357\u4e2d\u7684\u52a8\u6001\u6269\u5c55\u90e8\u5206\u3002 +message.recover.vm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u6062\u590d\u6b64 VM\u3002 message.redirecting.region=\u6b63\u5728\u91cd\u5b9a\u5411\u5230\u5730\u7406\u533a\u57df... +message.reinstall.vm=\u6ce8\u610f\: \u8bf7\u8c28\u614e\u64cd\u4f5c\u3002\u8fd9\u5c06\u5bfc\u81f4\u4ece\u6a21\u677f\u91cd\u65b0\u5b89\u88c5 VM\uff0c\u5e76\u4e14\u5f15\u5bfc\u78c1\u76d8\u4e0a\u5b58\u50a8\u7684\u6570\u636e\u5c06\u4e22\u5931\u3002\u989d\u5916\u7684\u6570\u636e\u5377(\u5982\u679c\u5b58\u5728)\u5c06\u65e0\u6cd5\u8bbf\u95ee\u3002 +message.remove.ldap=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664 LDAP \u914d\u7f6e? message.remove.region=\u662f\u5426\u786e\u5b9e\u8981\u4ece\u6b64\u7ba1\u7406\u670d\u52a1\u5668\u4e2d\u5220\u9664\u6b64\u5730\u7406\u533a\u57df? message.remove.vpc=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 VPC message.remove.vpn.access=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u4ee5\u4e0b\u7528\u6237\u7684 VPN \u8bbf\u95ee\u3002 @@ -1902,17 +1916,23 @@ message.restart.mgmt.server=\u8bf7\u91cd\u65b0\u542f\u52a8\u7ba1\u7406\u670d\u52 message.restart.mgmt.usage.server=\u8bf7\u91cd\u65b0\u542f\u52a8\u7ba1\u7406\u670d\u52a1\u5668\u548c\u4f7f\u7528\u670d\u52a1\u5668\u4ee5\u4f7f\u60a8\u7684\u65b0\u8bbe\u7f6e\u751f\u6548\u3002 message.restart.network=\u6b64\u7f51\u7edc\u63d0\u4f9b\u7684\u6240\u6709\u670d\u52a1\u90fd\u5c06\u4e2d\u65ad\u3002\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u91cd\u65b0\u542f\u52a8\u6b64\u7f51\u7edc\u3002 message.restart.vpc=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u91cd\u65b0\u542f\u52a8 VPC +message.restoreVM=\u662f\u5426\u8981\u8fd8\u539f\u6b64 VM? message.security.group.usage=(\u6309\u4f4f Ctrl \u952e\u5e76\u5355\u51fb\u9f20\u6807\u53ef\u9009\u62e9\u6240\u6709\u9002\u7528\u7684\u5b89\u5168\u7ec4) +message.select.affinity.groups=\u8bf7\u9009\u62e9\u60a8\u5e0c\u671b\u6b64 VM \u6240\u5c5e\u7684\u4efb\u4f55\u5173\u8054\u6027\u7ec4\: message.select.a.zone=\u4e00\u4e2a\u8d44\u6e90\u57df\u901a\u5e38\u4e0e\u4e00\u4e2a\u6570\u636e\u4e2d\u5fc3\u76f8\u5bf9\u5e94\u3002\u591a\u4e2a\u8d44\u6e90\u57df\u53ef\u4ee5\u63d0\u4f9b\u7269\u7406\u9694\u79bb\u548c\u5197\u4f59\uff0c\u6709\u52a9\u4e8e\u4f7f\u4e91\u66f4\u52a0\u53ef\u9760\u3002 message.select.instance=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5b9e\u4f8b\u3002 message.select.iso=\u8bf7\u4e3a\u60a8\u7684\u65b0\u865a\u62df\u5b9e\u4f8b\u9009\u62e9\u4e00\u4e2a ISO\u3002 message.select.item=\u8bf7\u9009\u62e9\u4e00\u4e2a\u9879\u76ee\u3002 message.select.security.groups=\u8bf7\u4e3a\u60a8\u7684\u65b0 VM \u9009\u62e9\u5b89\u5168\u7ec4 message.select.template=\u8bf7\u4e3a\u60a8\u7684\u65b0\u865a\u62df\u5b9e\u4f8b\u9009\u62e9\u4e00\u4e2a\u6a21\u677f\u3002 +message.select.tier=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5c42 +message.set.default.NIC.manual=\u8bf7\u7acb\u5373\u624b\u52a8\u66f4\u65b0\u6b64 VM \u4e0a\u7684\u9ed8\u8ba4 NIC\u3002 +message.set.default.NIC=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\u6b64 NIC \u8bbe\u7f6e\u4e3a\u6b64 VM \u7684\u9ed8\u8ba4 NIC\u3002 message.setup.physical.network.during.zone.creation.basic=\u6dfb\u52a0\u57fa\u7840\u8d44\u6e90\u57df\u65f6\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u7269\u7406\u7f51\u7edc\uff0c\u6b64\u7f51\u7edc\u5e94\u4e0e\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u4e2d\u7684 NIC \u76f8\u5bf9\u5e94\u3002\u6b64\u7f51\u7edc\u53ef\u4ee5\u627f\u8f7d\u591a\u79cd\u6d41\u91cf\u7c7b\u578b\u3002

\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u5c06\u5176\u4ed6\u6d41\u91cf\u7c7b\u578b\u62d6\u653e\u5230\u6b64\u7269\u7406\u7f51\u7edc\u3002 message.setup.physical.network.during.zone.creation=\u6dfb\u52a0\u9ad8\u7ea7\u8d44\u6e90\u57df\u65f6\uff0c\u9700\u8981\u8bbe\u7f6e\u4e00\u4e2a\u6216\u591a\u4e2a\u7269\u7406\u7f51\u7edc\u3002\u6bcf\u4e2a\u7f51\u7edc\u90fd\u4e0e\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u4e2d\u7684\u4e00\u4e2a NIC \u76f8\u5bf9\u5e94\u3002\u6bcf\u4e2a\u7269\u7406\u7f51\u7edc\u4e2d\u53ef\u4ee5\u5305\u542b\u4e00\u79cd\u6216\u591a\u79cd\u6d41\u91cf\u7c7b\u578b\uff0c\u5e76\u5bf9\u8fd9\u4e9b\u6d41\u91cf\u7c7b\u578b\u53ef\u80fd\u7684\u7ec4\u5408\u65b9\u5f0f\u8bbe\u7f6e\u4e86\u67d0\u4e9b\u9650\u5236\u3002

\u53ef\u4ee5\u5c06\u4e00\u79cd\u6216\u591a\u79cd\u6d41\u91cf\u7c7b\u578b\u62d6\u653e\u5230\u6bcf\u4e2a\u7269\u7406\u7f51\u7edc\u4e2d\u3002 message.setup.successful=\u5df2\u6210\u529f\u8bbe\u7f6e\u4e91\! message.snapshot.schedule=\u53ef\u4ee5\u901a\u8fc7\u4ece\u4ee5\u4e0b\u53ef\u7528\u9009\u9879\u4e2d\u8fdb\u884c\u9009\u62e9\u5e76\u5e94\u7528\u60a8\u7684\u7b56\u7565\u9996\u9009\u9879\u6765\u8bbe\u7f6e\u91cd\u73b0\u5feb\u7167\u8ba1\u5212 +message.specifiy.tag.key.value=\u8bf7\u6307\u5b9a\u6807\u8bb0\u5bc6\u94a5\u548c\u503c message.specify.url=\u8bf7\u6307\u5b9a URL message.step.1.continue=\u8bf7\u9009\u62e9\u4e00\u4e2a\u6a21\u677f\u6216 ISO \u4ee5\u7ee7\u7eed message.step.1.desc=\u8bf7\u4e3a\u60a8\u7684\u65b0\u865a\u62df\u5b9e\u4f8b\u9009\u62e9\u4e00\u4e2a\u6a21\u677f\u3002\u8fd8\u53ef\u4ee5\u9009\u62e9\u4e00\u4e2a\u53ef\u5c06 ISO \u6620\u50cf\u5b89\u88c5\u5230\u5176\u4e2d\u7684\u7a7a\u6a21\u677f\u3002 @@ -1922,7 +1942,10 @@ message.step.4.continue=\u8bf7\u81f3\u5c11\u9009\u62e9\u4e00\u4e2a\u7f51\u7edc\u message.step.4.desc=\u8bf7\u9009\u62e9\u865a\u62df\u5b9e\u4f8b\u8981\u8fde\u63a5\u5230\u7684\u4e3b\u7f51\u7edc\u3002 message.storage.traffic=CloudStack \u5185\u90e8\u8d44\u6e90(\u5305\u62ec\u4e0e\u7ba1\u7406\u670d\u52a1\u5668\u901a\u4fe1\u7684\u4efb\u4f55\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e3b\u673a\u548c CloudStack \u7cfb\u7edf VM)\u4e4b\u95f4\u7684\u6d41\u91cf\u3002\u8bf7\u5728\u6b64\u5904\u914d\u7f6e\u5b58\u50a8\u6d41\u91cf\u3002 message.suspend.project=\u662f\u5426\u786e\u5b9e\u8981\u6682\u505c\u6b64\u9879\u76ee? +message.systems.vms.ready=\u7cfb\u7edf VM \u5df2\u5c31\u7eea\u3002 +message.template.copying=\u6b63\u5728\u590d\u5236\u6a21\u677f\u3002 message.template.desc=\u64cd\u4f5c\u7cfb\u7edf\u6620\u50cf\uff0c\u53ef\u7528\u4e8e\u542f\u52a8 VM +message.tier.required=\u201c\u5c42\u201d\u4e3a\u5fc5\u586b\u9879 message.tooltip.dns.1=\u4f9b\u8d44\u6e90\u57df\u4e2d\u7684 VM \u4f7f\u7528\u7684 DNS \u670d\u52a1\u5668\u540d\u79f0\u3002\u8d44\u6e90\u57df\u7684\u516c\u7528 IP \u5730\u5740\u5fc5\u987b\u8def\u7531\u5230\u6b64\u670d\u52a1\u5668\u3002 message.tooltip.dns.2=\u4f9b\u8d44\u6e90\u57df\u4e2d\u7684 VM \u4f7f\u7528\u7684\u4e8c\u7ea7 DNS \u670d\u52a1\u5668\u540d\u79f0\u3002\u8d44\u6e90\u57df\u7684\u516c\u7528 IP \u5730\u5740\u5fc5\u987b\u8def\u7531\u5230\u6b64\u670d\u52a1\u5668\u3002 message.tooltip.internal.dns.1=\u4f9b\u8d44\u6e90\u57df\u4e2d\u7684 CloudStack \u5185\u90e8\u7cfb\u7edf VM \u4f7f\u7528\u7684 DNS \u670d\u52a1\u5668\u540d\u79f0\u3002\u63d0\u4f9b\u70b9\u7684\u4e13\u7528 IP \u5730\u5740\u5fc5\u987b\u8def\u7531\u5230\u6b64\u670d\u52a1\u5668\u3002 @@ -1934,111 +1957,45 @@ message.tooltip.reserved.system.netmask=\u7528\u4e8e\u5b9a\u4e49\u63d0\u4f9b\u70 message.tooltip.zone.name=\u8d44\u6e90\u57df\u540d\u79f0\u3002 message.update.os.preference=\u8bf7\u4e3a\u6b64\u4e3b\u673a\u9009\u62e9\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u9996\u9009\u9879\u3002\u9996\u5148\u5c06\u5177\u6709\u76f8\u4f3c\u9996\u9009\u9879\u7684\u6240\u6709\u865a\u62df\u5b9e\u4f8b\u5206\u914d\u81f3\u6b64\u4e3b\u673a\uff0c\u7136\u540e\u518d\u9009\u62e9\u5176\u4ed6\u5b9e\u4f8b\u3002 message.update.resource.count=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u66f4\u65b0\u6b64\u5e10\u6237\u7684\u8d44\u6e90\u6570\u3002 -message.update.ssl=\u8bf7\u63d0\u4ea4\u4e00\u4e2a X.509 \u517c\u5bb9\u7684\u65b0 SSL \u8bc1\u4e66\uff0c\u4ee5\u4fbf\u5c06\u5176\u66f4\u65b0\u5230\u6bcf\u4e2a\u63a7\u5236\u53f0\u4ee3\u7406\u548c\u4e8c\u7ea7\u5b58\u50a8\u865a\u62df\u5b9e\u4f8b\: -message.update.ssl.succeeded=\u5df2\u6210\u529f\u66f4\u65b0 SSL \u8bc1\u4e66 message.update.ssl.failed=\u65e0\u6cd5\u66f4\u65b0 SSL \u8bc1\u4e66\u3002 +message.update.ssl.succeeded=\u5df2\u6210\u529f\u66f4\u65b0 SSL \u8bc1\u4e66 +message.update.ssl=\u8bf7\u63d0\u4ea4\u4e00\u4e2a X.509 \u517c\u5bb9\u7684\u65b0 SSL \u8bc1\u4e66\uff0c\u4ee5\u4fbf\u5c06\u5176\u66f4\u65b0\u5230\u6bcf\u4e2a\u63a7\u5236\u53f0\u4ee3\u7406\u548c\u4e8c\u7ea7\u5b58\u50a8\u865a\u62df\u5b9e\u4f8b\: +message.validate.accept=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5e26\u6709\u6709\u6548\u6269\u5c55\u540d\u7684\u503c\u3002 +message.validate.creditcard=\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u4fe1\u7528\u5361\u5361\u53f7\u3002 +message.validate.date.ISO=\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65e5\u671f(ISO)\u3002 +message.validate.date=\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65e5\u671f\u3002 +message.validate.digits=\u8bf7\u4ec5\u8f93\u5165\u6570\u5b57\u3002 +message.validate.email.address=\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002 +message.validate.equalto=\u8bf7\u91cd\u65b0\u8f93\u5165\u76f8\u540c\u7684\u503c\u3002 +message.validate.fieldrequired=\u6b64\u5b57\u6bb5\u4e3a\u5fc5\u586b\u5b57\u6bb5\u3002 +message.validate.fixfield=\u8bf7\u4fee\u590d\u6b64\u5b57\u6bb5\u3002 message.validate.instance.name=\u5b9e\u4f8b\u540d\u79f0\u4e0d\u5f97\u8d85\u8fc7 63 \u4e2a\u5b57\u7b26\u3002\u4ec5\u5141\u8bb8\u4f7f\u7528 ASCII \u5b57\u6bcd a - z \u6216 A - Z\u3001\u6570\u5b57 0 - 9 \u4ee5\u53ca\u8fde\u5b57\u7b26\u3002\u5b9e\u4f8b\u540d\u79f0\u5fc5\u987b\u4ee5\u5b57\u6bcd\u5f00\u5934\u5e76\u4ee5\u5b57\u6bcd\u6216\u6570\u5b57\u7ed3\u675f\u3002 +message.validate.invalid.characters=\u67e5\u627e\u5230\u65e0\u6548\u5b57\u7b26\uff0c\u8bf7\u66f4\u6b63\u3002 +message.validate.maxlength=\u8bf7\u6700\u591a\u8f93\u5165 {0} \u4e2a\u5b57\u7b26\u3002 +message.validate.max=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5c0f\u4e8e\u6216\u7b49\u4e8e {0} \u7684\u503c\u3002 +message.validate.minlength=\u8bf7\u81f3\u5c11\u8f93\u5165 {0} \u4e2a\u5b57\u7b26\u3002 +message.validate.number=\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u6570\u5b57\u3002 +message.validate.range.length=\u8bf7\u8f93\u5165\u4e00\u4e2a\u957f\u5ea6\u4ecb\u4e8e {0} \u5230 {1} \u4e4b\u95f4\u7684\u503c\u3002 +message.validate.range=\u8bf7\u8f93\u5165\u4e00\u4e2a\u4ecb\u4e8e {0} \u5230 {1} \u4e4b\u95f4\u7684\u503c\u3002 +message.validate.URL=\u8bf7\u8f93\u5165\u6709\u6548\u7684 URL\u3002 message.virtual.network.desc=\u60a8\u7684\u5e10\u6237\u7684\u4e13\u7528\u865a\u62df\u7f51\u7edc\u3002\u5e7f\u64ad\u57df\u5305\u542b\u5728 VLAN \u4e2d\uff0c\u5e76\u4e14\u6240\u6709\u516c\u7528\u7f51\u7edc\u8bbf\u95ee\u90fd\u7531\u865a\u62df\u8def\u7531\u5668\u8def\u7531\u51fa\u53bb\u3002 message.vm.create.template.confirm=\u521b\u5efa\u6a21\u677f\u5c06\u81ea\u52a8\u91cd\u65b0\u542f\u52a8 VM\u3002 message.vm.review.launch=\u8bf7\u5148\u6838\u5bf9\u4ee5\u4e0b\u4fe1\u606f\uff0c\u786e\u8ba4\u60a8\u7684\u865a\u62df\u5b9e\u4f8b\u6b63\u786e\u65e0\u8bef\uff0c\u7136\u540e\u518d\u542f\u52a8\u3002 +message.vnmc.available.list=\u63d0\u4f9b\u7a0b\u5e8f\u5217\u8868\u4e2d\u672a\u63d0\u4f9b VNMC\u3002 +message.vnmc.not.available.list=\u63d0\u4f9b\u7a0b\u5e8f\u5217\u8868\u4e2d\u672a\u63d0\u4f9b VNMC\u3002 message.volume.create.template.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64\u78c1\u76d8\u5377\u521b\u5efa\u4e00\u4e2a\u6a21\u677f\u3002\u521b\u5efa\u6a21\u677f\u53ef\u80fd\u9700\u8981\u51e0\u5206\u949f\u5230\u66f4\u957f\u7684\u65f6\u95f4\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u5377\u7684\u5927\u5c0f\u3002 +message.waiting.for.builtin.templates.to.load=\u6b63\u5728\u7b49\u5f85\u52a0\u8f7d\u5185\u7f6e\u6a21\u677f... +message.XSTools61plus.update.failed=\u65e0\u6cd5\u66f4\u65b0\u201c\u539f\u59cb XS \u7248\u672c\u4e3a 6.1+\u201d\u5b57\u6bb5\u3002\u9519\u8bef\: message.you.must.have.at.least.one.physical.network=\u60a8\u5fc5\u987b\u81f3\u5c11\u62e5\u6709\u4e00\u4e2a\u7269\u7406\u7f51\u7edc -message.zone.creation.complete.would.you.like.to.enable.this.zone=\u5df2\u5b8c\u6210\u521b\u5efa\u8d44\u6e90\u57df\u3002\u662f\u5426\u8981\u542f\u7528\u6b64\u8d44\u6e90\u57df? +message.your.cloudstack.is.ready=\u60a8\u7684 CloudStack \u5df2\u5c31\u7eea\! message.Zone.creation.complete=\u5df2\u5b8c\u6210\u521b\u5efa\u8d44\u6e90\u57df +message.zone.creation.complete.would.you.like.to.enable.this.zone=\u5df2\u5b8c\u6210\u521b\u5efa\u8d44\u6e90\u57df\u3002\u662f\u5426\u8981\u542f\u7528\u6b64\u8d44\u6e90\u57df? message.zone.no.network.selection=\u6240\u9009\u8d44\u6e90\u57df\u65e0\u4efb\u4f55\u7f51\u7edc\u9009\u9879\u3002 message.zone.step.1.desc=\u8bf7\u4e3a\u60a8\u7684\u8d44\u6e90\u57df\u9009\u62e9\u4e00\u79cd\u7f51\u7edc\u6a21\u5f0f\u3002 message.zone.step.2.desc=\u8bf7\u8f93\u5165\u4ee5\u4e0b\u4fe1\u606f\u4ee5\u6dfb\u52a0\u4e00\u4e2a\u65b0\u8d44\u6e90\u57df message.zone.step.3.desc=\u8bf7\u8f93\u5165\u4ee5\u4e0b\u4fe1\u606f\u4ee5\u6dfb\u52a0\u4e00\u4e2a\u65b0\u63d0\u4f9b\u70b9 message.zoneWizard.enable.local.storage=\u8b66\u544a\: \u5982\u679c\u4e3a\u6b64\u8d44\u6e90\u57df\u542f\u7528\u4e86\u672c\u5730\u5b58\u50a8\uff0c\u5219\u5fc5\u987b\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u60a8\u5e0c\u671b\u542f\u52a8\u7cfb\u7edf VM \u7684\u4f4d\u7f6e\:

1. \u5982\u679c\u9700\u8981\u5728\u5171\u4eab\u4e3b\u5b58\u50a8\u4e2d\u542f\u52a8\u7cfb\u7edf VM\uff0c\u5219\u5fc5\u987b\u5728\u5b8c\u6210\u521b\u5efa\u540e\u5c06\u5171\u4eab\u4e3b\u5b58\u50a8\u6dfb\u52a0\u5230\u6b64\u8d44\u6e90\u57df\u3002

2. \u5982\u679c\u9700\u8981\u5728\u672c\u5730\u4e3b\u5b58\u50a8\u4e2d\u542f\u52a8\u7cfb\u7edf VM\uff0c\u5219\u5fc5\u987b\u5728\u542f\u7528\u6b64\u8d44\u6e90\u57df\u4e4b\u524d\u5c06 system.vm.use.local.storage \u8bbe\u7f6e\u4e3a true\u3002


\u662f\u5426\u8981\u7ee7\u7eed? -message.validate.fieldrequired=\u6b64\u5b57\u6bb5\u4e3a\u5fc5\u586b\u5b57\u6bb5\u3002 -message.validate.fixfield=\u8bf7\u4fee\u590d\u6b64\u5b57\u6bb5\u3002 -message.validate.email.address=\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002 -message.validate.URL=\u8bf7\u8f93\u5165\u6709\u6548\u7684 URL\u3002 -message.validate.date=\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65e5\u671f\u3002 -message.validate.date.ISO=\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65e5\u671f(ISO)\u3002 -message.validate.number=\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u6570\u5b57\u3002 -message.validate.digits=\u8bf7\u4ec5\u8f93\u5165\u6570\u5b57\u3002 -message.validate.creditcard=\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u4fe1\u7528\u5361\u5361\u53f7\u3002 -message.validate.equalto=\u8bf7\u91cd\u65b0\u8f93\u5165\u76f8\u540c\u7684\u503c\u3002 -message.validate.accept=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5e26\u6709\u6709\u6548\u6269\u5c55\u540d\u7684\u503c\u3002 -message.validate.maxlength=\u8bf7\u6700\u591a\u8f93\u5165 {0} \u4e2a\u5b57\u7b26\u3002 -message.validate.minlength=\u8bf7\u81f3\u5c11\u8f93\u5165 {0} \u4e2a\u5b57\u7b26\u3002 -message.validate.range.length=\u8bf7\u8f93\u5165\u4e00\u4e2a\u957f\u5ea6\u4ecb\u4e8e {0} \u5230 {1} \u4e4b\u95f4\u7684\u503c\u3002 -message.validate.range=\u8bf7\u8f93\u5165\u4e00\u4e2a\u4ecb\u4e8e {0} \u5230 {1} \u4e4b\u95f4\u7684\u503c\u3002 -message.validate.max=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5c0f\u4e8e\u6216\u7b49\u4e8e {0} \u7684\u503c\u3002 messgae.validate.min=\u8bf7\u8f93\u5165\u4e00\u4e2a\u5927\u4e8e\u6216\u7b49\u4e8e {0} \u7684\u503c\u3002 -message.creating.systemVM=\u6b63\u5728\u521b\u5efa\u7cfb\u7edf VM (\u6b64\u64cd\u4f5c\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u65f6\u95f4) -message.enabling.zone.dots=\u6b63\u5728\u542f\u7528\u8d44\u6e90\u57df... -message.restoreVM=\u662f\u5426\u8981\u8fd8\u539f\u6b64 VM? -message.no.host.available=\u6ca1\u6709\u53ef\u7528\u4e8e\u8fc1\u79fb\u7684\u4e3b\u673a -message.network.addVM.desc=\u8bf7\u6307\u5b9a\u8981\u5c06\u6b64 VM \u6dfb\u52a0\u5230\u7684\u7f51\u7edc\u3002\u5c06\u4e3a\u6b64\u7f51\u7edc\u6dfb\u52a0\u4e00\u4e2a\u65b0 NIC\u3002 -message.network.addVMNIC=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4e3a\u6b64\u7f51\u7edc\u6dfb\u52a0\u4e00\u4e2a\u65b0 VM NIC\u3002 -message.set.default.NIC=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5c06\u6b64 NIC \u8bbe\u7f6e\u4e3a\u6b64 VM \u7684\u9ed8\u8ba4 NIC\u3002 -message.set.default.NIC.manual=\u8bf7\u7acb\u5373\u624b\u52a8\u66f4\u65b0\u6b64 VM \u4e0a\u7684\u9ed8\u8ba4 NIC\u3002 -message.instance.scaled.up.confirm=\u662f\u5426\u786e\u5b9e\u8981\u6269\u5c55\u60a8\u7684\u5b9e\u4f8b? -message.copy.template.confirm=\u662f\u5426\u786e\u5b9e\u8981\u590d\u5236\u6a21\u677f? -message.template.copying=\u6b63\u5728\u590d\u5236\u6a21\u677f\u3002 -message.XSTools61plus.update.failed=\u65e0\u6cd5\u66f4\u65b0\u201c\u539f\u59cb XS \u7248\u672c\u4e3a 6.1+\u201d\u5b57\u6bb5\u3002\u9519\u8bef\: -message.gslb.delete.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u6b64 GSLB -message.portable.ip.delete.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u53ef\u79fb\u690d IP \u8303\u56f4 -message.gslb.lb.remove.confirm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u4ece GSLB \u4e2d\u5220\u9664\u8d1f\u8f7d\u5e73\u8861 -message.admin.guide.read=\u5bf9\u4e8e\u57fa\u4e8e VMware \u7684 VM\uff0c\u8bf7\u5148\u9605\u8bfb\u7ba1\u7406\u6307\u5357\u4e2d\u7684\u52a8\u6001\u6269\u5c55\u90e8\u5206\uff0c\u7136\u540e\u518d\u8fdb\u884c\u6269\u5c55\u3002\u662f\u5426\u8981\u7ee7\u7eed?, -message.tier.required=\u201c\u5c42\u201d\u4e3a\u5fc5\u586b\u9879 -message.remove.ldap=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664 LDAP \u914d\u7f6e? -message.action.downloading.template=\u6b63\u5728\u4e0b\u8f7d\u6a21\u677f\u3002 -message.configure.ldap=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u914d\u7f6e LDAP\u3002 -message.confirm.delete.ciscovnmc.resource=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 Cisco VNMC \u8d44\u6e90 -message.confirm.add.vnmc.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u6dfb\u52a0 VNMC \u63d0\u4f9b\u7a0b\u5e8f\u3002 -message.confirm.enable.vnmc.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f\u3002 -message.confirm.disable.vnmc.provider=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u7981\u7528 VNMC \u63d0\u4f9b\u7a0b\u5e8f\u3002 -message.vnmc.available.list=\u63d0\u4f9b\u7a0b\u5e8f\u5217\u8868\u4e2d\u672a\u63d0\u4f9b VNMC\u3002 -message.vnmc.not.available.list=\u63d0\u4f9b\u7a0b\u5e8f\u5217\u8868\u4e2d\u672a\u63d0\u4f9b VNMC\u3002 -message.confirm.release.dedicate.vlan.range=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u91ca\u653e\u4e13\u7528 VLAN \u8303\u56f4 -message.confirm.start.lb.vm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u542f\u52a8 LB VM -message.confirm.stop.lb.vm=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u505c\u6b62 LB VM -message.confirm.remove.vmware.datacenter=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 VMware \u6570\u636e\u4e2d\u5fc3 -message.confirm.dedicate.zone=\u662f\u5426\u8981\u5c06\u6b64\u8d44\u6e90\u57df\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? -message.confirm.release.dedicated.zone=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u8d44\u6e90\u57df? -message.dedicated.zone.released=\u5df2\u91ca\u653e\u4e13\u7528\u8d44\u6e90\u57df -message.read.admin.guide.scaling.up=\u5f00\u59cb\u6269\u5c55\u4e4b\u524d\uff0c\u8bf7\u9605\u8bfb\u7ba1\u7406\u6307\u5357\u4e2d\u7684\u52a8\u6001\u6269\u5c55\u90e8\u5206\u3002 -message.confirm.scale.up.system.vm=\u662f\u5426\u786e\u5b9e\u8981\u6269\u5c55\u7cfb\u7edf VM? -message.confirm.upgrade.router.newer.template=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f -message.confirm.scale.up.router.vm=\u662f\u5426\u786e\u5b9e\u8981\u6269\u5c55\u8def\u7531\u5668 VM? -message.confirm.upgrade.routers.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u8d44\u6e90\u57df\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f -message.confirm.upgrade.routers.pod.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u63d0\u4f9b\u70b9\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f -message.confirm.upgrade.routers.cluster.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u7fa4\u96c6\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f -message.confirm.upgrade.routers.account.newtemplate=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5347\u7ea7\u6b64\u5e10\u6237\u4e2d\u7684\u6240\u6709\u8def\u7531\u5668\u4ee5\u4f7f\u7528\u66f4\u65b0\u7684\u6a21\u677f -message.confirm.dedicate.pod.domain.account=\u662f\u5426\u786e\u5b9e\u8981\u5c06\u6b64\u63d0\u4f9b\u70b9\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? -message.confirm.release.dedicated.pod=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u63d0\u4f9b\u70b9? -message.pod.dedication.released=\u5df2\u91ca\u653e\u4e13\u7528\u63d0\u4f9b\u70b9 -message.confirm.dedicate.cluster.domain.account=\u662f\u5426\u786e\u5b9e\u8981\u5c06\u6b64\u7fa4\u96c6\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? -message.cluster.dedicated=\u7fa4\u96c6\u5df2\u4e13\u7528 -message.confirm.release.dedicated.cluster=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u7fa4\u96c6? -message.cluster.dedication.released=\u5df2\u91ca\u653e\u4e13\u7528\u7fa4\u96c6 -message.confirm.dedicate.host.domain.account=\u662f\u5426\u786e\u5b9e\u8981\u5c06\u6b64\u4e3b\u673a\u4e13\u7528\u4e8e\u57df/\u5e10\u6237? -message.host.dedicated=\u4e3b\u673a\u5df2\u4e13\u7528 -message.confirm.release.dedicated.host=\u662f\u5426\u8981\u91ca\u653e\u6b64\u4e13\u7528\u4e3b\u673a? -message.host.dedication.released=\u5df2\u91ca\u653e\u4e13\u7528\u4e3b\u673a -message.confirm.delete.ucs.manager=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664 UCS Manager -message.confirm.refresh.blades=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5237\u65b0\u5200\u7247\u5f0f\u670d\u52a1\u5668\u3002 -message.confirm.delete.secondary.staging.store=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u4e8c\u7ea7\u6682\u5b58\u5b58\u50a8\u3002 -message.select.tier=\u8bf7\u9009\u62e9\u4e00\u4e2a\u5c42 -message.disallowed.characters=\u7981\u7528\u5b57\u7b26\: <,> -message.waiting.for.builtin.templates.to.load=\u6b63\u5728\u7b49\u5f85\u52a0\u8f7d\u5185\u7f6e\u6a21\u677f... -message.systems.vms.ready=\u7cfb\u7edf VM \u5df2\u5c31\u7eea\u3002 -message.your.cloudstack.is.ready=\u60a8\u7684 CloudStack \u5df2\u5c31\u7eea\! -message.specifiy.tag.key.value=\u8bf7\u6307\u5b9a\u6807\u8bb0\u5bc6\u94a5\u548c\u503c -message.enter.seperated.list.multiple.cidrs=\u5982\u679c\u5b58\u5728\u591a\u4e2a CIDR\uff0c\u8bf7\u8f93\u5165\u7528\u9017\u53f7\u5206\u9694\u7684 CIDR \u5217\u8868 -message.disabling.network.offering=\u7981\u7528\u7f51\u7edc\u65b9\u6848 -message.confirm.enable.network.offering=\u662f\u5426\u786e\u5b9e\u8981\u542f\u7528\u6b64\u7f51\u7edc\u65b9\u6848? -message.enabling.network.offering=\u542f\u7528\u7f51\u7edc\u65b9\u6848 -message.confirm.remove.network.offering=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64\u7f51\u7edc\u65b9\u6848? -message.confirm.disable.network.offering=\u662f\u5426\u786e\u5b9e\u8981\u7981\u7528\u6b64\u7f51\u7edc\u65b9\u6848? -message.disabling.vpc.offering=\u7981\u7528 VPC \u65b9\u6848 -message.confirm.enable.vpc.offering=\u662f\u5426\u786e\u5b9e\u8981\u542f\u7528\u6b64 VPC \u65b9\u6848? -message.enabling.vpc.offering=\u542f\u7528 VPC \u65b9\u6848 -message.confirm.remove.vpc.offering=\u662f\u5426\u786e\u5b9e\u8981\u5220\u9664\u6b64 VPC \u65b9\u6848? -message.confirm.disable.vpc.offering=\u662f\u5426\u786e\u5b9e\u8981\u7981\u7528\u6b64 VPC \u65b9\u6848? mode=\u6a21\u5f0f network.rate=\u7f51\u7edc\u901f\u7387 notification.reboot.instance=\u91cd\u65b0\u542f\u52a8\u5b9e\u4f8b @@ -2070,45 +2027,3 @@ state.Stopping=\u6b63\u5728\u505c\u6b62 state.Suspended=\u5df2\u6682\u505c ui.listView.filters.all=\u5168\u90e8 ui.listView.filters.mine=\u672c\u7528\u6237 -label.na=\u4e0d\u9002\u7528 -label.added.network.offering=\u5df2\u6dfb\u52a0\u7f51\u7edc\u65b9\u6848 -hint.type.part.storage.tag=\u8bf7\u952e\u5165\u5b58\u50a8\u6807\u8bb0\u7684\u4e00\u90e8\u5206 -hint.type.part.host.tag=\u8bf7\u952e\u5165\u4e3b\u673a\u6807\u8bb0\u7684\u4e00\u90e8\u5206 -hint.no.storage.tags=\u627e\u4e0d\u5230\u5b58\u50a8\u6807\u8bb0 -hint.no.host.tags=\u627e\u4e0d\u5230\u4e3b\u673a\u6807\u8bb0 -label.availabilityZone=\u53ef\u7528\u6027\u533a\u57df -label.diskoffering=\u78c1\u76d8\u65b9\u6848 -title.upload.volume=\u4e0a\u8f7d\u5377 -label.format.lower=\u683c\u5f0f -label.checksum=\u6821\u9a8c\u548c -label.assign.vms=\u5206\u914d VM -label.extractable.lower=\u53ef\u63d0\u53d6 -label.globo.dns=GloboDNS -label.add.globo.dns=\u6dfb\u52a0 GloboDNS -label.globo.dns.configuration=GloboDNS \u914d\u7f6e -label.region.details=\u5730\u7406\u533a\u57df\u8be6\u7ec6\u4fe1\u606f -label.baremetal.rack.configuration=\u88f8\u673a\u673a\u67b6\u914d\u7f6e -label.add.baremetal.rack.configuration=\u6dfb\u52a0\u88f8\u673a\u673a\u67b6\u914d\u7f6e -label.delete.baremetal.rack.configuration=\u5220\u9664\u88f8\u673a\u673a\u67b6\u914d\u7f6e -message.confirm.delete.baremetal.rack.configuration=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u9664\u88f8\u673a\u673a\u67b6\u914d\u7f6e\u3002 -message.added.new.nuage.vsp.controller=\u5df2\u6dfb\u52a0\u65b0 Nuage Vsp \u63a7\u5236\u5668 -message.added.vpc.offering=\u5df2\u6dfb\u52a0 VPC \u65b9\u6848 -label.keyboard.language=\u952e\u76d8\u8bed\u8a00 -label.standard.us.keyboard=\u6807\u51c6\u7f8e\u5f0f\u952e\u76d8 -label.uk.keyboard=\u82f1\u5f0f\u952e\u76d8 -label.japanese.keyboard=\u65e5\u5f0f\u952e\u76d8 -label.simplified.chinese.keyboard=\u7b80\u4f53\u4e2d\u6587\u952e\u76d8 -label.display.name=\u663e\u793a\u540d\u79f0 -label.zone.name=\u8d44\u6e90\u57df\u540d\u79f0 -label.instances=\u5b9e\u4f8b -label.event=\u4e8b\u4ef6 -label.minutes.past.hour=\u5206(\u6bcf\u5c0f\u65f6) -label.snapshots=\u5feb\u7167 -label.time.colon=\u65f6\u95f4\: -label.min.past.the.hr=\u5206(\u6bcf\u5c0f\u65f6) -label.timezone.colon=\u65f6\u533a\: -label.keep.colon=\u4fdd\u7559\u6570\u91cf\: -label.every=\u6bcf -label.day=\u6bcf\u6708 -label.of.month=\u65e5 -label.add.private.gateway=\u6dfb\u52a0\u4e13\u7528\u7f51\u5173 From e63a56d650e31ab513f82ea359756b799217d47e Mon Sep 17 00:00:00 2001 From: Sten Spans Date: Thu, 30 Jul 2015 12:47:49 +0200 Subject: [PATCH 066/314] Update NiciraNvpGuestNetworkGuruTest.java add partial vxlan tests --- .../guru/NiciraNvpGuestNetworkGuruTest.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java index 881c39fa72a..36e4643401e 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java @@ -114,13 +114,17 @@ public class NiciraNvpGuestNetworkGuruTest { when(offering.getGuestType()).thenReturn(GuestType.Isolated); final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); - when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"})); + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT", "VXLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); assertTrue(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); + // Supported: IsolationMethod == VXLAN + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VXLAN"})); + assertTrue(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); + // Not supported TrafficType != Guest when(offering.getTrafficType()).thenReturn(TrafficType.Management); assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); @@ -134,7 +138,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(offering.getGuestType()).thenReturn(GuestType.Isolated); assertFalse(guru.canHandle(offering, NetworkType.Basic, physnet) == true); - // Not supported: IsolationMethod != STT + // Not supported: IsolationMethod != STT, VXLAN when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VLAN"})); assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); @@ -144,7 +148,7 @@ public class NiciraNvpGuestNetworkGuruTest { public void testDesign() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); - when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"})); + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT", "VXLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NiciraNvpDeviceVO device = mock(NiciraNvpDeviceVO.class); @@ -171,7 +175,7 @@ public class NiciraNvpGuestNetworkGuruTest { public void testDesignNoElementOnPhysicalNetwork() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); - when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"})); + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT", "VXLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); mock(NiciraNvpDeviceVO.class); @@ -217,7 +221,7 @@ public class NiciraNvpGuestNetworkGuruTest { public void testDesignNoConnectivityInOffering() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); - when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"})); + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT", "VXLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NiciraNvpDeviceVO device = mock(NiciraNvpDeviceVO.class); @@ -243,7 +247,7 @@ public class NiciraNvpGuestNetworkGuruTest { public void testImplement() throws InsufficientVirtualNetworkCapacityException { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); - when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"})); + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT", "VXLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NiciraNvpDeviceVO device = mock(NiciraNvpDeviceVO.class); @@ -412,7 +416,7 @@ public class NiciraNvpGuestNetworkGuruTest { public void testShutdown() throws InsufficientVirtualNetworkCapacityException, URISyntaxException { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); - when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"})); + when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT", "VXLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NiciraNvpDeviceVO device = mock(NiciraNvpDeviceVO.class); From 85e002b2309ebf46f5c5ab1054488e0b1c17957d Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 21 Jul 2015 13:10:15 +0200 Subject: [PATCH 067/314] CLOUDSTACK-8656: filling empty catch block with info messages using regexp "catch\s*\(\s*(Exception|Throwable)\s*\w*\)\s*\{\s*\}" --- .../cloud/storage/template/OVAProcessor.java | 3 +- .../cloud/storage/template/VmdkProcessor.java | 3 +- .../manager/ClusteredAgentManagerImpl.java | 2 + .../entity/api/db/dao/EngineHostDaoImpl.java | 3 + .../cloud/storage/dao/SnapshotDaoImpl.java | 10 +-- .../client/ClientTransportProvider.java | 9 ++- .../framework/jobs/dao/VmWorkJobDaoImpl.java | 21 ++++-- .../dao/MockConfigurationDaoImpl.java | 24 ++++--- .../manager/VmwareStorageManagerImpl.java | 8 ++- .../network/resource/NetscalerResource.java | 3 +- .../network/ovs/OvsTunnelManagerImpl.java | 68 ++++++++++--------- ...idFireSharedPrimaryDataStoreLifeCycle.java | 20 ++++-- .../storage/datastore/util/SolidFireUtil.java | 38 ++++++----- .../security/SecurityGroupManagerImpl.java | 10 +-- .../main/java/streamer/InputStreamSource.java | 7 ++ .../main/java/streamer/OutputStreamSink.java | 7 ++ .../main/java/streamer/SocketWrapperImpl.java | 39 +++++++---- .../main/java/streamer/apr/AprSocketSink.java | 4 ++ .../java/streamer/apr/AprSocketSource.java | 4 ++ .../streamer/apr/AprSocketWrapperImpl.java | 8 +++ .../streamer/bco/BcoSocketWrapperImpl.java | 10 +++ .../main/java/streamer/debug/MockServer.java | 11 ++- .../consoleproxy/ConsoleProxyGCThread.java | 4 +- .../com/cloud/consoleproxy/vnc/VncClient.java | 16 +++-- .../test/stress/StressTestDirectAttach.java | 2 + .../cloud/test/stress/TestClientWithAPI.java | 2 + .../com/cloud/test/ui/AddAndDeleteAISO.java | 6 ++ .../cloud/test/ui/AddAndDeleteATemplate.java | 6 ++ .../src/com/cloud/test/ui/UIScenarioTest.java | 4 ++ .../com/cloud/test/utils/IpSqlGenerator.java | 3 +- .../cloud/test/utils/SqlDataGenerator.java | 3 +- test/src/com/cloud/test/utils/TestClient.java | 2 + .../src/com/cloud/utils/crypt/RSAHelper.java | 4 ++ .../com/cloud/utils/time/InaccurateClock.java | 5 +- .../cloud/hypervisor/vmware/mo/TaskMO.java | 5 ++ .../hypervisor/vmware/util/VmwareClient.java | 33 +++++---- .../hypervisor/vmware/util/VmwareHelper.java | 3 +- 37 files changed, 277 insertions(+), 133 deletions(-) diff --git a/core/src/com/cloud/storage/template/OVAProcessor.java b/core/src/com/cloud/storage/template/OVAProcessor.java index 78825ced8ac..3d7f7a23bd7 100644 --- a/core/src/com/cloud/storage/template/OVAProcessor.java +++ b/core/src/com/cloud/storage/template/OVAProcessor.java @@ -91,7 +91,8 @@ public class OVAProcessor extends AdapterBase implements Processor { long size = getTemplateVirtualSize(file.getParent(), file.getName()); return size; } catch (Exception e) { - + s_logger.info("[ignored]" + + "failed to get virtual template size for ova: " + e.getLocalizedMessage()); } return file.length(); } diff --git a/core/src/com/cloud/storage/template/VmdkProcessor.java b/core/src/com/cloud/storage/template/VmdkProcessor.java index 929157e5dcb..3d399f5791b 100644 --- a/core/src/com/cloud/storage/template/VmdkProcessor.java +++ b/core/src/com/cloud/storage/template/VmdkProcessor.java @@ -77,7 +77,8 @@ public class VmdkProcessor extends AdapterBase implements Processor { long size = getTemplateVirtualSize(file.getParent(), file.getName()); return size; } catch (Exception e) { - + s_logger.info("[ignored]" + + "failed to get template virtual size for vmdk: " + e.getLocalizedMessage()); } return file.length(); } diff --git a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index ba82938fcdc..d11612d9ebd 100644 --- a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -483,6 +483,8 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust try { prevCh.close(); } catch (Exception e) { + s_logger.info("[ignored]" + + "failed to get close resource for previous channel Socket: " + e.getLocalizedMessage()); } } if (ch == null || ch == prevCh) { diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java index fd68c5450b0..3a45976877d 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/EngineHostDaoImpl.java @@ -611,7 +611,10 @@ public class EngineHostDaoImpl extends GenericDaoBase implem l.add(info); } } catch (SQLException e) { + s_logger.error("sql exception while getting running hosts: " + e.getLocalizedMessage()); } catch (Throwable e) { + s_logger.info("[ignored]" + + "caught something while getting running hosts: " + e.getLocalizedMessage()); } return l; } diff --git a/engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java index 84a92d7bf0d..ccca9444406 100644 --- a/engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java +++ b/engine/schema/src/com/cloud/storage/dao/SnapshotDaoImpl.java @@ -41,12 +41,12 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericSearchBuilder; -import com.cloud.utils.db.UpdateBuilder; import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.db.TransactionLegacy; +import com.cloud.utils.db.UpdateBuilder; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.VMInstanceDao; @@ -208,6 +208,8 @@ public class SnapshotDaoImpl extends GenericDaoBase implements return rs.getLong(1); } } catch (Exception ex) { + s_logger.info("[ignored]" + + "caught something while getting sec. host id: " + ex.getLocalizedMessage()); } return null; } @@ -276,7 +278,7 @@ public class SnapshotDaoImpl extends GenericDaoBase implements @Override public List listByInstanceId(long instanceId, Snapshot.State... status) { - SearchCriteria sc = this.InstanceIdSearch.create(); + SearchCriteria sc = InstanceIdSearch.create(); if (status != null && status.length != 0) { sc.setParameters("status", (Object[])status); @@ -289,7 +291,7 @@ public class SnapshotDaoImpl extends GenericDaoBase implements @Override public List listByStatus(long volumeId, Snapshot.State... status) { - SearchCriteria sc = this.StatusSearch.create(); + SearchCriteria sc = StatusSearch.create(); sc.setParameters("volumeId", volumeId); sc.setParameters("status", (Object[])status); return listBy(sc, null); @@ -311,7 +313,7 @@ public class SnapshotDaoImpl extends GenericDaoBase implements @Override public List listAllByStatus(Snapshot.State... status) { - SearchCriteria sc = this.StatusSearch.create(); + SearchCriteria sc = StatusSearch.create(); sc.setParameters("status", (Object[])status); return listBy(sc, null); } diff --git a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java b/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java index b4065640329..ae28f900e54 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/client/ClientTransportProvider.java @@ -23,6 +23,8 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import org.apache.log4j.Logger; + import org.apache.cloudstack.framework.serializer.MessageSerializer; import org.apache.cloudstack.framework.transport.TransportEndpoint; import org.apache.cloudstack.framework.transport.TransportEndpointSite; @@ -32,10 +34,11 @@ import org.apache.cloudstack.managed.context.ManagedContextRunnable; import com.cloud.utils.concurrency.NamedThreadFactory; public class ClientTransportProvider implements TransportProvider { + final static Logger s_logger = Logger.getLogger(ClientTransportProvider.class); public static final int DEFAULT_WORKER_POOL_SIZE = 5; - private Map _endpointSites = new HashMap(); - private Map _attachedMap = new HashMap(); + private final Map _endpointSites = new HashMap(); + private final Map _attachedMap = new HashMap(); private MessageSerializer _messageSerializer; @@ -69,6 +72,8 @@ public class ClientTransportProvider implements TransportProvider { try { _connection.connect(_serverAddress, _serverPort); } catch (Throwable e) { + s_logger.info("[ignored]" + + "error during ipc client initialization: " + e.getLocalizedMessage()); } } }); diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java index d38de0ebadd..e81ab1ebbf7 100644 --- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java +++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/dao/VmWorkJobDaoImpl.java @@ -20,6 +20,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; import java.util.List; + import javax.annotation.PostConstruct; import javax.inject.Inject; @@ -166,25 +167,35 @@ public class VmWorkJobDaoImpl extends GenericDaoBase implemen public void doInTransactionWithoutResult(TransactionStatus status) { TransactionLegacy txn = TransactionLegacy.currentTxn(); - PreparedStatement pstmt = null; - try { - pstmt = txn.prepareAutoCloseStatement( + try ( + PreparedStatement pstmt = txn + .prepareAutoCloseStatement( "DELETE FROM vm_work_job WHERE id IN (SELECT id FROM async_job WHERE (job_dispatcher='VmWorkJobPlaceHolder' OR job_dispatcher='VmWorkJobDispatcher') AND job_init_msid=?)"); + ) { pstmt.setLong(1, msid); pstmt.execute(); } catch (SQLException e) { + s_logger.info("[ignored]" + + "SQL failed to delete vm work job: " + e.getLocalizedMessage()); } catch (Throwable e) { + s_logger.info("[ignored]" + + "caught an error during delete vm work job: " + e.getLocalizedMessage()); } - try { - pstmt = txn.prepareAutoCloseStatement( + try ( + PreparedStatement pstmt = txn.prepareAutoCloseStatement( "DELETE FROM async_job WHERE (job_dispatcher='VmWorkJobPlaceHolder' OR job_dispatcher='VmWorkJobDispatcher') AND job_init_msid=?"); + ) { pstmt.setLong(1, msid); pstmt.execute(); } catch (SQLException e) { + s_logger.info("[ignored]" + + "SQL failed to delete async job: " + e.getLocalizedMessage()); } catch (Throwable e) { + s_logger.info("[ignored]" + + "caught an error during delete async job: " + e.getLocalizedMessage()); } } }); diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java index 314179887c3..1196260a9ae 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java @@ -22,6 +22,7 @@ import java.util.Formatter; import javax.ejb.Local; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.simulator.MockConfigurationVO; @@ -33,11 +34,12 @@ import com.cloud.utils.db.TransactionLegacy; @Component @Local(value = {MockConfigurationDao.class}) public class MockConfigurationDaoImpl extends GenericDaoBase implements MockConfigurationDao { - private SearchBuilder _searchByDcIdName; - private SearchBuilder _searchByDcIDPodIdName; - private SearchBuilder _searchByDcIDPodIdClusterIdName; - private SearchBuilder _searchByDcIDPodIdClusterIdHostIdName; - private SearchBuilder _searchByGlobalName; + final static Logger s_logger = Logger.getLogger(MockConfigurationDaoImpl.class); + private final SearchBuilder _searchByDcIdName; + private final SearchBuilder _searchByDcIDPodIdName; + private final SearchBuilder _searchByDcIDPodIdClusterIdName; + private final SearchBuilder _searchByDcIDPodIdClusterIdHostIdName; + private final SearchBuilder _searchByGlobalName; public MockConfigurationDaoImpl() { _searchByGlobalName = createSearchBuilder(); @@ -131,16 +133,16 @@ public class MockConfigurationDaoImpl extends GenericDaoBase vmIds = _ovsNetworkToplogyGuru.getActiveVmsInNetworkOnHost(nw.getId(), host.getId(), true); @@ -770,7 +771,8 @@ public class OvsTunnelManagerImpl extends ManagerBase implements OvsTunnelManage try { remoteIp = getGreEndpointIP(hostDetails, network); } catch (Exception e) { - + s_logger.info("[ignored]" + + "error getting GRE endpoint: " + e.getLocalizedMessage()); } } OvsVpcPhysicalTopologyConfigCommand.Host host = new OvsVpcPhysicalTopologyConfigCommand.Host(hostId, remoteIp); diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java index bc22ac7342b..d14a6298061 100644 --- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java +++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java @@ -20,9 +20,9 @@ package org.apache.cloudstack.storage.datastore.lifecycle; import java.text.NumberFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.HashMap; import javax.inject.Inject; @@ -43,9 +43,6 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.util.SolidFireUtil; import org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper; -import com.cloud.template.TemplateManager; -import com.cloud.user.AccountDetailsDao; -import com.cloud.user.AccountVO; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.CreateStoragePoolCommand; @@ -56,19 +53,22 @@ import com.cloud.dc.ClusterDetailsVO; import com.cloud.dc.ClusterVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; -import com.cloud.host.dao.HostDao; import com.cloud.host.Host; import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.resource.ResourceManager; import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolAutomation; import com.cloud.storage.StoragePoolHostVO; import com.cloud.storage.VMTemplateStoragePoolVO; +import com.cloud.storage.dao.StoragePoolHostDao; +import com.cloud.template.TemplateManager; import com.cloud.user.Account; +import com.cloud.user.AccountDetailsDao; +import com.cloud.user.AccountVO; import com.cloud.user.dao.AccountDao; import com.cloud.utils.exception.CloudRuntimeException; @@ -178,6 +178,8 @@ public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStor lMinIops = Long.parseLong(minIops); } } catch (Exception ex) { + s_logger.info("[ignored]" + + "error getting minimals iops: " + ex.getLocalizedMessage()); } try { @@ -187,6 +189,8 @@ public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStor lMaxIops = Long.parseLong(maxIops); } } catch (Exception ex) { + s_logger.info("[ignored]" + + "error getting maximal iops: " + ex.getLocalizedMessage()); } try { @@ -196,6 +200,8 @@ public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStor lBurstIops = Long.parseLong(burstIops); } } catch (Exception ex) { + s_logger.info("[ignored]" + + "error getting iops bursts: " + ex.getLocalizedMessage()); } if (lMinIops > lMaxIops) { @@ -526,7 +532,7 @@ public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStor if (answer != null && answer.getResult()) { s_logger.info("Successfully deleted storage pool using Host ID " + host.getHostId()); - HostVO hostVO = this._hostDao.findById(host.getHostId()); + HostVO hostVO = _hostDao.findById(host.getHostId()); if (hostVO != null) { clusterId = hostVO.getClusterId(); diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java index 8ff4454ad33..9c486db429c 100644 --- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java +++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/util/SolidFireUtil.java @@ -38,9 +38,6 @@ import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; -import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao; -import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; @@ -53,12 +50,16 @@ import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.BasicClientConnectionManager; - -import org.apache.cloudstack.utils.security.SSLUtils; +import org.apache.log4j.Logger; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; +import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO; +import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao; +import org.apache.cloudstack.utils.security.SSLUtils; + import com.cloud.dc.ClusterDetailsDao; import com.cloud.dc.ClusterDetailsVO; import com.cloud.host.Host; @@ -68,6 +69,7 @@ import com.cloud.user.AccountDetailsDao; import com.cloud.utils.exception.CloudRuntimeException; public class SolidFireUtil { + private static final Logger s_logger = Logger.getLogger(SolidFireUtil.class); public static final String PROVIDER_NAME = "SolidFire"; public static final String SHARED_PROVIDER_NAME = "SolidFireShared"; @@ -1272,7 +1274,7 @@ public class SolidFireUtil { } private static final class VolumeToDeleteParams { - private long volumeID; + private final long volumeID; private VolumeToDeleteParams(final long lVolumeId) { volumeID = lVolumeId; @@ -1291,7 +1293,7 @@ public class SolidFireUtil { } private static final class VolumeToPurgeParams { - private long volumeID; + private final long volumeID; private VolumeToPurgeParams(final long lVolumeId) { volumeID = lVolumeId; @@ -1309,8 +1311,8 @@ public class SolidFireUtil { } private static final class SnapshotToCreateParams { - private long volumeID; - private String name; + private final long volumeID; + private final String name; private SnapshotToCreateParams(final long lVolumeId, final String snapshotName) { volumeID = lVolumeId; @@ -1330,7 +1332,7 @@ public class SolidFireUtil { } private static final class SnapshotToDeleteParams { - private long snapshotID; + private final long snapshotID; private SnapshotToDeleteParams(final long lSnapshotId) { snapshotID = lSnapshotId; @@ -1348,8 +1350,8 @@ public class SolidFireUtil { } private static final class RollbackToInitiateParams { - private long volumeID; - private long snapshotID; + private final long volumeID; + private final long snapshotID; private RollbackToInitiateParams(final long lVolumeId, final long lSnapshotId) { volumeID = lVolumeId; @@ -1368,9 +1370,9 @@ public class SolidFireUtil { } private static final class CloneToCreateParams { - private long volumeID; - private long snapshotID; - private String name; + private final long volumeID; + private final long snapshotID; + private final String name; private CloneToCreateParams(final long lVolumeId, final long lSnapshotId, final String cloneName) { volumeID = lVolumeId; @@ -1456,7 +1458,7 @@ public class SolidFireUtil { } private static final class AccountToRemoveParams { - private long accountID; + private final long accountID; private AccountToRemoveParams(final long lAccountId) { accountID = lAccountId; @@ -1565,7 +1567,7 @@ public class SolidFireUtil { } private static final class VagToDeleteParams { - private long volumeAccessGroupID; + private final long volumeAccessGroupID; private VagToDeleteParams(final long lVagId) { volumeAccessGroupID = lVagId; @@ -1772,6 +1774,8 @@ public class SolidFireUtil { try { httpClient.getConnectionManager().shutdown(); } catch (Exception t) { + s_logger.info("[ignored]" + + "error shutting down http client: " + t.getLocalizedMessage()); } } } diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index 174106d6e87..045c2e3f667 100644 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -40,7 +40,6 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.utils.fsm.StateMachine2; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; @@ -107,6 +106,7 @@ import com.cloud.utils.db.TransactionCallbackWithException; import com.cloud.utils.db.TransactionStatus; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.StateListener; +import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; @@ -200,10 +200,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro try { work(); } catch (Throwable th) { - try { s_logger.error("Problem with SG work", th); - } catch (Throwable th2) { - } } } } @@ -216,10 +213,7 @@ public class SecurityGroupManagerImpl extends ManagerBase implements SecurityGro cleanupUnfinishedWork(); //processScheduledWork(); } catch (Throwable th) { - try { - s_logger.error("Problem with SG Cleanup", th); - } catch (Throwable th2) { - } + s_logger.error("Problem with SG Cleanup", th); } } } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/InputStreamSource.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/InputStreamSource.java index 0c8c97df690..958e5e0f016 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/InputStreamSource.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/InputStreamSource.java @@ -20,12 +20,15 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import org.apache.log4j.Logger; + import streamer.debug.FakeSink; /** * Source element, which reads data from InputStream. */ public class InputStreamSource extends BaseElement { + private static final Logger s_logger = Logger.getLogger(InputStreamSource.class); protected InputStream is; protected SocketWrapperImpl socketWrapper; @@ -148,10 +151,14 @@ public class InputStreamSource extends BaseElement { try { is.close(); } catch (IOException e) { + s_logger.info("[ignored]" + + "io error on input stream: " + e.getLocalizedMessage()); } try { sendEventToAllPads(Event.STREAM_CLOSE, Direction.OUT); } catch (Exception e) { + s_logger.info("[ignored]" + + "error sending an event to all pods: " + e.getLocalizedMessage()); } } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OutputStreamSink.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OutputStreamSink.java index e66899df8fc..27ef614440f 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OutputStreamSink.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/OutputStreamSink.java @@ -20,9 +20,12 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import org.apache.log4j.Logger; + import streamer.debug.FakeSource; public class OutputStreamSink extends BaseElement { + private static final Logger s_logger = Logger.getLogger(OutputStreamSink.class); protected OutputStream os; protected SocketWrapperImpl socketWrapper; @@ -110,10 +113,14 @@ public class OutputStreamSink extends BaseElement { try { os.close(); } catch (IOException e) { + s_logger.info("[ignored]" + + "io error on output: " + e.getLocalizedMessage()); } try { sendEventToAllPads(Event.STREAM_CLOSE, Direction.IN); } catch (Exception e) { + s_logger.info("[ignored]" + + "error sending output close event: " + e.getLocalizedMessage()); } } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java index 4713173bd2e..3e05d45f1ad 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/SocketWrapperImpl.java @@ -16,18 +16,9 @@ // under the License. package streamer; -import org.apache.cloudstack.utils.security.SSLUtils; -import org.apache.cloudstack.utils.security.SecureSSLSocketFactory; -import streamer.debug.MockServer; -import streamer.debug.MockServer.Packet; -import streamer.ssl.SSLState; -import streamer.ssl.TrustAllX509TrustManager; +import static streamer.debug.MockServer.Packet.PacketType.CLIENT; +import static streamer.debug.MockServer.Packet.PacketType.SERVER; -import javax.net.SocketFactory; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManager; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -35,10 +26,24 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.util.HashMap; -import static streamer.debug.MockServer.Packet.PacketType.CLIENT; -import static streamer.debug.MockServer.Packet.PacketType.SERVER; +import javax.net.SocketFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.utils.security.SSLUtils; +import org.apache.cloudstack.utils.security.SecureSSLSocketFactory; + +import streamer.debug.MockServer; +import streamer.debug.MockServer.Packet; +import streamer.ssl.SSLState; +import streamer.ssl.TrustAllX509TrustManager; public class SocketWrapperImpl extends PipelineImpl implements SocketWrapper { + private static final Logger s_logger = Logger.getLogger(SocketWrapperImpl.class); protected InputStreamSource source; protected OutputStreamSink sink; @@ -172,19 +177,27 @@ public class SocketWrapperImpl extends PipelineImpl implements SocketWrapper { try { handleEvent(Event.STREAM_CLOSE, Direction.IN); } catch (Exception e) { + s_logger.info("[ignored]" + + "error sending input close event: " + e.getLocalizedMessage()); } try { handleEvent(Event.STREAM_CLOSE, Direction.OUT); } catch (Exception e) { + s_logger.info("[ignored]" + + "error sending output close event: " + e.getLocalizedMessage()); } try { if (sslSocket != null) sslSocket.close(); } catch (Exception e) { + s_logger.info("[ignored]" + + "error closing ssl socket: " + e.getLocalizedMessage()); } try { socket.close(); } catch (Exception e) { + s_logger.info("[ignored]" + + "error closing socket: " + e.getLocalizedMessage()); } } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java index edfe8dbc752..204ebb620e2 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSink.java @@ -16,6 +16,7 @@ // under the License. package streamer.apr; +import org.apache.log4j.Logger; import org.apache.tomcat.jni.Socket; import streamer.BaseElement; @@ -26,6 +27,7 @@ import streamer.Event; import streamer.Link; public class AprSocketSink extends BaseElement { + private static final Logger s_logger = Logger.getLogger(AprSocketSink.class); protected AprSocketWrapperImpl socketWrapper; protected Long socket; @@ -117,6 +119,8 @@ public class AprSocketSink extends BaseElement { try { sendEventToAllPads(Event.STREAM_CLOSE, Direction.IN); } catch (Exception e) { + s_logger.info("[ignored]" + + "failing sending sink event to all pads: " + e.getLocalizedMessage()); } socketWrapper.shutdown(); } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java index 5d3d65bdc0c..32345769aa6 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketSource.java @@ -16,6 +16,7 @@ // under the License. package streamer.apr; +import org.apache.log4j.Logger; import org.apache.tomcat.jni.Socket; import streamer.BaseElement; @@ -29,6 +30,7 @@ import streamer.Link; * Source element, which reads data from InputStream. */ public class AprSocketSource extends BaseElement { + private static final Logger s_logger = Logger.getLogger(AprSocketSource.class); protected AprSocketWrapperImpl socketWrapper; protected Long socket; @@ -162,6 +164,8 @@ public class AprSocketSource extends BaseElement { try { sendEventToAllPads(Event.STREAM_CLOSE, Direction.OUT); } catch (Exception e) { + s_logger.info("[ignored]" + + "failing sending source event to all pads: " + e.getLocalizedMessage()); } socketWrapper.shutdown(); } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java index 2ee426b89c3..e8741400ced 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/apr/AprSocketWrapperImpl.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.util.HashMap; +import org.apache.log4j.Logger; import org.apache.tomcat.jni.Address; import org.apache.tomcat.jni.Error; import org.apache.tomcat.jni.Library; @@ -46,6 +47,7 @@ import streamer.ssl.SSLState; import sun.security.x509.X509CertImpl; public class AprSocketWrapperImpl extends PipelineImpl implements SocketWrapper { + private static final Logger s_logger = Logger.getLogger(AprSocketWrapperImpl.class); static { try { @@ -198,10 +200,14 @@ public class AprSocketWrapperImpl extends PipelineImpl implements SocketWrapper try { handleEvent(Event.STREAM_CLOSE, Direction.IN); } catch (Exception e) { + s_logger.info("[ignored]" + + "handling stream close event failed on input: " + e.getLocalizedMessage()); } try { handleEvent(Event.STREAM_CLOSE, Direction.OUT); } catch (Exception e) { + s_logger.info("[ignored]" + + "handling event close event failed on output: " + e.getLocalizedMessage()); } } @@ -216,6 +222,8 @@ public class AprSocketWrapperImpl extends PipelineImpl implements SocketWrapper // Socket.shutdown(socket, Socket.APR_SHUTDOWN_READWRITE); Pool.destroy(pool); } catch (Exception e) { + s_logger.info("[ignored]" + + "failure during network cleanup: " + e.getLocalizedMessage()); } } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java index 67e2dbd019e..eb5d7d00d3a 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/bco/BcoSocketWrapperImpl.java @@ -22,6 +22,7 @@ import java.io.OutputStream; import java.security.SecureRandom; import java.security.Security; +import org.apache.log4j.Logger; import org.bouncycastle.asn1.x509.X509CertificateStructure; import org.bouncycastle.crypto.tls.CertificateVerifyer; import org.bouncycastle.crypto.tls.TlsProtocolHandler; @@ -34,6 +35,7 @@ import streamer.ssl.SSLState; @SuppressWarnings("deprecation") public class BcoSocketWrapperImpl extends SocketWrapperImpl { + private static final Logger s_logger = Logger.getLogger(BcoSocketWrapperImpl.class); static { Security.addProvider(new BouncyCastleProvider()); @@ -95,19 +97,27 @@ public class BcoSocketWrapperImpl extends SocketWrapperImpl { try { handleEvent(Event.STREAM_CLOSE, Direction.IN); } catch (Exception e) { + s_logger.info("[ignored]" + + "failure handling close event for bso input stream: " + e.getLocalizedMessage()); } try { handleEvent(Event.STREAM_CLOSE, Direction.OUT); } catch (Exception e) { + s_logger.info("[ignored]" + + "failure handling close event for bso output stream: " + e.getLocalizedMessage()); } try { if (bcoSslSocket != null) bcoSslSocket.close(); } catch (Exception e) { + s_logger.info("[ignored]" + + "failure handling close event for bso socket: " + e.getLocalizedMessage()); } try { socket.close(); } catch (Exception e) { + s_logger.info("[ignored]" + + "failure handling close event for socket: " + e.getLocalizedMessage()); } } diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockServer.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockServer.java index 6b6acab6068..384ff5ee8b5 100644 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockServer.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/debug/MockServer.java @@ -27,11 +27,14 @@ import java.util.Arrays; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; +import org.apache.log4j.Logger; + public class MockServer implements Runnable { + private static final Logger s_logger = Logger.getLogger(MockServer.class); private boolean shutdown = false; private ServerSocket serverSocket; - private Packet[] packets; + private final Packet[] packets; private Throwable exception; private boolean shutdowned; @@ -131,14 +134,20 @@ public class MockServer implements Runnable { try { is.close(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "in stream close failed: " + e.getLocalizedMessage()); } try { os.close(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "out stream close failed: " + e.getLocalizedMessage()); } try { serverSocket.close(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "server socket close failed: " + e.getLocalizedMessage()); } } } catch (Throwable e) { diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java index 7b22d4b74de..b50fb94645d 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java @@ -33,7 +33,7 @@ public class ConsoleProxyGCThread extends Thread { private final static int MAX_SESSION_IDLE_SECONDS = 180; - private Hashtable connMap; + private final Hashtable connMap; private long lastLogScan = 0; public ConsoleProxyGCThread(Hashtable connMap) { @@ -54,6 +54,8 @@ public class ConsoleProxyGCThread extends Thread { try { file.delete(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "failed to delete file: " + e.getLocalizedMessage()); } } } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClient.java b/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClient.java index f470855bf41..e8b53a29b7b 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClient.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/VncClient.java @@ -45,7 +45,7 @@ public class VncClient { private DataInputStream is; private DataOutputStream os; - private VncScreenDescription screen = new VncScreenDescription(); + private final VncScreenDescription screen = new VncScreenDescription(); private VncClientPacketSender sender; private VncServerPacketReceiver receiver; @@ -86,7 +86,7 @@ public class VncClient { } public VncClient(ConsoleProxyClientListener clientListener) { - this.noUI = true; + noUI = true; this.clientListener = clientListener; } @@ -108,6 +108,8 @@ public class VncClient { try { is.close(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "failed to close resource for input: " + e.getLocalizedMessage()); } } @@ -115,6 +117,8 @@ public class VncClient { try { os.close(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "failed to get close resource for output: " + e.getLocalizedMessage()); } } @@ -122,6 +126,8 @@ public class VncClient { try { socket.close(); } catch (Throwable e) { + s_logger.info("[ignored]" + + "failed to get close resource for socket: " + e.getLocalizedMessage()); } } } @@ -139,14 +145,14 @@ public class VncClient { } RawHTTP tunnel = new RawHTTP("CONNECT", host, port, path, session, useSSL); - this.socket = tunnel.connect(); + socket = tunnel.connect(); doConnect(sid); } public void connectTo(String host, int port, String password) throws UnknownHostException, IOException { // Connect to server s_logger.info("Connecting to VNC server " + host + ":" + port + "..."); - this.socket = new Socket(host, port); + socket = new Socket(host, port); doConnect(password); } @@ -187,7 +193,7 @@ public class VncClient { frame.setVisible(false); frame.dispose(); } - this.shutdown(); + shutdown(); } } diff --git a/test/src/com/cloud/test/stress/StressTestDirectAttach.java b/test/src/com/cloud/test/stress/StressTestDirectAttach.java index 7d0647a6dd6..463023c3457 100644 --- a/test/src/com/cloud/test/stress/StressTestDirectAttach.java +++ b/test/src/com/cloud/test/stress/StressTestDirectAttach.java @@ -262,6 +262,8 @@ public class StressTestDirectAttach { int stopResponseCode = executeStop(server, developerServer, username); s_logger.info("stop response code: " + stopResponseCode); } catch (Exception e1) { + s_logger.info("[ignored]" + + "error executing stop during stress test: " + e1.getLocalizedMessage()); } } finally { NDC.clear(); diff --git a/test/src/com/cloud/test/stress/TestClientWithAPI.java b/test/src/com/cloud/test/stress/TestClientWithAPI.java index 420bda61590..548747245e0 100644 --- a/test/src/com/cloud/test/stress/TestClientWithAPI.java +++ b/test/src/com/cloud/test/stress/TestClientWithAPI.java @@ -347,6 +347,8 @@ public class TestClientWithAPI { int stopResponseCode = executeStop(server, developerServer, username, true); s_logger.info("stop response code: " + stopResponseCode); } catch (Exception e1) { + s_logger.info("[ignored]" + + "error executing stop during api test: " + e1.getLocalizedMessage()); } } finally { NDC.clear(); diff --git a/test/src/com/cloud/test/ui/AddAndDeleteAISO.java b/test/src/com/cloud/test/ui/AddAndDeleteAISO.java index 23f4b930478..d97fed3756f 100644 --- a/test/src/com/cloud/test/ui/AddAndDeleteAISO.java +++ b/test/src/com/cloud/test/ui/AddAndDeleteAISO.java @@ -56,6 +56,8 @@ public class AddAndDeleteAISO extends AbstractSeleniumTestCase { selenium.click("//div[" + i + "]/div/div[2]/span/span"); } } catch (Exception ex) { + s_logger.info("[ignored]" + + "error during clicking test on iso: " + e.getLocalizedMessage()); } for (int second = 0;; second++) { @@ -65,6 +67,8 @@ public class AddAndDeleteAISO extends AbstractSeleniumTestCase { if (selenium.isVisible("//div[@id='after_action_info_container_on_top']")) break; } catch (Exception e) { + s_logger.info("[ignored]" + + "error during visibility test of iso: " + e.getLocalizedMessage()); } Thread.sleep(10000); } @@ -101,6 +105,8 @@ public class AddAndDeleteAISO extends AbstractSeleniumTestCase { if (selenium.isVisible("after_action_info_container_on_top")) break; } catch (Exception e) { + s_logger.info("[ignored]" + + "error checking visibility after test completion for iso: " + e.getLocalizedMessage()); } Thread.sleep(1000); } diff --git a/test/src/com/cloud/test/ui/AddAndDeleteATemplate.java b/test/src/com/cloud/test/ui/AddAndDeleteATemplate.java index 962a463414a..b0b7183774f 100644 --- a/test/src/com/cloud/test/ui/AddAndDeleteATemplate.java +++ b/test/src/com/cloud/test/ui/AddAndDeleteATemplate.java @@ -56,6 +56,8 @@ public class AddAndDeleteATemplate extends AbstractSeleniumTestCase { selenium.click("//div[" + i + "]/div/div[2]/span/span"); } } catch (Exception ex) { + s_logger.info("[ignored]" + + "error during clicking test on template: " + e.getLocalizedMessage()); } for (int second = 0;; second++) { @@ -65,6 +67,8 @@ public class AddAndDeleteATemplate extends AbstractSeleniumTestCase { if (selenium.isVisible("//div[@id='after_action_info_container_on_top']")) break; } catch (Exception e) { + s_logger.info("[ignored]" + + "error during visibility test of template: " + e.getLocalizedMessage()); } Thread.sleep(10000); } @@ -101,6 +105,8 @@ public class AddAndDeleteATemplate extends AbstractSeleniumTestCase { if (selenium.isVisible("after_action_info_container_on_top")) break; } catch (Exception e) { + s_logger.info("[ignored]" + + "error checking visibility after test completion for template: " + e.getLocalizedMessage()); } Thread.sleep(1000); } diff --git a/test/src/com/cloud/test/ui/UIScenarioTest.java b/test/src/com/cloud/test/ui/UIScenarioTest.java index cbf5341f848..8fde7e37ea6 100644 --- a/test/src/com/cloud/test/ui/UIScenarioTest.java +++ b/test/src/com/cloud/test/ui/UIScenarioTest.java @@ -48,6 +48,8 @@ public class UIScenarioTest extends AbstractSeleniumTestCase { if (selenium.isVisible("//div/p[@id='after_action_info']")) break; } catch (Exception e) { + s_logger.info("[ignored]" + + "error during visibility test after start vm: " + e.getLocalizedMessage()); } Thread.sleep(10000); } @@ -64,6 +66,8 @@ public class UIScenarioTest extends AbstractSeleniumTestCase { if (selenium.isVisible("//div/p[@id='after_action_info']")) break; } catch (Exception e) { + s_logger.info("[ignored]" + + "error during visibility test after stop vm: " + e.getLocalizedMessage()); } Thread.sleep(10000); } diff --git a/test/src/com/cloud/test/utils/IpSqlGenerator.java b/test/src/com/cloud/test/utils/IpSqlGenerator.java index 736f454cb7d..c37d08b86ff 100644 --- a/test/src/com/cloud/test/utils/IpSqlGenerator.java +++ b/test/src/com/cloud/test/utils/IpSqlGenerator.java @@ -82,7 +82,8 @@ public class IpSqlGenerator { out.close(); } } catch (Exception e) { - + s_logger.info("[ignored]" + + "error during ip insert generator: " + e.getLocalizedMessage()); } } } diff --git a/test/src/com/cloud/test/utils/SqlDataGenerator.java b/test/src/com/cloud/test/utils/SqlDataGenerator.java index 530ae3e0d90..8b42b1f1237 100644 --- a/test/src/com/cloud/test/utils/SqlDataGenerator.java +++ b/test/src/com/cloud/test/utils/SqlDataGenerator.java @@ -42,7 +42,8 @@ public class SqlDataGenerator { out.flush(); out.close(); } catch (Exception e) { - + s_logger.info("[ignored]" + + "error during sql generation: " + e.getLocalizedMessage()); } } } diff --git a/test/src/com/cloud/test/utils/TestClient.java b/test/src/com/cloud/test/utils/TestClient.java index 024502276d0..a32a34be49e 100644 --- a/test/src/com/cloud/test/utils/TestClient.java +++ b/test/src/com/cloud/test/utils/TestClient.java @@ -197,6 +197,8 @@ public class TestClient { String url = server + "?email=" + username + "&password=" + username + "&command=stop"; client.executeMethod(new GetMethod(url)); } catch (Exception e1) { + s_logger.info("[ignored]" + + "error while executing last resort stop attampt: " + e1.getLocalizedMessage()); } } finally { NDC.clear(); diff --git a/utils/src/com/cloud/utils/crypt/RSAHelper.java b/utils/src/com/cloud/utils/crypt/RSAHelper.java index 4960e9e28f9..692ac225c90 100644 --- a/utils/src/com/cloud/utils/crypt/RSAHelper.java +++ b/utils/src/com/cloud/utils/crypt/RSAHelper.java @@ -34,9 +34,11 @@ import java.security.spec.RSAPublicKeySpec; import javax.crypto.Cipher; import org.apache.commons.codec.binary.Base64; +import org.apache.log4j.Logger; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class RSAHelper { + final static Logger s_logger = Logger.getLogger(RSAHelper.class); static { BouncyCastleProvider provider = new BouncyCastleProvider(); @@ -79,6 +81,8 @@ public class RSAHelper { byte[] encrypted = cipher.doFinal(content.getBytes()); returnString = Base64.encodeBase64String(encrypted); } catch (Exception e) { + s_logger.info("[ignored]" + + "error during public key encryption: " + e.getLocalizedMessage()); } return returnString; diff --git a/utils/src/com/cloud/utils/time/InaccurateClock.java b/utils/src/com/cloud/utils/time/InaccurateClock.java index 77582c17df5..2a228539070 100644 --- a/utils/src/com/cloud/utils/time/InaccurateClock.java +++ b/utils/src/com/cloud/utils/time/InaccurateClock.java @@ -95,10 +95,7 @@ public class InaccurateClock extends StandardMBean implements InaccurateClockMBe try { time = System.currentTimeMillis(); } catch (Throwable th) { - try { - s_logger.error("Unable to time", th); - } catch (Throwable th2) { - } + s_logger.error("Unable to time", th); } } } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/TaskMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/TaskMO.java index 9317e3323f8..65c6a6bd362 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/TaskMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/TaskMO.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.hypervisor.vmware.mo; +import org.apache.log4j.Logger; + import com.vmware.vim25.LocalizableMessage; import com.vmware.vim25.LocalizedMethodFault; import com.vmware.vim25.ManagedObjectReference; @@ -25,6 +27,7 @@ import com.vmware.vim25.TaskInfoState; import com.cloud.hypervisor.vmware.util.VmwareContext; public class TaskMO extends BaseMO { + private static final Logger s_logger = Logger.getLogger(TaskMO.class); public TaskMO(VmwareContext context, ManagedObjectReference morTask) { super(context, morTask); } @@ -68,6 +71,8 @@ public class TaskMO extends BaseMO { } } } catch (Exception e) { + s_logger.info("[ignored]" + + "error retrieving failure info for task : " + e.getLocalizedMessage()); } return sb.toString(); diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java index f3f7e0c93fa..27d088af159 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareClient.java @@ -16,6 +16,22 @@ // under the License. package com.cloud.hypervisor.vmware.util; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLSession; +import javax.xml.ws.BindingProvider; +import javax.xml.ws.WebServiceException; +import javax.xml.ws.handler.MessageContext; + +import org.apache.log4j.Logger; + import com.vmware.vim25.DynamicProperty; import com.vmware.vim25.InvalidCollectorVersionFaultMsg; import com.vmware.vim25.InvalidPropertyFaultMsg; @@ -38,22 +54,9 @@ import com.vmware.vim25.TraversalSpec; import com.vmware.vim25.UpdateSet; import com.vmware.vim25.VimPortType; import com.vmware.vim25.VimService; + import org.apache.cloudstack.utils.security.SSLUtils; import org.apache.cloudstack.utils.security.SecureSSLSocketFactory; -import org.apache.log4j.Logger; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLSession; -import javax.xml.ws.BindingProvider; -import javax.xml.ws.WebServiceException; -import javax.xml.ws.handler.MessageContext; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; /** * A wrapper class to handle Vmware vsphere connection and disconnection. @@ -95,6 +98,8 @@ public class VmwareClient { vimService = new VimService(); } catch (Exception e) { + s_logger.info("[ignored]" + + "failed to trust all certificates blindly: " + e.getLocalizedMessage()); } } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java index 113786b6b05..817ce265a36 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java @@ -653,7 +653,8 @@ public class VmwareHelper { } } } catch (Exception ex) { - + s_logger.info("[ignored]" + + "failed toi get message for exception: " + e.getLocalizedMessage()); } return ExceptionUtil.toString(e, printStack); From 520e0c8de04359d55521e6b8271d788edfd46c0e Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 29 Jul 2015 23:33:43 +0200 Subject: [PATCH 068/314] CLOUDSTACK-8656: code in comment removed --- .../api/command/test/AddVpnUserCmdTest.java | 26 ------------------- .../consoleproxy/ConsoleProxyClientBase.java | 12 --------- 2 files changed, 38 deletions(-) diff --git a/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java b/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java index 3755353164f..c8d99a8a245 100644 --- a/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java +++ b/api/test/org/apache/cloudstack/api/command/test/AddVpnUserCmdTest.java @@ -70,32 +70,6 @@ public class AddVpnUserCmdTest extends TestCase { }; } - /* - * @Test public void testExecuteVpnUserNotFound() { - * - * EntityManager entityManager = Mockito.mock(EntityManager.class); - * - * Mockito.when(entityManager.findById(VpnUser.class, - * Mockito.anyLong())).thenReturn(null); - * - * addVpnUserCmd._entityMgr = entityManager; try { addVpnUserCmd.execute(); - * } catch (Exception e) { } - * - * } - * - * - * @Test public void testExecuteVpnUserFound() { - * - * EntityManager entityManager = Mockito.mock(EntityManager.class); - * addVpnUserCmd._entityMgr = entityManager; - * - * VpnUser vpnUser = Mockito.mock(VpnUser.class); - * Mockito.when(entityManager.findById(VpnUser.class, - * Mockito.anyLong())).thenReturn(vpnUser); addVpnUserCmd.execute(); - * - * } - */ - @Test public void testCreateSuccess() { diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java index 6568f4df0b5..e3f2ea0f031 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java @@ -260,18 +260,6 @@ public abstract class ConsoleProxyClientBase implements ConsoleProxyClient, Cons if (s_logger.isTraceEnabled()) s_logger.trace("Ajax client start, frame buffer w: " + width + ", " + height); - /* - int retry = 0; - tracker.initCoverageTest(); - while(!tracker.hasFullCoverage() && retry < 10) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - retry++; - } - */ - List tiles = tracker.scan(true); String imgUrl = prepareAjaxImage(tiles, true); String updateUrl = prepareAjaxSession(true); From e2b62374644fccc0e9a586f61e57970b00c2b23a Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Thu, 30 Jul 2015 16:03:10 +0200 Subject: [PATCH 069/314] CLOUDSTACK-8656: debug messages on interupted exceptions --- agent/src/com/cloud/agent/AgentShell.java | 1 + .../network/security/dao/VmRulesetLogDaoImpl.java | 2 +- .../cache/manager/StorageCacheManagerImpl.java | 4 +++- .../cluster/ClusterServiceServletContainer.java | 1 + .../db/src/com/cloud/utils/db/Merovingian2.java | 1 + .../db/test/com/cloud/utils/db/GlobalLockTest.java | 1 + .../framework/messagebus/MessageBusBase.java | 1 + .../framework/messagebus/MessageDetector.java | 1 + .../sampleserver/SampleManagementServer.java | 4 ++++ .../cloudstack/messagebus/TestMessageBus.java | 13 ++++++++----- .../framework/jobs/AsyncJobManagerTest.java | 2 ++ .../framework/jobs/AsyncJobTestDispatcher.java | 1 + .../src/com/cloud/utils/db/StaticStrategy.java | 4 ++++ .../networkservice/BareMetalResourceBase.java | 1 + .../resource/HypervDirectConnectResource.java | 2 ++ .../cloud/hypervisor/kvm/resource/KVMHAMonitor.java | 4 ++-- .../kvm/storage/KVMStoragePoolManager.java | 1 + .../vmware/manager/VmwareManagerImpl.java | 1 + .../hypervisor/vmware/resource/VmwareResource.java | 3 +++ .../cloud/network/resource/NetscalerResource.java | 1 + .../cloud/storage/snapshot/SnapshotManagerImpl.java | 1 + server/src/com/cloud/vm/SystemVmLoadScanner.java | 1 + .../cloud/consoleproxy/ConsoleProxyClientBase.java | 2 ++ .../cloud/consoleproxy/ConsoleProxyGCThread.java | 1 + test/src/com/cloud/test/regression/ApiCommand.java | 1 + .../cloud/test/stress/StressTestDirectAttach.java | 1 + .../com/cloud/test/stress/TestClientWithAPI.java | 1 + test/src/com/cloud/test/utils/ConsoleProxy.java | 2 +- .../hypervisor/vmware/mo/HypervisorHostHelper.java | 1 + .../hypervisor/vmware/mo/VirtualMachineMO.java | 7 +++++++ .../cloud/hypervisor/vmware/util/VmwareContext.java | 1 + 31 files changed, 58 insertions(+), 10 deletions(-) diff --git a/agent/src/com/cloud/agent/AgentShell.java b/agent/src/com/cloud/agent/AgentShell.java index 7f834769883..961c1060176 100644 --- a/agent/src/com/cloud/agent/AgentShell.java +++ b/agent/src/com/cloud/agent/AgentShell.java @@ -464,6 +464,7 @@ public class AgentShell implements IAgentShell, Daemon { while (!_exit) Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] AgentShell was interupted."); } } catch (final ConfigurationException e) { diff --git a/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java b/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java index 90f8349349d..8fe9375c051 100644 --- a/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java +++ b/engine/schema/src/com/cloud/network/security/dao/VmRulesetLogDaoImpl.java @@ -104,7 +104,7 @@ public class VmRulesetLogDaoImpl extends GenericDaoBase im try { Thread.sleep(delayMs); } catch (InterruptedException ie) { - + s_logger.debug("[ignored] interupted while inserting security group rule log."); } } else s_logger.warn("Caught another deadlock exception while retrying inserting security group rule log, giving up"); diff --git a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java index eca841eb0d0..278c80d3247 100644 --- a/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java +++ b/engine/storage/cache/src/org/apache/cloudstack/storage/cache/manager/StorageCacheManagerImpl.java @@ -274,7 +274,9 @@ public class StorageCacheManagerImpl implements StorageCacheManager, Manager { s_logger.debug("waiting cache copy completion type: " + typeName + ", id: " + obj.getObjectId() + ", lock: " + lock.hashCode()); try { lock.wait(miliSeconds); - } catch (InterruptedException e) {} + } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while waiting for cache copy completion."); + } s_logger.debug("waken up"); now = new Date(); diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java index 9615f01a2dc..f5d67224d2b 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java @@ -170,6 +170,7 @@ public class ClusterServiceServletContainer { try { Thread.sleep(1000); } catch (InterruptedException e1) { + s_logger.debug("[ignored] interupted while waiting to retry running the servlet container."); } } } diff --git a/framework/db/src/com/cloud/utils/db/Merovingian2.java b/framework/db/src/com/cloud/utils/db/Merovingian2.java index fe0b24d4dd9..d2537e369bd 100644 --- a/framework/db/src/com/cloud/utils/db/Merovingian2.java +++ b/framework/db/src/com/cloud/utils/db/Merovingian2.java @@ -144,6 +144,7 @@ public class Merovingian2 extends StandardMBean implements MerovingianMBean { } Thread.sleep(5000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while aquiring " + key); } } String msg = "Timed out on acquiring lock " + key + " . Waited for " + ((InaccurateClock.getTime() - startTime)/1000) + "seconds"; diff --git a/framework/db/test/com/cloud/utils/db/GlobalLockTest.java b/framework/db/test/com/cloud/utils/db/GlobalLockTest.java index 58c496f330b..79f96707bf0 100644 --- a/framework/db/test/com/cloud/utils/db/GlobalLockTest.java +++ b/framework/db/test/com/cloud/utils/db/GlobalLockTest.java @@ -54,6 +54,7 @@ public class GlobalLockTest { Thread.sleep(jobDuration * 1000); } } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while testing global lock."); } finally { if (locked) { boolean unlocked = WorkLock.unlock(); diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java b/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java index e3eeb7bc6c3..3579690aa95 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java @@ -326,6 +326,7 @@ public class MessageBusBase implements MessageBus { try { wait(); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while guarding re-entrance on message bus."); } } else { break; diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDetector.java b/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDetector.java index 1dcd6bd2682..774b99969aa 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDetector.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageDetector.java @@ -41,6 +41,7 @@ public class MessageDetector implements MessageSubscriber { try { wait(timeoutInMiliseconds); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while waiting on any message."); } } } diff --git a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java b/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java index 4de8952da74..af5862c48e6 100644 --- a/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java +++ b/framework/ipc/test/org/apache/cloudstack/framework/sampleserver/SampleManagementServer.java @@ -18,13 +18,17 @@ */ package org.apache.cloudstack.framework.sampleserver; +import org.apache.log4j.Logger; + public class SampleManagementServer { + private static final Logger s_logger = Logger.getLogger(SampleManagementServer.class); public void mainLoop() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] ."); } } } diff --git a/framework/ipc/test/org/apache/cloudstack/messagebus/TestMessageBus.java b/framework/ipc/test/org/apache/cloudstack/messagebus/TestMessageBus.java index 64e4f8863cb..3ee48803e29 100644 --- a/framework/ipc/test/org/apache/cloudstack/messagebus/TestMessageBus.java +++ b/framework/ipc/test/org/apache/cloudstack/messagebus/TestMessageBus.java @@ -22,6 +22,11 @@ import javax.inject.Inject; import junit.framework.TestCase; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.framework.messagebus.MessageDetector; +import org.apache.cloudstack.framework.messagebus.MessageSubscriber; +import org.apache.cloudstack.framework.messagebus.PublishScope; +import org.apache.log4j.Logger; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,14 +34,10 @@ import org.mockito.Mockito; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.framework.messagebus.MessageDetector; -import org.apache.cloudstack.framework.messagebus.MessageSubscriber; -import org.apache.cloudstack.framework.messagebus.PublishScope; - @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:/MessageBusTestContext.xml") public class TestMessageBus extends TestCase { + private static final Logger s_logger = Logger.getLogger(TestMessageBus.class); @Inject MessageBus _messageBus; @@ -128,6 +129,7 @@ public class TestMessageBus extends TestCase { try { Thread.sleep(3000); } catch (InterruptedException e) { + s_logger.debug("[ignored] ."); } _messageBus.publish(null, "Host", PublishScope.GLOBAL, null); } @@ -148,6 +150,7 @@ public class TestMessageBus extends TestCase { try { thread.join(); } catch (InterruptedException e) { + s_logger.debug("[ignored] ."); } } } diff --git a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java b/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java index 62a8d81ced2..a49f28ef55d 100644 --- a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java +++ b/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobManagerTest.java @@ -61,6 +61,7 @@ public class AsyncJobManagerTest extends TestCase { try { Thread.sleep(3000); } catch (InterruptedException e) { + s_logger.debug("[ignored] ."); } s_logger.info("wakeup"); @@ -119,6 +120,7 @@ public class AsyncJobManagerTest extends TestCase { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] ."); } } diff --git a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java b/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java index 34351a6c934..eb30a804978 100644 --- a/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java +++ b/framework/jobs/test/org/apache/cloudstack/framework/jobs/AsyncJobTestDispatcher.java @@ -52,6 +52,7 @@ public class AsyncJobTestDispatcher extends AdapterBase implements AsyncJobDispa try { Thread.sleep(interval); } catch (InterruptedException e) { + s_logger.debug("[ignored] ."); } _asyncJobMgr.completeAsyncJob(job.getId(), Status.SUCCEEDED, 0, null); diff --git a/plugins/database/mysql-ha/src/com/cloud/utils/db/StaticStrategy.java b/plugins/database/mysql-ha/src/com/cloud/utils/db/StaticStrategy.java index c8d21dd1a8f..6b0cb24878a 100644 --- a/plugins/database/mysql-ha/src/com/cloud/utils/db/StaticStrategy.java +++ b/plugins/database/mysql-ha/src/com/cloud/utils/db/StaticStrategy.java @@ -23,6 +23,8 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import org.apache.log4j.Logger; + import com.mysql.jdbc.BalanceStrategy; import com.mysql.jdbc.Connection; import com.mysql.jdbc.ConnectionImpl; @@ -30,6 +32,7 @@ import com.mysql.jdbc.LoadBalancingConnectionProxy; import com.mysql.jdbc.SQLError; public class StaticStrategy implements BalanceStrategy { + private static final Logger s_logger = Logger.getLogger(StaticStrategy.class); public StaticStrategy() { } @@ -91,6 +94,7 @@ public class StaticStrategy implements BalanceStrategy { try { Thread.sleep(250); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while fail over in progres."); } // start fresh diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java index 7075c6b4881..5ef861d8139 100644 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BareMetalResourceBase.java @@ -303,6 +303,7 @@ public class BareMetalResourceBase extends ManagerBase implements ServerResource try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while waiting to retry running script."); } continue; } else if (res == null) { diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java index 66aa425b7cf..0e57df4ca65 100644 --- a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java +++ b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java @@ -2382,6 +2382,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S try { Thread.sleep(5000); } catch (InterruptedException ex) { + s_logger.debug("[ignored] interupted while waiting to retry connecting to vm after exception: "+e.getLocalizedMessage()); } } } finally { @@ -2396,6 +2397,7 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S try { Thread.sleep(1000); } catch (InterruptedException ex) { + s_logger.debug("[ignored] interupted while connecting to vm."); } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java index 5407d764474..49aa99cea68 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java @@ -160,13 +160,13 @@ public class KVMHAMonitor extends KVMHABase implements Runnable { try { monitorThread.join(); } catch (InterruptedException e) { - + s_logger.debug("[ignored] interupted joining monitor."); } try { Thread.sleep(_heartBeatUpdateFreq); } catch (InterruptedException e) { - + s_logger.debug("[ignored] interupted between heartbeats."); } } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java index 40ba11fcdce..28e5f03d512 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStoragePoolManager.java @@ -286,6 +286,7 @@ public class KVMStoragePoolManager { try { Thread.sleep(30000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while trying to get storage pool."); } cnt++; } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 5b85c29d331..eb0ec55505c 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -321,6 +321,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw try { _hostScanScheduler.awaitTermination(3000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while stopping<:/."); } shutdownCleanup(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 491323c861a..c649748e4d0 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -784,6 +784,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa Thread.currentThread(); Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while trying to get mac."); } } @@ -4818,6 +4819,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { Thread.sleep(5000); } catch (InterruptedException ex) { + s_logger.debug("[ignored] interupted while waiting to retry connect after failure.", e); } } } finally { @@ -4832,6 +4834,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { Thread.sleep(1000); } catch (InterruptedException ex) { + s_logger.debug("[ignored] interupted while waiting to retry connect."); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java index eb119e72323..137aa613f9c 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java @@ -954,6 +954,7 @@ public class NetscalerResource implements ServerResource { try { Thread.sleep(10000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while waiting for netscaler to be 'up'."); } ns refreshNsObj = new ns(); refreshNsObj.set_id(newVpx.get_id()); diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index baa048821c8..bc661305d2a 100644 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -221,6 +221,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager, try { Thread.sleep(_pauseInterval * 1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while retry cmd."); } s_logger.debug("Retrying..."); diff --git a/server/src/com/cloud/vm/SystemVmLoadScanner.java b/server/src/com/cloud/vm/SystemVmLoadScanner.java index 97f9dcdaab4..c1a875871f0 100644 --- a/server/src/com/cloud/vm/SystemVmLoadScanner.java +++ b/server/src/com/cloud/vm/SystemVmLoadScanner.java @@ -61,6 +61,7 @@ public class SystemVmLoadScanner { try { _capacityScanScheduler.awaitTermination(1000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while stopping systemvm load scanner."); } _capacityScanLock.releaseRef(); diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java index e3f2ea0f031..100e00c5284 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java @@ -230,6 +230,7 @@ public abstract class ConsoleProxyClientBase implements ConsoleProxyClient, Cons try { Thread.sleep(100); } catch (InterruptedException e) { + s_logger.debug("[ignored] Console proxy was interupted while waiting for viewer to become ready."); } } return false; @@ -341,6 +342,7 @@ public abstract class ConsoleProxyClientBase implements ConsoleProxyClient, Cons try { tileDirtyEvent.wait(3000); } catch (InterruptedException e) { + s_logger.debug("[ignored] Console proxy ajax update was interupted while waiting for viewer to become ready."); } } } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java index b50fb94645d..2e987d707e5 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyGCThread.java @@ -111,6 +111,7 @@ public class ConsoleProxyGCThread extends Thread { try { Thread.sleep(5000); } catch (InterruptedException ex) { + s_logger.debug("[ignored] Console proxy was interupted during GC."); } } } diff --git a/test/src/com/cloud/test/regression/ApiCommand.java b/test/src/com/cloud/test/regression/ApiCommand.java index 7b685f9f46a..b9229963f68 100644 --- a/test/src/com/cloud/test/regression/ApiCommand.java +++ b/test/src/com/cloud/test/regression/ApiCommand.java @@ -802,6 +802,7 @@ public class ApiCommand { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while during async job result query."); } } else { break; diff --git a/test/src/com/cloud/test/stress/StressTestDirectAttach.java b/test/src/com/cloud/test/stress/StressTestDirectAttach.java index 463023c3457..15a0ba29b27 100644 --- a/test/src/com/cloud/test/stress/StressTestDirectAttach.java +++ b/test/src/com/cloud/test/stress/StressTestDirectAttach.java @@ -1337,6 +1337,7 @@ public class StressTestDirectAttach { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while during async job result query."); } } else { break; diff --git a/test/src/com/cloud/test/stress/TestClientWithAPI.java b/test/src/com/cloud/test/stress/TestClientWithAPI.java index 548747245e0..c41fae8b817 100644 --- a/test/src/com/cloud/test/stress/TestClientWithAPI.java +++ b/test/src/com/cloud/test/stress/TestClientWithAPI.java @@ -2273,6 +2273,7 @@ public class TestClientWithAPI { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while during async job result query."); } } else { break; diff --git a/test/src/com/cloud/test/utils/ConsoleProxy.java b/test/src/com/cloud/test/utils/ConsoleProxy.java index bc77bc918c7..35de0773593 100644 --- a/test/src/com/cloud/test/utils/ConsoleProxy.java +++ b/test/src/com/cloud/test/utils/ConsoleProxy.java @@ -67,7 +67,7 @@ public class ConsoleProxy implements Runnable { try { Thread.sleep(1000); } catch (InterruptedException e) { - + s_logger.debug("[ignored] interupted."); } } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java index 0099ae1772c..44c6a853f00 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java @@ -1333,6 +1333,7 @@ public class HypervisorHostHelper { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while waiting to config vm."); } } } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index b509ba2e1e7..dd7421ef253 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -243,6 +243,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while dealing with vm questions."); } } s_logger.info("VM Question monitor stopped"); @@ -289,6 +290,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while powering of vm."); } } @@ -321,6 +323,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while powering of vm unconditionaly."); } } return true; @@ -354,6 +357,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while pausing after power off."); } } else { break; @@ -477,6 +481,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while waiting for snapshot to be done."); } } @@ -1405,6 +1410,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while handling vm question about iso detach."); } } s_logger.info("VM Question monitor stopped"); @@ -2572,6 +2578,7 @@ public class VirtualMachineMO extends BaseMO { try { Thread.sleep(1000); } catch (InterruptedException e) { + s_logger.debug("[ignored] interupted while handling vm question about umount tools install."); } } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java index 3e9c890559c..d4766dca5ac 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareContext.java @@ -632,6 +632,7 @@ public class VmwareContext { try { Thread.sleep(CONNECT_RETRY_INTERVAL); } catch (InterruptedException ex) { + s_logger.debug("[ignored] interupted while connecting."); } } } From 406c2c00b267483ef6fe6c84b9a187458662cb9f Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Thu, 30 Jul 2015 17:29:32 -0600 Subject: [PATCH 070/314] Correcting an issue that was introduced with b84093f691ae0b09d2c525d50f2e2d200c709b2c --- .../datastore/db/PrimaryDataStoreDaoImpl.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java index d3c29f70d6a..9d97cfb0fb2 100644 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java @@ -380,7 +380,6 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase @Override public List findZoneWideStoragePoolsByTags(long dcId, String[] tags) { - List storagePools = null; if (tags == null || tags.length == 0) { QueryBuilder sc = QueryBuilder.create(StoragePoolVO.class); sc.and(sc.entity().getDataCenterId(), Op.EQ, dcId); @@ -399,17 +398,20 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase sql.append(ZoneWideDetailsSqlSuffix); TransactionLegacy txn = TransactionLegacy.currentTxn(); try (PreparedStatement pstmt = txn.prepareStatement(sql.toString());){ - int i=0; - for (Map.Entry detail : details.entrySet()) { - pstmt.setString(++i,detail.getKey()); - pstmt.setString(++i,detail.getValue()); - } List pools = new ArrayList(); if (pstmt != null) { - i = 1; + int i = 1; + pstmt.setLong(i++, dcId); pstmt.setString(i++, ScopeType.ZONE.toString()); + + for (Map.Entry detail : details.entrySet()) { + pstmt.setString(i++, detail.getKey()); + pstmt.setString(i++, detail.getValue()); + } + pstmt.setInt(i++, details.size()); + try(ResultSet rs = pstmt.executeQuery();) { while (rs.next()) { pools.add(toEntityBean(rs, false)); From c0230273cdbdf2558f4a0802d177bd5757de34fd Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Thu, 30 Jul 2015 22:59:05 -0600 Subject: [PATCH 071/314] Changing text "Snapshot(s)" to "Snapshots" --- client/WEB-INF/classes/resources/messages.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 701582cb132..dcbf6c83a24 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -1104,7 +1104,7 @@ label.size=Size label.skip.guide=I have used CloudStack before, skip this guide label.snapshot.limits=Snapshot Limits label.snapshot.name=Snapshot Name -label.snapshot.s=Snapshot(s) +label.snapshot.s=Snapshots label.snapshot.schedule=Setup Recurring Snapshot label.snapshot=Snapshot label.snapshots=Snapshots @@ -2106,7 +2106,6 @@ label.zone.name=Zone Name label.instances=Instances label.event=Event label.minutes.past.hour=minutes(s) past the hour -label.snapshots=snapshot(s) label.time.colon=Time: label.min.past.the.hr=min past the hr label.timezone.colon=Timezone: From e640e0cf6eb9508f74f9bad59519f7189da7d82e Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Thu, 30 Jul 2015 23:03:23 -0600 Subject: [PATCH 072/314] Setup = noun form / Set up = verb form --- client/WEB-INF/classes/resources/messages.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index dcbf6c83a24..f81a196cf71 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -1092,8 +1092,8 @@ label.service.capabilities=Service Capabilities label.service.offering=Service Offering label.session.expired=Session Expired label.set.up.zone.type=Set up zone type -label.setup.network=Setup Network -label.setup.zone=Setup Zone +label.setup.network=Set up Network +label.setup.zone=Set up Zone label.setup=Setup label.shared=Shared label.SharedMountPoint=SharedMountPoint @@ -1105,7 +1105,7 @@ label.skip.guide=I have used CloudStack before, skip this guide label.snapshot.limits=Snapshot Limits label.snapshot.name=Snapshot Name label.snapshot.s=Snapshots -label.snapshot.schedule=Setup Recurring Snapshot +label.snapshot.schedule=Set up Recurring Snapshot label.snapshot=Snapshot label.snapshots=Snapshots label.source.nat=Source NAT @@ -1915,7 +1915,7 @@ message.select.template=Please select a template for your new virtual instance. message.setup.physical.network.during.zone.creation.basic=When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.

You may also drag and drop other traffic types onto the physical network. message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.

Drag and drop one or more traffic types onto each physical network. message.setup.successful=Cloud setup successful\! -message.snapshot.schedule=You can setup recurring snapshot schedules by selecting from the available options below and applying your policy preference +message.snapshot.schedule=You can set up recurring snapshot schedules by selecting from the available options below and applying your policy preference message.specify.url=Please specify URL message.step.1.continue=Please select a template or ISO to continue message.step.1.desc=Please select a template for your new virtual instance. You can also choose to select a blank template from which an ISO image can be installed onto. From c32656a7ef13bc952899486026d5a4bf60ff6509 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Fri, 31 Jul 2015 11:26:53 +0200 Subject: [PATCH 073/314] CLOUDSTACK-8640: Revert to AWS SDK 1.3.22 The newer SDKs API changed which causes our S3 Template Downloader to never complete. Although we should fix the Template Downloader we can revert to the old AWS SDK for now. The fix on the longer run will be rewriting the S3 Template Downloader. Two methods had to be disabled for now since the old SDK does not support them. They can be re-enabled when the Template Downloader has been fixed. --- pom.xml | 2 +- utils/src/com/cloud/utils/S3Utils.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index e76d74735c3..bd0c4c3a43f 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 3.2.12.RELEASE 1.9.5 1.5.3 - 1.9.8 + 1.3.22 2.6 3.4 2.4 diff --git a/utils/src/com/cloud/utils/S3Utils.java b/utils/src/com/cloud/utils/S3Utils.java index fc8a3cc17c9..7df3d3b58fe 100644 --- a/utils/src/com/cloud/utils/S3Utils.java +++ b/utils/src/com/cloud/utils/S3Utils.java @@ -103,17 +103,19 @@ public final class S3Utils { } if (clientOptions.getUseTCPKeepAlive() != null) { - configuration.setUseTcpKeepAlive(clientOptions.getUseTCPKeepAlive()); + //configuration.setUseTcpKeepAlive(clientOptions.getUseTCPKeepAlive()); + LOGGER.debug("useTCPKeepAlive not supported by old AWS SDK"); } if (clientOptions.getConnectionTtl() != null) { - configuration.setConnectionTTL(clientOptions.getConnectionTtl()); + //configuration.setConnectionTTL(clientOptions.getConnectionTtl()); + LOGGER.debug("connectionTtl not supported by old AWS SDK"); } if (LOGGER.isDebugEnabled()) { LOGGER.debug(format("Creating S3 client with configuration: [protocol: %1$s, connectionTimeOut: " + "%2$s, maxErrorRetry: %3$s, socketTimeout: %4$s, useTCPKeepAlive: %5$s, connectionTtl: %6$s]", configuration.getProtocol(), configuration.getConnectionTimeout(), configuration.getMaxErrorRetry(), configuration.getSocketTimeout(), - configuration.useTcpKeepAlive(), configuration.getConnectionTTL())); + -1, -1)); } final AmazonS3Client client = new AmazonS3Client(credentials, configuration); From 3381154fafb7fa4f0a61d538f7c2550e48247787 Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Sun, 26 Jul 2015 09:33:14 -0400 Subject: [PATCH 074/314] initial dockerization commit. 1. update injectkeys.sh to work into restricted container 2. move previous dockerfiles into tools/docker 3. dockerfiles for management-server on centos and marvin CLOUDSTACK-8249 Signed-off-by: Pierre-Luc Dion --- Dockerfile | 37 ------- scripts/vm/systemvm/injectkeys.sh | 14 ++- tools/docker/Dockerfile | 59 +++++++++++ tools/docker/Dockerfile.centos6 | 50 +++++++++ tools/docker/Dockerfile.marvin | 40 +++++++ tools/docker/README.md | 100 ++++++++++++++++++ tools/docker/init.sh_centos6 | 50 +++++++++ .../docker/supervisord.conf | 4 +- 8 files changed, 310 insertions(+), 44 deletions(-) delete mode 100644 Dockerfile create mode 100644 tools/docker/Dockerfile create mode 100644 tools/docker/Dockerfile.centos6 create mode 100644 tools/docker/Dockerfile.marvin create mode 100644 tools/docker/README.md create mode 100755 tools/docker/init.sh_centos6 rename supervisord.conf => tools/docker/supervisord.conf (75%) diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 66862cce95a..00000000000 --- a/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM ubuntu:14.04 - -RUN apt-get -y update && apt-get install -y \ - genisoimage \ - git \ - maven \ - openjdk-7-jdk \ - python-dev \ - python-setuptools \ - python-pip \ - supervisor - -RUN echo 'mysql-server mysql-server/root_password password root' | debconf-set-selections; \ - echo 'mysql-server mysql-server/root_password_again password root' | debconf-set-selections; - -RUN apt-get install -qqy mysql-server && \ - apt-get clean all - -RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot password '' - -RUN pip install --allow-external mysql-connector-python mysql-connector-python - -COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf -COPY . ./root -WORKDIR /root - -RUN mvn -Pdeveloper -Dsimulator -DskipTests clean install - -RUN (/usr/bin/mysqld_safe &); \ - sleep 3; \ - mvn -Pdeveloper -pl developer -Ddeploydb; \ - mvn -Pdeveloper -pl developer -Ddeploydb-simulator; \ - pip install tools/marvin/dist/Marvin-4.6.0-SNAPSHOT.tar.gz - -EXPOSE 8080 - -CMD ["/usr/bin/supervisord"] diff --git a/scripts/vm/systemvm/injectkeys.sh b/scripts/vm/systemvm/injectkeys.sh index cd5d9f9a06c..f69e33168d7 100755 --- a/scripts/vm/systemvm/injectkeys.sh +++ b/scripts/vm/systemvm/injectkeys.sh @@ -85,10 +85,14 @@ systemvmpath=$3 command -v mkisofs > /dev/null || (echo "$(basename $0): mkisofs not found, please install or ensure PATH is accurate" ; exit 4) -inject_into_iso systemvm.iso $newpubkey - -[ $? -ne 0 ] && exit 5 - -copy_priv_key $newprivkey +# if running into Docker as unprivileges, skip ssh verification as iso cannot be mounted. +if [ -e /dev/loop0 ]; then + inject_into_iso systemvm.iso $newpubkey + [ $? -ne 0 ] && exit 5 + copy_priv_key $newprivkey +else + # this mean it's a docker instance, ssh key cannot be verify. + echo "No loop device found, skipping ssh key insertion in systemvm.iso" +fi exit $? diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile new file mode 100644 index 00000000000..d43d9a375ae --- /dev/null +++ b/tools/docker/Dockerfile @@ -0,0 +1,59 @@ +# 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. +# +# CloudStack-simulator build + +FROM ubuntu:14.04 + +MAINTAINER "Apache CloudStack" +LABEL Vendor="Apache.org" License="ApacheV2" Version="4.6.0" + +RUN apt-get -y update && apt-get install -y \ + genisoimage \ + git \ + maven \ + openjdk-7-jdk \ + python-dev \ + python-setuptools \ + python-pip \ + supervisor + +RUN echo 'mysql-server mysql-server/root_password password root' | debconf-set-selections; \ + echo 'mysql-server mysql-server/root_password_again password root' | debconf-set-selections; + +RUN apt-get install -qqy mysql-server && \ + apt-get clean all + +RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot password '' + +RUN pip install --allow-external mysql-connector-python mysql-connector-python + +COPY tools/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY . ./root +WORKDIR /root + +RUN mvn -Pdeveloper -Dsimulator -DskipTests clean install + +RUN (/usr/bin/mysqld_safe &); \ + sleep 3; \ + mvn -Pdeveloper -pl developer -Ddeploydb; \ + mvn -Pdeveloper -pl developer -Ddeploydb-simulator; \ + pip install tools/marvin/dist/Marvin-4.6.0-SNAPSHOT.tar.gz + +EXPOSE 8080 8096 + +CMD ["/usr/bin/supervisord"] diff --git a/tools/docker/Dockerfile.centos6 b/tools/docker/Dockerfile.centos6 new file mode 100644 index 00000000000..459301452c6 --- /dev/null +++ b/tools/docker/Dockerfile.centos6 @@ -0,0 +1,50 @@ +# 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. +# +FROM centos:6 + +MAINTAINER "Apache CloudStack" +LABEL Vendor="Apache.org" License="ApacheV2" Version="4.6.0" + +ENV PKG_URL=http://jenkins.buildacloud.org/job/package-rhel63-master/lastSuccessfulBuild/artifact/dist/rpmbuild/RPMS/x86_64 + +# install CloudStack +RUN yum install -y \ + ${PKG_URL}/cloudstack-common-4.6.0-SNAPSHOT.el6.x86_64.rpm \ + ${PKG_URL}/cloudstack-management-4.6.0-SNAPSHOT.el6.x86_64.rpm + +RUN cd /etc/cloudstack/management; \ + ln -s tomcat6-nonssl.conf tomcat6.conf; \ + ln -s server-nonssl.xml server.xml; \ + ln -s log4j-cloud.xml log4j.xml +COPY init.sh_centos6 /root/init.sh + +RUN yum clean all + +RUN sed -i "s/cluster.node.IP=.*/cluster.node.IP=localhost/" /etc/cloudstack/management/db.properties + +EXPOSE 8080 8250 8096 45219 9090 8787 +# Ports: +# 8080: webui, api +# 8250: systemvm communication +# 8096: api port without authentication(default=off) +# Troubleshooting ports: +# 8787: CloudStack (Tomcat) debug socket +# 9090: Cloudstack Management Cluster Interface +# 45219: JMX console + +CMD ["/root/init.sh"] \ No newline at end of file diff --git a/tools/docker/Dockerfile.marvin b/tools/docker/Dockerfile.marvin new file mode 100644 index 00000000000..20dc56e8605 --- /dev/null +++ b/tools/docker/Dockerfile.marvin @@ -0,0 +1,40 @@ +# 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. +# +# +# build for cloudstack_home_dir not this folder +FROM python:2 + +MAINTAINER "Apache CloudStack" +LABEL Vendor="Apache.org" License="ApacheV2" Version="4.6.0" + +ENV WORK_DIR=/marvin + +ENV PKG_URL=http://jenkins.buildacloud.org/job/cloudstack-marvin-master/lastSuccessfulBuild/artifact/tools/marvin/dist/Marvin-4.6.0-SNAPSHOT.tar.gz + +RUN pip install --upgrade paramiko nose requests +RUN pip install --allow-external mysql-connector-python mysql-connector-python +RUN pip install ${PKG_URL} + +RUN mkdir -p ${WORK_DIR} +COPY setup/dev ${WORK_DIR}/dev +COPY tools/marvin/marvin ${WORK_DIR}/marvin +COPY test/integration ${WORK_DIR}/integration + +WORKDIR ${WORK_DIR} + +CMD /bin/bash \ No newline at end of file diff --git a/tools/docker/README.md b/tools/docker/README.md new file mode 100644 index 00000000000..b5c798cc693 --- /dev/null +++ b/tools/docker/README.md @@ -0,0 +1,100 @@ +# Docker Files for Apache CloudStack + +Dockerfiles used to build CloudStack images available on Docker hub. + + +## Using images from docker-hub + + +### CloudStack Simulator + +CloudStack Simulator if a all on one CloudStack Build including the simulator that mimic Hypervisor. This is usefull to test CloudStack API behavior without having to deploy real hypervisor nodes. CloudStack Simulator is used for tests and CI. + +``` +docker pull cloudstack/simulator +docker run --name simulator -p 8080:8080 -d cloudstack/simulator +``` + +### CloudStack Management-server + +``` +docker pull mysql:5.5 +docker pull cloudstack/management_centos6 +docker run --name cloudstack-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.5 +docker run -ti --name cloudstack --link cloudstack-mysql:mysql -d -p 8080:8080 -p 8250:8250 cloudstack/management_centos6 +``` + +### Marvin + +Use marvin to deploy or test your CloudStack environment. +Use Marvin with cloudstack connection thru the API port (8096) + +``` +docker pull cloudstack/marvin +docker run -ti --rm --name marvin --link simulator:8096 cloudstack/marvin +``` + +Deploy Cloud using marvin: + +``` +docker run -ti --rm --link simulator:8096 cloudstack/marvin python /root/tools/marvin/marvin/deployDataCenter.py -i /root/setup/dev/advanced.cfg +``` + +Perform Smoke tests against CloudStack Simulator containter: +``` +docker run -ti --rm --link simulator:8096 \ + nosetests-2.7 -v --with-marvin \ + --marvin-config=dev/advanced.cfg \ + --with-xunit \ + --xunit-file=xunit.xml \ + -a tags=advanced,required_hardware=false \ + --zone=Sandbox-simulator \ + --hypervisor=simulator \ + -w integration/smoke +``` + +# How to build images + +Image provide by CloudStack are automatically build by Jenkins performing following tasks: + + +### CentOS 6 + +CentOS 6 image use RPM's from jenkins.buildacloud.org +tag:latest = master branch + +1. build the base image + + ``` + docker build -f Dockerfile.centos6 -t cloudstack/management_centos6 . + ``` + +2. on jenkins, database and systemvm.iso are pre-deployed. the inital start require privileged container to + mount systemvm.iso and copy ssh_rsa.pub into it. + + ``` + docker run --name cloudstack-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.5 + docker run --privileged --link cloudstack-mysql:mysql -d --name cloudstack cloudstack/management_centos6 + sleep 300 + docker exec cloudstack /etc/init.d/cloudstack-management stop + docker stop cloudstack + docker commit -m "init system.iso" -a "Apache CloudStack" cloudstack cloudstack/management_centos6 + ``` + +### Marvin + +Build Marvin container usable to deploy cloud in the CloudStack management server container. + +1. to build the image + + ``` + docker build -f Dockerfile.marvin -t cloudstack/marvin ../.. + ``` + +### Simulator + +Build CloudStack with Simulator. this image is an all on one, including the database. Build from source using maven. + +``` +docker build -f Dockerfile -t cloudstack/simulator ../.. +``` \ No newline at end of file diff --git a/tools/docker/init.sh_centos6 b/tools/docker/init.sh_centos6 new file mode 100755 index 00000000000..423808fe554 --- /dev/null +++ b/tools/docker/init.sh_centos6 @@ -0,0 +1,50 @@ +#!/bin/bash +# 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. +# +# update database connection +# start cloudstack-management server +#/usr/bin/cloudstack-setup-databases cloud:password@$MYSQL_PORT_3306_TCP_ADDR + +# initial startup of the container to generage ssh_key +# performed as privileged +if [ ! -d /var/cloudstack/management/.ssh ]; then + mknod /dev/loop6 -m0660 b 7 6 +fi +sleep 5 + +mysql -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -h"$MYSQL_PORT_3306_TCP_ADDR" \ + -e "show databases;"|grep -q cloud + +case $? in + 1) + echo "deploying new cloud databases" + cloudstack-setup-databases cloud:password@${MYSQL_PORT_3306_TCP_ADDR} \ + --deploy-as=root:${MYSQL_ENV_MYSQL_ROOT_PASSWORD} -i localhost + ;; + 0) + echo "using existing databases" + cloudstack-setup-databases cloud:password@${MYSQL_PORT_3306_TCP_ADDR} + ;; + *) + echo "cannot access database" + exit 12 + ;; +esac + +service cloudstack-management start +tail -f /var/log/cloudstack/management/catalina.out diff --git a/supervisord.conf b/tools/docker/supervisord.conf similarity index 75% rename from supervisord.conf rename to tools/docker/supervisord.conf index a3e454bcd7e..fe1575be0df 100644 --- a/supervisord.conf +++ b/tools/docker/supervisord.conf @@ -10,6 +10,6 @@ user=root [program:cloudstack] command=/bin/bash -c "mvn -pl client jetty:run -Dsimulator" directory=/root -stderr_logfile=/var/log/acs.err.log -stdout_logfile=/var/log/acs.out.log +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 user=root From 2ae2aac9f56fe7de30d206d3555124c9a0e7ac0f Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Sat, 1 Aug 2015 08:33:55 -0400 Subject: [PATCH 075/314] removed whitespaces, close #623 --- tools/docker/Dockerfile.centos6 | 4 ++-- tools/docker/Dockerfile.marvin | 4 ++-- tools/docker/init.sh_centos6 | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/docker/Dockerfile.centos6 b/tools/docker/Dockerfile.centos6 index 459301452c6..8f520569ef1 100644 --- a/tools/docker/Dockerfile.centos6 +++ b/tools/docker/Dockerfile.centos6 @@ -5,9 +5,9 @@ # 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 diff --git a/tools/docker/Dockerfile.marvin b/tools/docker/Dockerfile.marvin index 20dc56e8605..4293f563274 100644 --- a/tools/docker/Dockerfile.marvin +++ b/tools/docker/Dockerfile.marvin @@ -5,9 +5,9 @@ # 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 diff --git a/tools/docker/init.sh_centos6 b/tools/docker/init.sh_centos6 index 423808fe554..52189ca2a52 100755 --- a/tools/docker/init.sh_centos6 +++ b/tools/docker/init.sh_centos6 @@ -6,9 +6,9 @@ # 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 From 65dc1d5dbae779939eb45e7aad70110acf260d85 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 2 Aug 2015 12:48:34 +0200 Subject: [PATCH 076/314] CLOUDSTACK-8656: handle template properties loading --- .../storage/template/TemplateLocation.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/core/src/com/cloud/storage/template/TemplateLocation.java b/core/src/com/cloud/storage/template/TemplateLocation.java index 87f56b8a79b..ea785b206bd 100644 --- a/core/src/com/cloud/storage/template/TemplateLocation.java +++ b/core/src/com/cloud/storage/template/TemplateLocation.java @@ -94,17 +94,10 @@ public class TemplateLocation { } public boolean load() throws IOException { - FileInputStream strm = null; - try { - strm = new FileInputStream(_file); + try (FileInputStream strm = new FileInputStream(_file);) { _props.load(strm); - } finally { - if (strm != null) { - try { - strm.close(); - } catch (IOException e) { - } - } + } catch (IOException e) { + s_logger.warn("Unable to load the template properties", e); } for (ImageFormat format : ImageFormat.values()) { @@ -142,20 +135,11 @@ public class TemplateLocation { _props.setProperty(info.format.getFileExtension() + ".size", Long.toString(info.size)); _props.setProperty(info.format.getFileExtension() + ".virtualsize", Long.toString(info.virtualSize)); } - FileOutputStream strm = null; - try { - strm = new FileOutputStream(_file); + try (FileOutputStream strm = new FileOutputStream(_file);) { _props.store(strm, ""); } catch (IOException e) { s_logger.warn("Unable to save the template properties ", e); return false; - } finally { - if (strm != null) { - try { - strm.close(); - } catch (IOException e) { - } - } } return true; } From 033ac3b1015aa3a20d6700fce75d49bd2e2bd082 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 2 Aug 2015 12:52:33 +0200 Subject: [PATCH 077/314] CLOUDSTACK-8656: messages on errors closing streams for local templates --- .../com/cloud/storage/template/LocalTemplateDownloader.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/com/cloud/storage/template/LocalTemplateDownloader.java b/core/src/com/cloud/storage/template/LocalTemplateDownloader.java index 0edfb13d1ec..d55a4a2ecfe 100644 --- a/core/src/com/cloud/storage/template/LocalTemplateDownloader.java +++ b/core/src/com/cloud/storage/template/LocalTemplateDownloader.java @@ -123,6 +123,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T try { fic.close(); } catch (IOException e) { + s_logger.info("[ignore] error while closing file input channel."); } } @@ -130,6 +131,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T try { foc.close(); } catch (IOException e) { + s_logger.info("[ignore] error while closing file output channel."); } } @@ -137,6 +139,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T try { fis.close(); } catch (IOException e) { + s_logger.info("[ignore] error while closing file input stream."); } } @@ -144,6 +147,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T try { fos.close(); } catch (IOException e) { + s_logger.info("[ignore] error while closing file output stream."); } } From 89bd6d020fdf359feb1f3c61879011a7dbca9a76 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 2 Aug 2015 12:55:52 +0200 Subject: [PATCH 078/314] CLOUDSTACK-8656: info on error closing peering channels --- .../src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index d11612d9ebd..2bc4f6859c5 100644 --- a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -585,6 +585,7 @@ public class ClusteredAgentManagerImpl extends AgentManagerImpl implements Clust s_logger.info("Closing: " + ch.toString()); ch.close(); } catch (IOException e) { + s_logger.info("[ignored] error on closing channel: " +ch.toString(), e); } } } From 4e65845789643db29b4a1f1789bbb8e1b8e16859 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 2 Aug 2015 12:58:56 +0200 Subject: [PATCH 079/314] CLOUDSTACK-8656: removed unused input stream there was code to close a stream that was never created --- .../com/cloud/certificate/dao/CertificateDaoImpl.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/engine/schema/src/com/cloud/certificate/dao/CertificateDaoImpl.java b/engine/schema/src/com/cloud/certificate/dao/CertificateDaoImpl.java index a2ec67bf838..978fee04401 100644 --- a/engine/schema/src/com/cloud/certificate/dao/CertificateDaoImpl.java +++ b/engine/schema/src/com/cloud/certificate/dao/CertificateDaoImpl.java @@ -16,9 +16,6 @@ // under the License. package com.cloud.certificate.dao; -import java.io.BufferedInputStream; -import java.io.IOException; - import javax.ejb.Local; import org.apache.log4j.Logger; @@ -41,7 +38,6 @@ public class CertificateDaoImpl extends GenericDaoBase impl @Override public Long persistCustomCertToDb(String certStr, CertificateVO cert, Long managementServerId) { - BufferedInputStream f = null; try { cert.setCertificate(certStr); cert.setUpdated("Y"); @@ -50,12 +46,6 @@ public class CertificateDaoImpl extends GenericDaoBase impl } catch (Exception e) { s_logger.warn("Unable to read the certificate: " + e); return new Long(0); - } finally { - if (f != null) - try { - f.close(); - } catch (IOException ignored) { - } } } } From 119f6b0bd8b27f55670e8d31f84f908c7d78895b Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 19 Jul 2015 18:25:48 +0200 Subject: [PATCH 080/314] coverity issues in old upgrade code --- .../com/cloud/upgrade/dao/Upgrade218to22.java | 1924 ++++++++--------- 1 file changed, 940 insertions(+), 984 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java index 3f19c5445bb..28cf622f38f 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java @@ -61,11 +61,8 @@ public class Upgrade218to22 implements DbUpgrade { } protected void upgradeStoragePools(Connection conn) { - PreparedStatement pstmt; - try { - pstmt = conn.prepareStatement("UPDATE storage_pool SET status='Up'"); + try (PreparedStatement pstmt = conn.prepareStatement("UPDATE storage_pool SET status='Up'");) { pstmt.executeUpdate(); - pstmt.close(); } catch (SQLException e) { throw new CloudRuntimeException("Can't upgrade storage pool ", e); } @@ -77,8 +74,7 @@ public class Upgrade218to22 implements DbUpgrade { String insertSql = "INSERT INTO network_offerings (name, display_text, nw_rate, mc_rate, concurrent_connections, traffic_type, tags, system_only, specify_vlan, service_offering_id, created, removed, `default`, availability, dnsService, gatewayService, firewallService, lbService, userdataService, vpnService, dhcpService) " + "VALUES (?, ?, NULL, NULL, NULL, ?, NULL, ?, 0, NULL, now(), NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - try { - PreparedStatement pstmt = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS); + try (PreparedStatement pstmt = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);) { int i = 1; pstmt.setString(i++, name); pstmt.setString(i++, displayText); @@ -94,32 +90,30 @@ public class Upgrade218to22 implements DbUpgrade { pstmt.setBoolean(i++, vpnService); pstmt.setBoolean(i++, dhcpService); pstmt.executeUpdate(); - ResultSet rs = pstmt.getGeneratedKeys(); - rs.next(); - long id = rs.getLong(1); - rs.close(); - pstmt.close(); - return id; + try (ResultSet rs = pstmt.getGeneratedKeys();) { + rs.next(); + long id = rs.getLong(1); + return id; + } } catch (SQLException e) { throw new CloudRuntimeException("Unable to insert network offering ", e); } } protected void upgradeInstanceGroups(Connection conn) { - try { + try ( + PreparedStatement globalSelect = conn.prepareStatement("SELECT DISTINCT v.group, v.account_id from vm_instance v where v.group is not null"); + ResultSet globalResult = globalSelect.executeQuery(); + ) { // Create instance groups - duplicated names are allowed across accounts - PreparedStatement pstmt = conn.prepareStatement("SELECT DISTINCT v.group, v.account_id from vm_instance v where v.group is not null"); - ResultSet rs = pstmt.executeQuery(); ArrayList groups = new ArrayList(); - while (rs.next()) { + while (globalResult.next()) { Object[] group = new Object[10]; - group[0] = rs.getString(1); // group name - group[1] = rs.getLong(2); // accountId + group[0] = globalResult.getString(1); // group name + group[1] = globalResult.getLong(2); // accountId groups.add(group); } - rs.close(); - pstmt.close(); for (Object[] group : groups) { String groupName = (String)group[0]; @@ -128,24 +122,25 @@ public class Upgrade218to22 implements DbUpgrade { } // update instance_group_vm_map - pstmt = + try ( + PreparedStatement detailSelect = conn.prepareStatement("SELECT g.id, v.id from vm_instance v, instance_group g where g.name=v.group and g.account_id=v.account_id and v.group is not null"); - rs = pstmt.executeQuery(); - ArrayList groupVmMaps = new ArrayList(); - while (rs.next()) { - Object[] groupMaps = new Object[10]; - groupMaps[0] = rs.getLong(1); // vmId - groupMaps[1] = rs.getLong(2); // groupId - groupVmMaps.add(groupMaps); + ResultSet detailResult = detailSelect.executeQuery(); + ) { + ArrayList groupVmMaps = new ArrayList(); + while (detailResult.next()) { + Object[] groupMaps = new Object[10]; + groupMaps[0] = detailResult.getLong(1); // vmId + groupMaps[1] = detailResult.getLong(2); // groupId + groupVmMaps.add(groupMaps); + } + for (Object[] groupMap : groupVmMaps) { + Long groupId = (Long)groupMap[0]; + Long instanceId = (Long)groupMap[1]; + createInstanceGroupVmMaps(conn, groupId, instanceId); + } } - rs.close(); - pstmt.close(); - for (Object[] groupMap : groupVmMaps) { - Long groupId = (Long)groupMap[0]; - Long instanceId = (Long)groupMap[1]; - createInstanceGroupVmMaps(conn, groupId, instanceId); - } } catch (SQLException e) { throw new CloudRuntimeException("Can't update instance groups ", e); } @@ -153,375 +148,371 @@ public class Upgrade218to22 implements DbUpgrade { } protected void createInstanceGroups(Connection conn, String groupName, long accountId) throws SQLException { - PreparedStatement pstmt = conn.prepareStatement("INSERT INTO instance_group (account_id, name, created) values (?, ?, now()) "); - pstmt.setLong(1, accountId); - pstmt.setString(2, groupName); - pstmt.executeUpdate(); - pstmt.close(); + try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO instance_group (account_id, name, created) values (?, ?, now()) ");) { + pstmt.setLong(1, accountId); + pstmt.setString(2, groupName); + pstmt.executeUpdate(); + } } protected void createInstanceGroupVmMaps(Connection conn, long groupId, long instanceId) throws SQLException { - PreparedStatement pstmt = conn.prepareStatement("INSERT INTO instance_group_vm_map (group_id, instance_id) values (?, ?) "); - pstmt.setLong(1, groupId); - pstmt.setLong(2, instanceId); - pstmt.executeUpdate(); - pstmt.close(); + try (PreparedStatement pstmt = conn.prepareStatement("INSERT INTO instance_group_vm_map (group_id, instance_id) values (?, ?) ");) { + pstmt.setLong(1, groupId); + pstmt.setLong(2, instanceId); + pstmt.executeUpdate(); + } } protected long insertNic(Connection conn, long networkId, long instanceId, boolean running, String macAddress, String ipAddress, String netmask, String strategy, String gateway, String vnet, String guru, boolean defNic, int deviceId, String mode, String reservationId) throws SQLException { - PreparedStatement pstmt = - conn.prepareStatement( + try ( + PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO nics (instance_id, network_id, mac_address, ip4_address, netmask, strategy, ip_type, broadcast_uri, mode, reserver_name, reservation_id, device_id, update_time, isolation_uri, ip6_address, default_nic, created, removed, state, gateway) " + "VALUES (?, ?, ?, ?, ?, ?, 'Ip4', ?, ?, ?, ?, ?, now(), ?, NULL, ?, now(), NULL, ?, ?)", Statement.RETURN_GENERATED_KEYS); - int i = 1; - String isolationUri = null; + ) { + int i = 1; + String isolationUri = null; - String broadcast = null; - if (vnet != null) { - broadcast = "vlan://" + vnet; - if (vnet.equalsIgnoreCase("untagged")) { - isolationUri = "ec2://" + vnet; - } else { - isolationUri = broadcast; + String broadcast = null; + if (vnet != null) { + broadcast = "vlan://" + vnet; + if (vnet.equalsIgnoreCase("untagged")) { + isolationUri = "ec2://" + vnet; + } else { + isolationUri = broadcast; + } + } + pstmt.setLong(i++, instanceId); + pstmt.setLong(i++, networkId); + pstmt.setString(i++, macAddress); + pstmt.setString(i++, ipAddress); + pstmt.setString(i++, netmask); + pstmt.setString(i++, strategy); + pstmt.setString(i++, broadcast); + pstmt.setString(i++, mode); + pstmt.setString(i++, guru); + pstmt.setString(i++, reservationId); + pstmt.setInt(i++, deviceId); + pstmt.setString(i++, isolationUri); + pstmt.setBoolean(i++, defNic); + pstmt.setString(i++, running ? "Reserved" : "Allocated"); + pstmt.setString(i++, gateway); + pstmt.executeUpdate(); + try (ResultSet rs = pstmt.getGeneratedKeys();) { + long nicId = 0; + if (!rs.next()) { + throw new CloudRuntimeException("Unable to get id for nic"); + } + nicId = rs.getLong(1); + return nicId; } } - pstmt.setLong(i++, instanceId); - pstmt.setLong(i++, networkId); - pstmt.setString(i++, macAddress); - pstmt.setString(i++, ipAddress); - pstmt.setString(i++, netmask); - pstmt.setString(i++, strategy); - pstmt.setString(i++, broadcast); - pstmt.setString(i++, mode); - pstmt.setString(i++, guru); - pstmt.setString(i++, reservationId); - pstmt.setInt(i++, deviceId); - pstmt.setString(i++, isolationUri); - pstmt.setBoolean(i++, defNic); - pstmt.setString(i++, running ? "Reserved" : "Allocated"); - pstmt.setString(i++, gateway); - pstmt.executeUpdate(); - ResultSet rs = pstmt.getGeneratedKeys(); - long nicId = 0; - if (!rs.next()) { - throw new CloudRuntimeException("Unable to get id for nic"); - } - nicId = rs.getLong(1); - rs.close(); - pstmt.close(); - return nicId; } protected void upgradeDomR(Connection conn, long dcId, long domrId, Long publicNetworkId, long guestNetworkId, long controlNetworkId, String zoneType, String vnet) throws SQLException { s_logger.debug("Upgrading domR" + domrId); - PreparedStatement pstmt = + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT vm_instance.id, vm_instance.state, vm_instance.private_mac_address, vm_instance.private_ip_address, vm_instance.private_netmask, domain_router.public_mac_address, domain_router.public_ip_address, domain_router.public_netmask, domain_router.guest_mac_address, domain_router.guest_ip_address, domain_router.guest_netmask, domain_router.vnet, domain_router.gateway FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed is NULL AND vm_instance.id=?"); - pstmt.setLong(1, domrId); - ResultSet rs = pstmt.executeQuery(); + ) { + pstmt.setLong(1, domrId); + try (ResultSet rs = pstmt.executeQuery();) { - if (!rs.next()) { - throw new CloudRuntimeException("Unable to find router " + domrId); + if (!rs.next()) { + throw new CloudRuntimeException("Unable to find router " + domrId); + } + // long id = rs.getLong(1); + String state = rs.getString(2); + boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); + String privateMac = rs.getString(3); + String privateIp = rs.getString(4); + String privateNetmask = rs.getString(5); + String publicMac = rs.getString(6); + String publicIp = rs.getString(7); + String publicNetmask = rs.getString(8); + String guestMac = rs.getString(9); + String guestIp = rs.getString(10); + String guestNetmask = rs.getString(11); + String gateway = rs.getString(13); + try (PreparedStatement vlanStatement = conn.prepareStatement("SELECT v.vlan_id from vlan v, user_ip_address u where v.id=u.vlan_db_id and u.public_ip_address=?");) { + vlanStatement.setString(1, publicIp); + try (ResultSet vlanResult = vlanStatement.executeQuery();) { + String publicVlan = null; + while (vlanResult.next()) { + publicVlan = vlanResult.getString(1); + } + // Control nic is the same for all types of networks + long controlNicId = + insertNic(conn, controlNetworkId, domrId, running, privateMac, privateIp, privateNetmask, "Start", "169.254.0.1", null, "ControlNetworkGuru", false, 1, + "Static", privateIp != null ? (domrId + privateIp) : null); + if (privateIp != null) { + try (PreparedStatement updateStatement = conn.prepareStatement("UPDATE op_dc_link_local_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?");) { + updateStatement.setLong(1, controlNicId); + updateStatement.setString(2, privateIp); + updateStatement.setLong(3, dcId); + updateStatement.executeUpdate(); + } + } + if (zoneType.equalsIgnoreCase("Basic")) { + insertNic(conn, guestNetworkId, domrId, running, guestMac, guestIp, guestNetmask, "Create", gateway, vnet, "DirectPodBasedNetworkGuru", true, 0, "Dhcp", null); + } else if (publicIp != null) { + // update virtual domR + insertNic(conn, publicNetworkId, domrId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "PublicNetworkGuru", true, 2, "Static", + null); + insertNic(conn, guestNetworkId, domrId, running, guestMac, guestIp, guestNetmask, "Start", null, vnet, "ExternalGuestNetworkGuru", false, 0, "Dhcp", null); + } else { + // update direct domR - dhcp case + insertNic(conn, guestNetworkId, domrId, running, guestMac, guestIp, guestNetmask, "Create", gateway, vnet, "DirectNetworkGuru", true, 0, "Dhcp", null); + } + } + } + } } - - // long id = rs.getLong(1); - String state = rs.getString(2); - boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); - String privateMac = rs.getString(3); - String privateIp = rs.getString(4); - String privateNetmask = rs.getString(5); - String publicMac = rs.getString(6); - String publicIp = rs.getString(7); - String publicNetmask = rs.getString(8); - String guestMac = rs.getString(9); - String guestIp = rs.getString(10); - String guestNetmask = rs.getString(11); - String gateway = rs.getString(13); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("SELECT v.vlan_id from vlan v, user_ip_address u where v.id=u.vlan_db_id and u.public_ip_address=?"); - pstmt.setString(1, publicIp); - rs = pstmt.executeQuery(); - - String publicVlan = null; - while (rs.next()) { - publicVlan = rs.getString(1); - } - - // Control nic is the same for all types of networks - long controlNicId = - insertNic(conn, controlNetworkId, domrId, running, privateMac, privateIp, privateNetmask, "Start", "169.254.0.1", null, "ControlNetworkGuru", false, 1, - "Static", privateIp != null ? (domrId + privateIp) : null); - if (privateIp != null) { - pstmt = conn.prepareStatement("UPDATE op_dc_link_local_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?"); - pstmt.setLong(1, controlNicId); - pstmt.setString(2, privateIp); - pstmt.setLong(3, dcId); - pstmt.executeUpdate(); - pstmt.close(); - } - - if (zoneType.equalsIgnoreCase("Basic")) { - insertNic(conn, guestNetworkId, domrId, running, guestMac, guestIp, guestNetmask, "Create", gateway, vnet, "DirectPodBasedNetworkGuru", true, 0, "Dhcp", null); - } else if (publicIp != null) { - // update virtual domR - insertNic(conn, publicNetworkId, domrId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "PublicNetworkGuru", true, 2, "Static", - null); - insertNic(conn, guestNetworkId, domrId, running, guestMac, guestIp, guestNetmask, "Start", null, vnet, "ExternalGuestNetworkGuru", false, 0, "Dhcp", null); - } else { - // update direct domR - dhcp case - insertNic(conn, guestNetworkId, domrId, running, guestMac, guestIp, guestNetmask, "Create", gateway, vnet, "DirectNetworkGuru", true, 0, "Dhcp", null); - } - } protected void upgradeSsvm(Connection conn, long dataCenterId, long publicNetworkId, long managementNetworkId, long controlNetworkId, String zoneType) throws SQLException { s_logger.debug("Upgrading ssvm in " + dataCenterId); - PreparedStatement pstmt = + //select instance + try ( + PreparedStatement selectInstance = conn.prepareStatement("SELECT vm_instance.id, vm_instance.state, vm_instance.private_mac_address, vm_instance.private_ip_address, vm_instance.private_netmask, secondary_storage_vm.public_mac_address, secondary_storage_vm.public_ip_address, secondary_storage_vm.public_netmask, secondary_storage_vm.guest_mac_address, secondary_storage_vm.guest_ip_address, secondary_storage_vm.guest_netmask, secondary_storage_vm.gateway, vm_instance.type FROM vm_instance INNER JOIN secondary_storage_vm ON vm_instance.id=secondary_storage_vm.id WHERE vm_instance.removed is NULL AND vm_instance.data_center_id=? AND vm_instance.type='SecondaryStorageVm'"); - pstmt.setLong(1, dataCenterId); - ResultSet rs = pstmt.executeQuery(); + ) { + selectInstance.setLong(1, dataCenterId); + try (ResultSet instanceResult = selectInstance.executeQuery();) { - if (!rs.next()) { - s_logger.debug("Unable to find ssvm in data center " + dataCenterId); - return; - } + if (!instanceResult.next()) { + s_logger.debug("Unable to find ssvm in data center " + dataCenterId); + return; + } - long ssvmId = rs.getLong(1); - String state = rs.getString(2); - boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); - String privateMac = rs.getString(3); - String privateIp = rs.getString(4); - String privateNetmask = rs.getString(5); - String publicMac = rs.getString(6); - String publicIp = rs.getString(7); - String publicNetmask = rs.getString(8); - String guestMac = rs.getString(9); - String guestIp = rs.getString(10); - String guestNetmask = rs.getString(11); - String gateway = rs.getString(12); - String type = rs.getString(13); - rs.close(); - pstmt.close(); + long ssvmId = instanceResult.getLong(1); + String state = instanceResult.getString(2); + boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); + String privateMac = instanceResult.getString(3); + String privateIp = instanceResult.getString(4); + String privateNetmask = instanceResult.getString(5); + String publicMac = instanceResult.getString(6); + String publicIp = instanceResult.getString(7); + String publicNetmask = instanceResult.getString(8); + String guestMac = instanceResult.getString(9); + String guestIp = instanceResult.getString(10); + String guestNetmask = instanceResult.getString(11); + String gateway = instanceResult.getString(12); +// String type = instanceResult.getString(13); + // select host + try (PreparedStatement selectHost = + conn.prepareStatement("SELECT host_pod_ref.gateway from host_pod_ref INNER JOIN vm_instance ON vm_instance.pod_id=host_pod_ref.id WHERE vm_instance.removed is NULL AND vm_instance.data_center_id=? AND vm_instance.type='SecondaryStorageVm'");) { + selectHost.setLong(1, dataCenterId); + try (ResultSet hostResult = selectHost.executeQuery();) { - pstmt = - conn.prepareStatement("SELECT host_pod_ref.gateway from host_pod_ref INNER JOIN vm_instance ON vm_instance.pod_id=host_pod_ref.id WHERE vm_instance.removed is NULL AND vm_instance.data_center_id=? AND vm_instance.type='SecondaryStorageVm'"); - pstmt.setLong(1, dataCenterId); - rs = pstmt.executeQuery(); + if (!hostResult.next()) { + s_logger.debug("Unable to find ssvm in data center " + dataCenterId); + return; + } - if (!rs.next()) { - s_logger.debug("Unable to find ssvm in data center " + dataCenterId); - return; - } + String podGateway = hostResult.getString(1); + // select vlan + try (PreparedStatement selectVlan = conn.prepareStatement("SELECT v.vlan_id from vlan v, user_ip_address u where v.id=u.vlan_db_id and u.public_ip_address=?");) { + selectVlan.setString(1, publicIp); + try (ResultSet vlanResult = selectVlan.executeQuery();) { + String publicVlan = null; + while (vlanResult.next()) { + publicVlan = vlanResult.getString(1); + } + if (zoneType.equalsIgnoreCase("Basic")) { + insertNic(conn, publicNetworkId, ssvmId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "DirectPodBasedNetworkGuru", true, 2, + "Dhcp", null); - String podGateway = rs.getString(1); - rs.close(); - pstmt.close(); + } else { + insertNic(conn, publicNetworkId, ssvmId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "PublicNetworkGuru", true, 2, "Static", + null); + } + } + } - pstmt = conn.prepareStatement("SELECT v.vlan_id from vlan v, user_ip_address u where v.id=u.vlan_db_id and u.public_ip_address=?"); - pstmt.setString(1, publicIp); - rs = pstmt.executeQuery(); - String publicVlan = null; - while (rs.next()) { - publicVlan = rs.getString(1); - } + long controlNicId = + insertNic(conn, controlNetworkId, ssvmId, running, guestMac, guestIp, guestNetmask, "Start", "169.254.0.1", null, "ControlNetworkGuru", false, 0, "Static", + guestIp != null ? (ssvmId + guestIp) : null); + if (guestIp != null) { + try (PreparedStatement updateLinkLocal = conn.prepareStatement("UPDATE op_dc_link_local_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?");) { + updateLinkLocal.setLong(1, controlNicId); + updateLinkLocal.setString(2, guestIp); + updateLinkLocal.setLong(3, dataCenterId); + updateLinkLocal.executeUpdate(); + } + } - rs.close(); - pstmt.close(); - - if (zoneType.equalsIgnoreCase("Basic")) { - insertNic(conn, publicNetworkId, ssvmId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "DirectPodBasedNetworkGuru", true, 2, - "Dhcp", null); - - } else { - insertNic(conn, publicNetworkId, ssvmId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "PublicNetworkGuru", true, 2, "Static", - null); - } - - long controlNicId = - insertNic(conn, controlNetworkId, ssvmId, running, guestMac, guestIp, guestNetmask, "Start", "169.254.0.1", null, "ControlNetworkGuru", false, 0, "Static", - guestIp != null ? (ssvmId + guestIp) : null); - if (guestIp != null) { - pstmt = conn.prepareStatement("UPDATE op_dc_link_local_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?"); - pstmt.setLong(1, controlNicId); - pstmt.setString(2, guestIp); - pstmt.setLong(3, dataCenterId); - pstmt.executeUpdate(); - pstmt.close(); - } - - long mgmtNicId = - insertNic(conn, managementNetworkId, ssvmId, running, privateMac, privateIp, privateNetmask, "Start", podGateway, null, "PodBasedNetworkGuru", false, 1, - "Static", null); - if (privateIp != null) { - pstmt = conn.prepareStatement("UPDATE op_dc_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?"); - pstmt.setLong(1, mgmtNicId); - pstmt.setString(2, privateIp); - pstmt.setLong(3, dataCenterId); - pstmt.executeUpdate(); - pstmt.close(); + long mgmtNicId = + insertNic(conn, managementNetworkId, ssvmId, running, privateMac, privateIp, privateNetmask, "Start", podGateway, null, "PodBasedNetworkGuru", false, 1, + "Static", null); + if (privateIp != null) { + try (PreparedStatement updateIp = conn.prepareStatement("UPDATE op_dc_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?");) { + updateIp.setLong(1, mgmtNicId); + updateIp.setString(2, privateIp); + updateIp.setLong(3, dataCenterId); + updateIp.executeUpdate(); + } + } + } + } + } } } protected void upgradeConsoleProxy(Connection conn, long dcId, long cpId, long publicNetworkId, long managementNetworkId, long controlNetworkId, String zoneType) throws SQLException { s_logger.debug("Upgrading cp" + cpId); - PreparedStatement pstmt = - conn.prepareStatement("SELECT vm_instance.id, vm_instance.state, vm_instance.private_mac_address, vm_instance.private_ip_address, vm_instance.private_netmask, console_proxy.public_mac_address, console_proxy.public_ip_address, console_proxy.public_netmask, console_proxy.guest_mac_address, console_proxy.guest_ip_address, console_proxy.guest_netmask, console_proxy.gateway, vm_instance.type FROM vm_instance INNER JOIN console_proxy ON vm_instance.id=console_proxy.id WHERE vm_instance.removed is NULL AND vm_instance.id=?"); - pstmt.setLong(1, cpId); - ResultSet rs = pstmt.executeQuery(); + try (PreparedStatement pstmt = + conn.prepareStatement("SELECT vm_instance.id, vm_instance.state, vm_instance.private_mac_address, vm_instance.private_ip_address, vm_instance.private_netmask, console_proxy.public_mac_address, console_proxy.public_ip_address, console_proxy.public_netmask, console_proxy.guest_mac_address, console_proxy.guest_ip_address, console_proxy.guest_netmask, console_proxy.gateway, vm_instance.type FROM vm_instance INNER JOIN console_proxy ON vm_instance.id=console_proxy.id WHERE vm_instance.removed is NULL AND vm_instance.id=?");) { + pstmt.setLong(1, cpId); + try (ResultSet rs = pstmt.executeQuery();) { - if (!rs.next()) { - throw new CloudRuntimeException("Unable to find cp " + cpId); - } + if (!rs.next()) { + throw new CloudRuntimeException("Unable to find cp " + cpId); + } - long id = rs.getLong(1); - String state = rs.getString(2); - boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); - String privateMac = rs.getString(3); - String privateIp = rs.getString(4); - String privateNetmask = rs.getString(5); - String publicMac = rs.getString(6); - String publicIp = rs.getString(7); - String publicNetmask = rs.getString(8); - String guestMac = rs.getString(9); - String guestIp = rs.getString(10); - String guestNetmask = rs.getString(11); - String gateway = rs.getString(12); - String type = rs.getString(13); - rs.close(); - pstmt.close(); + long id = rs.getLong(1); + String state = rs.getString(2); + boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); + String privateMac = rs.getString(3); + String privateIp = rs.getString(4); + String privateNetmask = rs.getString(5); + String publicMac = rs.getString(6); + String publicIp = rs.getString(7); + String publicNetmask = rs.getString(8); + String guestMac = rs.getString(9); + String guestIp = rs.getString(10); + String guestNetmask = rs.getString(11); + String gateway = rs.getString(12); + String type = rs.getString(13); + try ( + PreparedStatement selectHost = + conn.prepareStatement("SELECT host_pod_ref.gateway from host_pod_ref INNER JOIN vm_instance ON vm_instance.pod_id=host_pod_ref.id WHERE vm_instance.id=?"); + ) { + selectHost.setLong(1, cpId); + try (ResultSet hostResult = selectHost.executeQuery();) { - pstmt = - conn.prepareStatement("SELECT host_pod_ref.gateway from host_pod_ref INNER JOIN vm_instance ON vm_instance.pod_id=host_pod_ref.id WHERE vm_instance.id=?"); - pstmt.setLong(1, cpId); - rs = pstmt.executeQuery(); + if (!hostResult.next()) { + throw new CloudRuntimeException("Unable to find cp " + cpId); + } - if (!rs.next()) { - throw new CloudRuntimeException("Unable to find cp " + cpId); - } + String podGateway = hostResult.getString(1); + try (PreparedStatement selectVlan = conn.prepareStatement("SELECT v.vlan_id from vlan v, user_ip_address u where v.id=u.vlan_db_id and u.public_ip_address=?");) { + selectVlan.setString(1, publicIp); + try (ResultSet vlanResult = selectVlan.executeQuery();) { - String podGateway = rs.getString(1); - rs.close(); - pstmt.close(); + String publicVlan = null; + while (vlanResult.next()) { + publicVlan = vlanResult.getString(1); + } + if (zoneType.equalsIgnoreCase("Basic")) { + insertNic(conn, publicNetworkId, cpId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "DirectPodBasedNetworkGuru", true, 2, + "Dhcp", null); + } else { + insertNic(conn, publicNetworkId, cpId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "PublicNetworkGuru", true, 2, "Static", + null); + } - pstmt = conn.prepareStatement("SELECT v.vlan_id from vlan v, user_ip_address u where v.id=u.vlan_db_id and u.public_ip_address=?"); - pstmt.setString(1, publicIp); - rs = pstmt.executeQuery(); - - String publicVlan = null; - while (rs.next()) { - publicVlan = rs.getString(1); - } - - rs.close(); - pstmt.close(); - - if (zoneType.equalsIgnoreCase("Basic")) { - insertNic(conn, publicNetworkId, cpId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "DirectPodBasedNetworkGuru", true, 2, - "Dhcp", null); - } else { - insertNic(conn, publicNetworkId, cpId, running, publicMac, publicIp, publicNetmask, "Create", gateway, publicVlan, "PublicNetworkGuru", true, 2, "Static", - null); - } - - long controlNicId = - insertNic(conn, controlNetworkId, cpId, running, guestMac, guestIp, guestNetmask, "Start", "169.254.0.1", null, "ControlNetworkGuru", false, 0, "Static", - guestIp != null ? (cpId + guestIp) : null); - if (guestIp != null) { - pstmt = conn.prepareStatement("UPDATE op_dc_link_local_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?"); - pstmt.setLong(1, controlNicId); - pstmt.setString(2, guestIp); - pstmt.setLong(3, dcId); - pstmt.executeUpdate(); - pstmt.close(); - } - long mgmtNicId = - insertNic(conn, managementNetworkId, cpId, running, privateMac, privateIp, privateNetmask, "Start", podGateway, null, "PodBasedNetworkGuru", false, 1, - "Static", privateIp != null ? (cpId + privateIp) : null); - if (privateIp != null) { - pstmt = conn.prepareStatement("UPDATE op_dc_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?"); - pstmt.setLong(1, mgmtNicId); - pstmt.setString(2, privateIp); - pstmt.setLong(3, dcId); - pstmt.executeUpdate(); - pstmt.close(); + long controlNicId = + insertNic(conn, controlNetworkId, cpId, running, guestMac, guestIp, guestNetmask, "Start", "169.254.0.1", null, "ControlNetworkGuru", false, 0, "Static", + guestIp != null ? (cpId + guestIp) : null); + if (guestIp != null) { + try (PreparedStatement update = conn.prepareStatement("UPDATE op_dc_link_local_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?");) { + update.setLong(1, controlNicId); + update.setString(2, guestIp); + update.setLong(3, dcId); + update.executeUpdate(); + } + } + long mgmtNicId = + insertNic(conn, managementNetworkId, cpId, running, privateMac, privateIp, privateNetmask, "Start", podGateway, null, "PodBasedNetworkGuru", false, 1, + "Static", privateIp != null ? (cpId + privateIp) : null); + if (privateIp != null) { + try (PreparedStatement update = conn.prepareStatement("UPDATE op_dc_ip_address_alloc SET instance_id=? WHERE ip_address=? AND data_center_id=?");) { + update.setLong(1, mgmtNicId); + update.setString(2, privateIp); + update.setLong(3, dcId); + update.executeUpdate(); + } + } + } + } + } + } + } } } protected void upgradeUserVms(Connection conn, long domainRouterId, long networkId, String gateway, String vnet, String guruName, String strategy) throws SQLException { - PreparedStatement pstmt = - conn.prepareStatement("SELECT vm_instance.id, vm_instance.private_mac_address, vm_instance.private_ip_address, vm_instance.private_netmask, vm_instance.state, vm_instance.type FROM vm_instance INNER JOIN user_vm ON vm_instance.id=user_vm.id WHERE user_vm.domain_router_id=? and vm_instance.removed IS NULL"); - pstmt.setLong(1, domainRouterId); - ResultSet rs = pstmt.executeQuery(); - List vms = new ArrayList(); - while (rs.next()) { - Object[] vm = new Object[10]; - vm[0] = rs.getLong(1); // vm id - vm[1] = rs.getString(2); // mac address - vm[2] = rs.getString(3); // ip address - vm[3] = rs.getString(4); // netmask - vm[4] = rs.getString(5); // vm state - vms.add(vm); - } - rs.close(); - pstmt.close(); - - s_logger.debug("Upgrading " + vms.size() + " vms for router " + domainRouterId); - int count = 0; - for (Object[] vm : vms) { - String state = (String)vm[4]; + try( + PreparedStatement pstmt = + conn.prepareStatement("SELECT vm_instance.id, vm_instance.private_mac_address, vm_instance.private_ip_address, vm_instance.private_netmask, vm_instance.state, vm_instance.type FROM vm_instance INNER JOIN user_vm ON vm_instance.id=user_vm.id WHERE user_vm.domain_router_id=? and vm_instance.removed IS NULL"); + ) { + pstmt.setLong(1, domainRouterId); + try (ResultSet rs = pstmt.executeQuery();) { + List vms = new ArrayList(); + while (rs.next()) { + Object[] vm = new Object[10]; + vm[0] = rs.getLong(1); // vm id + vm[1] = rs.getString(2); // mac address + vm[2] = rs.getString(3); // ip address + vm[3] = rs.getString(4); // netmask + vm[4] = rs.getString(5); // vm state + vms.add(vm); + } + s_logger.debug("Upgrading " + vms.size() + " vms for router " + domainRouterId); + for (Object[] vm : vms) { + String state = (String)vm[4]; - boolean running = false; - if (state.equals("Running") || state.equals("Starting") || state.equals("Stopping")) { - running = true; - count++; + boolean running = false; + if (state.equals("Running") || state.equals("Starting") || state.equals("Stopping")) { + running = true; + count++; + } + + insertNic(conn, networkId, (Long)vm[0], running, (String)vm[1], (String)vm[2], (String)vm[3], strategy, gateway, vnet, guruName, true, 0, "Dhcp", null); + } } - - insertNic(conn, networkId, (Long)vm[0], running, (String)vm[1], (String)vm[2], (String)vm[3], strategy, gateway, vnet, guruName, true, 0, "Dhcp", null); } - - pstmt = conn.prepareStatement("SELECT state FROM vm_instance WHERE id=?"); - pstmt.setLong(1, domainRouterId); - rs = pstmt.executeQuery(); - rs.next(); - String state = rs.getString(1); - if (state.equals("Running") || state.equals("Starting") || state.equals("Stopping")) { - count++; + try (PreparedStatement pstmt = conn.prepareStatement("SELECT state FROM vm_instance WHERE id=?");) { + pstmt.setLong(1, domainRouterId); + try (ResultSet rs = pstmt.executeQuery();) { + rs.next(); + String state = rs.getString(1); + if (state.equals("Running") || state.equals("Starting") || state.equals("Stopping")) { + count++; + } + } } - rs.close(); - pstmt.close(); Long originalNicsCount = 0L; - pstmt = conn.prepareStatement("SELECT nics_count from op_networks where id=?"); - pstmt.setLong(1, networkId); - ResultSet originalCountRs = pstmt.executeQuery(); + try (PreparedStatement selectNicsCount = conn.prepareStatement("SELECT nics_count from op_networks where id=?");) { + selectNicsCount.setLong(1, networkId); + try (ResultSet originalCountRs = selectNicsCount.executeQuery();) { - if (originalCountRs.next()) { - originalNicsCount = originalCountRs.getLong(1); + if (originalCountRs.next()) { + originalNicsCount = originalCountRs.getLong(1); + } + + Long resultCount = originalNicsCount + count; + try (PreparedStatement updateNetworks = conn.prepareStatement("UPDATE op_networks SET nics_count=?, check_for_gc=? WHERE id=?");) { + updateNetworks.setLong(1, resultCount); + if (count == 0) { + updateNetworks.setBoolean(2, false); + } else { + updateNetworks.setBoolean(2, true); + } + updateNetworks.setLong(3, networkId); + updateNetworks.executeUpdate(); + } + } } - - Long resultCount = originalNicsCount + count; - originalCountRs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE op_networks SET nics_count=?, check_for_gc=? WHERE id=?"); - pstmt.setLong(1, resultCount); - if (count == 0) { - pstmt.setBoolean(2, false); - } else { - pstmt.setBoolean(2, true); - } - pstmt.setLong(3, networkId); - pstmt.executeUpdate(); - pstmt.close(); } protected long insertNetwork(Connection conn, String name, String displayText, String trafficType, String broadcastDomainType, String broadcastUri, String gateway, @@ -532,62 +523,59 @@ public class Upgrade218to22 implements DbUpgrade { String insertNetworkSql = "INSERT INTO networks(id, name, display_text, traffic_type, broadcast_domain_type, gateway, cidr, mode, network_offering_id, data_center_id, guru_name, state, domain_id, account_id, dns1, dns2, guest_type, shared, is_default, created, network_domain, related, reservation_id, broadcast_uri) " + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, now(), ?, ?, ?, ?)"; - try { - PreparedStatement pstmt = conn.prepareStatement(getNextNetworkSequenceSql); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement getNextNetworkSequence = conn.prepareStatement(getNextNetworkSequenceSql); + ResultSet rs = getNextNetworkSequence.executeQuery(); + ) { rs.next(); long seq = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement(advanceNetworkSequenceSql); - pstmt.executeUpdate(); - pstmt.close(); - - pstmt = conn.prepareStatement(insertNetworkSql); - int i = 1; - pstmt.setLong(i++, seq); - pstmt.setString(i++, name); - pstmt.setString(i++, displayText); - pstmt.setString(i++, trafficType); - pstmt.setString(i++, broadcastDomainType); - pstmt.setString(i++, gateway); - pstmt.setString(i++, cidr); - pstmt.setString(i++, mode); - pstmt.setLong(i++, networkOfferingId); - pstmt.setLong(i++, dataCenterId); - pstmt.setString(i++, guruName); - pstmt.setString(i++, state); - pstmt.setLong(i++, domainId); - pstmt.setLong(i++, accountId); - pstmt.setString(i++, dns1); - pstmt.setString(i++, dns2); - pstmt.setString(i++, guestType); - pstmt.setBoolean(i++, shared); - pstmt.setBoolean(i++, isDefault); - pstmt.setString(i++, networkDomain); - pstmt.setLong(i++, seq); - pstmt.setString(i++, reservationId); - pstmt.setString(i++, broadcastUri); - pstmt.executeUpdate(); - - pstmt = conn.prepareStatement("INSERT INTO op_networks(id, mac_address_seq, nics_count, gc, check_for_gc) VALUES(?, ?, ?, ?, ?)"); - pstmt.setLong(1, seq); - pstmt.setLong(2, 0); - pstmt.setLong(3, 0); - if (trafficType.equals("Guest")) { - pstmt.setBoolean(4, true); - } else { - pstmt.setBoolean(4, false); + try (PreparedStatement insertNetworkSequence = conn.prepareStatement(advanceNetworkSequenceSql);) { + insertNetworkSequence.executeUpdate(); + } + try (PreparedStatement insertNetwork = conn.prepareStatement(insertNetworkSql);) { + int i = 1; + insertNetwork.setLong(i++, seq); + insertNetwork.setString(i++, name); + insertNetwork.setString(i++, displayText); + insertNetwork.setString(i++, trafficType); + insertNetwork.setString(i++, broadcastDomainType); + insertNetwork.setString(i++, gateway); + insertNetwork.setString(i++, cidr); + insertNetwork.setString(i++, mode); + insertNetwork.setLong(i++, networkOfferingId); + insertNetwork.setLong(i++, dataCenterId); + insertNetwork.setString(i++, guruName); + insertNetwork.setString(i++, state); + insertNetwork.setLong(i++, domainId); + insertNetwork.setLong(i++, accountId); + insertNetwork.setString(i++, dns1); + insertNetwork.setString(i++, dns2); + insertNetwork.setString(i++, guestType); + insertNetwork.setBoolean(i++, shared); + insertNetwork.setBoolean(i++, isDefault); + insertNetwork.setString(i++, networkDomain); + insertNetwork.setLong(i++, seq); + insertNetwork.setString(i++, reservationId); + insertNetwork.setString(i++, broadcastUri); + insertNetwork.executeUpdate(); + } + try (PreparedStatement insertNetworks = conn.prepareStatement("INSERT INTO op_networks(id, mac_address_seq, nics_count, gc, check_for_gc) VALUES(?, ?, ?, ?, ?)");) { + insertNetworks.setLong(1, seq); + insertNetworks.setLong(2, 0); + insertNetworks.setLong(3, 0); + if (trafficType.equals("Guest")) { + insertNetworks.setBoolean(4, true); + } else { + insertNetworks.setBoolean(4, false); + } + insertNetworks.setBoolean(5, false); + insertNetworks.executeUpdate(); + } + try (PreparedStatement insertAccountNetworkRef = conn.prepareStatement("INSERT INTO account_network_ref (account_id, network_id, is_owner) VALUES (?, ?, 1)");) { + insertAccountNetworkRef.setLong(1, accountId); + insertAccountNetworkRef.setLong(2, seq); + insertAccountNetworkRef.executeUpdate(); } - pstmt.setBoolean(5, false); - pstmt.executeUpdate(); - - pstmt = conn.prepareStatement("INSERT INTO account_network_ref (account_id, network_id, is_owner) VALUES (?, ?, 1)"); - pstmt.setLong(1, accountId); - pstmt.setLong(2, seq); - pstmt.executeUpdate(); - return seq; } catch (SQLException e) { throw new CloudRuntimeException("Unable to create network", e); @@ -1117,82 +1105,81 @@ public class Upgrade218to22 implements DbUpgrade { } private void updateUserStats(Connection conn) { - try { - + try ( // update device_type information - PreparedStatement pstmt = conn.prepareStatement("UPDATE user_statistics SET device_type='DomainRouter'"); + PreparedStatement pstmt = conn.prepareStatement("UPDATE user_statistics SET device_type='DomainRouter'"); + ){ pstmt.executeUpdate(); - pstmt.close(); s_logger.debug("Upgraded userStatistcis with device_type=DomainRouter"); // update device_id infrormation - pstmt = conn.prepareStatement("SELECT id, account_id, data_center_id FROM user_statistics"); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement selectUserStatistics = conn.prepareStatement("SELECT id, account_id, data_center_id FROM user_statistics"); + ResultSet rs = selectUserStatistics.executeQuery(); + ) { + while (rs.next()) { + Long id = rs.getLong(1); // user stats id + Long accountId = rs.getLong(2); // account id + Long dataCenterId = rs.getLong(3); // zone id - while (rs.next()) { - Long id = rs.getLong(1); // user stats id - Long accountId = rs.getLong(2); // account id - Long dataCenterId = rs.getLong(3); // zone id - - pstmt = conn.prepareStatement("SELECT networktype from data_center where id=?"); - pstmt.setLong(1, dataCenterId); - - ResultSet dcSet = pstmt.executeQuery(); - - if (!dcSet.next()) { - s_logger.error("Unable to get data_center information as a part of user_statistics update"); - throw new CloudRuntimeException("Unable to get data_center information as a part of user_statistics update"); - } - - String dataCenterType = dcSet.getString(1); - - if (dataCenterType.equalsIgnoreCase("basic")) { - accountId = 1L; - } - - pstmt = conn.prepareStatement("SELECT id from vm_instance where account_id=? AND data_center_id=? AND type='DomainRouter'"); - pstmt.setLong(1, accountId); - pstmt.setLong(2, dataCenterId); - ResultSet rs1 = pstmt.executeQuery(); - - Long deviceId = 0L; - if (!rs1.next()) { - // check if there are any non-removed user vms existing for this account - // if all vms are expunged, and there is no domR, just skip this record - pstmt = conn.prepareStatement("SELECT * from vm_instance where account_id=? AND data_center_id=? AND removed IS NULL"); - pstmt.setLong(1, accountId); - pstmt.setLong(2, dataCenterId); - ResultSet nonRemovedVms = pstmt.executeQuery(); - - if (nonRemovedVms.next()) { - s_logger.warn("Failed to find domR for for account id=" + accountId + " in zone id=" + dataCenterId + - "; will try to locate domR based on user_vm info"); - //try to get domR information from the user_vm belonging to the account - pstmt = - conn.prepareStatement("SELECT u.domain_router_id from user_vm u, vm_instance v where u.account_id=? AND v.data_center_id=? AND v.removed IS NULL AND u.domain_router_id is NOT NULL"); - pstmt.setLong(1, accountId); - pstmt.setLong(2, dataCenterId); - ResultSet userVmSet = pstmt.executeQuery(); - if (!userVmSet.next()) { - s_logger.warn("Skipping user_statistics upgrade for account id=" + accountId + " in datacenter id=" + dataCenterId); - continue; + try (PreparedStatement selectNetworkType = conn.prepareStatement("SELECT networktype from data_center where id=?");) { + selectNetworkType.setLong(1, dataCenterId); + try (ResultSet dcSet = selectNetworkType.executeQuery();) { + if (!dcSet.next()) { + s_logger.error("Unable to get data_center information as a part of user_statistics update"); + throw new CloudRuntimeException("Unable to get data_center information as a part of user_statistics update"); + } + String dataCenterType = dcSet.getString(1); + if (dataCenterType.equalsIgnoreCase("basic")) { + accountId = 1L; + } + } + } + try (PreparedStatement selectDomainRouterIds = conn.prepareStatement("SELECT id from vm_instance where account_id=? AND data_center_id=? AND type='DomainRouter'");) { + selectDomainRouterIds.setLong(1, accountId); + selectDomainRouterIds.setLong(2, dataCenterId); + try (ResultSet domainRouterIdResult = selectDomainRouterIds.executeQuery();) { + Long deviceId = 0L; + if (!domainRouterIdResult.next()) { + // check if there are any non-removed user vms existing for this account + // if all vms are expunged, and there is no domR, just skip this record + try (PreparedStatement selectnonRemovedVms = conn.prepareStatement("SELECT * from vm_instance where account_id=? AND data_center_id=? AND removed IS NULL");) { + selectnonRemovedVms.setLong(1, accountId); + selectnonRemovedVms.setLong(2, dataCenterId); + try (ResultSet nonRemovedVms = selectnonRemovedVms.executeQuery();) { + if (nonRemovedVms.next()) { + s_logger.warn("Failed to find domR for for account id=" + accountId + " in zone id=" + dataCenterId + + "; will try to locate domR based on user_vm info"); + //try to get domR information from the user_vm belonging to the account + try (PreparedStatement selectNetworkType = + conn.prepareStatement("SELECT u.domain_router_id from user_vm u, vm_instance v where u.account_id=? AND v.data_center_id=? AND v.removed IS NULL AND u.domain_router_id is NOT NULL");) { + selectNetworkType.setLong(1, accountId); + selectNetworkType.setLong(2, dataCenterId); + try (ResultSet userVmSet = selectNetworkType.executeQuery();) { + if (!userVmSet.next()) { + s_logger.warn("Skipping user_statistics upgrade for account id=" + accountId + " in datacenter id=" + dataCenterId); + continue; + } + deviceId = userVmSet.getLong(1); + } + } + } else { + s_logger.debug("Account id=" + accountId + " doesn't own any user vms and domRs, so skipping user_statistics update"); + continue; + } + } + } + } else { + deviceId = domainRouterIdResult.getLong(1); + } + try (PreparedStatement updateUserStatistics = conn.prepareStatement("UPDATE user_statistics SET device_id=? where id=?");) { + updateUserStatistics.setLong(1, deviceId); + updateUserStatistics.setLong(2, id); + updateUserStatistics.executeUpdate(); + } } - deviceId = userVmSet.getLong(1); - } else { - s_logger.debug("Account id=" + accountId + " doesn't own any user vms and domRs, so skipping user_statistics update"); - continue; } - } else { - deviceId = rs1.getLong(1); } - - pstmt = conn.prepareStatement("UPDATE user_statistics SET device_id=? where id=?"); - pstmt.setLong(1, deviceId); - pstmt.setLong(2, id); - pstmt.executeUpdate(); - - pstmt = conn.prepareStatement(""); - } s_logger.debug("Upgraded userStatistcis with deviceId(s)"); @@ -1202,10 +1189,11 @@ public class Upgrade218to22 implements DbUpgrade { } public void upgradePortForwardingRules(Connection conn) { - try { - PreparedStatement pstmt = - conn.prepareStatement("SELECT id, public_ip_address, public_port, private_ip_address, private_port, protocol FROM ip_forwarding WHERE forwarding=1"); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = + conn.prepareStatement("SELECT id, public_ip_address, public_port, private_ip_address, private_port, protocol FROM ip_forwarding WHERE forwarding=1"); + ResultSet rs = pstmt.executeQuery(); + ) { ArrayList rules = new ArrayList(); while (rs.next()) { Object[] rule = new Object[10]; @@ -1217,8 +1205,6 @@ public class Upgrade218to22 implements DbUpgrade { rule[5] = rs.getString(6); // rule protocol rules.add(rule); } - rs.close(); - pstmt.close(); if (!rules.isEmpty()) { s_logger.debug("Found " + rules.size() + " port forwarding rules to upgrade"); @@ -1228,72 +1214,68 @@ public class Upgrade218to22 implements DbUpgrade { String protocol = (String)rule[5]; String publicIp = (String)rule[1]; - pstmt = conn.prepareStatement("SELECT id, account_id, domain_id, network_id FROM user_ip_address WHERE public_ip_address=?"); - pstmt.setString(1, publicIp); - rs = pstmt.executeQuery(); + try (PreparedStatement selectUserIpAddressData = conn.prepareStatement("SELECT id, account_id, domain_id, network_id FROM user_ip_address WHERE public_ip_address=?");) { + selectUserIpAddressData.setString(1, publicIp); + try (ResultSet userIpAddressData = selectUserIpAddressData.executeQuery();) { - if (!rs.next()) { - s_logger.error("Unable to find public IP address " + publicIp); - throw new CloudRuntimeException("Unable to find public IP address " + publicIp); + if (!userIpAddressData.next()) { + s_logger.error("Unable to find public IP address " + publicIp); + throw new CloudRuntimeException("Unable to find public IP address " + publicIp); + } + int ipAddressId = userIpAddressData.getInt(1); + long accountId = userIpAddressData.getLong(2); + long domainId = userIpAddressData.getLong(3); + long networkId = userIpAddressData.getLong(4); + String privateIp = (String)rule[3]; + + // update port_forwarding_rules table + s_logger.trace("Updating port_forwarding_rules table..."); + try (PreparedStatement selectInstanceId = conn.prepareStatement("SELECT instance_id FROM nics where network_id=? AND ip4_address=?");) { + selectInstanceId.setLong(1, networkId); + selectInstanceId.setString(2, privateIp); + try (ResultSet selectedInstanceId = selectInstanceId.executeQuery();) { + + if (!selectedInstanceId.next()) { + // the vm might be expunged already...so just give the warning + s_logger.warn("Unable to find vmId for private ip address " + privateIp + " for account id=" + accountId + "; assume that the vm is expunged"); + // throw new CloudRuntimeException("Unable to find vmId for private ip address " + privateIp + + // " for account id=" + accountId); + } else { + long instanceId = selectedInstanceId.getLong(1); + s_logger.debug("Instance id is " + instanceId); + // update firewall_rules table + s_logger.trace("Updating firewall_rules table as a part of PF rules upgrade..."); + try ( + PreparedStatement insertFirewallRules = + conn.prepareStatement("INSERT INTO firewall_rules (id, ip_address_id, start_port, end_port, state, protocol, purpose, account_id, domain_id, network_id, xid, is_static_nat, created) VALUES (?, ?, ?, ?, 'Active', ?, 'PortForwarding', ?, ?, ?, ?, 0, now())"); + ) { + insertFirewallRules.setLong(1, id); + insertFirewallRules.setInt(2, ipAddressId); + insertFirewallRules.setInt(3, Integer.parseInt(sourcePort.trim())); + insertFirewallRules.setInt(4, Integer.parseInt(sourcePort.trim())); + insertFirewallRules.setString(5, protocol); + insertFirewallRules.setLong(6, accountId); + insertFirewallRules.setLong(7, domainId); + insertFirewallRules.setLong(8, networkId); + insertFirewallRules.setString(9, UUID.randomUUID().toString()); + insertFirewallRules.executeUpdate(); + s_logger.trace("firewall_rules table is updated as a part of PF rules upgrade"); + } + String privatePort = (String)rule[4]; + try (PreparedStatement insertPortForwardingRules = conn.prepareStatement("INSERT INTO port_forwarding_rules VALUES (?, ?, ?, ?, ?)");) { + insertPortForwardingRules.setLong(1, id); + insertPortForwardingRules.setLong(2, instanceId); + insertPortForwardingRules.setString(3, privateIp); + insertPortForwardingRules.setInt(4, Integer.parseInt(privatePort.trim())); + insertPortForwardingRules.setInt(5, Integer.parseInt(privatePort.trim())); + insertPortForwardingRules.executeUpdate(); + } + s_logger.trace("port_forwarding_rules table is updated"); + } + } + } + } } - - int ipAddressId = rs.getInt(1); - long accountId = rs.getLong(2); - long domainId = rs.getLong(3); - long networkId = rs.getLong(4); - String privateIp = (String)rule[3]; - - rs.close(); - pstmt.close(); - - // update port_forwarding_rules table - s_logger.trace("Updating port_forwarding_rules table..."); - pstmt = conn.prepareStatement("SELECT instance_id FROM nics where network_id=? AND ip4_address=?"); - pstmt.setLong(1, networkId); - pstmt.setString(2, privateIp); - rs = pstmt.executeQuery(); - - if (!rs.next()) { - // the vm might be expunged already...so just give the warning - s_logger.warn("Unable to find vmId for private ip address " + privateIp + " for account id=" + accountId + "; assume that the vm is expunged"); - // throw new CloudRuntimeException("Unable to find vmId for private ip address " + privateIp + - // " for account id=" + accountId); - } else { - long instanceId = rs.getLong(1); - s_logger.debug("Instance id is " + instanceId); - // update firewall_rules table - s_logger.trace("Updating firewall_rules table as a part of PF rules upgrade..."); - pstmt = - conn.prepareStatement("INSERT INTO firewall_rules (id, ip_address_id, start_port, end_port, state, protocol, purpose, account_id, domain_id, network_id, xid, is_static_nat, created) VALUES (?, ?, ?, ?, 'Active', ?, 'PortForwarding', ?, ?, ?, ?, 0, now())"); - pstmt.setLong(1, id); - pstmt.setInt(2, ipAddressId); - pstmt.setInt(3, Integer.parseInt(sourcePort.trim())); - pstmt.setInt(4, Integer.parseInt(sourcePort.trim())); - pstmt.setString(5, protocol); - pstmt.setLong(6, accountId); - pstmt.setLong(7, domainId); - pstmt.setLong(8, networkId); - pstmt.setString(9, UUID.randomUUID().toString()); - pstmt.executeUpdate(); - pstmt.close(); - s_logger.trace("firewall_rules table is updated as a part of PF rules upgrade"); - - rs.close(); - pstmt.close(); - - String privatePort = (String)rule[4]; - pstmt = conn.prepareStatement("INSERT INTO port_forwarding_rules VALUES (?, ?, ?, ?, ?)"); - pstmt.setLong(1, id); - pstmt.setLong(2, instanceId); - pstmt.setString(3, privateIp); - pstmt.setInt(4, Integer.parseInt(privatePort.trim())); - pstmt.setInt(5, Integer.parseInt(privatePort.trim())); - pstmt.executeUpdate(); - pstmt.close(); - s_logger.trace("port_forwarding_rules table is updated"); - - } - } } s_logger.debug("Port forwarding rules are updated"); @@ -1303,9 +1285,10 @@ public class Upgrade218to22 implements DbUpgrade { } public void upgradeLoadBalancingRules(Connection conn) { - try { - PreparedStatement pstmt = conn.prepareStatement("SELECT name, ip_address, public_port, private_port, algorithm, id FROM load_balancer"); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT name, ip_address, public_port, private_port, algorithm, id FROM load_balancer"); + ResultSet rs = pstmt.executeQuery(); + ) { ArrayList lbs = new ArrayList(); while (rs.next()) { Object[] lb = new Object[10]; @@ -1317,20 +1300,18 @@ public class Upgrade218to22 implements DbUpgrade { lb[5] = rs.getLong(6); // lb Id lbs.add(lb); } - rs.close(); - pstmt.close(); if (!lbs.isEmpty()) { s_logger.debug("Found " + lbs.size() + " lb rules to upgrade"); - pstmt = conn.prepareStatement("SELECT id FROM firewall_rules order by id"); - rs = pstmt.executeQuery(); long newLbId = 0; - while (rs.next()) { - newLbId = rs.getLong(1); + try ( + PreparedStatement selectFWRules = conn.prepareStatement("SELECT max(id) FROM firewall_rules order by id"); + ResultSet fwRules = selectFWRules.executeQuery(); + ) { + if (rs.next()) { + newLbId = rs.getLong(1); + } } - rs.close(); - pstmt.close(); - for (Object[] lb : lbs) { String name = (String)lb[0]; String publicIp = (String)lb[1]; @@ -1340,81 +1321,80 @@ public class Upgrade218to22 implements DbUpgrade { Long originalLbId = (Long)lb[5]; newLbId = newLbId + 1; - pstmt = conn.prepareStatement("SELECT id, account_id, domain_id, network_id FROM user_ip_address WHERE public_ip_address=?"); - pstmt.setString(1, publicIp); - rs = pstmt.executeQuery(); + try (PreparedStatement selectIpData = conn.prepareStatement("SELECT id, account_id, domain_id, network_id FROM user_ip_address WHERE public_ip_address=?");) { + selectIpData.setString(1, publicIp); + try (ResultSet ipData = selectIpData.executeQuery();) { - if (!rs.next()) { - s_logger.warn("Unable to find public IP address " + publicIp + "; skipping lb rule id=" + originalLbId + - " from update. Cleaning it up from load_balancer_vm_map and load_balancer table"); - pstmt = conn.prepareStatement("DELETE from load_balancer_vm_map where load_balancer_id=?"); - pstmt.setLong(1, originalLbId); - pstmt.executeUpdate(); - - pstmt = conn.prepareStatement("DELETE from load_balancer where id=?"); - pstmt.setLong(1, originalLbId); - pstmt.executeUpdate(); - - continue; + if (!ipData.next()) { + s_logger.warn("Unable to find public IP address " + publicIp + "; skipping lb rule id=" + originalLbId + + " from update. Cleaning it up from load_balancer_vm_map and load_balancer table"); + try (PreparedStatement deleteLbVmMap = conn.prepareStatement("DELETE from load_balancer_vm_map where load_balancer_id=?");) { + deleteLbVmMap.setLong(1, originalLbId); + deleteLbVmMap.executeUpdate(); + } + try (PreparedStatement deleteLoadBalancer = conn.prepareStatement("DELETE from load_balancer where id=?");) { + deleteLoadBalancer.setLong(1, originalLbId); + deleteLoadBalancer.executeUpdate(); + } + continue; + } + int ipAddressId = ipData.getInt(1); + long accountId = ipData.getLong(2); + long domainId = ipData.getLong(3); + long networkId = ipData.getLong(4); + // update firewall_rules table + s_logger.trace("Updating firewall_rules table as a part of LB rules upgrade..."); + try (PreparedStatement insertFirewallRules = + conn.prepareStatement("INSERT INTO firewall_rules (id, ip_address_id, start_port, end_port, state, protocol, purpose, account_id, domain_id, network_id, xid, is_static_nat, created) VALUES (?, ?, ?, ?, 'Active', ?, 'LoadBalancing', ?, ?, ?, ?, 0, now())");) { + insertFirewallRules.setLong(1, newLbId); + insertFirewallRules.setInt(2, ipAddressId); + insertFirewallRules.setInt(3, Integer.parseInt(sourcePort)); + insertFirewallRules.setInt(4, Integer.parseInt(sourcePort)); + insertFirewallRules.setString(5, "tcp"); + insertFirewallRules.setLong(6, accountId); + insertFirewallRules.setLong(7, domainId); + insertFirewallRules.setLong(8, networkId); + insertFirewallRules.setString(9, UUID.randomUUID().toString()); + insertFirewallRules.executeUpdate(); + } + s_logger.trace("firewall_rules table is updated as a part of LB rules upgrade"); + } } - int ipAddressId = rs.getInt(1); - long accountId = rs.getLong(2); - long domainId = rs.getLong(3); - long networkId = rs.getLong(4); - - rs.close(); - pstmt.close(); - - // update firewall_rules table - s_logger.trace("Updating firewall_rules table as a part of LB rules upgrade..."); - pstmt = - conn.prepareStatement("INSERT INTO firewall_rules (id, ip_address_id, start_port, end_port, state, protocol, purpose, account_id, domain_id, network_id, xid, is_static_nat, created) VALUES (?, ?, ?, ?, 'Active', ?, 'LoadBalancing', ?, ?, ?, ?, 0, now())"); - pstmt.setLong(1, newLbId); - pstmt.setInt(2, ipAddressId); - pstmt.setInt(3, Integer.parseInt(sourcePort)); - pstmt.setInt(4, Integer.parseInt(sourcePort)); - pstmt.setString(5, "tcp"); - pstmt.setLong(6, accountId); - pstmt.setLong(7, domainId); - pstmt.setLong(8, networkId); - pstmt.setString(9, UUID.randomUUID().toString()); - pstmt.executeUpdate(); - pstmt.close(); - s_logger.trace("firewall_rules table is updated as a part of LB rules upgrade"); // update load_balancing_rules s_logger.trace("Updating load_balancing_rules table as a part of LB rules upgrade..."); - pstmt = conn.prepareStatement("INSERT INTO load_balancing_rules VALUES (?, ?, NULL, ?, ?, ?)"); - pstmt.setLong(1, newLbId); - pstmt.setString(2, name); - pstmt.setInt(3, Integer.parseInt(destPort)); - pstmt.setInt(4, Integer.parseInt(destPort)); - pstmt.setString(5, algorithm); - pstmt.executeUpdate(); - pstmt.close(); + try (PreparedStatement insertLoadBalancer = conn.prepareStatement("INSERT INTO load_balancing_rules VALUES (?, ?, NULL, ?, ?, ?)");) { + insertLoadBalancer.setLong(1, newLbId); + insertLoadBalancer.setString(2, name); + insertLoadBalancer.setInt(3, Integer.parseInt(destPort)); + insertLoadBalancer.setInt(4, Integer.parseInt(destPort)); + insertLoadBalancer.setString(5, algorithm); + insertLoadBalancer.executeUpdate(); + } s_logger.trace("load_balancing_rules table is updated as a part of LB rules upgrade"); // update load_balancer_vm_map table s_logger.trace("Updating load_balancer_vm_map table as a part of LB rules upgrade..."); - pstmt = conn.prepareStatement("SELECT instance_id FROM load_balancer_vm_map WHERE load_balancer_id=?"); - pstmt.setLong(1, originalLbId); - rs = pstmt.executeQuery(); - ArrayList lbMaps = new ArrayList(); - while (rs.next()) { - Object[] lbMap = new Object[10]; - lbMap[0] = rs.getLong(1); // instanceId - lbMaps.add(lbMap); + try ( + PreparedStatement selectInstance = conn.prepareStatement("SELECT instance_id FROM load_balancer_vm_map WHERE load_balancer_id=?"); + ) { + selectInstance.setLong(1, originalLbId); + try (ResultSet selectedInstance = selectInstance.executeQuery();) { + ArrayList lbMaps = new ArrayList(); + while (selectedInstance.next()) { + Object[] lbMap = new Object[10]; + lbMap[0] = selectedInstance.getLong(1); // instanceId + lbMaps.add(lbMap); + } + } } - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE load_balancer_vm_map SET load_balancer_id=? WHERE load_balancer_id=?"); - pstmt.setLong(1, newLbId); - pstmt.setLong(2, originalLbId); - pstmt.executeUpdate(); - pstmt.close(); + try (PreparedStatement updateLoadBalancer = conn.prepareStatement("UPDATE load_balancer_vm_map SET load_balancer_id=? WHERE load_balancer_id=?");) { + updateLoadBalancer.setLong(1, newLbId); + updateLoadBalancer.setLong(2, originalLbId); + updateLoadBalancer.executeUpdate(); + } s_logger.trace("load_balancer_vm_map table is updated as a part of LB rules upgrade"); } } @@ -1425,71 +1405,73 @@ public class Upgrade218to22 implements DbUpgrade { } private void upgradeHostMemoryCapacityInfo(Connection conn) { - try { - // count user_vm memory info (M Bytes) - PreparedStatement pstmt = - conn.prepareStatement("select h.id, sum(s.ram_size) from host h, vm_instance v, service_offering s where h.type='Routing' and v.state='Running' and v.`type`='User' and v.host_id=h.id and v.service_offering_id = s.id group by h.id"); + Map hostUsedMemoryInfo = new HashMap(); + // count user_vm memory info (M Bytes) + try ( + PreparedStatement pstmt = + conn.prepareStatement("select h.id, sum(s.ram_size) from host h, vm_instance v, service_offering s where h.type='Routing' and v.state='Running' and v.`type`='User' and v.host_id=h.id and v.service_offering_id = s.id group by h.id"); - ResultSet rs = pstmt.executeQuery(); - Map hostUsedMemoryInfo = new HashMap(); + ResultSet rs = pstmt.executeQuery(); + ) { while (rs.next()) { hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2)); } - rs.close(); - pstmt.close(); - int proxyRamSize = NumbersUtil.parseInt(getConfigValue(conn, "consoleproxy.ram.size"), 1024); // ConsoleProxyManager.DEFAULT_PROXY_VM_RAMSIZE); int domrRamSize = NumbersUtil.parseInt(getConfigValue(conn, "router.ram.size"), 128); // VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_VM_RAMSIZE); int ssvmRamSize = NumbersUtil.parseInt(getConfigValue(conn, "secstorage.vm.ram.size"), 256); // SecondaryStorageVmManager.DEFAULT_SS_VM_RAMSIZE); - pstmt = + try( + PreparedStatement selectConsoleProxyHostInfo = conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='ConsoleProxy' and v.host_id=h.id group by h.id"); - rs = pstmt.executeQuery(); - while (rs.next()) { - if (hostUsedMemoryInfo.get(rs.getLong(1)) != null) { - Long usedMem = hostUsedMemoryInfo.get(rs.getLong(1)); - hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2) * proxyRamSize + usedMem); - } else { - hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2) * proxyRamSize); + ResultSet consoleProxyHostInfo = selectConsoleProxyHostInfo.executeQuery(); + ) { + while (consoleProxyHostInfo.next()) { + if (hostUsedMemoryInfo.get(consoleProxyHostInfo.getLong(1)) != null) { + Long usedMem = hostUsedMemoryInfo.get(consoleProxyHostInfo.getLong(1)); + hostUsedMemoryInfo.put(consoleProxyHostInfo.getLong(1), consoleProxyHostInfo.getLong(2) * proxyRamSize + usedMem); + } else { + hostUsedMemoryInfo.put(consoleProxyHostInfo.getLong(1), consoleProxyHostInfo.getLong(2) * proxyRamSize); + } } } - rs.close(); - pstmt.close(); - pstmt = + try ( + PreparedStatement selectDomainRouterHostInfo = conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='DomainRouter' and v.host_id=h.id group by h.id"); - rs = pstmt.executeQuery(); - while (rs.next()) { - if (hostUsedMemoryInfo.get(rs.getLong(1)) != null) { - Long usedMem = hostUsedMemoryInfo.get(rs.getLong(1)); - hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2) * domrRamSize + usedMem); - } else { - hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2) * domrRamSize); + ResultSet domainrouterHostInfo = selectDomainRouterHostInfo.executeQuery(); + ) { + while (domainrouterHostInfo.next()) { + if (hostUsedMemoryInfo.get(domainrouterHostInfo.getLong(1)) != null) { + Long usedMem = hostUsedMemoryInfo.get(domainrouterHostInfo.getLong(1)); + hostUsedMemoryInfo.put(domainrouterHostInfo.getLong(1), domainrouterHostInfo.getLong(2) * domrRamSize + usedMem); + } else { + hostUsedMemoryInfo.put(domainrouterHostInfo.getLong(1), domainrouterHostInfo.getLong(2) * domrRamSize); + } } } - rs.close(); - pstmt.close(); - pstmt = + try ( + PreparedStatement selectSsvmHostInfo = conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='SecondaryStorageVm' and v.host_id=h.id group by h.id"); - rs = pstmt.executeQuery(); - while (rs.next()) { - if (hostUsedMemoryInfo.get(rs.getLong(1)) != null) { - Long usedMem = hostUsedMemoryInfo.get(rs.getLong(1)); - hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2) * ssvmRamSize + usedMem); - } else { - hostUsedMemoryInfo.put(rs.getLong(1), rs.getLong(2) * ssvmRamSize); + ResultSet ssvmHostInfo = selectSsvmHostInfo.executeQuery(); + ) { + while (ssvmHostInfo.next()) { + if (hostUsedMemoryInfo.get(ssvmHostInfo.getLong(1)) != null) { + Long usedMem = hostUsedMemoryInfo.get(ssvmHostInfo.getLong(1)); + hostUsedMemoryInfo.put(ssvmHostInfo.getLong(1), ssvmHostInfo.getLong(2) * ssvmRamSize + usedMem); + } else { + hostUsedMemoryInfo.put(ssvmHostInfo.getLong(1), ssvmHostInfo.getLong(2) * ssvmRamSize); + } } } - rs.close(); - pstmt.close(); for (Map.Entry entry : hostUsedMemoryInfo.entrySet()) { - pstmt = conn.prepareStatement("update op_host_capacity set used_capacity=? where host_id=? and capacity_type=0"); - pstmt.setLong(1, entry.getValue() * 1024 * 1024); - pstmt.setLong(2, entry.getKey()); + try (PreparedStatement updateHostCapacity = conn.prepareStatement("update op_host_capacity set used_capacity=? where host_id=? and capacity_type=0");) { + updateHostCapacity.setLong(1, entry.getValue() * 1024 * 1024); + updateHostCapacity.setLong(2, entry.getKey()); - pstmt.executeUpdate(); + updateHostCapacity.executeUpdate(); + } } } catch (SQLException e) { @@ -1585,12 +1567,13 @@ public class Upgrade218to22 implements DbUpgrade { } private void upgradeHostCpuCapacityInfo(Connection conn) { - try { - // count user_vm memory info (M Bytes) - PreparedStatement pstmt = - conn.prepareStatement("select h.id, sum(s.speed*s.cpu) from host h, vm_instance v, service_offering s where h.type='Routing' and v.state='Running' and v.`type`='User' and v.host_id=h.id and v.service_offering_id = s.id group by h.id"); + // count user_vm memory info (M Bytes) + try ( + PreparedStatement pstmt = + conn.prepareStatement("select h.id, sum(s.speed*s.cpu) from host h, vm_instance v, service_offering s where h.type='Routing' and v.state='Running' and v.`type`='User' and v.host_id=h.id and v.service_offering_id = s.id group by h.id"); - ResultSet rs = pstmt.executeQuery(); + ResultSet rs = pstmt.executeQuery(); + ) { Map hostUsedCpuInfo = new HashMap(); while (rs.next()) { hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2)); @@ -1602,55 +1585,58 @@ public class Upgrade218to22 implements DbUpgrade { int domrCpuMhz = NumbersUtil.parseInt(getConfigValue(conn, "router.cpu.mhz"), 500); // VpcVirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ); int ssvmCpuMhz = NumbersUtil.parseInt(getConfigValue(conn, "secstorage.vm.cpu.mhz"), 500); // SecondaryStorageVmManager.DEFAULT_SS_VM_CPUMHZ); - pstmt = - conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='ConsoleProxy' and v.host_id=h.id group by h.id"); - - rs = pstmt.executeQuery(); - while (rs.next()) { - if (hostUsedCpuInfo.get(rs.getLong(1)) != null) { - Long usedCpuMhz = hostUsedCpuInfo.get(rs.getLong(1)); - hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2) * proxyCpuMhz + usedCpuMhz); - } else { - hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2) * proxyCpuMhz); + try ( + PreparedStatement getHostCpuInfo = + conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='ConsoleProxy' and v.host_id=h.id group by h.id"); + ResultSet hostCpuInfoData = getHostCpuInfo.executeQuery(); + ) { + while (hostCpuInfoData.next()) { + if (hostUsedCpuInfo.get(hostCpuInfoData.getLong(1)) != null) { + Long usedCpuMhz = hostUsedCpuInfo.get(hostCpuInfoData.getLong(1)); + hostUsedCpuInfo.put(hostCpuInfoData.getLong(1), hostCpuInfoData.getLong(2) * proxyCpuMhz + usedCpuMhz); + } else { + hostUsedCpuInfo.put(hostCpuInfoData.getLong(1), hostCpuInfoData.getLong(2) * proxyCpuMhz); + } } } - rs.close(); - pstmt.close(); - pstmt = - conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='DomainRouter' and v.host_id=h.id group by h.id"); - rs = pstmt.executeQuery(); - while (rs.next()) { - if (hostUsedCpuInfo.get(rs.getLong(1)) != null) { - Long usedCpuMhz = hostUsedCpuInfo.get(rs.getLong(1)); - hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2) * domrCpuMhz + usedCpuMhz); - } else { - hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2) * domrCpuMhz); + try ( + PreparedStatement getHostCpuInfo = + conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='DomainRouter' and v.host_id=h.id group by h.id"); + ResultSet hostCpuInfoData = getHostCpuInfo.executeQuery(); + ) { + while (hostCpuInfoData.next()) { + if (hostUsedCpuInfo.get(hostCpuInfoData.getLong(1)) != null) { + Long usedCpuMhz = hostUsedCpuInfo.get(hostCpuInfoData.getLong(1)); + hostUsedCpuInfo.put(hostCpuInfoData.getLong(1), hostCpuInfoData.getLong(2) * domrCpuMhz + usedCpuMhz); + } else { + hostUsedCpuInfo.put(hostCpuInfoData.getLong(1), hostCpuInfoData.getLong(2) * domrCpuMhz); + } } } - rs.close(); - pstmt.close(); - pstmt = - conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='SecondaryStorageVm' and v.host_id=h.id group by h.id"); - rs = pstmt.executeQuery(); - while (rs.next()) { - if (hostUsedCpuInfo.get(rs.getLong(1)) != null) { - Long usedCpuMhz = hostUsedCpuInfo.get(rs.getLong(1)); - hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2) * ssvmCpuMhz + usedCpuMhz); - } else { - hostUsedCpuInfo.put(rs.getLong(1), rs.getLong(2) * ssvmCpuMhz); + try ( + PreparedStatement getHostCpuInfo = + conn.prepareStatement("select h.id, count(v.id) from host h, vm_instance v where h.type='Routing' and v.state='Running' and v.`type`='SecondaryStorageVm' and v.host_id=h.id group by h.id"); + ResultSet hostCpuInfoData = getHostCpuInfo.executeQuery(); + ) { + while (hostCpuInfoData.next()) { + if (hostUsedCpuInfo.get(hostCpuInfoData.getLong(1)) != null) { + Long usedCpuMhz = hostUsedCpuInfo.get(hostCpuInfoData.getLong(1)); + hostUsedCpuInfo.put(hostCpuInfoData.getLong(1), hostCpuInfoData.getLong(2) * ssvmCpuMhz + usedCpuMhz); + } else { + hostUsedCpuInfo.put(hostCpuInfoData.getLong(1), hostCpuInfoData.getLong(2) * ssvmCpuMhz); + } } } - rs.close(); - pstmt.close(); for (Map.Entry entry : hostUsedCpuInfo.entrySet()) { - pstmt = conn.prepareStatement("update op_host_capacity set used_capacity=? where host_id=? and capacity_type=1"); - pstmt.setLong(1, entry.getValue()); - pstmt.setLong(2, entry.getKey()); + try (PreparedStatement updateHostCapacity = conn.prepareStatement("update op_host_capacity set used_capacity=? where host_id=? and capacity_type=1");) { + updateHostCapacity.setLong(1, entry.getValue()); + updateHostCapacity.setLong(2, entry.getKey()); - pstmt.executeUpdate(); + updateHostCapacity.executeUpdate(); + } } } catch (SQLException e) { throw new CloudRuntimeException("Can't upgrade host capacity info ", e); @@ -1658,29 +1644,29 @@ public class Upgrade218to22 implements DbUpgrade { } private String getConfigValue(Connection conn, String name) { - try { + try ( + PreparedStatement pstmt = conn.prepareStatement("select value from configuration where name=?"); + ) { // count user_vm memory info (M Bytes) - PreparedStatement pstmt = conn.prepareStatement("select value from configuration where name=?"); pstmt.setString(1, name); - ResultSet rs = pstmt.executeQuery(); + try (ResultSet rs = pstmt.executeQuery();) { - String val = null; - if (rs.next()) { - val = rs.getString(1); + String val = null; + if (rs.next()) { + val = rs.getString(1); + } + return val; } - rs.close(); - pstmt.close(); - - return val; } catch (SQLException e) { throw new CloudRuntimeException("Can't upgrade host capacity info ", e); } } private void migrateEvents(Connection conn) { - try { - PreparedStatement pstmt1 = conn.prepareStatement("SHOW DATABASES LIKE 'cloud_usage'"); - ResultSet rs1 = pstmt1.executeQuery(); + try ( + PreparedStatement pstmt1 = conn.prepareStatement("SHOW DATABASES LIKE 'cloud_usage'"); + ResultSet rs1 = pstmt1.executeQuery(); + ) { if (!rs1.next()) { s_logger.debug("cloud_usage db doesn't exist. Skipping events migration"); return; @@ -1696,25 +1682,25 @@ public class Upgrade218to22 implements DbUpgrade { sql = "SELECT type, description, user_id, account_id, created, level, parameters FROM cloud.event vmevt WHERE vmevt.state = 'Completed' "; } - PreparedStatement pstmt = null; - - pstmt = conn.prepareStatement(sql); - int i = 1; - if (lastProcessedEvent != null) { - pstmt.setLong(i++, lastProcessedEvent); - } - ResultSet rs = pstmt.executeQuery(); - s_logger.debug("Begin Migrating events"); - while (rs.next()) { - EventVO event = new EventVO(); - event.setType(rs.getString(1)); - event.setDescription(rs.getString(2)); - event.setUserId(rs.getLong(3)); - event.setAccountId(rs.getLong(4)); - event.setCreatedDate(DateUtil.parseDateString(TimeZone.getTimeZone("GMT"), rs.getString(5))); - event.setLevel(rs.getString(6)); - event.setParameters(rs.getString(7)); - convertEvent(event, conn); + try (PreparedStatement pstmt = conn.prepareStatement(sql);) { + int i = 1; + if (lastProcessedEvent != null) { + pstmt.setLong(i++, lastProcessedEvent); + } + try (ResultSet rs = pstmt.executeQuery();) { + s_logger.debug("Begin Migrating events"); + while (rs.next()) { + EventVO event = new EventVO(); + event.setType(rs.getString(1)); + event.setDescription(rs.getString(2)); + event.setUserId(rs.getLong(3)); + event.setAccountId(rs.getLong(4)); + event.setCreatedDate(DateUtil.parseDateString(TimeZone.getTimeZone("GMT"), rs.getString(5))); + event.setLevel(rs.getString(6)); + event.setParameters(rs.getString(7)); + convertEvent(event, conn); + } + } } s_logger.debug("Migrating events completed"); } catch (Exception e) { @@ -1723,11 +1709,10 @@ public class Upgrade218to22 implements DbUpgrade { } private Long getMostRecentEvent(Connection conn) { - PreparedStatement pstmt = null; - String sql = "SELECT id FROM cloud_usage.event ORDER BY created DESC LIMIT 1"; - try { - pstmt = conn.prepareStatement(sql); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT id FROM cloud_usage.event ORDER BY created DESC LIMIT 1"); + ResultSet rs = pstmt.executeQuery(); + ) { if (rs.next()) { return rs.getLong(1); } @@ -1767,34 +1752,35 @@ public class Upgrade218to22 implements DbUpgrade { usageEvent.setZoneId(0); } // update firewall_rules table - PreparedStatement pstmt = null; - pstmt = - conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id, usage_event.resource_name," - + " usage_event.offering_id, usage_event.template_id, usage_event.size) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); - pstmt.setString(1, usageEvent.getType()); - pstmt.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), usageEvent.getCreateDate())); - pstmt.setLong(3, usageEvent.getAccountId()); - pstmt.setLong(4, usageEvent.getZoneId()); - pstmt.setLong(5, usageEvent.getResourceId()); - pstmt.setString(6, usageEvent.getResourceName()); - if (usageEvent.getOfferingId() != null) { - pstmt.setLong(7, usageEvent.getOfferingId()); - } else { - pstmt.setNull(7, Types.BIGINT); + try ( + PreparedStatement pstmt = + conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id, usage_event.resource_name," + + " usage_event.offering_id, usage_event.template_id, usage_event.size) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); + ) { + pstmt.setString(1, usageEvent.getType()); + pstmt.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), usageEvent.getCreateDate())); + pstmt.setLong(3, usageEvent.getAccountId()); + pstmt.setLong(4, usageEvent.getZoneId()); + pstmt.setLong(5, usageEvent.getResourceId()); + pstmt.setString(6, usageEvent.getResourceName()); + if (usageEvent.getOfferingId() != null) { + pstmt.setLong(7, usageEvent.getOfferingId()); + } else { + pstmt.setNull(7, Types.BIGINT); + } + if (usageEvent.getTemplateId() != null) { + pstmt.setLong(8, usageEvent.getTemplateId()); + } else { + pstmt.setNull(8, Types.BIGINT); + } + if (usageEvent.getSize() != null) { + pstmt.setLong(9, usageEvent.getSize()); + } else { + pstmt.setNull(9, Types.BIGINT); + } + // pstmt.setString(10, usageEvent.getResourceType()); + pstmt.executeUpdate(); } - if (usageEvent.getTemplateId() != null) { - pstmt.setLong(8, usageEvent.getTemplateId()); - } else { - pstmt.setNull(8, Types.BIGINT); - } - if (usageEvent.getSize() != null) { - pstmt.setLong(9, usageEvent.getSize()); - } else { - pstmt.setNull(9, Types.BIGINT); - } - // pstmt.setString(10, usageEvent.getResourceType()); - pstmt.executeUpdate(); - pstmt.close(); } } @@ -1840,13 +1826,6 @@ public class Upgrade218to22 implements DbUpgrade { return (eventType.equals(EventTypes.EVENT_SNAPSHOT_CREATE) || eventType.equals(EventTypes.EVENT_SNAPSHOT_DELETE)); } - private boolean isLoadBalancerEvent(String eventType) { - if (eventType == null) { - return false; - } - return eventType.startsWith("LB."); - } - private UsageEventVO convertVMEvent(EventVO event) throws IOException { Properties vmEventParams = new Properties(); @@ -1903,23 +1882,23 @@ public class Upgrade218to22 implements DbUpgrade { // Get ip address information Long ipId = 0L; Long zoneId = 0L; - PreparedStatement pstmt = conn.prepareStatement("SELECT id, data_center_id from user_ip_address where public_ip_address=?"); - pstmt.setString(1, ipAddress); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) { - ipId = rs.getLong(1); - zoneId = rs.getLong(2); - } - rs.close(); - pstmt.close(); + try (PreparedStatement pstmt = conn.prepareStatement("SELECT id, data_center_id from user_ip_address where public_ip_address=?");) { + pstmt.setString(1, ipAddress); + try (ResultSet rs = pstmt.executeQuery();) { + if (rs.next()) { + ipId = rs.getLong(1); + zoneId = rs.getLong(2); + } - boolean isSourceNat = Boolean.parseBoolean(ipEventParams.getProperty("sourceNat")); + boolean isSourceNat = Boolean.parseBoolean(ipEventParams.getProperty("sourceNat")); - if (EventTypes.EVENT_NET_IP_ASSIGN.equals(event.getType())) { - zoneId = Long.parseLong(ipEventParams.getProperty("dcId")); - usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_ASSIGN, event.getAccountId(), zoneId, ipId, ipAddress, isSourceNat, "", false); - } else if (EventTypes.EVENT_NET_IP_RELEASE.equals(event.getType())) { - usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_RELEASE, event.getAccountId(), zoneId, ipId, ipAddress, isSourceNat, "", false); + if (EventTypes.EVENT_NET_IP_ASSIGN.equals(event.getType())) { + zoneId = Long.parseLong(ipEventParams.getProperty("dcId")); + usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_ASSIGN, event.getAccountId(), zoneId, ipId, ipAddress, isSourceNat, "", false); + } else if (EventTypes.EVENT_NET_IP_RELEASE.equals(event.getType())) { + usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_RELEASE, event.getAccountId(), zoneId, ipId, ipAddress, isSourceNat, "", false); + } + } } return usageEvent; } @@ -1951,21 +1930,19 @@ public class Upgrade218to22 implements DbUpgrade { // Get volume name information String volumeName = ""; - PreparedStatement pstmt = conn.prepareStatement("SELECT name, data_center_id from volumes where id=?"); - pstmt.setLong(1, volId); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) { - volumeName = rs.getString(1); - zoneId = rs.getLong(2); - } - rs.close(); - pstmt.close(); - - if (EventTypes.EVENT_VOLUME_CREATE.equals(event.getType())) { - usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, event.getAccountId(), zoneId, volId, volumeName, doId, templateId, size); - } else if (EventTypes.EVENT_VOLUME_DELETE.equals(event.getType())) { - usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_DELETE, event.getAccountId(), zoneId, volId, volumeName); - + try(PreparedStatement pstmt = conn.prepareStatement("SELECT name, data_center_id from volumes where id=?");) { + pstmt.setLong(1, volId); + try (ResultSet rs = pstmt.executeQuery();) { + if (rs.next()) { + volumeName = rs.getString(1); + zoneId = rs.getLong(2); + } + if (EventTypes.EVENT_VOLUME_CREATE.equals(event.getType())) { + usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_CREATE, event.getAccountId(), zoneId, volId, volumeName, doId, templateId, size); + } else if (EventTypes.EVENT_VOLUME_DELETE.equals(event.getType())) { + usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_DELETE, event.getAccountId(), zoneId, volId, volumeName); + } + } } return usageEvent; } @@ -2045,31 +2022,33 @@ public class Upgrade218to22 implements DbUpgrade { // Get snapshot info (there was a bug in 2.1.x - accountId is 0, and data_center info is not present in events table if (accountId.longValue() == 0L || zoneId.longValue() == 0L) { - PreparedStatement pstmt = conn.prepareStatement("SELECT zone_id, account_id from usage_event where resource_id=? and type like '%SNAPSHOT%'"); - pstmt.setLong(1, snapId); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) { - zoneId = rs.getLong(1); - accountId = rs.getLong(2); + try (PreparedStatement pstmt = conn.prepareStatement("SELECT zone_id, account_id from usage_event where resource_id=? and type like '%SNAPSHOT%'");) { + pstmt.setLong(1, snapId); + try (ResultSet rs = pstmt.executeQuery();) { + if (rs.next()) { + zoneId = rs.getLong(1); + accountId = rs.getLong(2); + } + } + + if (EventTypes.EVENT_SNAPSHOT_CREATE.equals(event.getType())) { + usageEvent = new UsageEventVO(EventTypes.EVENT_SNAPSHOT_CREATE, accountId, zoneId, snapId, snapshotName, null, null, snapSize); + } else if (EventTypes.EVENT_SNAPSHOT_DELETE.equals(event.getType())) { + usageEvent = new UsageEventVO(EventTypes.EVENT_SNAPSHOT_DELETE, accountId, zoneId, snapId, snapshotName, null, null, 0L); + } } - - rs.close(); - pstmt.close(); - } - - if (EventTypes.EVENT_SNAPSHOT_CREATE.equals(event.getType())) { - usageEvent = new UsageEventVO(EventTypes.EVENT_SNAPSHOT_CREATE, accountId, zoneId, snapId, snapshotName, null, null, snapSize); - } else if (EventTypes.EVENT_SNAPSHOT_DELETE.equals(event.getType())) { - usageEvent = new UsageEventVO(EventTypes.EVENT_SNAPSHOT_DELETE, accountId, zoneId, snapId, snapshotName, null, null, 0L); } return usageEvent; } @Override public void performDataMigration(Connection conn) { - try { - PreparedStatement pstmt = conn.prepareStatement("USE cloud"); - pstmt.executeQuery(); + try ( + PreparedStatement useCloud = conn.prepareStatement("USE cloud"); + PreparedStatement hypervisorTypeUpdate = conn.prepareStatement("UPDATE vm_instance SET hypervisor_type='XenServer' WHERE hypervisor_type='xenserver'"); + PreparedStatement instanceUpdate = conn.prepareStatement("UPDATE vm_instance SET account_id=1, domain_id=1 WHERE type='ConsoleProxy' or type='SecondaryStorageVm'"); + ) { + useCloud.executeQuery(); upgradeDataCenter(conn); upgradeStoragePools(conn); upgradeInstanceGroups(conn); @@ -2085,14 +2064,10 @@ public class Upgrade218to22 implements DbUpgrade { createNetworkOfferingEvents(conn); // Update hypervisor type for user vm to be consistent with original 2.2.4 - pstmt = conn.prepareStatement("UPDATE vm_instance SET hypervisor_type='XenServer' WHERE hypervisor_type='xenserver'"); - pstmt.executeUpdate(); - pstmt.close(); + hypervisorTypeUpdate.executeUpdate(); // Set account=systemAccount and domain=ROOT for CPVM/SSVM - pstmt = conn.prepareStatement("UPDATE vm_instance SET account_id=1, domain_id=1 WHERE type='ConsoleProxy' or type='SecondaryStorageVm'"); - pstmt.executeUpdate(); - pstmt.close(); + instanceUpdate.executeUpdate(); // Update user statistics updateUserStats(conn); @@ -2143,33 +2118,32 @@ public class Upgrade218to22 implements DbUpgrade { } private void deleteOrphanedTemplateRef(Connection conn) { - try { - PreparedStatement pstmt = conn.prepareStatement("SELECT id, pool_id from template_spool_ref"); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement selectStoragePoolRef = conn.prepareStatement("SELECT id, pool_id from template_spool_ref"); + ResultSet rs = selectStoragePoolRef.executeQuery(); + ) { if (!rs.next()) { s_logger.debug("No records in template_spool_ref, skipping this upgrade part"); return; } - while (rs.next()) { Long id = rs.getLong(1); Long poolId = rs.getLong(2); - pstmt = conn.prepareStatement("SELECT * from storage_pool where id=?"); - pstmt.setLong(1, poolId); - ResultSet rs1 = pstmt.executeQuery(); + try (PreparedStatement selectStoragePool = conn.prepareStatement("SELECT * from storage_pool where id=?");) { + selectStoragePool.setLong(1, poolId); + try (ResultSet selectedStoragePool = selectStoragePool.executeQuery();) { - if (!rs1.next()) { - s_logger.debug("Orphaned template_spool_ref record is found (storage pool doesn't exist any more0) id=" + id + "; so removing the record"); - pstmt = conn.prepareStatement("DELETE FROM template_spool_ref where id=?"); - pstmt.setLong(1, id); - pstmt.executeUpdate(); + if (!selectedStoragePool.next()) { + s_logger.debug("Orphaned template_spool_ref record is found (storage pool doesn't exist any more0) id=" + id + "; so removing the record"); + try (PreparedStatement delete = conn.prepareStatement("DELETE FROM template_spool_ref where id=?");) { + delete.setLong(1, id); + delete.executeUpdate(); + } + } + } } - } - rs.close(); - pstmt.close(); - s_logger.debug("Finished deleting orphaned template_spool_ref(s)"); } catch (Exception e) { s_logger.error("Failed to delete orphaned template_spool_ref(s): ", e); @@ -2178,46 +2152,48 @@ public class Upgrade218to22 implements DbUpgrade { } private void cleanupVolumes(Connection conn) { - try { - PreparedStatement pstmt = conn.prepareStatement("SELECT id, instance_id, account_id from volumes where destroyed=127"); - ResultSet rs = pstmt.executeQuery(); - - while (rs.next()) { - Long id = rs.getLong(1); + try ( + PreparedStatement selectVolumes = conn.prepareStatement("SELECT id, instance_id, account_id from volumes where destroyed=127"); + ResultSet selectedVolumes = selectVolumes.executeQuery(); + ){ + while (selectedVolumes.next()) { + Long id = selectedVolumes.getLong(1); s_logger.debug("Volume id is " + id); - Long instanceId = rs.getLong(2); - Long accountId = rs.getLong(3); + Long instanceId = selectedVolumes.getLong(2); + Long accountId = selectedVolumes.getLong(3); boolean removeVolume = false; - pstmt = conn.prepareStatement("SELECT * from account where id=? and removed is not null"); - pstmt.setLong(1, accountId); - ResultSet rs1 = pstmt.executeQuery(); + try (PreparedStatement selectAccounts = conn.prepareStatement("SELECT * from account where id=? and removed is not null");) { + selectAccounts.setLong(1, accountId); + try(ResultSet selectedAccounts = selectAccounts.executeQuery();) { - if (rs1.next()) { - removeVolume = true; - } + if (selectedAccounts.next()) { + removeVolume = true; + } - if (instanceId != null) { - pstmt = conn.prepareStatement("SELECT * from vm_instance where id=? and removed is not null"); - pstmt.setLong(1, instanceId); - rs1 = pstmt.executeQuery(); + if (instanceId != null) { + try(PreparedStatement selectInstances = conn.prepareStatement("SELECT * from vm_instance where id=? and removed is not null");) { + selectInstances.setLong(1, instanceId); + try (ResultSet selectedInstances = selectInstances.executeQuery();) { - if (rs1.next()) { - removeVolume = true; + if (selectedInstances.next()) { + removeVolume = true; + } + } + } + } + + if (removeVolume) { + try(PreparedStatement pstmt = conn.prepareStatement("UPDATE volumes SET state='Destroy' WHERE id=?");) { + pstmt.setLong(1, id); + pstmt.executeUpdate(); + s_logger.debug("Volume with id=" + id + " is marked with Destroy state as a part of volume cleanup (it's Destroyed had 127 value)"); + } + } } } - - if (removeVolume) { - pstmt = conn.prepareStatement("UPDATE volumes SET state='Destroy' WHERE id=?"); - pstmt.setLong(1, id); - pstmt.executeUpdate(); - s_logger.debug("Volume with id=" + id + " is marked with Destroy state as a part of volume cleanup (it's Destroyed had 127 value)"); - } } - rs.close(); - pstmt.close(); - s_logger.debug("Finished cleaning up volumes with incorrect Destroyed field (127)"); } catch (Exception e) { s_logger.error("Failed to cleanup volumes with incorrect Destroyed field (127):", e); @@ -2226,39 +2202,34 @@ public class Upgrade218to22 implements DbUpgrade { } private void modifyIndexes(Connection conn) { - try { - + try ( // removed indexes - PreparedStatement pstmt = conn.prepareStatement("SHOW INDEX FROM security_group WHERE KEY_NAME = 'fk_network_group__account_id'"); - ResultSet rs = pstmt.executeQuery(); - - if (rs.next()) { - pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`security_group` DROP INDEX `fk_network_group__account_id`"); - pstmt.executeUpdate(); - s_logger.debug("Unique key 'fk_network_group__account_id' is removed successfully"); + PreparedStatement show__Index = conn.prepareStatement("SHOW INDEX FROM security_group WHERE KEY_NAME = 'fk_network_group__account_id'"); + ResultSet result__index = show__Index.executeQuery(); + ) { + if (result__index.next()) { + try (PreparedStatement alterTable = conn.prepareStatement("ALTER TABLE `cloud`.`security_group` DROP INDEX `fk_network_group__account_id`");) { + alterTable.executeUpdate(); + s_logger.debug("Unique key 'fk_network_group__account_id' is removed successfully"); + } } - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("SHOW INDEX FROM security_group WHERE KEY_NAME = 'fk_network_group___account_id'"); - rs = pstmt.executeQuery(); - - if (rs.next()) { - pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`security_group` DROP INDEX `fk_network_group___account_id`"); - pstmt.executeUpdate(); - s_logger.debug("Unique key 'fk_network_group___account_id' is removed successfully"); + try ( + PreparedStatement show___Index = conn.prepareStatement("SHOW INDEX FROM security_group WHERE KEY_NAME = 'fk_network_group___account_id'"); + ResultSet result___index = show___Index.executeQuery(); + ) { + if (result___index.next()) { + try (PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`security_group` DROP INDEX `fk_network_group___account_id`");) { + pstmt.executeUpdate(); + s_logger.debug("Unique key 'fk_network_group___account_id' is removed successfully"); + } + } } - - rs.close(); - pstmt.close(); - // add indexes - pstmt = - conn.prepareStatement("ALTER TABLE `cloud`.`security_group` ADD CONSTRAINT `fk_security_group___account_id` FOREIGN KEY `fk_security_group__account_id` (`account_id`) REFERENCES `account` (`id`) ON DELETE CASCADE"); - pstmt.executeUpdate(); - pstmt.close(); - + try (PreparedStatement add_index = + conn.prepareStatement("ALTER TABLE `cloud`.`security_group` ADD CONSTRAINT `fk_security_group___account_id` FOREIGN KEY `fk_security_group__account_id` (`account_id`) REFERENCES `account` (`id`) ON DELETE CASCADE");) { + add_index.executeUpdate(); + } } catch (SQLException e) { throw new CloudRuntimeException("Unable to drop indexes for 'security_group' table due to:", e); } @@ -2267,34 +2238,31 @@ public class Upgrade218to22 implements DbUpgrade { // There was a bug in 2.1.x when LB rule mapping wasn't removed along with lb rule removal // Do cleanup after making sure that the rule was removed private void cleanupLbVmMaps(Connection conn) { - try { - PreparedStatement pstmt = conn.prepareStatement("SELECT DISTINCT load_balancer_id FROM load_balancer_vm_map"); - ResultSet rs = pstmt.executeQuery(); - + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT DISTINCT load_balancer_id FROM load_balancer_vm_map"); + ResultSet rs = pstmt.executeQuery(); + ){ while (rs.next()) { long lbId = rs.getLong(1); - PreparedStatement pstmt1 = conn.prepareStatement("SELECT * FROM load_balancer where id=?"); - pstmt1.setLong(1, lbId); - ResultSet rs1 = pstmt1.executeQuery(); + try (PreparedStatement pstmt1 = conn.prepareStatement("SELECT * FROM load_balancer where id=?");) { + pstmt1.setLong(1, lbId); + try (ResultSet rs1 = pstmt1.executeQuery();) { - PreparedStatement pstmt2 = conn.prepareStatement("SELECT * from event where type like '%lb.delete%' and parameters like '%id=" + lbId + "%'"); - ResultSet rs2 = pstmt2.executeQuery(); - - if (!rs1.next() && rs2.next()) { - s_logger.debug("Removing load balancer vm mappings for lb id=" + lbId + " as a part of cleanup"); - pstmt = conn.prepareStatement("DELETE FROM load_balancer_vm_map where load_balancer_id=?"); - pstmt.setLong(1, lbId); - pstmt.executeUpdate(); + try ( + PreparedStatement pstmt2 = conn.prepareStatement("SELECT * from event where type like '%lb.delete%' and parameters like '%id=" + lbId + "%'"); + ResultSet rs2 = pstmt2.executeQuery(); + ) { + if (!rs1.next() && rs2.next()) { + s_logger.debug("Removing load balancer vm mappings for lb id=" + lbId + " as a part of cleanup"); + try (PreparedStatement delete = conn.prepareStatement("DELETE FROM load_balancer_vm_map where load_balancer_id=?");) { + delete.setLong(1, lbId); + delete.executeUpdate(); + } + } + } + } } - rs1.close(); - rs2.close(); - pstmt1.close(); - pstmt2.close(); } - - rs.close(); - pstmt.close(); - } catch (SQLException e) { throw new CloudRuntimeException("Failed to cleanup orpahned lb-vm mappings due to:", e); } @@ -2304,35 +2272,32 @@ public class Upgrade218to22 implements DbUpgrade { * Create usage events for existing port forwarding rules */ private void createPortForwardingEvents(Connection conn) { - try { - PreparedStatement pstmt = + s_logger.debug("Creating Port Forwarding usage events"); + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT fw.account_id, ip.data_center_id, fw.id FROM firewall_rules fw, user_ip_address ip where purpose = 'PortForwarding' and " - + "fw.state = 'Active' and ip.id = fw.ip_address_id"); - s_logger.debug("Creating Port Forwarding usage events"); - ResultSet rs = pstmt.executeQuery(); + + "fw.state = 'Active' and ip.id = fw.ip_address_id"); + ResultSet rs = pstmt.executeQuery(); + ) { Date now = new Date(); while (rs.next()) { long accountId = rs.getLong(1); long zoneId = rs.getLong(2); long ruleId = rs.getLong(3); - PreparedStatement pstmt1 = null; - pstmt1 = - conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id)" - + " VALUES (?, ?, ?, ?, ?)"); - pstmt1.setString(1, EventTypes.EVENT_NET_RULE_ADD); - pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); - pstmt1.setLong(3, accountId); - pstmt1.setLong(4, zoneId); - pstmt1.setLong(5, ruleId); - - pstmt1.executeUpdate(); - pstmt1.close(); + try ( + PreparedStatement pstmt1 = + conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id)" + + " VALUES (?, ?, ?, ?, ?)"); + ) { + pstmt1.setString(1, EventTypes.EVENT_NET_RULE_ADD); + pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); + pstmt1.setLong(3, accountId); + pstmt1.setLong(4, zoneId); + pstmt1.setLong(5, ruleId); + pstmt1.executeUpdate(); + } } - - rs.close(); - pstmt.close(); s_logger.debug("Completed creating Port Forwarding usage events"); - } catch (SQLException e) { throw new CloudRuntimeException("Failed to add port forwarding usage events due to:", e); } @@ -2342,35 +2307,32 @@ public class Upgrade218to22 implements DbUpgrade { * Create usage events for existing load balancer rules */ private void createLoadBalancerEvents(Connection conn) { - try { - PreparedStatement pstmt = - conn.prepareStatement("SELECT fw.account_id, ip.data_center_id, fw.id FROM firewall_rules fw, user_ip_address ip where purpose = 'LoadBalancing' and " - + "fw.state = 'Active' and ip.id = fw.ip_address_id"); - s_logger.debug("Creating load balancer usage events"); - ResultSet rs = pstmt.executeQuery(); + s_logger.debug("Creating load balancer usage events"); + try ( + PreparedStatement pstmt = + conn.prepareStatement("SELECT fw.account_id, ip.data_center_id, fw.id FROM firewall_rules fw, user_ip_address ip where purpose = 'LoadBalancing' and " + + "fw.state = 'Active' and ip.id = fw.ip_address_id"); + ResultSet rs = pstmt.executeQuery(); + ) { Date now = new Date(); while (rs.next()) { long accountId = rs.getLong(1); long zoneId = rs.getLong(2); long ruleId = rs.getLong(3); - PreparedStatement pstmt1 = null; - pstmt1 = - conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id)" - + " VALUES (?, ?, ?, ?, ?)"); - pstmt1.setString(1, EventTypes.EVENT_LOAD_BALANCER_CREATE); - pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); - pstmt1.setLong(3, accountId); - pstmt1.setLong(4, zoneId); - pstmt1.setLong(5, ruleId); - - pstmt1.executeUpdate(); - pstmt1.close(); + try ( + PreparedStatement pstmt1 = + conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id)" + + " VALUES (?, ?, ?, ?, ?)"); + ) { + pstmt1.setString(1, EventTypes.EVENT_LOAD_BALANCER_CREATE); + pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); + pstmt1.setLong(3, accountId); + pstmt1.setLong(4, zoneId); + pstmt1.setLong(5, ruleId); + pstmt1.executeUpdate(); + } } - - rs.close(); - pstmt.close(); s_logger.debug("Completed creating load balancer usage events"); - } catch (SQLException e) { throw new CloudRuntimeException("Failed to add Load Balancer usage events due to:", e); } @@ -2380,12 +2342,13 @@ public class Upgrade218to22 implements DbUpgrade { * Create usage events for network offerings */ private void createNetworkOfferingEvents(Connection conn) { - try { - PreparedStatement pstmt = - conn.prepareStatement("SELECT vm.account_id, vm.data_center_id, ni.instance_id, vm.name, nw.network_offering_id, nw.is_default FROM nics ni, " - + "networks nw, vm_instance vm where vm.type = 'User' and ni.removed is null and ni.instance_id = vm.id and ni.network_id = nw.id;"); - s_logger.debug("Creating network offering usage events"); - ResultSet rs = pstmt.executeQuery(); + s_logger.debug("Creating network offering usage events"); + try ( + PreparedStatement pstmt = + conn.prepareStatement("SELECT vm.account_id, vm.data_center_id, ni.instance_id, vm.name, nw.network_offering_id, nw.is_default FROM nics ni, " + + "networks nw, vm_instance vm where vm.type = 'User' and ni.removed is null and ni.instance_id = vm.id and ni.network_id = nw.id;"); + ResultSet rs = pstmt.executeQuery(); + ) { Date now = new Date(); while (rs.next()) { long accountId = rs.getLong(1); @@ -2394,30 +2357,23 @@ public class Upgrade218to22 implements DbUpgrade { String vmName = rs.getString(4); long nw_offering_id = rs.getLong(5); long isDefault = rs.getLong(6); - PreparedStatement pstmt1 = null; - pstmt1 = + try (PreparedStatement pstmt1 = conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id, usage_event.resource_name, " - + "usage_event.offering_id, usage_event.size)" + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); - pstmt1.setString(1, EventTypes.EVENT_NETWORK_OFFERING_ASSIGN); - pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); - pstmt1.setLong(3, accountId); - pstmt1.setLong(4, zoneId); - pstmt1.setLong(5, vmId); - pstmt1.setString(6, vmName); - pstmt1.setLong(7, nw_offering_id); - pstmt1.setLong(8, isDefault); - - pstmt1.executeUpdate(); - pstmt1.close(); + + "usage_event.offering_id, usage_event.size)" + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); ) { + pstmt1.setString(1, EventTypes.EVENT_NETWORK_OFFERING_ASSIGN); + pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); + pstmt1.setLong(3, accountId); + pstmt1.setLong(4, zoneId); + pstmt1.setLong(5, vmId); + pstmt1.setString(6, vmName); + pstmt1.setLong(7, nw_offering_id); + pstmt1.setLong(8, isDefault); + pstmt1.executeUpdate(); + } } - - rs.close(); - pstmt.close(); s_logger.debug("Completed creating network offering usage events"); - } catch (SQLException e) { throw new CloudRuntimeException("Failed to add network offering usage events due to:", e); } } - } From 2b9f5b27bb919eb6815111b0b2904d4ce2e4750b Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 19 Jul 2015 20:00:39 +0200 Subject: [PATCH 081/314] extra try-w-r --- .../com/cloud/upgrade/dao/Upgrade218to22.java | 273 +++++++++--------- 1 file changed, 129 insertions(+), 144 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java index 28cf622f38f..b1d24df05d2 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java @@ -583,170 +583,155 @@ public class Upgrade218to22 implements DbUpgrade { } protected void upgradeManagementIpAddress(Connection conn, long dcId) throws SQLException { - PreparedStatement pstmt = conn.prepareStatement("SELECT op_dc_ip_address_alloc.id FROM op_dc_ip_address_alloc WHERE data_center_id=?"); - pstmt.setLong(1, dcId); - ResultSet rs = pstmt.executeQuery(); ArrayList allocatedIps = new ArrayList(); - while (rs.next()) { - Object[] ip = new Object[10]; - ip[0] = rs.getLong(1); // id - allocatedIps.add(ip); - } - rs.close(); - pstmt.close(); - - for (Object[] allocatedIp : allocatedIps) { - pstmt = conn.prepareStatement("SELECT mac_address FROM data_center WHERE id = ?"); + try (PreparedStatement pstmt = conn.prepareStatement("SELECT op_dc_ip_address_alloc.id FROM op_dc_ip_address_alloc WHERE data_center_id=?");) { pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - if (!rs.next()) { - throw new CloudRuntimeException("Unable to get mac address for data center " + dcId); + try (ResultSet rs = pstmt.executeQuery();) { + while (rs.next()) { + Object[] ip = new Object[10]; + ip[0] = rs.getLong(1); // id + allocatedIps.add(ip); + } + } + } + for (Object[] allocatedIp : allocatedIps) { + try (PreparedStatement pstmt = conn.prepareStatement("SELECT mac_address FROM data_center WHERE id = ?");) { + pstmt.setLong(1, dcId); + try (ResultSet rs = pstmt.executeQuery();) { + if (!rs.next()) { + throw new CloudRuntimeException("Unable to get mac address for data center " + dcId); + } + long mac = rs.getLong(1); + try (PreparedStatement updateDcMacAddress = conn.prepareStatement("UPDATE data_center SET mac_address=mac_address+1 WHERE id = ?");) { + updateDcMacAddress.setLong(1, dcId); + updateDcMacAddress.executeUpdate(); + } + try(PreparedStatement updateDcIp = conn.prepareStatement("UPDATE op_dc_ip_address_alloc SET mac_address=? WHERE id=?");) { + updateDcIp.setLong(1, mac); + updateDcIp.setLong(2, (Long)allocatedIp[0]); + updateDcIp.executeUpdate(); + } + } } - long mac = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE data_center SET mac_address=mac_address+1 WHERE id = ?"); - pstmt.setLong(1, dcId); - pstmt.executeUpdate(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE op_dc_ip_address_alloc SET mac_address=? WHERE id=?"); - pstmt.setLong(1, mac); - pstmt.setLong(2, (Long)allocatedIp[0]); - pstmt.executeUpdate(); - pstmt.close(); } - } protected void upgradeDirectUserIpAddress(Connection conn, long dcId, long networkId, String vlanType) throws SQLException { s_logger.debug("Upgrading user ip address for data center " + dcId + " network " + networkId + " vlan type " + vlanType); - PreparedStatement pstmt = - conn.prepareStatement("UPDATE user_ip_address INNER JOIN vlan ON user_ip_address.vlan_db_id=vlan.id SET user_ip_address.source_network_id=vlan.network_id WHERE user_ip_address.data_center_id=? AND vlan.vlan_type=?"); - pstmt.setLong(1, dcId); - pstmt.setString(2, vlanType); - pstmt.executeUpdate(); - pstmt.close(); - - pstmt = - conn.prepareStatement("SELECT user_ip_address.id, user_ip_address.public_ip_address, user_ip_address.account_id, user_ip_address.allocated FROM user_ip_address INNER JOIN vlan ON vlan.id=user_ip_address.vlan_db_id WHERE user_ip_address.data_center_id = ? AND vlan.vlan_type=?"); - pstmt.setLong(1, dcId); - pstmt.setString(2, vlanType); - ResultSet rs = pstmt.executeQuery(); - ArrayList allocatedIps = new ArrayList(); - while (rs.next()) { - Object[] ip = new Object[10]; - ip[0] = rs.getLong(1); // id - ip[1] = rs.getString(2); // ip address - ip[2] = rs.getLong(3); // account id - ip[3] = rs.getDate(4); // allocated - allocatedIps.add(ip); + try (PreparedStatement pstmt = + conn.prepareStatement("UPDATE user_ip_address INNER JOIN vlan ON user_ip_address.vlan_db_id=vlan.id SET user_ip_address.source_network_id=vlan.network_id WHERE user_ip_address.data_center_id=? AND vlan.vlan_type=?");) { + pstmt.setLong(1, dcId); + pstmt.setString(2, vlanType); + pstmt.executeUpdate(); } - rs.close(); - pstmt.close(); - - s_logger.debug("Marking " + allocatedIps.size() + " ip addresses to belong to network " + networkId); - s_logger.debug("Updating mac addresses for data center id=" + dcId + ". Found " + allocatedIps.size() + " ip addresses to update"); - - for (Object[] allocatedIp : allocatedIps) { - pstmt = conn.prepareStatement("SELECT mac_address FROM data_center WHERE id = ?"); + try (PreparedStatement pstmt = + conn.prepareStatement("SELECT user_ip_address.id, user_ip_address.public_ip_address, user_ip_address.account_id, user_ip_address.allocated FROM user_ip_address INNER JOIN vlan ON vlan.id=user_ip_address.vlan_db_id WHERE user_ip_address.data_center_id = ? AND vlan.vlan_type=?");) { pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - if (!rs.next()) { - throw new CloudRuntimeException("Unable to get mac address for data center " + dcId); + pstmt.setString(2, vlanType); + try (ResultSet rs = pstmt.executeQuery();) { + ArrayList allocatedIps = new ArrayList(); + while (rs.next()) { + Object[] ip = new Object[10]; + ip[0] = rs.getLong(1); // id + ip[1] = rs.getString(2); // ip address + ip[2] = rs.getLong(3); // account id + ip[3] = rs.getDate(4); // allocated + allocatedIps.add(ip); + } + s_logger.debug("Marking " + allocatedIps.size() + " ip addresses to belong to network " + networkId); + s_logger.debug("Updating mac addresses for data center id=" + dcId + ". Found " + allocatedIps.size() + " ip addresses to update"); + for (Object[] allocatedIp : allocatedIps) { + try (PreparedStatement selectMacAdresses = conn.prepareStatement("SELECT mac_address FROM data_center WHERE id = ?");) { + selectMacAdresses.setLong(1, dcId); + try (ResultSet selectedMacAdresses = selectMacAdresses.executeQuery();) { + if (!selectedMacAdresses.next()) { + throw new CloudRuntimeException("Unable to get mac address for data center " + dcId); + } + long mac = selectedMacAdresses.getLong(1); + try (PreparedStatement updateDataCenter = conn.prepareStatement("UPDATE data_center SET mac_address=mac_address+1 WHERE id = ?");) { + updateDataCenter.setLong(1, dcId); + updateDataCenter.executeUpdate(); + } + try (PreparedStatement updateUserIpAddress = conn.prepareStatement("UPDATE user_ip_address SET mac_address=? WHERE id=?");) { + updateUserIpAddress.setLong(1, mac); + updateUserIpAddress.setLong(2, (Long)allocatedIp[0]); + updateUserIpAddress.executeUpdate(); + } + } + } + } } - long mac = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE data_center SET mac_address=mac_address+1 WHERE id = ?"); - pstmt.setLong(1, dcId); - pstmt.executeUpdate(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE user_ip_address SET mac_address=? WHERE id=?"); - pstmt.setLong(1, mac); - pstmt.setLong(2, (Long)allocatedIp[0]); - pstmt.executeUpdate(); - pstmt.close(); } } protected void upgradePublicUserIpAddress(Connection conn, long dcId, long networkId, String vlanType) throws SQLException { s_logger.debug("Upgrading user ip address for data center " + dcId + " network " + networkId + " vlan type " + vlanType); - PreparedStatement pstmt = - conn.prepareStatement("UPDATE user_ip_address INNER JOIN vlan ON user_ip_address.vlan_db_id=vlan.id SET source_network_id=? WHERE user_ip_address.data_center_id=? AND vlan.vlan_type=?"); - pstmt.setLong(1, networkId); - pstmt.setLong(2, dcId); - pstmt.setString(3, vlanType); - pstmt.executeUpdate(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE vlan SET network_id = ? WHERE data_center_id=? AND vlan_type=?"); - pstmt.setLong(1, networkId); - pstmt.setLong(2, dcId); - pstmt.setString(3, vlanType); - pstmt.executeUpdate(); - pstmt.close(); - - pstmt = - conn.prepareStatement("SELECT user_ip_address.id, user_ip_address.public_ip_address, user_ip_address.account_id, user_ip_address.allocated FROM user_ip_address INNER JOIN vlan ON vlan.id=user_ip_address.vlan_db_id WHERE user_ip_address.data_center_id = ? AND vlan.vlan_type='VirtualNetwork'"); - pstmt.setLong(1, dcId); - ResultSet rs = pstmt.executeQuery(); - ArrayList allocatedIps = new ArrayList(); - while (rs.next()) { - Object[] ip = new Object[10]; - ip[0] = rs.getLong(1); // id - ip[1] = rs.getString(2); // ip address - ip[2] = rs.getLong(3); // account id - ip[3] = rs.getDate(4); // allocated - allocatedIps.add(ip); - } - rs.close(); - pstmt.close(); - - for (Object[] allocatedIp : allocatedIps) { - pstmt = conn.prepareStatement("SELECT mac_address FROM data_center WHERE id = ?"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - if (!rs.next()) { - throw new CloudRuntimeException("Unable to get mac address for data center " + dcId); - } - long mac = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("UPDATE data_center SET mac_address=mac_address+1 WHERE id = ?"); - pstmt.setLong(1, dcId); + try (PreparedStatement pstmt = + conn.prepareStatement("UPDATE user_ip_address INNER JOIN vlan ON user_ip_address.vlan_db_id=vlan.id SET source_network_id=? WHERE user_ip_address.data_center_id=? AND vlan.vlan_type=?");) { + pstmt.setLong(1, networkId); + pstmt.setLong(2, dcId); + pstmt.setString(3, vlanType); pstmt.executeUpdate(); - pstmt.close(); - - Long associatedNetworkId = null; - if (allocatedIp[3] != null && allocatedIp[2] != null) { - pstmt = conn.prepareStatement("SELECT id FROM networks WHERE data_center_id=? AND account_id=?"); - pstmt.setLong(1, dcId); - pstmt.setLong(2, (Long)allocatedIp[2]); - rs = pstmt.executeQuery(); - if (!rs.next()) { - throw new CloudRuntimeException("Unable to find a network for account " + allocatedIp[2] + " in dc " + dcId); + } + try (PreparedStatement pstmt = conn.prepareStatement("UPDATE vlan SET network_id = ? WHERE data_center_id=? AND vlan_type=?");) { + pstmt.setLong(1, networkId); + pstmt.setLong(2, dcId); + pstmt.setString(3, vlanType); + pstmt.executeUpdate(); + } + try (PreparedStatement pstmt = + conn.prepareStatement("SELECT user_ip_address.id, user_ip_address.public_ip_address, user_ip_address.account_id, user_ip_address.allocated FROM user_ip_address INNER JOIN vlan ON vlan.id=user_ip_address.vlan_db_id WHERE user_ip_address.data_center_id = ? AND vlan.vlan_type='VirtualNetwork'");) { + pstmt.setLong(1, dcId); + try (ResultSet rs = pstmt.executeQuery();) { + ArrayList allocatedIps = new ArrayList(); + while (rs.next()) { + Object[] ip = new Object[10]; + ip[0] = rs.getLong(1); // id + ip[1] = rs.getString(2); // ip address + ip[2] = rs.getLong(3); // account id + ip[3] = rs.getDate(4); // allocated + allocatedIps.add(ip); + } + for (Object[] allocatedIp : allocatedIps) { + try (PreparedStatement selectDataCenterMac = conn.prepareStatement("SELECT mac_address FROM data_center WHERE id = ?");) { + selectDataCenterMac.setLong(1, dcId); + try (ResultSet selectedDataCenterMac = selectDataCenterMac.executeQuery();) { + if (!selectedDataCenterMac.next()) { + throw new CloudRuntimeException("Unable to get mac address for data center " + dcId); + } + long mac = selectedDataCenterMac.getLong(1); + try (PreparedStatement updateDataCenter = conn.prepareStatement("UPDATE data_center SET mac_address=mac_address+1 WHERE id = ?");) { + updateDataCenter.setLong(1, dcId); + updateDataCenter.executeUpdate(); + } + Long associatedNetworkId = null; + if (allocatedIp[3] != null && allocatedIp[2] != null) { + try (PreparedStatement selectNetworks = conn.prepareStatement("SELECT id FROM networks WHERE data_center_id=? AND account_id=?");) { + selectNetworks.setLong(1, dcId); + selectNetworks.setLong(2, (Long)allocatedIp[2]); + try (ResultSet selectedNetworks = selectNetworks.executeQuery();) { + if (!selectedNetworks.next()) { + throw new CloudRuntimeException("Unable to find a network for account " + allocatedIp[2] + " in dc " + dcId); + } + associatedNetworkId = selectedNetworks.getLong(1); + } + } + } + try (PreparedStatement updateUserIpAddress = conn.prepareStatement("UPDATE user_ip_address SET mac_address=?, network_id=? WHERE id=?");) { + updateUserIpAddress.setLong(1, mac); + if (associatedNetworkId != null) { + updateUserIpAddress.setLong(2, associatedNetworkId); + } else { + updateUserIpAddress.setObject(2, null); + } + updateUserIpAddress.setLong(3, (Long)allocatedIp[0]); + updateUserIpAddress.executeUpdate(); + } + } + } } - associatedNetworkId = rs.getLong(1); - rs.close(); - pstmt.close(); } - pstmt = conn.prepareStatement("UPDATE user_ip_address SET mac_address=?, network_id=? WHERE id=?"); - pstmt.setLong(1, mac); - if (associatedNetworkId != null) { - pstmt.setLong(2, associatedNetworkId); - } else { - pstmt.setObject(2, null); - } - pstmt.setLong(3, (Long)allocatedIp[0]); - pstmt.executeUpdate(); - pstmt.close(); } - } protected void upgradeDataCenter(Connection conn) { From 53535d60ccaca49786900d25a3e68052d5bf461d Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 19 Jul 2015 22:40:25 +0200 Subject: [PATCH 082/314] coverity: try-with-resource and restructure in upgrade datacenter --- .../com/cloud/upgrade/dao/Upgrade218to22.java | 898 +++++++++++------- 1 file changed, 560 insertions(+), 338 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java index b1d24df05d2..dd9ff5e39af 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade218to22.java @@ -375,7 +375,7 @@ public class Upgrade218to22 implements DbUpgrade { throw new CloudRuntimeException("Unable to find cp " + cpId); } - long id = rs.getLong(1); +// long id = rs.getLong(1); String state = rs.getString(2); boolean running = state.equals("Running") | state.equals("Starting") | state.equals("Stopping"); String privateMac = rs.getString(3); @@ -388,7 +388,7 @@ public class Upgrade218to22 implements DbUpgrade { String guestIp = rs.getString(10); String guestNetmask = rs.getString(11); String gateway = rs.getString(12); - String type = rs.getString(13); +// String type = rs.getString(13); try ( PreparedStatement selectHost = conn.prepareStatement("SELECT host_pod_ref.gateway from host_pod_ref INNER JOIN vm_instance ON vm_instance.pod_id=host_pod_ref.id WHERE vm_instance.id=?"); @@ -735,351 +735,30 @@ public class Upgrade218to22 implements DbUpgrade { } protected void upgradeDataCenter(Connection conn) { - PreparedStatement pstmt; - try { - pstmt = conn.prepareStatement("SELECT value FROM configuration WHERE name='direct.attach.untagged.vlan.enabled'"); - ResultSet rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT value FROM configuration WHERE name='direct.attach.untagged.vlan.enabled'"); + ResultSet rs = pstmt.executeQuery(); + ) { _basicZone = !rs.next() || Boolean.parseBoolean(rs.getString(1)); - rs.close(); - pstmt.close(); - pstmt = - conn.prepareStatement("UPDATE data_center SET networktype=?, dns_provider=?, gateway_provider=?, firewall_provider=?, dhcp_provider=?, lb_provider=?, vpn_provider=?, userdata_provider=?"); - if (_basicZone) { - pstmt.setString(1, "Basic"); - pstmt.setString(2, "DhcpServer"); - pstmt.setString(3, null); - pstmt.setString(4, null); - pstmt.setString(5, "DhcpServer"); - pstmt.setString(6, null); - pstmt.setString(7, null); - pstmt.setString(8, "DhcpServer"); - } else { - pstmt.setString(1, "Advanced"); - pstmt.setString(2, "VirtualRouter"); - pstmt.setString(3, "VirtualRouter"); - pstmt.setString(4, "VirtualRouter"); - pstmt.setString(5, "VirtualRouter"); - pstmt.setString(6, "VirtualRouter"); - pstmt.setString(7, "VirtualRouter"); - pstmt.setString(8, "VirtualRouter"); - } - pstmt.executeUpdate(); - pstmt.close(); + updateDatacenterWithServices(conn); // For basic zone vnet field should be NULL + updateBasicZoneDataCenterWithVnetAndGuestCidr(conn); - if (_basicZone) { - pstmt = conn.prepareStatement("UPDATE data_center SET vnet=?, guest_network_cidr=?"); - pstmt.setString(1, null); - pstmt.setString(2, null); - pstmt.executeUpdate(); - pstmt.close(); - } + ArrayList dcs = retrieveDataCenters(conn); - pstmt = conn.prepareStatement("SELECT id, guest_network_cidr, domain FROM data_center"); - rs = pstmt.executeQuery(); - ArrayList dcs = new ArrayList(); - while (rs.next()) { - Object[] dc = new Object[10]; - dc[0] = rs.getLong(1); // data center id - dc[1] = rs.getString(2); // guest network cidr - dc[2] = rs.getString(3); // network domain - dcs.add(dc); - } - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("SELECT id FROM network_offerings WHERE name='System-Management-Network'"); - rs = pstmt.executeQuery(); - if (!rs.next()) { - s_logger.error("Unable to find the management network offering."); - throw new CloudRuntimeException("Unable to find the management network offering."); - } - long managementNetworkOfferingId = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("SELECT id FROM network_offerings WHERE name='System-Public-Network'"); - rs = pstmt.executeQuery(); - if (!rs.next()) { - s_logger.error("Unable to find the public network offering."); - throw new CloudRuntimeException("Unable to find the public network offering."); - } - long publicNetworkOfferingId = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("SELECT id FROM network_offerings WHERE name='System-Control-Network'"); - rs = pstmt.executeQuery(); - if (!rs.next()) { - s_logger.error("Unable to find the control network offering."); - throw new CloudRuntimeException("Unable to find the control network offering."); - } - long controlNetworkOfferingId = rs.getLong(1); - rs.close(); - pstmt.close(); - - pstmt = conn.prepareStatement("SELECT id FROM network_offerings WHERE name='System-Storage-Network'"); - rs = pstmt.executeQuery(); - if (!rs.next()) { - s_logger.error("Unable to find the storage network offering."); - throw new CloudRuntimeException("Unable to find the storage network offering."); - } - long storageNetworkOfferingId = rs.getLong(1); - rs.close(); - pstmt.close(); + long managementNetworkOfferingId = retrieveNetworkOfferingId(conn,"System-Management-Network"); + long publicNetworkOfferingId = retrieveNetworkOfferingId(conn,"System-Public-Network"); + long controlNetworkOfferingId = retrieveNetworkOfferingId(conn,"System-Control-Network"); + long storageNetworkOfferingId = retrieveNetworkOfferingId(conn,"System-Storage-Network"); if (_basicZone) { for (Object[] dc : dcs) { - Long dcId = (Long)dc[0]; - long mgmtNetworkId = - insertNetwork(conn, "ManagementNetwork" + dcId, "Management Network created for Zone " + dcId, "Management", "Native", null, null, null, - "Static", managementNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); - long storageNetworkId = - insertNetwork(conn, "StorageNetwork" + dcId, "Storage Network created for Zone " + dcId, "Storage", "Native", null, null, null, "Static", - storageNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); - long controlNetworkId = - insertNetwork(conn, "ControlNetwork" + dcId, "Control Network created for Zone " + dcId, "Control", "LinkLocal", null, - NetUtils.getLinkLocalGateway(), NetUtils.getLinkLocalCIDR(), "Static", controlNetworkOfferingId, dcId, "ControlNetworkGuru", "Setup", 1, 1, - null, null, null, true, null, false, null); - upgradeManagementIpAddress(conn, dcId); - long basicDefaultDirectNetworkId = - insertNetwork(conn, "BasicZoneDirectNetwork" + dcId, "Basic Zone Direct Network created for Zone " + dcId, "Guest", "Native", null, null, null, - "Dhcp", 5, dcId, "DirectPodBasedNetworkGuru", "Setup", 1, 1, null, null, "Direct", true, null, true, null); - - pstmt = conn.prepareStatement("SELECT id FROM vlan WHERE vlan_type='DirectAttached' AND data_center_id=?"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - while (rs.next()) { - long vlanId = rs.getLong(1); - - pstmt = conn.prepareStatement("UPDATE vlan SET network_id=? WHERE id=?"); - pstmt.setLong(1, basicDefaultDirectNetworkId); - pstmt.setLong(2, vlanId); - pstmt.executeUpdate(); - pstmt.close(); - } - - upgradeDirectUserIpAddress(conn, dcId, basicDefaultDirectNetworkId, "DirectAttached"); - - // update Dhcp servers information in domain_router and vm_instance tables; all domRs belong to the same - // network - pstmt = - conn.prepareStatement("SELECT vm_instance.id, vm_instance.domain_id, vm_instance.account_id, domain_router.gateway, domain_router.guest_ip_address, domain_router.domain, domain_router.dns1, domain_router.dns2, domain_router.vnet FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed IS NULL AND vm_instance.type='DomainRouter' AND vm_instance.data_center_id=?"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - ArrayList routers = new ArrayList(); - while (rs.next()) { - Object[] router = new Object[40]; - router[0] = rs.getLong(1); // router id - router[1] = rs.getString(4); // router gateway which is gonna be gateway for user vms - routers.add(router); - } - rs.close(); - pstmt.close(); - - for (Object[] router : routers) { - s_logger.debug("Updating domR with network id in basic zone id=" + dcId); - pstmt = conn.prepareStatement("UPDATE domain_router SET network_id = ? wHERE id = ? "); - pstmt.setLong(1, basicDefaultDirectNetworkId); - pstmt.setLong(2, (Long)router[0]); - pstmt.executeUpdate(); - pstmt.close(); - - upgradeUserVms(conn, (Long)router[0], basicDefaultDirectNetworkId, (String)router[1], "untagged", "DirectPodBasedNetworkGuru", "Create"); - upgradeDomR(conn, dcId, (Long)router[0], null, basicDefaultDirectNetworkId, controlNetworkId, "Basic", "untagged"); - } - - upgradeSsvm(conn, dcId, basicDefaultDirectNetworkId, mgmtNetworkId, controlNetworkId, "Basic"); - - pstmt = conn.prepareStatement("SELECT vm_instance.id FROM vm_instance WHERE removed IS NULL AND type='ConsoleProxy' AND data_center_id=?"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - while (rs.next()) { - upgradeConsoleProxy(conn, dcId, rs.getLong(1), basicDefaultDirectNetworkId, mgmtNetworkId, controlNetworkId, "Basic"); - } - + updateBasicNetworkingDataCenter(conn, managementNetworkOfferingId, controlNetworkOfferingId, storageNetworkOfferingId, dc); } } else { for (Object[] dc : dcs) { - Long dcId = (Long)dc[0]; - long mgmtNetworkId = - insertNetwork(conn, "ManagementNetwork" + dcId, "Management Network created for Zone " + dcId, "Management", "Native", null, null, null, - "Static", managementNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); - insertNetwork(conn, "StorageNetwork" + dcId, "Storage Network created for Zone " + dcId, "Storage", "Native", null, null, null, "Static", - storageNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); - long controlNetworkId = - insertNetwork(conn, "ControlNetwork" + dcId, "Control Network created for Zone " + dcId, "Control", "Native", null, null, null, "Static", - controlNetworkOfferingId, dcId, "ControlNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); - upgradeManagementIpAddress(conn, dcId); - long publicNetworkId = - insertNetwork(conn, "PublicNetwork" + dcId, "Public Network Created for Zone " + dcId, "Public", "Vlan", null, null, null, "Static", - publicNetworkOfferingId, dcId, "PublicNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); - - pstmt = - conn.prepareStatement("SELECT vm_instance.id, vm_instance.domain_id, vm_instance.account_id, domain_router.guest_ip_address, domain_router.domain, domain_router.dns1, domain_router.dns2, domain_router.vnet FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed IS NULL AND vm_instance.type='DomainRouter' AND vm_instance.data_center_id=? and domain_router.role='DHCP_FIREWALL_LB_PASSWD_USERDATA'"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - ArrayList routers = new ArrayList(); - while (rs.next()) { - Object[] router = new Object[40]; - router[0] = rs.getLong(1); // router id - router[1] = rs.getLong(2); // domain id - router[2] = rs.getLong(3); // account id - router[3] = rs.getString(4); // guest ip which becomes the gateway in network - router[4] = rs.getString(5); // domain name - router[5] = rs.getString(6); // dns1 - router[6] = rs.getString(7); // dns2 - router[7] = rs.getString(8); // vnet - routers.add(router); - } - rs.close(); - pstmt.close(); - - for (Object[] router : routers) { - String vnet = (String)router[7]; - String reservationId = null; - String state = "Allocated"; - if (vnet != null) { - reservationId = dcId + "-" + vnet; - state = "Implemented"; - } - - String vlan = null; - if (vnet != null) { - vlan = "vlan://" + vnet; - } - - long virtualNetworkId = - insertNetwork(conn, "VirtualNetwork" + router[0], "Virtual Network for " + router[0], "Guest", "Vlan", vlan, (String)router[3], - (String)dc[1], "Dhcp", 6, dcId, "ExternalGuestNetworkGuru", state, (Long)router[1], (Long)router[2], (String)router[5], - (String)router[6], "Virtual", false, (String)router[4], true, reservationId); - pstmt = conn.prepareStatement("UPDATE domain_router SET network_id = ? wHERE id = ? "); - pstmt.setLong(1, virtualNetworkId); - pstmt.setLong(2, (Long)router[0]); - pstmt.executeUpdate(); - pstmt.close(); - s_logger.debug("Network inserted for " + router[0] + " id = " + virtualNetworkId); - - upgradeUserVms(conn, (Long)router[0], virtualNetworkId, (String)router[3], vnet, "ExternalGuestNetworkGuru", "Start"); - upgradeDomR(conn, dcId, (Long)router[0], publicNetworkId, virtualNetworkId, controlNetworkId, "Advanced", vnet); - } - - upgradePublicUserIpAddress(conn, dcId, publicNetworkId, "VirtualNetwork"); - - // Create direct networks - pstmt = conn.prepareStatement("SELECT id, vlan_id, vlan_gateway, vlan_netmask FROM vlan WHERE vlan_type='DirectAttached' AND data_center_id=?"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - HashMap vlanNetworkMap = new HashMap(); - while (rs.next()) { - long vlanId = rs.getLong(1); - String tag = rs.getString(2); - String gateway = rs.getString(3); - String netmask = rs.getString(4); - String cidr = NetUtils.getCidrFromGatewayAndNetmask(gateway, netmask); - - // Get the owner of the network - Long accountId = 1L; - Long domainId = 1L; - boolean isShared = true; - pstmt = conn.prepareStatement("SELECT account_id FROM account_vlan_map WHERE account_id IS NOT NULL AND vlan_db_id=?"); - pstmt.setLong(1, vlanId); - ResultSet accountRs = pstmt.executeQuery(); - while (accountRs.next()) { - isShared = false; - accountId = accountRs.getLong(1); - pstmt = conn.prepareStatement("SELECT domain_id FROM account WHERE id=?"); - pstmt.setLong(1, accountId); - ResultSet domainRs = pstmt.executeQuery(); - while (domainRs.next()) { - domainId = domainRs.getLong(1); - } - } - - if (vlanNetworkMap.get(tag) == null) { - long directNetworkId = - insertNetwork(conn, "DirectNetwork" + vlanId, "Direct network created for " + vlanId, "Guest", "Vlan", "vlan://" + tag, gateway, cidr, - "Dhcp", 7, dcId, "DirectNetworkGuru", "Setup", domainId, accountId, null, null, "Direct", isShared, (String)dc[2], true, null); - vlanNetworkMap.put(tag, directNetworkId); - } - - pstmt = conn.prepareStatement("UPDATE vlan SET network_id=? WHERE id=?"); - pstmt.setLong(1, vlanNetworkMap.get(tag)); - pstmt.setLong(2, vlanId); - pstmt.executeUpdate(); - - pstmt.close(); - - upgradeDirectUserIpAddress(conn, dcId, vlanNetworkMap.get(tag), "DirectAttached"); - s_logger.debug("Created Direct networks and upgraded Direct ip addresses"); - } - - // Create DHCP domRs - Direct networks - pstmt = - conn.prepareStatement("SELECT vm_instance.id, domain_router.guest_ip_address FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed IS NULL AND vm_instance.type='DomainRouter' AND vm_instance.data_center_id=? and domain_router.role='DHCP_USERDATA'"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - ArrayList dhcpServers = new ArrayList(); - while (rs.next()) { - Object[] dhcpServer = new Object[40]; - dhcpServer[0] = rs.getLong(1); // router id - dhcpServer[1] = rs.getString(2); // guest IP address - direct ip address of the domR - dhcpServers.add(dhcpServer); - } - rs.close(); - pstmt.close(); - - for (Object[] dhcpServer : dhcpServers) { - Long routerId = (Long)dhcpServer[0]; - String directIp = (String)dhcpServer[1]; - - pstmt = - conn.prepareStatement("SELECT u.source_network_id, v.vlan_id from user_ip_address u, vlan v where u.public_ip_address=? and v.id=u.vlan_db_id"); - pstmt.setString(1, directIp); - rs = pstmt.executeQuery(); - if (!rs.next()) { - throw new CloudRuntimeException("Unable to find Direct ip address " + directIp + " in user_ip_address table"); - } - - Long directNetworkId = rs.getLong(1); - String vnet = rs.getString(2); - rs.close(); - - pstmt = conn.prepareStatement("SELECT gateway from networks where id=?"); - pstmt.setLong(1, directNetworkId); - rs = pstmt.executeQuery(); - if (!rs.next()) { - throw new CloudRuntimeException("Unable to find gateway for network id=" + directNetworkId); - } - - String gateway = rs.getString(1); - rs.close(); - - pstmt = conn.prepareStatement("UPDATE domain_router SET network_id = ? wHERE id = ? "); - pstmt.setLong(1, directNetworkId); - pstmt.setLong(2, routerId); - pstmt.executeUpdate(); - pstmt.close(); - s_logger.debug("NetworkId updated for router id=" + routerId + "with network id = " + directNetworkId); - - upgradeUserVms(conn, routerId, directNetworkId, gateway, vnet, "DirectNetworkGuru", "Create"); - s_logger.debug("Upgraded Direct vms in Advance zone id=" + dcId); - upgradeDomR(conn, dcId, routerId, null, directNetworkId, controlNetworkId, "Advanced", vnet); - s_logger.debug("Upgraded Direct domRs in Advance zone id=" + dcId); - } - - // Upgrade SSVM - upgradeSsvm(conn, dcId, publicNetworkId, mgmtNetworkId, controlNetworkId, "Advanced"); - - // Upgrade ConsoleProxy - pstmt = conn.prepareStatement("SELECT vm_instance.id FROM vm_instance WHERE removed IS NULL AND type='ConsoleProxy' AND data_center_id=?"); - pstmt.setLong(1, dcId); - rs = pstmt.executeQuery(); - while (rs.next()) { - upgradeConsoleProxy(conn, dcId, rs.getLong(1), publicNetworkId, mgmtNetworkId, controlNetworkId, "Advanced"); - } - pstmt.close(); + updateAdvancedNetworkingDataCenter(conn, managementNetworkOfferingId, publicNetworkOfferingId, controlNetworkOfferingId, storageNetworkOfferingId, dc); } } @@ -1089,6 +768,548 @@ public class Upgrade218to22 implements DbUpgrade { } } + /** + * @param conn + * @throws SQLException + */ + private void updateDatacenterWithServices(Connection conn) throws SQLException { + try (PreparedStatement updateDataCenter = + conn.prepareStatement("UPDATE data_center SET networktype=?, dns_provider=?, gateway_provider=?, firewall_provider=?, dhcp_provider=?, lb_provider=?, vpn_provider=?, userdata_provider=?");) { + if (_basicZone) { + updateDataCenter.setString(1, "Basic"); + updateDataCenter.setString(2, "DhcpServer"); + updateDataCenter.setString(3, null); + updateDataCenter.setString(4, null); + updateDataCenter.setString(5, "DhcpServer"); + updateDataCenter.setString(6, null); + updateDataCenter.setString(7, null); + updateDataCenter.setString(8, "DhcpServer"); + } else { + updateDataCenter.setString(1, "Advanced"); + updateDataCenter.setString(2, "VirtualRouter"); + updateDataCenter.setString(3, "VirtualRouter"); + updateDataCenter.setString(4, "VirtualRouter"); + updateDataCenter.setString(5, "VirtualRouter"); + updateDataCenter.setString(6, "VirtualRouter"); + updateDataCenter.setString(7, "VirtualRouter"); + updateDataCenter.setString(8, "VirtualRouter"); + } + updateDataCenter.executeUpdate(); + } + } + + /** + * @param conn + * @throws SQLException + */ + private void updateBasicZoneDataCenterWithVnetAndGuestCidr(Connection conn) throws SQLException { + if (_basicZone) { + try (PreparedStatement updateDataCenterWithVnetAndGuestCidr = conn.prepareStatement("UPDATE data_center SET vnet=?, guest_network_cidr=?");) { + updateDataCenterWithVnetAndGuestCidr.setString(1, null); + updateDataCenterWithVnetAndGuestCidr.setString(2, null); + updateDataCenterWithVnetAndGuestCidr.executeUpdate(); + } + } + } + + /** + * @param conn + * @return + * @throws SQLException + */ + private ArrayList retrieveDataCenters(Connection conn) throws SQLException { + PreparedStatement selectDcData = conn.prepareStatement("SELECT id, guest_network_cidr, domain FROM data_center"); + ResultSet dcData = selectDcData.executeQuery(); + ArrayList dcs = new ArrayList(); + while (dcData.next()) { + Object[] dc = new Object[10]; + dc[0] = dcData.getLong(1); // data center id + dc[1] = dcData.getString(2); // guest network cidr + dc[2] = dcData.getString(3); // network domain + dcs.add(dc); + } + dcData.close(); + selectDcData.close(); + return dcs; + } + + /** + * @return + * @throws SQLException + * @throws CloudRuntimeException + */ + private long retrieveNetworkOfferingId(Connection conn, String type) throws SQLException, CloudRuntimeException { + long networkOfferingId; + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT id FROM network_offerings WHERE name=?"); + ) { + pstmt.setString(1, type); + try (ResultSet rs = pstmt.executeQuery();) { + if (!rs.next()) { + s_logger.error("Unable to find the network offering for networktype '" + type + "'"); + throw new CloudRuntimeException("Unable to find the storage network offering."); + } + networkOfferingId = rs.getLong(1); + return networkOfferingId; + } + } + } + + /** + * @param conn + * @param managementNetworkOfferingId + * @param controlNetworkOfferingId + * @param storageNetworkOfferingId + * @param dc + * @throws SQLException + */ + private void updateBasicNetworkingDataCenter(Connection conn, long managementNetworkOfferingId, long controlNetworkOfferingId, long storageNetworkOfferingId, Object[] dc) + throws SQLException { + Long dcId = (Long)dc[0]; + long mgmtNetworkId = + insertNetwork(conn, "ManagementNetwork" + dcId, "Management Network created for Zone " + dcId, "Management", "Native", null, null, null, + "Static", managementNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); +// long storageNetworkId = + insertNetwork(conn, "StorageNetwork" + dcId, "Storage Network created for Zone " + dcId, "Storage", "Native", null, null, null, "Static", + storageNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); + long controlNetworkId = + insertNetwork(conn, "ControlNetwork" + dcId, "Control Network created for Zone " + dcId, "Control", "LinkLocal", null, + NetUtils.getLinkLocalGateway(), NetUtils.getLinkLocalCIDR(), "Static", controlNetworkOfferingId, dcId, "ControlNetworkGuru", "Setup", 1, 1, + null, null, null, true, null, false, null); + upgradeManagementIpAddress(conn, dcId); + long basicDefaultDirectNetworkId = + insertNetwork(conn, "BasicZoneDirectNetwork" + dcId, "Basic Zone Direct Network created for Zone " + dcId, "Guest", "Native", null, null, null, + "Dhcp", 5, dcId, "DirectPodBasedNetworkGuru", "Setup", 1, 1, null, null, "Direct", true, null, true, null); + + updateVlanWithNetworkForDataCenter(conn, dcId, basicDefaultDirectNetworkId); + + upgradeDirectUserIpAddress(conn, dcId, basicDefaultDirectNetworkId, "DirectAttached"); + + // update Dhcp servers information in domain_router and vm_instance tables; all domRs belong to the same + // network + retrieveAndUpdateDomainRouters(conn, dcId, controlNetworkId, basicDefaultDirectNetworkId); + upgradeSsvm(conn, dcId, basicDefaultDirectNetworkId, mgmtNetworkId, controlNetworkId, "Basic"); + updateConsoleProxies(conn, dcId, mgmtNetworkId, controlNetworkId, basicDefaultDirectNetworkId, "Basic"); + } + + /** + * @param conn + * @param dcId + * @param controlNetworkId + * @param basicDefaultDirectNetworkId + * @throws SQLException + */ + private void retrieveAndUpdateDomainRouters(Connection conn, Long dcId, long controlNetworkId, long basicDefaultDirectNetworkId) throws SQLException { + try (PreparedStatement selectVmInstanceData = + conn.prepareStatement("SELECT vm_instance.id, vm_instance.domain_id, vm_instance.account_id, domain_router.gateway, domain_router.guest_ip_address, domain_router.domain, domain_router.dns1, domain_router.dns2, domain_router.vnet FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed IS NULL AND vm_instance.type='DomainRouter' AND vm_instance.data_center_id=?");) { + selectVmInstanceData.setLong(1, dcId); + try(ResultSet vmInstanceData = selectVmInstanceData.executeQuery();) { + ArrayList routers = new ArrayList(); + while (vmInstanceData.next()) { + Object[] router = new Object[40]; + router[0] = vmInstanceData.getLong(1); // router id + router[1] = vmInstanceData.getString(4); // router gateway which is gonna be gateway for user vms + routers.add(router); + } + + updateRouters(conn, dcId, controlNetworkId, basicDefaultDirectNetworkId, routers); + } + } + } + + /** + * @param conn + * @param dcId + * @param networkId + * @throws SQLException + */ + private void updateVlanWithNetworkForDataCenter(Connection conn, Long dcId, long networkId) throws SQLException { + try (PreparedStatement selectVlanId = conn.prepareStatement("SELECT id FROM vlan WHERE vlan_type='DirectAttached' AND data_center_id=?");) { + selectVlanId.setLong(1, dcId); + try (ResultSet selectedVlanId = selectVlanId.executeQuery();) { + while (selectedVlanId.next()) { + long vlanId = selectedVlanId.getLong(1); + + updateVlanNetworkForTag(conn, networkId, vlanId); + } + } + } + } + + /** + * @param conn + * @param managementNetworkOfferingId + * @param publicNetworkOfferingId + * @param controlNetworkOfferingId + * @param storageNetworkOfferingId + * @param dc + * @throws SQLException + * @throws CloudRuntimeException + */ + private void updateAdvancedNetworkingDataCenter(Connection conn, long managementNetworkOfferingId, long publicNetworkOfferingId, long controlNetworkOfferingId, + long storageNetworkOfferingId, Object[] dc) throws SQLException, CloudRuntimeException { + Long dcId = (Long)dc[0]; + long mgmtNetworkId = + insertNetwork(conn, "ManagementNetwork" + dcId, "Management Network created for Zone " + dcId, "Management", "Native", null, null, null, + "Static", managementNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); + insertNetwork(conn, "StorageNetwork" + dcId, "Storage Network created for Zone " + dcId, "Storage", "Native", null, null, null, "Static", + storageNetworkOfferingId, dcId, "PodBasedNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); + long controlNetworkId = + insertNetwork(conn, "ControlNetwork" + dcId, "Control Network created for Zone " + dcId, "Control", "Native", null, null, null, "Static", + controlNetworkOfferingId, dcId, "ControlNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); + upgradeManagementIpAddress(conn, dcId); + long publicNetworkId = + insertNetwork(conn, "PublicNetwork" + dcId, "Public Network Created for Zone " + dcId, "Public", "Vlan", null, null, null, "Static", + publicNetworkOfferingId, dcId, "PublicNetworkGuru", "Setup", 1, 1, null, null, null, true, null, false, null); + + ArrayList routers = retrieveRouters(conn, dcId); + + updateRouters(conn, dc, dcId, controlNetworkId, publicNetworkId, routers); + + upgradePublicUserIpAddress(conn, dcId, publicNetworkId, "VirtualNetwork"); + + createDirectNetworks(conn, dc, dcId); + + ArrayList dhcpServers = retrieveDhcpServers(conn, dcId); + + for (Object[] dhcpServer : dhcpServers) { + Long routerId = (Long)dhcpServer[0]; + String directIp = (String)dhcpServer[1]; + + updateDhcpServerData(conn, dcId, controlNetworkId, routerId, directIp); + } + // Upgrade SSVM + upgradeSsvm(conn, dcId, publicNetworkId, mgmtNetworkId, controlNetworkId, "Advanced"); + + updateConsoleProxies(conn, dcId, mgmtNetworkId, controlNetworkId, publicNetworkId, "Advanced"); + } + + /** + * @param dcId + * @return + * @throws SQLException + */ + private ArrayList retrieveRouters(Connection conn, Long dcId) throws SQLException { + ArrayList routers = new ArrayList(); + try (PreparedStatement selectRouterData = + conn.prepareStatement("SELECT vm_instance.id, vm_instance.domain_id, vm_instance.account_id, domain_router.guest_ip_address, domain_router.domain, domain_router.dns1, domain_router.dns2, domain_router.vnet FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed IS NULL AND vm_instance.type='DomainRouter' AND vm_instance.data_center_id=? and domain_router.role='DHCP_FIREWALL_LB_PASSWD_USERDATA'");) { + selectRouterData.setLong(1, dcId); + try (ResultSet routerData = selectRouterData.executeQuery();) { + while (routerData.next()) { + Object[] router = new Object[40]; + router[0] = routerData.getLong(1); // router id + router[1] = routerData.getLong(2); // domain id + router[2] = routerData.getLong(3); // account id + router[3] = routerData.getString(4); // guest ip which becomes the gateway in network + router[4] = routerData.getString(5); // domain name + router[5] = routerData.getString(6); // dns1 + router[6] = routerData.getString(7); // dns2 + router[7] = routerData.getString(8); // vnet + routers.add(router); + } + } + } + return routers; + } + + /** + * @param conn + * @param dc + * @param dcId + * @param controlNetworkId + * @param publicNetworkId + * @param routers + * @throws SQLException + */ + private void updateRouters(Connection conn, Object[] dc, Long dcId, long controlNetworkId, long publicNetworkId, ArrayList routers) throws SQLException { + for (Object[] router : routers) { + updateRouter(conn, dc, dcId, controlNetworkId, publicNetworkId, router); + } + } + /** + * @param conn + * @param dcId + * @param controlNetworkId + * @param basicDefaultDirectNetworkId + * @param routers + * @throws SQLException + */ + private void updateRouters(Connection conn, Long dcId, long controlNetworkId, long basicDefaultDirectNetworkId, ArrayList routers) throws SQLException { + for (Object[] router : routers) { + s_logger.debug("Updating domR with network id in basic zone id=" + dcId); + updateNetworkForRouter(conn, router, basicDefaultDirectNetworkId); + upgradeUserVms(conn, (Long)router[0], basicDefaultDirectNetworkId, (String)router[1], "untagged", "DirectPodBasedNetworkGuru", "Create"); + upgradeDomR(conn, dcId, (Long)router[0], null, basicDefaultDirectNetworkId, controlNetworkId, "Basic", "untagged"); + } + } + + + /** + * @param conn + * @param dc + * @param dcId + * @param controlNetworkId + * @param publicNetworkId + * @param router + * @throws SQLException + */ + private void updateRouter(Connection conn, Object[] dc, Long dcId, long controlNetworkId, long publicNetworkId, Object[] router) throws SQLException { + String vnet = (String)router[7]; + String reservationId = null; + String state = "Allocated"; + if (vnet != null) { + reservationId = dcId + "-" + vnet; + state = "Implemented"; + } + + String vlan = null; + if (vnet != null) { + vlan = "vlan://" + vnet; + } + + long virtualNetworkId = + insertNetwork(conn, "VirtualNetwork" + router[0], "Virtual Network for " + router[0], "Guest", "Vlan", vlan, (String)router[3], + (String)dc[1], "Dhcp", 6, dcId, "ExternalGuestNetworkGuru", state, (Long)router[1], (Long)router[2], (String)router[5], + (String)router[6], "Virtual", false, (String)router[4], true, reservationId); + updateNetworkForRouter(conn, router, virtualNetworkId); + + upgradeUserVms(conn, (Long)router[0], virtualNetworkId, (String)router[3], vnet, "ExternalGuestNetworkGuru", "Start"); + upgradeDomR(conn, dcId, (Long)router[0], publicNetworkId, virtualNetworkId, controlNetworkId, "Advanced", vnet); + } + + /** + * @param router + * @param virtualNetworkId + * @throws SQLException + */ + private void updateNetworkForRouter(Connection conn, Object[] router, long virtualNetworkId) throws SQLException { + try (PreparedStatement updateDomainRouter = conn.prepareStatement("UPDATE domain_router SET network_id = ? WHERE id = ? ");) { + updateDomainRouter.setLong(1, virtualNetworkId); + updateDomainRouter.setLong(2, (Long)router[0]); + updateDomainRouter.executeUpdate(); + } + s_logger.debug("Network inserted for " + router[0] + " id = " + virtualNetworkId); + } + + /** + * @param conn + * @param dc + * @param dcId + * @throws SQLException + */ + private void createDirectNetworks(Connection conn, Object[] dc, Long dcId) throws SQLException { + // Create direct networks + try (PreparedStatement selectVlanData = conn.prepareStatement("SELECT id, vlan_id, vlan_gateway, vlan_netmask FROM vlan WHERE vlan_type='DirectAttached' AND data_center_id=?");) { + selectVlanData.setLong(1, dcId); + try (ResultSet vlanData = selectVlanData.executeQuery();) { + HashMap vlanNetworkMap = new HashMap(); + while (vlanData.next()) { + long vlanId = vlanData.getLong(1); + String tag = vlanData.getString(2); + String gateway = vlanData.getString(3); + String netmask = vlanData.getString(4); + String cidr = NetUtils.getCidrFromGatewayAndNetmask(gateway, netmask); + + // Get the owner of the network + retrieveAccountDataAndCreateNetwork(conn, dc, dcId, vlanNetworkMap, vlanId, tag, gateway, cidr); + + updateNetworkInVlanTableforTag(conn, vlanNetworkMap, vlanId, tag); + + upgradeDirectUserIpAddress(conn, dcId, vlanNetworkMap.get(tag), "DirectAttached"); + s_logger.debug("Created Direct networks and upgraded Direct ip addresses"); + } + } + } + } + + /** + * @param conn + * @param dc + * @param dcId + * @param vlanNetworkMap + * @param vlanId + * @param tag + * @param gateway + * @param cidr + * @throws SQLException + */ + private void retrieveAccountDataAndCreateNetwork(Connection conn, Object[] dc, Long dcId, HashMap vlanNetworkMap, long vlanId, String tag, String gateway, + String cidr) throws SQLException { + Long accountId = 1L; + Long domainId = 1L; + boolean isShared = true; + try (PreparedStatement selectAccountId = conn.prepareStatement("SELECT account_id FROM account_vlan_map WHERE account_id IS NOT NULL AND vlan_db_id=?");) { + selectAccountId.setLong(1, vlanId); + try (ResultSet accountRs = selectAccountId.executeQuery();) { + while (accountRs.next()) { + isShared = false; + accountId = accountRs.getLong(1); + domainId = retrieveDomainId(conn, accountId); + } + } + } + if (vlanNetworkMap.get(tag) == null) { + long directNetworkId = + insertNetwork(conn, "DirectNetwork" + vlanId, "Direct network created for " + vlanId, "Guest", "Vlan", "vlan://" + tag, gateway, cidr, + "Dhcp", 7, dcId, "DirectNetworkGuru", "Setup", domainId, accountId, null, null, "Direct", isShared, (String)dc[2], true, null); + vlanNetworkMap.put(tag, directNetworkId); + } + } + + /** + * @param accountId + * @param domainId + * @return + * @throws SQLException + */ + private Long retrieveDomainId(Connection conn,Long accountId) throws SQLException { + try (PreparedStatement pstmt = conn.prepareStatement("SELECT domain_id FROM account WHERE id=?");) { + pstmt.setLong(1, accountId); + try(ResultSet domainRs = pstmt.executeQuery();) { + Long domainId = 1L; + while (domainRs.next()) { + domainId = domainRs.getLong(1); + } + return domainId; + } + } + } + + /** + * @param basicDefaultDirectNetworkId + * @param vlanId + * @throws SQLException + */ + private void updateVlanNetworkForTag(Connection conn, long basicDefaultDirectNetworkId, long vlanId) throws SQLException { + try (PreparedStatement pstmt = conn.prepareStatement("UPDATE vlan SET network_id=? WHERE id=?");) { + pstmt.setLong(1, basicDefaultDirectNetworkId); + pstmt.setLong(2, vlanId); + pstmt.executeUpdate(); + } + } + + /** + * @param vlanNetworkMap + * @param vlanId + * @param tag + * @throws SQLException + */ + private void updateNetworkInVlanTableforTag(Connection conn, HashMap vlanNetworkMap, long vlanId, String tag) throws SQLException { + updateVlanNetworkForTag(conn, vlanId, vlanNetworkMap.get(tag)); + } + + /** + * @param conn + * @param dcId + * @return + * @throws SQLException + */ + private ArrayList retrieveDhcpServers(Connection conn, Long dcId) throws SQLException { + // Create DHCP domRs - Direct networks + try (PreparedStatement pstmt = + conn.prepareStatement("SELECT vm_instance.id, domain_router.guest_ip_address FROM vm_instance INNER JOIN domain_router ON vm_instance.id=domain_router.id WHERE vm_instance.removed IS NULL AND vm_instance.type='DomainRouter' AND vm_instance.data_center_id=? and domain_router.role='DHCP_USERDATA'");) { + pstmt.setLong(1, dcId); + try (ResultSet rs = pstmt.executeQuery();) { + ArrayList dhcpServers = new ArrayList(); + while (rs.next()) { + Object[] dhcpServer = new Object[40]; + dhcpServer[0] = rs.getLong(1); // router id + dhcpServer[1] = rs.getString(2); // guest IP address - direct ip address of the domR + dhcpServers.add(dhcpServer); + } + return dhcpServers; + } + } + } + + /** + * @param conn + * @param dcId + * @param controlNetworkId + * @param routerId + * @param directIp + * @throws SQLException + * @throws CloudRuntimeException + */ + private void updateDhcpServerData(Connection conn, Long dcId, long controlNetworkId, Long routerId, String directIp) throws SQLException, CloudRuntimeException { + try ( + PreparedStatement pstmt = + conn.prepareStatement("SELECT u.source_network_id, v.vlan_id from user_ip_address u, vlan v where u.public_ip_address=? and v.id=u.vlan_db_id"); + ) { + pstmt.setString(1, directIp); + try (ResultSet rs = pstmt.executeQuery();) { + if (!rs.next()) { + throw new CloudRuntimeException("Unable to find Direct ip address " + directIp + " in user_ip_address table"); + } + + Long directNetworkId = rs.getLong(1); + String vnet = rs.getString(2); + + String gateway = retrieveGateway(conn, directNetworkId); + + updateDomainRouter(conn, routerId, directNetworkId); + s_logger.debug("NetworkId updated for router id=" + routerId + "with network id = " + directNetworkId); + upgradeUserVms(conn, routerId, directNetworkId, gateway, vnet, "DirectNetworkGuru", "Create"); + s_logger.debug("Upgraded Direct vms in Advance zone id=" + dcId); + upgradeDomR(conn, dcId, routerId, null, directNetworkId, controlNetworkId, "Advanced", vnet); + s_logger.debug("Upgraded Direct domRs in Advance zone id=" + dcId); + } + } + } + + /** + * @param conn + * @param directNetworkId + * @return + * @throws SQLException + * @throws CloudRuntimeException + */ + private String retrieveGateway(Connection conn, Long directNetworkId) throws SQLException, CloudRuntimeException { + try (PreparedStatement selectGateway = conn.prepareStatement("SELECT gateway from networks where id=?");) { + selectGateway.setLong(1, directNetworkId); + try (ResultSet rs = selectGateway.executeQuery();) { + if (!rs.next()) { + throw new CloudRuntimeException("Unable to find gateway for network id=" + directNetworkId); + } + String gateway = rs.getString(1); + return gateway; + } + } + } + + /** + * @param routerId + * @param directNetworkId + * @throws SQLException + */ + private void updateDomainRouter(Connection conn, Long routerId, Long directNetworkId) throws SQLException { + try (PreparedStatement updateDomainRouter = conn.prepareStatement("UPDATE domain_router SET network_id = ? WHERE id = ? ");) { + updateDomainRouter.setLong(1, directNetworkId); + updateDomainRouter.setLong(2, routerId); + updateDomainRouter.executeUpdate(); + } + } + + /** + * @param conn + * @param dcId + * @param mgmtNetworkId + * @param controlNetworkId + * @param publicNetworkId + * @throws SQLException + */ + private void updateConsoleProxies(Connection conn, Long dcId, long mgmtNetworkId, long controlNetworkId, long publicNetworkId, String networkingType) throws SQLException { + // Upgrade ConsoleProxy + try (PreparedStatement selectInstanceIds = conn.prepareStatement("SELECT vm_instance.id FROM vm_instance WHERE removed IS NULL AND type='ConsoleProxy' AND data_center_id=?");) { + selectInstanceIds.setLong(1, dcId); + try (ResultSet rs = selectInstanceIds.executeQuery();) { + while (rs.next()) { + upgradeConsoleProxy(conn, dcId, rs.getLong(1), publicNetworkId, mgmtNetworkId, controlNetworkId, networkingType); + } + } + } + } + private void updateUserStats(Connection conn) { try ( // update device_type information @@ -2343,8 +2564,9 @@ public class Upgrade218to22 implements DbUpgrade { long nw_offering_id = rs.getLong(5); long isDefault = rs.getLong(6); try (PreparedStatement pstmt1 = - conn.prepareStatement("INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id, usage_event.resource_name, " - + "usage_event.offering_id, usage_event.size)" + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); ) { + conn.prepareStatement( + "INSERT INTO usage_event (usage_event.type, usage_event.created, usage_event.account_id, usage_event.zone_id, usage_event.resource_id, usage_event.resource_name, " + + "usage_event.offering_id, usage_event.size) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); ) { pstmt1.setString(1, EventTypes.EVENT_NETWORK_OFFERING_ASSIGN); pstmt1.setString(2, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now)); pstmt1.setLong(3, accountId); From 04e9083c3199effa295e47bc617b9b406adb6109 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 2 Aug 2015 14:20:11 +0200 Subject: [PATCH 083/314] CLOUDSTACK-8656: log messages on exception in legacy sql upgrade code --- .../cloud/upgrade/dao/LegacyDbUpgrade.java | 42 +++ .../cloud/upgrade/dao/Upgrade2214to30.java | 11 +- .../cloud/upgrade/dao/Upgrade222to224.java | 6 + .../cloud/upgrade/dao/Upgrade229to2210.java | 41 +-- .../cloud/upgrade/dao/Upgrade301to302.java | 64 +--- .../cloud/upgrade/dao/Upgrade302to303.java | 59 +--- .../com/cloud/upgrade/dao/Upgrade302to40.java | 326 +++++------------- .../cloud/upgrade/dao/Upgrade304to305.java | 61 +--- .../cloud/upgrade/dao/Upgrade305to306.java | 88 +---- .../cloud/upgrade/dao/Upgrade306to307.java | 16 +- .../cloud/upgrade/dao/Upgrade307to410.java | 11 +- .../com/cloud/upgrade/dao/Upgrade30xBase.java | 73 +--- 12 files changed, 219 insertions(+), 579 deletions(-) create mode 100644 engine/schema/src/com/cloud/upgrade/dao/LegacyDbUpgrade.java diff --git a/engine/schema/src/com/cloud/upgrade/dao/LegacyDbUpgrade.java b/engine/schema/src/com/cloud/upgrade/dao/LegacyDbUpgrade.java new file mode 100644 index 00000000000..e43f1eb35cd --- /dev/null +++ b/engine/schema/src/com/cloud/upgrade/dao/LegacyDbUpgrade.java @@ -0,0 +1,42 @@ +// 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. +package com.cloud.upgrade.dao; + +import org.apache.log4j.Logger; + +public abstract class LegacyDbUpgrade implements DbUpgrade{ + + final static Logger s_logger = Logger.getLogger(LegacyDbUpgrade.class); + + public LegacyDbUpgrade() { + super(); + } + + /** + * @param closable + */ + protected void closeAutoCloseable(AutoCloseable closable) { + if (closable != null) { + try { + closable.close(); + } catch (Exception e) { + s_logger.info("[ignored]",e); + } + } + } + +} \ No newline at end of file diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2214to30.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade2214to30.java index eb4e8c75693..272d25990d6 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade2214to30.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade2214to30.java @@ -411,6 +411,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade { pstmt.close(); } } catch (SQLException e) { + s_logger.info("[ignored]",e); } } s_logger.debug("Done encrypting Config values"); @@ -861,6 +862,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade { pstmt.executeUpdate(); pstmt.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } TransactionLegacy.closePstmts(pstmt2Close); } @@ -1000,6 +1002,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade { pstmt.executeUpdate(); pstmt.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } TransactionLegacy.closePstmts(pstmt2Close); } @@ -1053,6 +1056,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade { pstmt.close(); } } catch (SQLException e) { + s_logger.info("[ignored]",e); } } } @@ -1151,11 +1155,10 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to switch networks to the new network offering", e); } finally { - try { - pstmt = conn.prepareStatement("DROP TABLE `cloud`.`network_offerings2`"); - pstmt.executeUpdate(); - pstmt.close(); + try (PreparedStatement dropStatement = conn.prepareStatement("DROP TABLE `cloud`.`network_offerings2`");){ + dropStatement.executeUpdate(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } TransactionLegacy.closePstmts(pstmt2Close); } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224.java index dbd48c879e8..458f7eebf41 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade222to224.java @@ -207,18 +207,21 @@ public class Upgrade222to224 implements DbUpgrade { try { pstmtUpdate.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } } @@ -406,18 +409,21 @@ public class Upgrade222to224 implements DbUpgrade { try { pstmtUpdate.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { + s_logger.info("[ignored]",e); } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade229to2210.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade229to2210.java index 2eca446652e..dbeb31e6b45 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade229to2210.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade229to2210.java @@ -68,41 +68,29 @@ public class Upgrade229to2210 implements DbUpgrade { } private void updateSnapshots(Connection conn) { - PreparedStatement pstmt = null; - ResultSet rs = null; long currentSnapshotId = 0; - try { - pstmt = - conn.prepareStatement("select id, prev_snap_id from snapshots where sechost_id is NULL and prev_snap_id is not NULL and status=\"BackedUp\" and removed is NULL order by id"); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("select id, prev_snap_id from snapshots where sechost_id is NULL and prev_snap_id is not NULL and status=\"BackedUp\" and removed is NULL order by id"); + ResultSet rs = pstmt.executeQuery(); + PreparedStatement pstmt2 = conn.prepareStatement("select sechost_id from snapshots where id=? and sechost_id is not NULL"); + PreparedStatement updateSnapshotStatement = conn.prepareStatement("update snapshots set sechost_id=? where id=?"); + ){ while (rs.next()) { long id = rs.getLong(1); long preSnapId = rs.getLong(2); currentSnapshotId = id; - pstmt = conn.prepareStatement("select sechost_id from snapshots where id=? and sechost_id is not NULL"); - pstmt.setLong(1, preSnapId); - ResultSet sechost = pstmt.executeQuery(); - if (sechost.next()) { - long secHostId = sechost.getLong(1); - pstmt = conn.prepareStatement("update snapshots set sechost_id=? where id=?"); - pstmt.setLong(1, secHostId); - pstmt.setLong(2, id); - pstmt.executeUpdate(); + pstmt2.setLong(1, preSnapId); + try (ResultSet sechost = pstmt2.executeQuery();) { + if (sechost.next()) { + long secHostId = sechost.getLong(1); + updateSnapshotStatement.setLong(1, secHostId); + updateSnapshotStatement.setLong(2, id); + updateSnapshotStatement.executeUpdate(); + } } } } catch (SQLException e) { throw new CloudRuntimeException("Unable to update snapshots id=" + currentSnapshotId, e); - } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } @@ -192,6 +180,7 @@ public class Upgrade229to2210 implements DbUpgrade { pstmt.close(); } } catch (SQLException e) { + s_logger.info("[ignored]",e); } } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade301to302.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade301to302.java index 0da787774b5..0e9b479c947 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade301to302.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade301to302.java @@ -31,7 +31,7 @@ import org.apache.log4j.Logger; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade301to302 implements DbUpgrade { +public class Upgrade301to302 extends LegacyDbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade301to302.class); @Override @@ -150,18 +150,9 @@ public class Upgrade301to302 implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to update shared networks due to exception while executing query " + pstmt, e); } finally { - try { - if (rs != null) { - rs.close(); - } - if (rs1 != null) { - rs1.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(rs1); + closeAutoCloseable(pstmt); } } @@ -177,55 +168,34 @@ public class Upgrade301to302 implements DbUpgrade { DbUpgradeUtils.dropKeysIfExist(conn, "cloud.vm_instance", keys, true); DbUpgradeUtils.dropKeysIfExist(conn, "cloud.vm_instance", keys, false); - PreparedStatement pstmt = null; - try { - pstmt = + try ( + PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`vm_instance` ADD CONSTRAINT `fk_vm_instance__last_host_id` FOREIGN KEY (`last_host_id`) REFERENCES `host` (`id`)"); + ){ pstmt.executeUpdate(); - pstmt.close(); } catch (SQLException e) { throw new CloudRuntimeException("Unable to insert foreign key in vm_instance table ", e); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } private void changeEngine(Connection conn) { s_logger.debug("Fixing engine and row_format for op_lock and op_nwgrp_work tables"); - PreparedStatement pstmt = null; - try { - pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`op_lock` ENGINE=MEMORY, ROW_FORMAT = FIXED"); + String sqlOpLock = "ALTER TABLE `cloud`.`op_lock` ENGINE=MEMORY, ROW_FORMAT = FIXED"; + try ( + PreparedStatement pstmt = conn.prepareStatement(sqlOpLock); + ) { pstmt.executeUpdate(); - pstmt.close(); } catch (Exception e) { - s_logger.debug("Failed do execute the statement " + pstmt + ", moving on as it's not critical fix"); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + s_logger.debug("Failed do execute the statement " + sqlOpLock + ", moving on as it's not critical fix"); } - try { - pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`op_nwgrp_work` ENGINE=MEMORY, ROW_FORMAT = FIXED"); + String sqlOpNwgrpWork = "ALTER TABLE `cloud`.`op_nwgrp_work` ENGINE=MEMORY, ROW_FORMAT = FIXED"; + try ( + PreparedStatement pstmt = conn.prepareStatement(sqlOpNwgrpWork); + ) { pstmt.executeUpdate(); - pstmt.close(); } catch (Exception e) { - s_logger.debug("Failed do execute the statement " + pstmt + ", moving on as it's not critical fix"); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + s_logger.debug("Failed do execute the statement " + sqlOpNwgrpWork + ", moving on as it's not critical fix"); } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to303.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to303.java index 7cc8bc74c91..abd0c347df3 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to303.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to303.java @@ -36,7 +36,7 @@ import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade302to303 implements DbUpgrade { +public class Upgrade302to303 extends LegacyDbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade302to303.class); @Override @@ -133,23 +133,10 @@ public class Upgrade302to303 implements DbUpgrade { } } } - - if (zoneResults != null) { - try { - zoneResults.close(); - } catch (SQLException e) { - } - } - if (zoneSearchStmt != null) { - try { - zoneSearchStmt.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(zoneResults); + closeAutoCloseable(zoneSearchStmt); } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e); - } finally { - } } @@ -176,12 +163,7 @@ public class Upgrade302to303 implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding F5 load balancer device", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmtUpdate); } } @@ -206,12 +188,7 @@ public class Upgrade302to303 implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding SRX firewall device ", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmtUpdate); } } @@ -235,12 +212,7 @@ public class Upgrade302to303 implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider F5BigIp", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmtUpdate); } } @@ -264,12 +236,7 @@ public class Upgrade302to303 implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider JuniperSRX", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmtUpdate); } } @@ -299,16 +266,8 @@ public class Upgrade302to303 implements DbUpgrade { } catch (UnsupportedEncodingException e) { throw new CloudRuntimeException("Unable encrypt configuration values ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.debug("Done encrypting Config values"); } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to40.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to40.java index 5ce8f366830..829e99852ba 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to40.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade302to40.java @@ -34,7 +34,7 @@ import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { +public class Upgrade302to40 extends Upgrade30xBase { final static Logger s_logger = Logger.getLogger(Upgrade302to40.class); @Override @@ -138,33 +138,10 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while correcting Virtual Router Entries", e); } finally { - if (rsVR != null) { - try { - rsVR.close(); - } catch (SQLException e) { - } - } - - if (pstmtVR != null) { - try { - pstmtVR.close(); - } catch (SQLException e) { - } - } - - if (rs != null) { - try { - rs.close(); - } catch (SQLException e) { - } - } - - if (pstmt != null) { - try { - pstmt.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(rsVR); + closeAutoCloseable(pstmtVR); + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } } @@ -398,33 +375,10 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while correcting PhysicalNetwork setup", e); } finally { - if (rsZone != null) { - try { - rsZone.close(); - } catch (SQLException e) { - } - } - - if (pstmtZone != null) { - try { - pstmtZone.close(); - } catch (SQLException e) { - } - } - - if (rs != null) { - try { - rs.close(); - } catch (SQLException e) { - } - } - - if (pstmt != null) { - try { - pstmt.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(rsZone); + closeAutoCloseable(pstmtZone); + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } } @@ -510,29 +464,23 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while cloning NetworkOffering", e); } finally { + closeAutoCloseable(rs); try { pstmt = conn.prepareStatement("DROP TEMPORARY TABLE `cloud`.`network_offerings2`"); pstmt.executeUpdate(); - - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } } catch (SQLException e) { + s_logger.info("[ignored] ",e); } + closeAutoCloseable(pstmt); } } private void addHostDetailsUniqueKey(Connection conn) { s_logger.debug("Checking if host_details unique key exists, if not we will add it"); - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - pstmt = conn.prepareStatement("SHOW INDEX FROM `cloud`.`host_details` WHERE KEY_NAME = 'uk_host_id_name'"); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("SHOW INDEX FROM `cloud`.`host_details` WHERE KEY_NAME = 'uk_host_id_name'"); + ResultSet rs = pstmt.executeQuery(); + ) { if (rs.next()) { s_logger.debug("Unique key already exists on host_details - not adding new one"); } else { @@ -545,17 +493,6 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } } catch (SQLException e) { throw new CloudRuntimeException("Failed to check/update the host_details unique key ", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } @@ -602,16 +539,8 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable add VPC physical network service provider ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.debug("Done adding VPC physical network service providers to all physical networks"); } @@ -619,46 +548,33 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { private void updateRouterNetworkRef(Connection conn) { //Encrypt config params and change category to Hidden s_logger.debug("Updating router network ref"); - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - pstmt = conn.prepareStatement("SELECT d.id, d.network_id FROM `cloud`.`domain_router` d, `cloud`.`vm_instance` v " + "WHERE d.id=v.id AND v.removed is NULL"); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("SELECT d.id, d.network_id FROM `cloud`.`domain_router` d, `cloud`.`vm_instance` v " + "WHERE d.id=v.id AND v.removed is NULL"); + PreparedStatement pstmt1 = conn.prepareStatement("SELECT guest_type from `cloud`.`networks` where id=?"); + PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO `cloud`.`router_network_ref` (router_id, network_id, guest_type) " + "VALUES (?, ?, ?)"); + ResultSet rs = pstmt.executeQuery(); + ){ while (rs.next()) { Long routerId = rs.getLong(1); Long networkId = rs.getLong(2); //get the network type - pstmt = conn.prepareStatement("SELECT guest_type from `cloud`.`networks` where id=?"); - pstmt.setLong(1, networkId); - ResultSet rs1 = pstmt.executeQuery(); - rs1.next(); - String networkType = rs1.getString(1); - - //insert the reference - pstmt = conn.prepareStatement("INSERT INTO `cloud`.`router_network_ref` (router_id, network_id, guest_type) " + "VALUES (?, ?, ?)"); - - pstmt.setLong(1, routerId); - pstmt.setLong(2, networkId); - pstmt.setString(3, networkType); - pstmt.executeUpdate(); + pstmt1.setLong(1, networkId); + try (ResultSet rs1 = pstmt1.executeQuery();) { + rs1.next(); + String networkType = rs1.getString(1); + //insert the reference + pstmt2.setLong(1, routerId); + pstmt2.setLong(2, networkId); + pstmt2.setString(3, networkType); + pstmt2.executeUpdate(); + } s_logger.debug("Added reference for router id=" + routerId + " and network id=" + networkId); } } catch (SQLException e) { throw new CloudRuntimeException("Failed to update the router/network reference ", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } s_logger.debug("Done updating router/network references"); } @@ -768,33 +684,19 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } } - if (zoneResults != null) { - try { - zoneResults.close(); - } catch (SQLException e) { - } - } - if (zoneSearchStmt != null) { - try { - zoneSearchStmt.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(zoneResults); + closeAutoCloseable(zoneSearchStmt); } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e); - } finally { - } } private void addF5LoadBalancer(Connection conn, long hostId, long physicalNetworkId) { - PreparedStatement pstmtUpdate = null; - try { - s_logger.debug("Adding F5 Big IP load balancer with host id " + hostId + " in to physical network" + physicalNetworkId); - String insertF5 = - "INSERT INTO `cloud`.`external_load_balancer_devices` (physical_network_id, host_id, provider_name, " - + "device_name, capacity, is_dedicated, device_state, allocation_state, is_inline, is_managed, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - pstmtUpdate = conn.prepareStatement(insertF5); + s_logger.debug("Adding F5 Big IP load balancer with host id " + hostId + " in to physical network" + physicalNetworkId); + String insertF5 = + "INSERT INTO `cloud`.`external_load_balancer_devices` (physical_network_id, host_id, provider_name, " + + "device_name, capacity, is_dedicated, device_state, allocation_state, is_inline, is_managed, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertF5);) { pstmtUpdate.setLong(1, physicalNetworkId); pstmtUpdate.setLong(2, hostId); pstmtUpdate.setString(3, "F5BigIp"); @@ -809,24 +711,15 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { pstmtUpdate.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding F5 load balancer device", e); - } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } } } private void addSrxFirewall(Connection conn, long hostId, long physicalNetworkId) { - PreparedStatement pstmtUpdate = null; - try { - s_logger.debug("Adding SRX firewall device with host id " + hostId + " in to physical network" + physicalNetworkId); - String insertSrx = - "INSERT INTO `cloud`.`external_firewall_devices` (physical_network_id, host_id, provider_name, " - + "device_name, capacity, is_dedicated, device_state, allocation_state, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - pstmtUpdate = conn.prepareStatement(insertSrx); + s_logger.debug("Adding SRX firewall device with host id " + hostId + " in to physical network" + physicalNetworkId); + String insertSrx = + "INSERT INTO `cloud`.`external_firewall_devices` (physical_network_id, host_id, provider_name, " + + "device_name, capacity, is_dedicated, device_state, allocation_state, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertSrx);) { pstmtUpdate.setLong(1, physicalNetworkId); pstmtUpdate.setLong(2, hostId); pstmtUpdate.setString(3, "JuniperSRX"); @@ -839,28 +732,18 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { pstmtUpdate.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding SRX firewall device ", e); - } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } } } private void addF5ServiceProvider(Connection conn, long physicalNetworkId, long zoneId) { - PreparedStatement pstmtUpdate = null; - try { - // add physical network service provider - F5BigIp - s_logger.debug("Adding PhysicalNetworkServiceProvider F5BigIp" + " in to physical network" + physicalNetworkId); - String insertPNSP = - "INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ," - + "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`," - + "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`," - + "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,0,0,0,1,0,0,0,0)"; - - pstmtUpdate = conn.prepareStatement(insertPNSP); + // add physical network service provider - F5BigIp + s_logger.debug("Adding PhysicalNetworkServiceProvider F5BigIp" + " in to physical network" + physicalNetworkId); + String insertPNSP = + "INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ," + + "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`," + + "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`," + + "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,0,0,0,1,0,0,0,0)"; + try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertPNSP);) { pstmtUpdate.setString(1, UUID.randomUUID().toString()); pstmtUpdate.setLong(2, physicalNetworkId); pstmtUpdate.setString(3, "F5BigIp"); @@ -868,28 +751,18 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { pstmtUpdate.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider F5BigIp", e); - } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } } } private void addSrxServiceProvider(Connection conn, long physicalNetworkId, long zoneId) { - PreparedStatement pstmtUpdate = null; - try { - // add physical network service provider - JuniperSRX - s_logger.debug("Adding PhysicalNetworkServiceProvider JuniperSRX"); - String insertPNSP = - "INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ," - + "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`," - + "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`," - + "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,1,1,1,0,1,1,0,0)"; - - pstmtUpdate = conn.prepareStatement(insertPNSP); + // add physical network service provider - JuniperSRX + s_logger.debug("Adding PhysicalNetworkServiceProvider JuniperSRX"); + String insertPNSP = + "INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ," + + "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`," + + "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`," + + "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,1,1,1,0,1,1,0,0)"; + try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertPNSP);) { pstmtUpdate.setString(1, UUID.randomUUID().toString()); pstmtUpdate.setLong(2, physicalNetworkId); pstmtUpdate.setString(3, "JuniperSRX"); @@ -897,13 +770,6 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { pstmtUpdate.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider JuniperSRX", e); - } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } } } @@ -1045,15 +911,8 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable create a mapping for the networks in network_external_lb_device_map and network_external_firewall_device_map", e); } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.info("Successfully upgraded networks using F5 and SRX devices to have a entry in the network_external_lb_device_map and network_external_firewall_device_map"); } @@ -1062,12 +921,11 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { private void encryptConfig(Connection conn) { //Encrypt config params and change category to Hidden s_logger.debug("Encrypting Config values"); - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - pstmt = - conn.prepareStatement("select name, value from `cloud`.`configuration` where name in ('router.ram.size', 'secondary.storage.vm', 'security.hash.key') and category <> 'Hidden'"); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("select name, value from `cloud`.`configuration` where name in ('router.ram.size', 'secondary.storage.vm', 'security.hash.key') and category <> 'Hidden'"); + PreparedStatement pstmt1 = conn.prepareStatement("update `cloud`.`configuration` set value=?, category = 'Hidden' where name=?"); + ResultSet rs = pstmt.executeQuery(); + ) { while (rs.next()) { String name = rs.getString(1); String value = rs.getString(2); @@ -1075,37 +933,25 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { continue; } String encryptedValue = DBEncryptionUtil.encrypt(value); - pstmt = conn.prepareStatement("update `cloud`.`configuration` set value=?, category = 'Hidden' where name=?"); - pstmt.setBytes(1, encryptedValue.getBytes("UTF-8")); - pstmt.setString(2, name); - pstmt.executeUpdate(); + pstmt1.setBytes(1, encryptedValue.getBytes("UTF-8")); + pstmt1.setString(2, name); + pstmt1.executeUpdate(); } } catch (SQLException e) { throw new CloudRuntimeException("Unable encrypt configuration values ", e); } catch (UnsupportedEncodingException e) { throw new CloudRuntimeException("Unable encrypt configuration values ", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } s_logger.debug("Done encrypting Config values"); } private void encryptClusterDetails(Connection conn) { s_logger.debug("Encrypting cluster details"); - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - pstmt = conn.prepareStatement("select id, value from `cloud`.`cluster_details` where name = 'password'"); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("select id, value from `cloud`.`cluster_details` where name = 'password'"); + PreparedStatement pstmt1 = conn.prepareStatement("update `cloud`.`cluster_details` set value=? where id=?"); + ResultSet rs = pstmt.executeQuery(); + ) { while (rs.next()) { long id = rs.getLong(1); String value = rs.getString(2); @@ -1113,26 +959,14 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade { continue; } String encryptedValue = DBEncryptionUtil.encrypt(value); - pstmt = conn.prepareStatement("update `cloud`.`cluster_details` set value=? where id=?"); - pstmt.setBytes(1, encryptedValue.getBytes("UTF-8")); - pstmt.setLong(2, id); - pstmt.executeUpdate(); + pstmt1.setBytes(1, encryptedValue.getBytes("UTF-8")); + pstmt1.setLong(2, id); + pstmt1.executeUpdate(); } } catch (SQLException e) { throw new CloudRuntimeException("Unable encrypt cluster_details values ", e); } catch (UnsupportedEncodingException e) { throw new CloudRuntimeException("Unable encrypt cluster_details values ", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } s_logger.debug("Done encrypting cluster_details"); } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade304to305.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade304to305.java index 2472716d3fa..3f1268845c0 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade304to305.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade304to305.java @@ -33,7 +33,7 @@ import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade { +public class Upgrade304to305 extends Upgrade30xBase { final static Logger s_logger = Logger.getLogger(Upgrade304to305.class); @Override @@ -173,16 +173,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable add VPC physical network service provider ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.debug("Done adding VPC physical network service providers to all physical networks"); } @@ -220,16 +212,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Failed to update the router/network reference ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.debug("Done updating router/network references"); } @@ -254,16 +238,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Failed to check/update the host_details unique key ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } } @@ -407,15 +383,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable create a mapping for the networks in network_external_lb_device_map and network_external_firewall_device_map", e); } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.info("Successfully upgraded network using F5 and SRX devices to have a entry in the network_external_lb_device_map and network_external_firewall_device_map"); } @@ -487,16 +456,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade { } catch (UnsupportedEncodingException e) { throw new CloudRuntimeException("Unable encrypt cluster_details values ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } s_logger.debug("Done encrypting cluster_details"); } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade305to306.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade305to306.java index 622f7ea6a54..c31ce659a00 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade305to306.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade305to306.java @@ -31,7 +31,7 @@ import org.apache.log4j.Logger; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade { +public class Upgrade305to306 extends Upgrade30xBase { final static Logger s_logger = Logger.getLogger(Upgrade305to306.class); @Override @@ -82,55 +82,33 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade { DbUpgradeUtils.dropKeysIfExist(conn, "alert", indexList, false); //Now add index. - PreparedStatement pstmt = null; - try { - pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`alert` ADD INDEX `i_alert__last_sent`(`last_sent`)"); + try (PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`alert` ADD INDEX `i_alert__last_sent`(`last_sent`)");) { pstmt.executeUpdate(); s_logger.debug("Added index i_alert__last_sent for table alert"); } catch (SQLException e) { throw new CloudRuntimeException("Unable to add index i_alert__last_sent to alert table for the column last_sent", e); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } private void upgradeEIPNetworkOfferings(Connection conn) { - PreparedStatement pstmt = null; - ResultSet rs = null; - - try { - pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'"); - rs = pstmt.executeQuery(); + try ( + PreparedStatement pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'"); + PreparedStatement pstmt1 = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?"); + ResultSet rs = pstmt.executeQuery(); + ){ while (rs.next()) { long id = rs.getLong(1); // check if elastic IP service is enabled for network offering if (rs.getLong(2) != 0) { //update network offering with eip_associate_public_ip set to true - pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?"); - pstmt.setBoolean(1, true); - pstmt.setLong(2, id); - pstmt.executeUpdate(); + pstmt1.setBoolean(1, true); + pstmt1.setLong(2, id); + pstmt1.executeUpdate(); } } } catch (SQLException e) { throw new CloudRuntimeException("Unable to set eip_associate_public_ip for network offerings with EIP service enabled.", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } @@ -143,20 +121,11 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade { DbUpgradeUtils.dropKeysIfExist(conn, "host_details", indexList, false); //Now add index. - PreparedStatement pstmt = null; - try { - pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`host_details` ADD INDEX `fk_host_details__host_id`(`host_id`)"); + try (PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`host_details` ADD INDEX `fk_host_details__host_id`(`host_id`)");) { pstmt.executeUpdate(); s_logger.debug("Added index fk_host_details__host_id for table host_details"); } catch (SQLException e) { throw new CloudRuntimeException("Unable to add index fk_host_details__host_id to host_details table for the column host_id", e); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } @@ -218,15 +187,8 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to set egress firewall rules ", e); } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } } @@ -247,16 +209,8 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to remove Firewall service for SG shared network offering.", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } } @@ -288,16 +242,8 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to update backup id for KVM snapshots", e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java index ab96b58358f..28652189726 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java @@ -98,19 +98,9 @@ public class Upgrade306to307 extends Upgrade30xBase implements DbUpgrade { pstmt.executeUpdate(); } catch (SQLException e) { } finally { - try { - if (rs != null) { - rs.close(); - } - - if (rs1 != null) { - rs1.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(rs1); + closeAutoCloseable(pstmt); } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade307to410.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade307to410.java index 243513ae0ea..4319481fe93 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade307to410.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade307to410.java @@ -69,23 +69,14 @@ public class Upgrade307to410 implements DbUpgrade { if (regionId != null) { region_id = Integer.parseInt(regionId); } - PreparedStatement pstmt = null; - try { + try (PreparedStatement pstmt = conn.prepareStatement("update `cloud`.`region` set id = ?");){ //Update regionId in region table s_logger.debug("Updating region table with Id: " + region_id); - pstmt = conn.prepareStatement("update `cloud`.`region` set id = ?"); pstmt.setInt(1, region_id); pstmt.executeUpdate(); } catch (SQLException e) { throw new CloudRuntimeException("Error while updating region entries", e); - } finally { - try { - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java index aacede083fa..5a370f00fe0 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java @@ -27,7 +27,7 @@ import org.apache.log4j.Logger; import com.cloud.utils.exception.CloudRuntimeException; -public abstract class Upgrade30xBase implements DbUpgrade { +public abstract class Upgrade30xBase extends LegacyDbUpgrade implements DbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade30xBase.class); @@ -46,18 +46,8 @@ public abstract class Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to fetch network label from configuration", e); } finally { - if (rs != null) { - try { - rs.close(); - } catch (SQLException e) { - } - } - if (pstmt != null) { - try { - pstmt.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(rs); + closeAutoCloseable(pstmt); } return networkLabel; } @@ -117,19 +107,8 @@ public abstract class Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } - if (pstmt2 != null) { - try { - pstmt2.close(); - } catch (SQLException e) { - } - } - + closeAutoCloseable(pstmt2); + closeAutoCloseable(pstmtUpdate); } } @@ -152,12 +131,7 @@ public abstract class Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmtUpdate); } } @@ -204,18 +178,8 @@ public abstract class Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding default Security Group Provider", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } - if (pstmt2 != null) { - try { - pstmt2.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmt2); + closeAutoCloseable(pstmtUpdate); } } @@ -261,18 +225,8 @@ public abstract class Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } - if (pstmt2 != null) { - try { - pstmt2.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmt2); + closeAutoCloseable(pstmtUpdate); } } @@ -299,12 +253,7 @@ public abstract class Upgrade30xBase implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e); } finally { - if (pstmtUpdate != null) { - try { - pstmtUpdate.close(); - } catch (SQLException e) { - } - } + closeAutoCloseable(pstmtUpdate); } } From 39bf1fed6867c4de673575b8b0925337015088ee Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Sun, 2 Aug 2015 19:48:58 +0200 Subject: [PATCH 084/314] CLOUDSTACK-8656: try with resource te eliminate empty catch clauses --- .../image/db/SnapshotDataStoreDaoImpl.java | 72 +++++++------------ 1 file changed, 27 insertions(+), 45 deletions(-) diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java index ea73ecd7e33..142cd669cb3 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java @@ -221,26 +221,20 @@ public class SnapshotDataStoreDaoImpl extends GenericDaoBase Date: Sun, 2 Aug 2015 19:55:14 +0200 Subject: [PATCH 085/314] CLOUDSTACK-8656: silent close failure of clustering socket log as info --- .../src/com/cloud/cluster/ClusterServiceServletContainer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java index f5d67224d2b..08f5dba69f6 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletContainer.java @@ -114,6 +114,7 @@ public class ClusterServiceServletContainer { try { _serverSocket.close(); } catch (IOException e) { + s_logger.info("[ignored] error on closing server socket", e); } _serverSocket = null; } From e0ba5302b66283c56819c49786d75f2f0bb53873 Mon Sep 17 00:00:00 2001 From: Kshitij Kansal Date: Thu, 30 Jul 2015 16:23:50 +0530 Subject: [PATCH 086/314] CLOUDSTACK-8692: Resource leak found by the internal coverity instance at Citrix fixed. --- .../org/apache/cloudstack/region/RegionsApiUtil.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/server/src/org/apache/cloudstack/region/RegionsApiUtil.java b/server/src/org/apache/cloudstack/region/RegionsApiUtil.java index 92c5ed4e17e..7fbcfa0795e 100644 --- a/server/src/org/apache/cloudstack/region/RegionsApiUtil.java +++ b/server/src/org/apache/cloudstack/region/RegionsApiUtil.java @@ -186,8 +186,12 @@ public class RegionsApiUtil { XStream xstream = new XStream(new DomDriver()); xstream.alias("useraccount", UserAccountVO.class); xstream.aliasField("id", UserAccountVO.class, "uuid"); - ObjectInputStream in = xstream.createObjectInputStream(is); - return (UserAccountVO)in.readObject(); + try(ObjectInputStream in = xstream.createObjectInputStream(is);) { + return (UserAccountVO)in.readObject(); + } catch (IOException e) { + s_logger.error(e.getMessage()); + return null; + } } else { return null; } @@ -304,4 +308,4 @@ public class RegionsApiUtil { } } -} \ No newline at end of file +} From b6a06b4bf5b4ed0f4a49fb90b4601f7c3ea2f6c2 Mon Sep 17 00:00:00 2001 From: Priti Sarap Date: Wed, 29 Jul 2015 11:44:59 +0530 Subject: [PATCH 087/314] CLOUDSTACK-8686: Data disk attach failed for clusters with only zone wide primary -Attaching the uploaded/allocated volume to a VM on zwps This closes #631 --- .../testpaths/testpath_attach_disk_zwps.py | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 test/integration/testpaths/testpath_attach_disk_zwps.py diff --git a/test/integration/testpaths/testpath_attach_disk_zwps.py b/test/integration/testpaths/testpath_attach_disk_zwps.py new file mode 100644 index 00000000000..d386438310f --- /dev/null +++ b/test/integration/testpaths/testpath_attach_disk_zwps.py @@ -0,0 +1,209 @@ +# 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. +""" Test case for Data Disk Attach to VM on ZWPS Test Path +""" + +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase +from marvin.lib.utils import (cleanup_resources, + validateList) +from marvin.lib.base import (Account, + ServiceOffering, + DiskOffering, + Volume, + VirtualMachine, + StoragePool + ) +from marvin.lib.common import (get_domain, + get_zone, + get_template + ) + +from marvin.codes import (PASS, + ZONETAG1) + + +class TestAttachDataDisk(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + testClient = super(TestAttachDataDisk, cls).getClsTestClient() + cls.apiclient = testClient.getApiClient() + cls.testdata = testClient.getParsedTestDataConfig() + cls.hypervisor = cls.testClient.getHypervisorInfo() + + # Get Zone, Domain and templates + cls.domain = get_domain(cls.apiclient) + cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests()) + cls._cleanup = [] + cls.template = get_template( + cls.apiclient, + cls.zone.id, + cls.testdata["ostype"]) + cls.skiptest = False + + try: + cls.pools = StoragePool.list(cls.apiclient, zoneid=cls.zone.id) + except Exception as e: + cls.skiptest = True + return + try: + + # Create an account + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + cls._cleanup.append(cls.account) + + # Create user api client of the account + cls.userapiclient = testClient.getUserApiClient( + UserName=cls.account.name, + DomainName=cls.account.domain + ) + # Create Service offering + cls.service_offering_zone1 = ServiceOffering.create( + cls.apiclient, + cls.testdata["service_offering"], + tags=ZONETAG1 + ) + cls._cleanup.append(cls.service_offering_zone1) + + # Create Disk offering + cls.disk_offering = DiskOffering.create( + cls.apiclient, + cls.testdata["disk_offering"] + ) + + cls._cleanup.append(cls.disk_offering) + + except Exception as e: + cls.tearDownClass() + raise e + return + + @classmethod + def tearDownClass(cls): + try: + cleanup_resources(cls.apiclient, cls._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + + def setUp(self): + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + self.cleanup = [] + + def tearDown(self): + try: + for storagePool in self.pools: + StoragePool.update(self.apiclient, id=storagePool.id, tags="") + + if hasattr(self, "data_volume_created"): + data_volumes_list = Volume.list( + self.userapiclient, + id=self.data_volume_created.id, + virtualmachineid=self.vm.id + ) + if data_volumes_list: + self.vm.detach_volume( + self.userapiclient, + data_volumes_list[0] + ) + + status = validateList(data_volumes_list) + self.assertEqual( + status[0], + PASS, + "DATA Volume List Validation Failed") + + cleanup_resources(self.apiclient, self.cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return + + @attr(tags=["basic", "advanced"], required_hardware="true") + def test_01_attach_datadisk_to_vm_on_zwps(self): + """ Attach Data Disk To VM on ZWPS + 1. Check if zwps storage pool exists. + 2. Adding tag to zone wide primary storage + 3. Launch a VM on ZWPS + 4. Attach data disk to vm which is on zwps. + 5. Verify disk is attached. + """ + + # Step 1 + if len(list(storagePool for storagePool in self.pools + if storagePool.scope == "ZONE")) < 1: + self.skipTest("There must be at least one zone wide \ + storage pools available in the setup") + + # Adding tags to Storage Pools + zone_no = 1 + for storagePool in self.pools: + if storagePool.scope == "ZONE": + StoragePool.update( + self.apiclient, + id=storagePool.id, + tags=[ZONETAG1[:-1] + repr(zone_no)]) + zone_no += 1 + + self.vm = VirtualMachine.create( + self.apiclient, + self.testdata["small"], + templateid=self.template.id, + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering_zone1.id, + zoneid=self.zone.id + ) + + self.data_volume_created = Volume.create( + self.userapiclient, + self.testdata["volume"], + zoneid=self.zone.id, + account=self.account.name, + domainid=self.account.domainid, + diskofferingid=self.disk_offering.id + ) + + self.cleanup.append(self.data_volume_created) + + # Step 2 + self.vm.attach_volume( + self.userapiclient, + self.data_volume_created + ) + + data_volumes_list = Volume.list( + self.userapiclient, + id=self.data_volume_created.id, + virtualmachineid=self.vm.id + ) + + data_volume = data_volumes_list[0] + + status = validateList(data_volume) + + # Step 3 + self.assertEqual( + status[0], + PASS, + "Check: Data if Disk is attached to VM") + + return From c5ebb68be4084c2a654c87beb7c41fe4ce059f9d Mon Sep 17 00:00:00 2001 From: Priti Sarap Date: Thu, 30 Jul 2015 13:00:39 +0530 Subject: [PATCH 088/314] CLOUDSTACK-8689: Verify effect of changing value of XenServer Max guest limitis on previously added hosts CLOUDSTACK-8689-Verify-effect-of-changing-value-of-XenServer-Max-guest-limitis-on-previously-added-hosts -Addning check for empty list and increamenting maxguestlimit accordingly CLOUDSTACK-8689: Verify effect of changing value of XenServer Maxguestlimits on previously added hosts -As testcase is changing maxguestlimits global setting it will affect on other testcases also hence moving it to component/maint folder This closes #638 --- .../component/maint/test_hypervisor_limit.py | 225 ++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 test/integration/component/maint/test_hypervisor_limit.py diff --git a/test/integration/component/maint/test_hypervisor_limit.py b/test/integration/component/maint/test_hypervisor_limit.py new file mode 100644 index 00000000000..d24540a43de --- /dev/null +++ b/test/integration/component/maint/test_hypervisor_limit.py @@ -0,0 +1,225 @@ +# 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. +""" Test cases for Testing Max Hypervisor Limit +""" +from nose.plugins.attrib import attr +from marvin.cloudstackTestCase import cloudstackTestCase +from marvin.lib.utils import (cleanup_resources, + validateList) +from marvin.lib.base import (Account, + ServiceOffering, + VirtualMachine, + Host + ) +from marvin.lib.common import (get_domain, + get_zone, + get_template, + list_virtual_machines, + list_ssvms, + list_routers + ) + + +from marvin.cloudstackAPI import (updateHypervisorCapabilities, + listHypervisorCapabilities) + +from marvin.codes import PASS + + +class TestMaxHyperviosrLimit(cloudstackTestCase): + + @classmethod + def setUpClass(cls): + testClient = super(TestMaxHyperviosrLimit, cls).getClsTestClient() + cls.apiclient = testClient.getApiClient() + cls.testdata = testClient.getParsedTestDataConfig() + + cls.hypervisor = cls.testClient.getHypervisorInfo() + # Get Zone, Domain and templates + + cls.domain = get_domain(cls.apiclient) + cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests()) + + cls.template = get_template( + cls.apiclient, + cls.zone.id, + cls.testdata["ostype"]) + + cls._cleanup = [] + try: + cls.skiptest = False + if cls.hypervisor.lower() not in ['xenserver']: + cls.skiptest = True + return + + # Create an account + cls.account = Account.create( + cls.apiclient, + cls.testdata["account"], + domainid=cls.domain.id + ) + + # Create user api client of the account + cls.userapiclient = testClient.getUserApiClient( + UserName=cls.account.name, + DomainName=cls.account.domain + ) + # Create Service offering + cls.service_offering = ServiceOffering.create( + cls.apiclient, + cls.testdata["service_offering"], + hosttags="host1" + ) + + cls._cleanup = [ + cls.account, + cls.service_offering, + ] + except Exception as e: + cls.tearDownClass() + raise e + return + + @classmethod + def tearDownClass(cls): + try: + cleanup_resources(cls.apiclient, cls._cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + + def setUp(self): + self.cleanup = [] + if self.skiptest: + self.skipTest("This test is to be checked on xenserver \ + only Hence, skip for %s" % self.hypervisor) + + self.apiclient = self.testClient.getApiClient() + self.dbclient = self.testClient.getDbConnection() + + def tearDown(self): + try: + + cmd = updateHypervisorCapabilities.updateHypervisorCapabilitiesCmd() + cmd.id = self.hostCapId + cmd.maxguestslimit = self.originalLimit + self.apiclient.updateHypervisorCapabilities(cmd) + + cleanup_resources(self.apiclient, self.cleanup) + except Exception as e: + raise Exception("Warning: Exception during cleanup : %s" % e) + return + + @attr(tags=["advanced", "basic"], required_hardware="false") + def test_check_hypervisor_max_limit_effect(self): + """ Test hypervisor max limits effect + + # 1. Read exsiting count of VM's on the host including SSVM and VR + and modify maxguestcount accordingly + # 2. Deploy a VM + # 2. Try to deploy another vm + # 3. Verify that second VM + deployment fails (2 SSVMs 1 VR VM and 1 deployed VM) + """ + + hostList = Host.list( + self.apiclient, + zoneid=self.zone.id, + type="Routing") + event_validation_result = validateList(hostList) + self.assertEqual( + event_validation_result[0], + PASS, + "host list validation failed due to %s" % + event_validation_result[2]) + + self.host = Host(hostList[0]) + Host.update(self.apiclient, id=self.host.id, hosttags="host1") + + # Step 1 + # List VM's , SSVM's and VR on selected host + listVm = list_virtual_machines(self.apiclient, + hostid=self.host.id) + + listssvm = list_ssvms(self.apiclient, + hostid=self.host.id) + + listvr = list_routers(self.apiclient, + hostid=self.host.id) + + newValue = 1 + if listVm is not None: + newValue = len(listVm) + newValue + + if listssvm is not None: + newValue = len(listssvm) + newValue + + if listvr is not None: + newValue = len(listvr) + newValue + + qresultset = self.dbclient.execute( + "select hypervisor_version from host where uuid='%s'" % + self.host.id) + + event_validation_result = validateList(qresultset) + self.assertEqual( + event_validation_result[0], + PASS, + "event list validation failed due to %s" % + event_validation_result[2]) + + cmdList = listHypervisorCapabilities.listHypervisorCapabilitiesCmd() + cmdList.hypervisor = self.hypervisor + config = self.apiclient.listHypervisorCapabilities(cmdList) + + for host in config: + if host.hypervisorversion == qresultset[0][0]: + self.hostCapId = host.id + self.originalLimit = host.maxguestslimit + break + else: + self.skipTest("No hypervisor capabilities found for %s \ + with version %s" % (self.hypervisor, qresultset[0][0])) + + cmdUpdate = updateHypervisorCapabilities.\ + updateHypervisorCapabilitiesCmd() + cmdUpdate.id = self.hostCapId + cmdUpdate.maxguestslimit = newValue + self.apiclient.updateHypervisorCapabilities(cmdUpdate) + + # Step 2 + vm = VirtualMachine.create( + self.userapiclient, + self.testdata["small"], + templateid=self.template.id, + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering.id, + zoneid=self.zone.id, + ) + + self.cleanup.append(vm) + # Step 3 + with self.assertRaises(Exception): + VirtualMachine.create( + self.userapiclient, + self.testdata["small"], + templateid=self.template.id, + accountid=self.account.name, + domainid=self.account.domainid, + serviceofferingid=self.service_offering.id, + zoneid=self.zone.id, + ) From 8e3b99d0d6c7d76c1895fa7bbcf89671acef84a0 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 3 Aug 2015 11:54:35 +0200 Subject: [PATCH 089/314] CLOUDSTACK-8656: removed redundant implements --- engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java index 5a370f00fe0..2ca562aca20 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade30xBase.java @@ -27,7 +27,7 @@ import org.apache.log4j.Logger; import com.cloud.utils.exception.CloudRuntimeException; -public abstract class Upgrade30xBase extends LegacyDbUpgrade implements DbUpgrade { +public abstract class Upgrade30xBase extends LegacyDbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade30xBase.class); From 5f87e9c917faa3f7d1d8b8d3f73f569e83d7bc2d Mon Sep 17 00:00:00 2001 From: Boris Schrijver Date: Mon, 3 Aug 2015 17:10:05 +0200 Subject: [PATCH 090/314] CLOUDSTACK-8703: Fixed issue when listing directory on S3, it would only return objectSummaries when the anwser from the S3 System was truncated. --- utils/src/com/cloud/utils/S3Utils.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/utils/src/com/cloud/utils/S3Utils.java b/utils/src/com/cloud/utils/S3Utils.java index fc8a3cc17c9..e8653a609af 100644 --- a/utils/src/com/cloud/utils/S3Utils.java +++ b/utils/src/com/cloud/utils/S3Utils.java @@ -352,10 +352,15 @@ public final class S3Utils { ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(bucketName).withPrefix(directory + SEPARATOR); ObjectListing ol = client.listObjects(listObjectsRequest); - while (ol != null && ol.isTruncated()) { + if(ol.isTruncated()) { + do { + objects.addAll(ol.getObjectSummaries()); + listObjectsRequest.setMarker(ol.getNextMarker()); + ol = client.listObjects(listObjectsRequest); + } while (ol.isTruncated()); + } + else { objects.addAll(ol.getObjectSummaries()); - listObjectsRequest.setMarker(ol.getNextMarker()); - ol = client.listObjects(listObjectsRequest); } if (objects.isEmpty()) { From f221b9a4239dcd27556907e2dd4418d79ec71189 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 3 Aug 2015 19:35:41 +0200 Subject: [PATCH 091/314] CLOUDSTACK-8656: 30x legacy upgrade code exception messages --- .../cloud/upgrade/dao/Upgrade306to307.java | 3 ++- .../com/cloud/upgrade/dao/Upgrade30to301.java | 19 ++++--------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java index 28652189726..a911882fa69 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade306to307.java @@ -28,7 +28,7 @@ import org.apache.log4j.Logger; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade306to307 extends Upgrade30xBase implements DbUpgrade { +public class Upgrade306to307 extends Upgrade30xBase { final static Logger s_logger = Logger.getLogger(Upgrade306to307.class); @Override @@ -97,6 +97,7 @@ public class Upgrade306to307 extends Upgrade30xBase implements DbUpgrade { pstmt = conn.prepareStatement("drop table `cloud`.`network_details`"); pstmt.executeUpdate(); } catch (SQLException e) { + s_logger.info("[ignored] error during network offering update:" + e.getLocalizedMessage(), e); } finally { closeAutoCloseable(rs); closeAutoCloseable(rs1); diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30to301.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade30to301.java index 65712d0841b..fafec269c51 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade30to301.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade30to301.java @@ -28,7 +28,7 @@ import com.cloud.configuration.Resource.ResourceType; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; -public class Upgrade30to301 implements DbUpgrade { +public class Upgrade30to301 extends LegacyDbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade30to301.class); @Override @@ -100,20 +100,9 @@ public class Upgrade30to301 implements DbUpgrade { } catch (SQLException e) { throw new CloudRuntimeException("Unable to update network resource count for account id=" + accountId, e); } finally { - try { - if (rs != null) { - rs.close(); - } - - if (rs1 != null) { - rs1.close(); - } - - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } + closeAutoCloseable(rs); + closeAutoCloseable(rs1); + closeAutoCloseable(pstmt); } } From 87ae15015912efdc20ce3e6deea7ff4f4e54021f Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 3 Aug 2015 19:42:47 +0200 Subject: [PATCH 092/314] CLOUDSTACK-8656: replace empty catch block on close by try-with-resource --- .../config/dao/ConfigurationDaoImpl.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java b/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java index f3f04952666..f9c2433754b 100644 --- a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java +++ b/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java @@ -144,21 +144,13 @@ public class ConfigurationDaoImpl extends GenericDaoBase Date: Mon, 3 Aug 2015 20:11:18 +0200 Subject: [PATCH 093/314] CLOUDSTACK-8656: messages on SQL exception in DbUtils! --- .../config/dao/ConfigurationDaoImpl.java | 14 ++-- .../db/src/com/cloud/utils/db/DbUtil.java | 70 ++++++------------- 2 files changed, 28 insertions(+), 56 deletions(-) diff --git a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java b/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java index f9c2433754b..afc20e181a5 100644 --- a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java +++ b/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java @@ -158,12 +158,14 @@ public class ConfigurationDaoImpl extends GenericDaoBase 0) { - return true; - } else { - if (s_logger.isDebugEnabled()) - s_logger.debug("GET_LOCK() timed out on lock : " + name); + try (ResultSet rs = pstmt.executeQuery();) { + if (rs != null && rs.first()) { + if (rs.getInt(1) > 0) { + return true; + } else { + if (s_logger.isDebugEnabled()) + s_logger.debug("GET_LOCK() timed out on lock : " + name); + } } } } catch (SQLException e) { s_logger.error("GET_LOCK() throws exception ", e); } catch (Throwable e) { s_logger.error("GET_LOCK() throws exception ", e); - } finally { - closeStatement(pstmt); - closeResultSet(rs); } removeConnectionForGlobalLocks(name); - try { - conn.close(); - } catch (SQLException e) { - } + closeAutoCloseable(conn, "connection for global lock"); return false; } @@ -285,45 +273,27 @@ public class DbUtil { } public static void closeResultSet(final ResultSet resultSet) { - - try { - - if (resultSet != null) { - resultSet.close(); - } - - } catch (SQLException e) { - s_logger.warn("Ignored exception while closing result set.", e); - } - + closeAutoCloseable(resultSet, "exception while closing result set."); } public static void closeStatement(final Statement statement) { - - try { - - if (statement != null) { - statement.close(); - } - - } catch (SQLException e) { - s_logger.warn("Ignored exception while closing statement.", e); - } - + closeAutoCloseable(statement, "exception while closing statement."); } public static void closeConnection(final Connection connection) { + closeAutoCloseable(connection, "exception while close connection."); + } + public static void closeAutoCloseable(AutoCloseable ac, String message) { try { - if (connection != null) { - connection.close(); + if (ac != null) { + ac.close(); } - } catch (SQLException e) { - s_logger.warn("Ignored exception while close connection.", e); + } catch (Exception e) { + s_logger.warn("[ignored] " + message, e); } - } } From 75093dcd8fbac3defb2fa22df6e4269a0ec18ff1 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 3 Aug 2015 21:10:11 +0200 Subject: [PATCH 094/314] CLOUDSTACK-8656: checkstyle no longer used import removed --- .../cloudstack/framework/config/dao/ConfigurationDaoImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java b/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java index afc20e181a5..65bad9c44a7 100644 --- a/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java +++ b/framework/config/src/org/apache/cloudstack/framework/config/dao/ConfigurationDaoImpl.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.framework.config.dao; import java.sql.PreparedStatement; -import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -26,11 +25,10 @@ import javax.annotation.PostConstruct; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.framework.config.impl.ConfigurationVO; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import org.apache.cloudstack.framework.config.impl.ConfigurationVO; - import com.cloud.utils.component.ComponentLifecycle; import com.cloud.utils.crypt.DBEncryptionUtil; import com.cloud.utils.db.DB; From afcdbc42abfa060d7145593f2617ae8d5f6cc674 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 00:18:26 +0200 Subject: [PATCH 095/314] CLOUDSTACK-8656: log initialisation logging --- usage/src/com/cloud/usage/UsageServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/usage/src/com/cloud/usage/UsageServer.java b/usage/src/com/cloud/usage/UsageServer.java index d4f19eba376..246ad06eba6 100644 --- a/usage/src/com/cloud/usage/UsageServer.java +++ b/usage/src/com/cloud/usage/UsageServer.java @@ -89,6 +89,7 @@ public class UsageServer implements Daemon { try { Log4jConfigurer.initLogging(file.getAbsolutePath()); } catch (FileNotFoundException e) { + s_logger.info("[ignored] log initialisation ;)" + e.getLocalizedMessage(), e); } DOMConfigurator.configureAndWatch(file.getAbsolutePath()); @@ -99,6 +100,7 @@ public class UsageServer implements Daemon { try { Log4jConfigurer.initLogging(file.getAbsolutePath()); } catch (FileNotFoundException e) { + s_logger.info("[ignored] log properties initialization :)" + e.getLocalizedMessage(), e); } PropertyConfigurator.configureAndWatch(file.getAbsolutePath()); } From e8a00ed989f17ce235a201fadba37f00d2ded7c3 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 00:41:10 +0200 Subject: [PATCH 096/314] CLOUDSTACK-8656: try-with-resource in vmsd reader moved closeable util function up the hierarchy --- .../db/src/com/cloud/utils/db/DbUtil.java | 14 ++------ .../com/cloud/utils/AutoCloseableUtil.java | 36 +++++++++++++++++++ .../vmware/mo/SnapshotDescriptor.java | 17 +++------ 3 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 utils/src/com/cloud/utils/AutoCloseableUtil.java diff --git a/framework/db/src/com/cloud/utils/db/DbUtil.java b/framework/db/src/com/cloud/utils/db/DbUtil.java index d8689050c63..2b52188faf2 100644 --- a/framework/db/src/com/cloud/utils/db/DbUtil.java +++ b/framework/db/src/com/cloud/utils/db/DbUtil.java @@ -43,6 +43,8 @@ import javax.persistence.Transient; import org.apache.log4j.Logger; +import static com.cloud.utils.AutoCloseableUtil.closeAutoCloseable; + public class DbUtil { protected final static Logger s_logger = Logger.getLogger(DbUtil.class); @@ -284,16 +286,4 @@ public class DbUtil { closeAutoCloseable(connection, "exception while close connection."); } - public static void closeAutoCloseable(AutoCloseable ac, String message) { - try { - - if (ac != null) { - ac.close(); - } - - } catch (Exception e) { - s_logger.warn("[ignored] " + message, e); - } - } - } diff --git a/utils/src/com/cloud/utils/AutoCloseableUtil.java b/utils/src/com/cloud/utils/AutoCloseableUtil.java new file mode 100644 index 00000000000..f93265b5d64 --- /dev/null +++ b/utils/src/com/cloud/utils/AutoCloseableUtil.java @@ -0,0 +1,36 @@ +// 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. +package com.cloud.utils; + +import org.apache.log4j.Logger; + +public class AutoCloseableUtil { + private final static Logger s_logger = Logger.getLogger(AutoCloseableUtil.class); + + public static void closeAutoCloseable(AutoCloseable ac, String message) { + try { + + if (ac != null) { + ac.close(); + } + + } catch (Exception e) { + s_logger.warn("[ignored] " + message, e); + } + } + +} diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java index 0499be9363d..82a225e2638 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/SnapshotDescriptor.java @@ -31,7 +31,7 @@ import org.apache.log4j.Logger; public class SnapshotDescriptor { private static final Logger s_logger = Logger.getLogger(SnapshotDescriptor.class); - private Properties _properties = new Properties(); + private final Properties _properties = new Properties(); public SnapshotDescriptor() { } @@ -90,11 +90,9 @@ public class SnapshotDescriptor { } public byte[] getVmsdContent() { - BufferedWriter out = null; ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try { - out = new BufferedWriter(new OutputStreamWriter(bos, "UTF-8")); + try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(bos, "UTF-8"));) { out.write(".encoding = \"UTF-8\""); out.newLine(); @@ -165,13 +163,6 @@ public class SnapshotDescriptor { } catch (IOException e) { assert (false); s_logger.error("Unexpected exception ", e); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - } - } } return bos.toByteArray(); @@ -288,8 +279,8 @@ public class SnapshotDescriptor { } public static class DiskInfo { - private String _diskFileName; - private String _deviceName; + private final String _diskFileName; + private final String _deviceName; public DiskInfo(String diskFileName, String deviceName) { _diskFileName = diskFileName; From b6a78044a0881e17d045f35850222c275a84642e Mon Sep 17 00:00:00 2001 From: Rajani Karuturi Date: Tue, 4 Aug 2015 14:49:30 +0530 Subject: [PATCH 097/314] CLOUDSTACK-8696: Create Region fails with exception 'id' in the region table should not be an autoincrement unlike other tables. This is because, region ids must be in sync across installs and hence is accepted as input to the addRegions api. It is not a good practise to override id for this purpose. another column 'regionId' has to be created and used(CLOUDSTACK-8706). until it is fixed, id should never be autoincrement in regions table. --- setup/db/db/schema-452to460.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/setup/db/db/schema-452to460.sql b/setup/db/db/schema-452to460.sql index 0abd4f80408..9009ba418ed 100644 --- a/setup/db/db/schema-452to460.sql +++ b/setup/db/db/schema-452to460.sql @@ -398,3 +398,7 @@ CREATE TABLE `cloud`.`external_bigswitch_bcf_devices` ( CONSTRAINT `fk_external_bigswitch_bcf_devices__host_id` FOREIGN KEY (`host_id`) REFERENCES `host`(`id`) ON DELETE CASCADE, CONSTRAINT `fk_external_bigswitch_bcf_devices__physical_network_id` FOREIGN KEY (`physical_network_id`) REFERENCES `physical_network`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +SET foreign_key_checks = 0; +ALTER TABLE `cloud`.`region` MODIFY `id` int unsigned UNIQUE NOT NULL; +SET foreign_key_checks = 1; From 27960b4a7a7e745df71331555d078f888d71322d Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 13:28:58 +0200 Subject: [PATCH 098/314] CLOUDSTACK-8656: console logging on asserted exceptions --- .../consoleproxy/ConsoleProxyAjaxHandler.java | 7 ++-- .../rdp/RdpBufferedImageCanvas.java | 4 +++ .../consoleproxy/vnc/BufferedImageCanvas.java | 8 +++-- .../vnc/packet/server/RawRect.java | 33 ++++++++++--------- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java index fa0bd06c09e..f586c9361f1 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.consoleproxy; +import static com.cloud.utils.AutoCloseableUtil.closeAutoCloseable; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -201,10 +203,7 @@ public class ConsoleProxyAjaxHandler implements HttpHandler { s_logger.warn("Exception while reading request body: ", e); } finally { if (closeStreamAfterRead) { - try { - is.close(); - } catch (IOException e) { - } + closeAutoCloseable(is, "error closing stream after read"); } } return sb.toString(); diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java b/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java index 4214574a7e5..386a198dcb6 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java @@ -25,6 +25,7 @@ import java.util.List; import com.cloud.consoleproxy.ConsoleProxyRdpClient; import com.cloud.consoleproxy.util.ImageHelper; +import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.util.TileInfo; import com.cloud.consoleproxy.vnc.FrameBufferCanvas; @@ -35,6 +36,7 @@ public class RdpBufferedImageCanvas extends BufferedImageCanvas implements Frame * */ private static final long serialVersionUID = 1L; + private static final Logger s_logger = Logger.getLogger(RdpBufferedImageCanvas.class); private final ConsoleProxyRdpClient _rdpClient; @@ -66,6 +68,7 @@ public class RdpBufferedImageCanvas extends BufferedImageCanvas implements Frame try { imgBits = ImageHelper.jpegFromImage(bufferedImage); } catch (IOException e) { + s_logger.info("[ignored] read error on image", e); } return imgBits; @@ -91,6 +94,7 @@ public class RdpBufferedImageCanvas extends BufferedImageCanvas implements Frame try { imgBits = ImageHelper.jpegFromImage(bufferedImage); } catch (IOException e) { + s_logger.info("[ignored] read error on image tiles", e); } return imgBits; } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java b/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java index f2fb4bb6b69..e19a351bcd3 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.util.List; import com.cloud.consoleproxy.util.ImageHelper; +import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.util.TileInfo; /** @@ -35,6 +36,7 @@ import com.cloud.consoleproxy.util.TileInfo; */ public class BufferedImageCanvas extends Canvas implements FrameBufferCanvas { private static final long serialVersionUID = 1L; + private static final Logger s_logger = Logger.getLogger(BufferedImageCanvas.class); // Offline screen buffer private BufferedImage offlineImage; @@ -42,7 +44,7 @@ public class BufferedImageCanvas extends Canvas implements FrameBufferCanvas { // Cached Graphics2D object for offline screen buffer private Graphics2D graphics; - private PaintNotificationListener listener; + private final PaintNotificationListener listener; public BufferedImageCanvas(PaintNotificationListener listener, int width, int height) { super(); @@ -59,7 +61,7 @@ public class BufferedImageCanvas extends Canvas implements FrameBufferCanvas { } public void setCanvasSize(int width, int height) { - this.offlineImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + offlineImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); graphics = offlineImage.createGraphics(); setSize(offlineImage.getWidth(), offlineImage.getHeight()); @@ -121,6 +123,7 @@ public class BufferedImageCanvas extends Canvas implements FrameBufferCanvas { try { imgBits = ImageHelper.jpegFromImage(bufferedImage); } catch (IOException e) { + s_logger.info("[ignored] read error on image", e); } return imgBits; } @@ -144,6 +147,7 @@ public class BufferedImageCanvas extends Canvas implements FrameBufferCanvas { try { imgBits = ImageHelper.jpegFromImage(bufferedImage); } catch (IOException e) { + s_logger.info("[ignored] read error on image tiles", e); } return imgBits; } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/RawRect.java b/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/RawRect.java index 81424fe3c50..37f0f9e0577 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/RawRect.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/vnc/packet/server/RawRect.java @@ -23,9 +23,11 @@ import java.awt.image.DataBufferInt; import java.io.DataInputStream; import java.io.IOException; +import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.vnc.VncScreenDescription; public class RawRect extends AbstractRect { + private static final Logger s_logger = Logger.getLogger(RawRect.class); private final int[] buf; public RawRect(VncScreenDescription screen, int x, int y, int width, int height, DataInputStream is) throws IOException { @@ -50,26 +52,27 @@ public class RawRect extends AbstractRect { switch (dataBuf.getDataType()) { - case DataBuffer.TYPE_INT: { - // We chose RGB888 model, so Raster will use DataBufferInt type - DataBufferInt dataBuffer = (DataBufferInt)dataBuf; + case DataBuffer.TYPE_INT: { + // We chose RGB888 model, so Raster will use DataBufferInt type + DataBufferInt dataBuffer = (DataBufferInt)dataBuf; - int imageWidth = image.getWidth(); - int imageHeight = image.getHeight(); + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); - // Paint rectangle directly on buffer, line by line - int[] imageBuffer = dataBuffer.getData(); - for (int srcLine = 0, dstLine = y; srcLine < height && dstLine < imageHeight; srcLine++, dstLine++) { - try { - System.arraycopy(buf, srcLine * width, imageBuffer, x + dstLine * imageWidth, width); - } catch (IndexOutOfBoundsException e) { - } + // Paint rectangle directly on buffer, line by line + int[] imageBuffer = dataBuffer.getData(); + for (int srcLine = 0, dstLine = y; srcLine < height && dstLine < imageHeight; srcLine++, dstLine++) { + try { + System.arraycopy(buf, srcLine * width, imageBuffer, x + dstLine * imageWidth, width); + } catch (IndexOutOfBoundsException e) { + s_logger.info("[ignored] buffer overflow!?!", e); } - break; } + break; + } - default: - throw new RuntimeException("Unsupported data buffer in buffered image: expected data buffer of type int (DataBufferInt). Actual data buffer type: " + + default: + throw new RuntimeException("Unsupported data buffer in buffered image: expected data buffer of type int (DataBufferInt). Actual data buffer type: " + dataBuf.getClass().getSimpleName()); } } From b060c66096bff432d275dcff865673c4c2d8e5cb Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 13:35:30 +0200 Subject: [PATCH 099/314] CLOUDSTACK-8656: dummy main removed --- .../com/cloud/cluster/ClusterServiceServletImpl.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletImpl.java b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletImpl.java index 9b3472447e9..ec8b90866d0 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletImpl.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletImpl.java @@ -134,15 +134,4 @@ public class ClusterServiceServletImpl implements ClusterService { return s_client; } - // for test purpose only - public static void main(final String[] args) { - /* - ClusterServiceServletImpl service = new ClusterServiceServletImpl("http://localhost:9090/clusterservice", 300); - try { - String result = service.execute("test", 1, "{ p1:v1, p2:v2 }", true); - System.out.println(result); - } catch (RemoteException e) { - } - */ - } } From ab4d9fc06aa8bc9431135ca34c4999af6224f792 Mon Sep 17 00:00:00 2001 From: Pierre-Luc Dion Date: Tue, 4 Aug 2015 07:37:33 -0400 Subject: [PATCH 100/314] update license exlude for some docker related files. --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index bd0c4c3a43f..f5f4e61a1c3 100644 --- a/pom.xml +++ b/pom.xml @@ -715,8 +715,8 @@ README.md INSTALL.md CONTRIBUTING.md - Dockerfile - supervisord.conf + tools/docker/Dockerfile + tools/docker/supervisord.conf .idea/ **/*.log **/*.patch @@ -841,7 +841,7 @@ tools/ngui/static/js/lib/* **/.checkstyle scripts/installer/windows/acs_license.rtf - **/*.md + **/*.md From ea886910d8de2fe0180c502750865e419adedae9 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 14:06:06 +0200 Subject: [PATCH 101/314] CLOUDSTACK-8656: messages about classloader issues in ipc framwork --- .../cloudstack/framework/serializer/OnwireClassRegistry.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java b/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java index 872e49c2af5..de7558734c3 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/serializer/OnwireClassRegistry.java @@ -125,6 +125,7 @@ public class OnwireClassRegistry { } catch (IOException e) { s_logger.debug("Encountered IOException", e); } catch (ClassNotFoundException e) { + s_logger.info("[ignored] class not found", e); } return classes; } @@ -139,6 +140,7 @@ public class OnwireClassRegistry { Class clazz = Class.forName(name); classes.add(clazz); } catch (ClassNotFoundException e) { + s_logger.info("[ignored] class not found in directory " + directory, e); } catch (Exception e) { s_logger.debug("Encountered unexpect exception! ", e); } From 55df06779b216ab82a09ae531e91628418c205fa Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 14:12:01 +0200 Subject: [PATCH 102/314] CLOUDSTACK-8656: try-with resource on socket channel --- .../resource/HypervDirectConnectResource.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java index 0e57df4ca65..17c5708a322 100644 --- a/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java +++ b/plugins/hypervisors/hyperv/src/com/cloud/hypervisor/hyperv/resource/HypervDirectConnectResource.java @@ -2363,10 +2363,8 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S // VM patching/rebooting time that may need int retry = _retry; while (System.currentTimeMillis() - startTick <= _opsTimeout || --retry > 0) { - SocketChannel sch = null; - try { - s_logger.info("Trying to connect to " + ipAddress); - sch = SocketChannel.open(); + s_logger.info("Trying to connect to " + ipAddress); + try (SocketChannel sch = SocketChannel.open();) { sch.configureBlocking(true); sch.socket().setSoTimeout(5000); // we need to connect to the control ip address to check the status of the system vm @@ -2385,13 +2383,6 @@ public class HypervDirectConnectResource extends ServerResourceBase implements S s_logger.debug("[ignored] interupted while waiting to retry connecting to vm after exception: "+e.getLocalizedMessage()); } } - } finally { - if (sch != null) { - try { - sch.close(); - } catch (IOException e) { - } - } } try { From ed6e26152181d6416f36993a75f8f1465a6e3c87 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 14:24:04 +0200 Subject: [PATCH 103/314] CLOUDSTACK-8656: t-w-r on socket channel like previous in hyperv now in vmware --- .../vmware/resource/VmwareResource.java | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index c649748e4d0..97591d2e703 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -18,6 +18,7 @@ package com.cloud.hypervisor.vmware.resource; import java.io.File; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.net.ConnectException; import java.net.InetSocketAddress; import java.net.URI; @@ -33,12 +34,10 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Random; import java.util.Set; import java.util.TimeZone; import java.util.UUID; -import java.io.UnsupportedEncodingException; import javax.naming.ConfigurationException; @@ -216,8 +215,8 @@ import com.cloud.dc.Vlan; import com.cloud.exception.CloudException; import com.cloud.exception.InternalErrorException; import com.cloud.host.Host.Type; -import com.cloud.hypervisor.guru.VMwareGuru; import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.hypervisor.guru.VMwareGuru; import com.cloud.hypervisor.vmware.manager.VmwareHostService; import com.cloud.hypervisor.vmware.manager.VmwareManager; import com.cloud.hypervisor.vmware.manager.VmwareStorageMount; @@ -566,7 +565,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // we need to spawn a worker VM to attach the volume to and // resize the volume. useWorkerVm = true; - vmName = this.getWorkerName(getServiceContext(), cmd, 0); + vmName = getWorkerName(getServiceContext(), cmd, 0); morDS = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, poolId); dsMo = new DatastoreMO(hyperHost.getContext(), morDS); @@ -4800,10 +4799,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // VM patching/rebooting time that may need int retry = _retry; while (System.currentTimeMillis() - startTick <= _opsTimeout || --retry > 0) { - SocketChannel sch = null; - try { - s_logger.info("Trying to connect to " + ipAddress); - sch = SocketChannel.open(); + s_logger.info("Trying to connect to " + ipAddress); + try (SocketChannel sch = SocketChannel.open();) { sch.configureBlocking(true); sch.socket().setSoTimeout(5000); @@ -4822,13 +4819,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.debug("[ignored] interupted while waiting to retry connect after failure.", e); } } - } finally { - if (sch != null) { - try { - sch.close(); - } catch (IOException e) { - } - } } try { From 21fd2b9b8ed42378b6f77573c6311657b871845a Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 14:37:07 +0200 Subject: [PATCH 104/314] CLOUDSTACK-8656: config file closing should not throw an exception but log it if it does anyway --- .../contrail/management/ManagementNetworkGuru.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java index 71d2901a1e3..fd29ca9a7b5 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/ManagementNetworkGuru.java @@ -17,6 +17,8 @@ package org.apache.cloudstack.network.contrail.management; +import static com.cloud.utils.AutoCloseableUtil.closeAutoCloseable; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -38,7 +40,6 @@ import com.cloud.network.dao.NetworkVO; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.utils.PropertiesUtil; - /** * ManagementNetworkGuru * @@ -81,10 +82,7 @@ public class ManagementNetworkGuru extends ContrailGuru { s_logger.error(e.getMessage()); throw new ConfigurationException(e.getMessage()); } finally { - try { - inputFile.close(); - } catch (IOException e) { - } + closeAutoCloseable(inputFile, "error closing config file"); } _mgmtCidr = configProps.getProperty("management.cidr"); _mgmtGateway = configProps.getProperty("management.gateway"); From 87fb09997df3d2451c1cf68a2a10874f643c0dea Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 14:38:48 +0200 Subject: [PATCH 105/314] CLOUDSTACK-8656: return false from equals if not the same class why ignore the exception and then return false anyway? --- .../cloudstack/network/contrail/model/ModelObject.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObject.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObject.java index c751d75b63c..acfff7de291 100644 --- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObject.java +++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/model/ModelObject.java @@ -22,6 +22,8 @@ import java.io.Serializable; import java.lang.ref.WeakReference; import java.util.TreeSet; +import org.apache.log4j.Logger; + import com.cloud.exception.InternalErrorException; /** @@ -43,6 +45,7 @@ public interface ModelObject { public static class ModelReference implements Comparable, Serializable { private static final long serialVersionUID = -2019113974956703526L; + private static final Logger s_logger = Logger.getLogger(ModelReference.class); /* * WeakReference class is not serializable by definition. So, we cannot enforce its serialization unless we write the implementation of @@ -86,8 +89,9 @@ public interface ModelObject { ModelReference rhs = (ModelReference)other; return compareTo(rhs) == 0; } catch (ClassCastException ex) { + // not this class , so + return false; } - return false; } public ModelObject get() { From a0ba7d310e5ed7070efe8f5ad425be575eb1106a Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 14:41:33 +0200 Subject: [PATCH 106/314] CLOUDSTACK-8656: log in case we are on a platform not supporting UTF8 --- .../lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java index 38e9d9c9d0c..e882d9bd89f 100644 --- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java +++ b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java @@ -29,6 +29,8 @@ import java.util.UUID; import javax.inject.Inject; +import org.apache.log4j.Logger; + import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; @@ -40,7 +42,6 @@ import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper; -import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; @@ -188,6 +189,7 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore try { hostPath = URLDecoder.decode(uri.getPath(), "UTF-8"); } catch (UnsupportedEncodingException e) { + s_logger.error("[ignored] we are on a platform not supporting \"UTF-8\"!?!", e); } if (hostPath == null) { // if decoding fails, use getPath() anyway hostPath = uri.getPath(); From 6fa8b7578e27e73bb2d90be1970347c2e79c3b09 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Tue, 4 Aug 2015 15:50:35 +0200 Subject: [PATCH 107/314] CLOUDSTACK-8656: reporting ignored exceptions in server --- .../network/ExternalIpAddressAllocator.java | 16 ++++------------ .../lb/LoadBalancingRulesManagerImpl.java | 1 + .../cloud/server/ConfigurationServerImpl.java | 6 ++++-- .../com/cloud/servlet/ConsoleProxyServlet.java | 2 ++ 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/server/src/com/cloud/network/ExternalIpAddressAllocator.java b/server/src/com/cloud/network/ExternalIpAddressAllocator.java index 3cf358067ee..58b30f4d57b 100644 --- a/server/src/com/cloud/network/ExternalIpAddressAllocator.java +++ b/server/src/com/cloud/network/ExternalIpAddressAllocator.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.network; +import static com.cloud.utils.AutoCloseableUtil.closeAutoCloseable; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -81,12 +83,7 @@ public class ExternalIpAddressAllocator extends AdapterBase implements IpAddrAll } catch (IOException e) { return new IpAddr(); } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - } - } + closeAutoCloseable(in, "closing buffered reader"); } } @@ -121,12 +118,7 @@ public class ExternalIpAddressAllocator extends AdapterBase implements IpAddrAll } catch (IOException e) { return false; } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - } - } + closeAutoCloseable(in, "buffered reader close"); } } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index d7a85b6ff4f..81b9bb1a622 100644 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -693,6 +693,7 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements if (backupState.equals(FirewallRule.State.Active)) applyLoadBalancerConfig(cmd.getLbRuleId()); } catch (ResourceUnavailableException e1) { + s_logger.info("[ignored] applying load balancer config.", e1); } finally { loadBalancer.setState(backupState); _lbDao.persist(loadBalancer); diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index e7a928acfdb..5ff548c7f3e 100644 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -43,7 +43,6 @@ import javax.crypto.SecretKey; import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.utils.nio.Link; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; @@ -118,6 +117,7 @@ import com.cloud.utils.db.TransactionLegacy; import com.cloud.utils.db.TransactionStatus; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; +import com.cloud.utils.nio.Link; import com.cloud.utils.script.Script; public class ConfigurationServerImpl extends ManagerBase implements ConfigurationServer { @@ -757,6 +757,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio try (DataInputStream dis = new DataInputStream(new FileInputStream(privkeyfile))) { dis.readFully(arr1); } catch (EOFException e) { + s_logger.info("[ignored] eof reached"); } catch (Exception e) { s_logger.error("Cannot read the private key file", e); throw new CloudRuntimeException("Cannot read the private key file"); @@ -766,6 +767,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio try (DataInputStream dis = new DataInputStream(new FileInputStream(pubkeyfile))) { dis.readFully(arr2); } catch (EOFException e) { + s_logger.info("[ignored] eof reached"); } catch (Exception e) { s_logger.warn("Cannot read the public key file", e); throw new CloudRuntimeException("Cannot read the public key file"); @@ -902,7 +904,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio } else { command = new Script("/bin/bash", s_logger); } - if (this.isOnWindows()) { + if (isOnWindows()) { scriptPath = scriptPath.replaceAll("\\\\" ,"/" ); systemVmIsoPath = systemVmIsoPath.replaceAll("\\\\" ,"/" ); publicKeyPath = publicKeyPath.replaceAll("\\\\" ,"/" ); diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java index 3389d92752f..cc788c7b118 100644 --- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java +++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java @@ -228,12 +228,14 @@ public class ConsoleProxyServlet extends HttpServlet { try { w = Integer.parseInt(value); } catch (NumberFormatException e) { + s_logger.info("[ignored] not a number: " + value); } value = req.getParameter("h"); try { h = Integer.parseInt(value); } catch (NumberFormatException e) { + s_logger.info("[ignored] not a number: " + value); } try { From c13201353c312143fb85d11a141f08a587d32f5d Mon Sep 17 00:00:00 2001 From: Jayapal Date: Tue, 4 Aug 2015 12:04:58 +0530 Subject: [PATCH 108/314] CLOUDSTACK-8707: Added missed esp policy esp is added with esp_lifetime instead of esp_policy, corrected it. --- systemvm/patches/debian/config/opt/cloud/bin/configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systemvm/patches/debian/config/opt/cloud/bin/configure.py b/systemvm/patches/debian/config/opt/cloud/bin/configure.py index 2e8be9af453..5ed2789eb04 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/configure.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/configure.py @@ -459,7 +459,7 @@ class CsSite2SiteVpn(CsDataBag): file.addeq(" keyexchange=ike") file.addeq(" ike=%s" % obj['ike_policy']) file.addeq(" ikelifetime=%s" % self.convert_sec_to_h(obj['ike_lifetime'])) - file.addeq(" esp=%s" % self.convert_sec_to_h(obj['esp_lifetime'])) + file.addeq(" esp=%s" % self.convert_sec_to_h(obj['esp_policy'])) file.addeq(" salifetime=%s" % self.convert_sec_to_h(obj['esp_lifetime'])) file.addeq(" pfs=%s" % CsHelper.bool_to_yn(obj['dpd'])) file.addeq(" keyingtries=2") From 97eb0f752886435295dd2be19667e7ec59a2cf7f Mon Sep 17 00:00:00 2001 From: Jayapal Date: Tue, 4 Aug 2015 14:34:00 +0530 Subject: [PATCH 109/314] CLOUDSTACK-8707: Removed convert sec to h on esp_lifetime This closes #655 --- systemvm/patches/debian/config/opt/cloud/bin/configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systemvm/patches/debian/config/opt/cloud/bin/configure.py b/systemvm/patches/debian/config/opt/cloud/bin/configure.py index 5ed2789eb04..2f3235ef69c 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/configure.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/configure.py @@ -459,7 +459,7 @@ class CsSite2SiteVpn(CsDataBag): file.addeq(" keyexchange=ike") file.addeq(" ike=%s" % obj['ike_policy']) file.addeq(" ikelifetime=%s" % self.convert_sec_to_h(obj['ike_lifetime'])) - file.addeq(" esp=%s" % self.convert_sec_to_h(obj['esp_policy'])) + file.addeq(" esp=%s" % obj['esp_policy']) file.addeq(" salifetime=%s" % self.convert_sec_to_h(obj['esp_lifetime'])) file.addeq(" pfs=%s" % CsHelper.bool_to_yn(obj['dpd'])) file.addeq(" keyingtries=2") From a3e87cfa951a4905d8d5259840d6c751684df1d6 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Thu, 20 Nov 2014 15:55:37 -0800 Subject: [PATCH 110/314] Bug-ID:CS-27160: Restore VM (Re-install VM) with enable.storage.migration set to false fails, later fails to start up VM too Reviewed-By: Anthony Changes: - Try to reuse the storage pools for READY disks if the pool fits the deployment plan - Try to use the last_host if it has free capacity but no reserved capacity Signed-off-by: Maneesha.P --- .../deploy/DeploymentPlanningManagerImpl.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java index 57abb9204c4..75bc4b523b0 100644 --- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java +++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java @@ -400,10 +400,21 @@ StateListener { "memoryOvercommitRatio"); Float cpuOvercommitRatio = Float.parseFloat(cluster_detail_cpu.getValue()); Float memoryOvercommitRatio = Float.parseFloat(cluster_detail_ram.getValue()); - if (_capacityMgr.checkIfHostHasCapacity(host.getId(), cpu_requested, ram_requested, true, - cpuOvercommitRatio, memoryOvercommitRatio, true) - && _capacityMgr.checkIfHostHasCpuCapability(host.getId(), offering.getCpu(), - offering.getSpeed())) { + + boolean hostHasCpuCapability, hostHasCapacity = false; + hostHasCpuCapability = _capacityMgr.checkIfHostHasCpuCapability(host.getId(), offering.getCpu(), offering.getSpeed()); + + if (hostHasCpuCapability) { + // first check from reserved capacity + hostHasCapacity = _capacityMgr.checkIfHostHasCapacity(host.getId(), cpu_requested, ram_requested, true, cpuOvercommitRatio, memoryOvercommitRatio, true); + + // if not reserved, check the free capacity + if (!hostHasCapacity) + hostHasCapacity = _capacityMgr.checkIfHostHasCapacity(host.getId(), cpu_requested, ram_requested, false, cpuOvercommitRatio, memoryOvercommitRatio, true); + } + + if (hostHasCapacity + && hostHasCpuCapability) { s_logger.debug("The last host of this VM is UP and has enough capacity"); s_logger.debug("Now checking for suitable pools under zone: " + host.getDataCenterId() + ", pod: " + host.getPodId() + ", cluster: " + host.getClusterId()); From b1905c2040a400385ad90cbeb8b68a9cedf2fa4d Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Wed, 5 Aug 2015 13:56:38 -0600 Subject: [PATCH 111/314] CLOUDSTACK-8698: Retrieve a new device ID, if needed --- server/src/com/cloud/storage/VolumeApiServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java index 577c8f678a6..d4e8c99fdca 100644 --- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java @@ -2469,6 +2469,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic _volsDao.update(volumeToAttach.getId(), volumeToAttach); } } else { + deviceId = getDeviceId(vm.getId(), deviceId); + _volsDao.attachVolume(volumeToAttach.getId(), vm.getId(), deviceId); } From 2cbc1688220b6af086ea4a367f2132d892a97cb9 Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Wed, 5 Aug 2015 15:47:57 -0600 Subject: [PATCH 112/314] The lowest the hypervisor snapshot reserve value can be is 10 (down from 50). --- .../datastore/driver/SolidFirePrimaryDataStoreDriver.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java index 62a03a49078..46ecd6945f6 100644 --- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java +++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java @@ -77,6 +77,7 @@ import com.cloud.utils.exception.CloudRuntimeException; public class SolidFirePrimaryDataStoreDriver implements PrimaryDataStoreDriver { private static final Logger s_logger = Logger.getLogger(SolidFirePrimaryDataStoreDriver.class); private static final int s_lockTimeInSeconds = 300; + private static final int s_lowestHypervisorSnapshotReserve = 10; @Inject private AccountDao _accountDao; @Inject private AccountDetailsDao _accountDetailsDao; @@ -352,9 +353,7 @@ public class SolidFirePrimaryDataStoreDriver implements PrimaryDataStoreDriver { Integer hypervisorSnapshotReserve = volume.getHypervisorSnapshotReserve(); if (hypervisorSnapshotReserve != null) { - if (hypervisorSnapshotReserve < 50) { - hypervisorSnapshotReserve = 50; - } + hypervisorSnapshotReserve = Math.max(hypervisorSnapshotReserve, s_lowestHypervisorSnapshotReserve); volumeSize += volumeSize * (hypervisorSnapshotReserve / 100f); } From 2c8d179b7abf6da1c99390788c3329f243e172db Mon Sep 17 00:00:00 2001 From: Mike Tutkowski Date: Wed, 5 Aug 2015 22:43:43 -0600 Subject: [PATCH 113/314] Renamed two variables to make them more descriptive --- .../lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java index d14a6298061..7cb690014bb 100644 --- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java +++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/lifecycle/SolidFireSharedPrimaryDataStoreLifeCycle.java @@ -331,9 +331,9 @@ public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStor SolidFireUtil.SolidFireAccount sfAccount = SolidFireUtil.getSolidFireAccount(sfConnection, sfAccountName); if (sfAccount == null) { - long accountNumber = SolidFireUtil.createSolidFireAccount(sfConnection, sfAccountName); + long sfAccountNumber = SolidFireUtil.createSolidFireAccount(sfConnection, sfAccountName); - sfAccount = SolidFireUtil.getSolidFireAccountById(sfConnection, accountNumber); + sfAccount = SolidFireUtil.getSolidFireAccountById(sfConnection, sfAccountNumber); } long sfVolumeId = SolidFireUtil.createSolidFireVolume(sfConnection, SolidFireUtil.getSolidFireVolumeName(volumeName), sfAccount.getId(), volumeSize, From 18fee9510930481db2f48e4814919820d6f9e837 Mon Sep 17 00:00:00 2001 From: sanjeev Date: Wed, 8 Jul 2015 11:49:17 +0530 Subject: [PATCH 114/314] Removed medium dictionary from test_data and modified the tests dependent on it Removed duplicate test data related to vm properties.Modified tests dependent on it Removed duplicte service offerings from test data and modified tests dependent on it Bug-Id: CLOUDSTACK-8617 This closes #644 --- test/integration/component/maint/test_bugs.py | 2 +- .../maint/test_multiple_ip_ranges.py | 4 +- .../test_zone_level_local_storage_setting.py | 20 +++---- .../maint/testpath_disablestoragepool.py | 20 +++---- .../component/test_interop_xd_ccp.py | 21 ++++--- .../integration/smoke/test_affinity_groups.py | 2 +- .../smoke/test_deploy_vgpu_enabled_vm.py | 8 +-- .../smoke/test_deploy_vm_with_userdata.py | 4 +- ...ploy_vms_with_varied_deploymentplanners.py | 6 +- test/integration/smoke/test_internal_lb.py | 2 +- test/integration/smoke/test_loadbalance.py | 2 +- test/integration/smoke/test_network.py | 10 ++-- test/integration/smoke/test_network_acl.py | 2 +- test/integration/smoke/test_routers.py | 2 +- .../smoke/test_service_offerings.py | 20 +++---- test/integration/smoke/test_snapshots.py | 6 +- test/integration/smoke/test_templates.py | 4 +- test/integration/smoke/test_vm_life_cycle.py | 6 +- test/integration/smoke/test_vm_snapshots.py | 6 +- test/integration/smoke/test_volumes.py | 4 +- test/integration/smoke/test_vpc_vpn.py | 4 +- tools/marvin/marvin/config/test_data.py | 58 ------------------- 22 files changed, 73 insertions(+), 140 deletions(-) diff --git a/test/integration/component/maint/test_bugs.py b/test/integration/component/maint/test_bugs.py index 6652b04e3be..ab3f7e797a5 100644 --- a/test/integration/component/maint/test_bugs.py +++ b/test/integration/component/maint/test_bugs.py @@ -68,7 +68,7 @@ class Test42xBugsMgmtSvr(cloudstackTestCase): # Creating Disk offering, Service Offering and Account cls.service_offering = ServiceOffering.create( cls.apiClient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.account = Account.create( cls.api_client, diff --git a/test/integration/component/maint/test_multiple_ip_ranges.py b/test/integration/component/maint/test_multiple_ip_ranges.py index cd845d29de7..8e63ec4616e 100644 --- a/test/integration/component/maint/test_multiple_ip_ranges.py +++ b/test/integration/component/maint/test_multiple_ip_ranges.py @@ -111,7 +111,7 @@ class TestMultipleIpRanges(cloudstackTestCase): if cls.vr_state is False: cls.vm_res = VirtualMachine.create( cls.api_client, - cls.testdata["server_without_disk"], + cls.testdata["small"], templateid=cls.template.id, accountid=cls.account.name, domainid=cls.testdata["domainid"], @@ -181,7 +181,7 @@ class TestMultipleIpRanges(cloudstackTestCase): try: self.virtual_machine = VirtualMachine.create( self.apiclient, - self.testdata["server_without_disk"], + self.testdata["small"], templateid=self.template.id, accountid=self.account.name, domainid=self.testdata["domainid"], diff --git a/test/integration/component/maint/test_zone_level_local_storage_setting.py b/test/integration/component/maint/test_zone_level_local_storage_setting.py index 466f1f9fd42..6d3ecd875c5 100644 --- a/test/integration/component/maint/test_zone_level_local_storage_setting.py +++ b/test/integration/component/maint/test_zone_level_local_storage_setting.py @@ -107,13 +107,13 @@ def storage_check(self, type, value): def create_system_so(self, offering_type, storage_type): """Create system offerings """ - self.testdata["service_offerings"]["issystem"] = "true" - self.testdata["service_offerings"]["systemvmtype"] = offering_type - self.testdata["service_offerings"]["storagetype"] = storage_type + self.testdata["service_offerings"]["tiny"]["issystem"] = "true" + self.testdata["service_offerings"]["tiny"]["systemvmtype"] = offering_type + self.testdata["service_offerings"]["tiny"]["storagetype"] = storage_type service_offering = ServiceOffering.create( self.apiclient, - self.testdata["service_offerings"] + self.testdata["service_offerings"]["tiny"] ) if service_offering is None: @@ -136,32 +136,32 @@ def create_system_so(self, offering_type, storage_type): self.assertEqual( list_service_response[0].cpunumber, - self.testdata["service_offerings"]["cpunumber"], + self.testdata["service_offerings"]["tiny"]["cpunumber"], "Check server id in createServiceOffering" ) self.assertEqual( list_service_response[0].cpuspeed, - self.testdata["service_offerings"]["cpuspeed"], + self.testdata["service_offerings"]["tiny"]["cpuspeed"], "Check cpuspeed in createServiceOffering" ) self.assertEqual( list_service_response[0].displaytext, - self.testdata["service_offerings"]["displaytext"], + self.testdata["service_offerings"]["tiny"]["displaytext"], "Check server displaytext in createServiceOfferings" ) self.assertEqual( list_service_response[0].memory, - self.testdata["service_offerings"]["memory"], + self.testdata["service_offerings"]["tiny"]["memory"], "Check memory in createServiceOffering" ) self.assertEqual( list_service_response[0].name, - self.testdata["service_offerings"]["name"], + self.testdata["service_offerings"]["tiny"]["name"], "Check name in createServiceOffering" ) self.assertEqual( list_service_response[0].storagetype, - self.testdata["service_offerings"]["storagetype"], + self.testdata["service_offerings"]["tiny"]["storagetype"], "Check storagetype in createServiceOffering" ) self._cleanup.append(service_offering) diff --git a/test/integration/component/maint/testpath_disablestoragepool.py b/test/integration/component/maint/testpath_disablestoragepool.py index 85f56148129..d276a51151d 100644 --- a/test/integration/component/maint/testpath_disablestoragepool.py +++ b/test/integration/component/maint/testpath_disablestoragepool.py @@ -116,9 +116,9 @@ class TestPathDisableStorage_Basic(cloudstackTestCase): # Create offerings for local storage if local storage is enabled if cls.zone.localstorageenabled: - cls.testdata["service_offerings"]["storagetype"] = 'local' + cls.testdata["service_offerings"]["tiny"]["storagetype"] = 'local' cls.service_offering_local = ServiceOffering.create(cls.apiclient, - cls.testdata["service_offerings"] + cls.testdata["service_offerings"]["tiny"] ) cls._cleanup.append(cls.service_offering_local) cls.testdata["disk_offering"]["storagetype"] = 'local' @@ -127,7 +127,7 @@ class TestPathDisableStorage_Basic(cloudstackTestCase): ) cls._cleanup.append(cls.disk_offering_local) cls.testdata["disk_offering"]["storagetype"] = ' ' - cls.testdata["service_offerings"]["storagetype"] = ' ' + cls.testdata["service_offerings"]["tiny"]["storagetype"] = ' ' else: cls.debug("No local storage found") @@ -730,10 +730,10 @@ class TestPathDisableStorage_Maint_Tags(cloudstackTestCase): # Create offerings for local storage if local storage is enabled if cls.zone.localstorageenabled: - cls.testdata["service_offerings"]["storagetype"] = 'local' + cls.testdata["service_offerings"]["tiny"]["storagetype"] = 'local' cls.debug("Creating local storage offering") cls.service_offering_local = ServiceOffering.create(cls.apiclient, - cls.testdata["service_offerings"] + cls.testdata["service_offerings"]["tiny"] ) cls._cleanup.append(cls.service_offering_local) cls.testdata["disk_offering"]["storagetype"] = 'local' @@ -743,7 +743,7 @@ class TestPathDisableStorage_Maint_Tags(cloudstackTestCase): ) cls._cleanup.append(cls.disk_offering_local) cls.testdata["disk_offering"]["storagetype"] = ' ' - cls.testdata["service_offerings"]["storagetype"] = ' ' + cls.testdata["service_offerings"]["tiny"]["storagetype"] = ' ' else: cls.debug("No local storage found") @@ -939,11 +939,11 @@ class TestPathDisableStorage_Maint_Tags(cloudstackTestCase): StoragePool.update(self.userapiclient, id=storage_id, tags='disable_prov') # Step 7: Add tagged service offering - self.testdata['service_offerings']['tags'] = 'disable_prov' - self.testdata["service_offerings"]["storagetype"] = 'local' + self.testdata['service_offerings']['tiny']['tags'] = 'disable_prov' + self.testdata["service_offerings"]["tiny"]["storagetype"] = 'local' self.tagged_so = ServiceOffering.create(self.userapiclient, self.testdata['service_offerings']) - self.testdata['service_offerings']['tags'] = ' ' - self.testdata["service_offerings"]["storagetype"] = ' ' + self.testdata['service_offerings']['tiny']['tags'] = ' ' + self.testdata["service_offerings"]["tiny"]["storagetype"] = ' ' self.cleanup.append(self.tagged_so) # Step 8: Enable the pool diff --git a/test/integration/component/test_interop_xd_ccp.py b/test/integration/component/test_interop_xd_ccp.py index 0ef5d6ed83c..5d38df2001f 100644 --- a/test/integration/component/test_interop_xd_ccp.py +++ b/test/integration/component/test_interop_xd_ccp.py @@ -49,7 +49,8 @@ from marvin.lib.common import (get_domain, get_template, get_pod, list_hosts, - get_windows_template + get_windows_template, + list_virtual_machines ) from marvin.codes import FAILED, PASS @@ -58,6 +59,7 @@ from nose.plugins.attrib import attr import time import random import string +import unittest _multiprocess_shared_ = True class TestXDCCPInterop(cloudstackTestCase): @@ -168,9 +170,6 @@ class TestXDCCPInterop(cloudstackTestCase): cls.services["small"]["zoneid"] = cls.zone.id cls.services["small"]["template"] = cls.template.id - cls.services["medium"]["zoneid"] = cls.zone.id - cls.services["medium"]["template"] = cls.template.id - user_data = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(2500)) cls.services["virtual_machine"]["userdata"] = user_data @@ -180,7 +179,7 @@ class TestXDCCPInterop(cloudstackTestCase): cls.virtual_machine = VirtualMachine.create( cls.apiclient, - cls.services["medium"], + cls.services["small"], accountid=cls.account.name, domainid=cls.account.domainid, serviceofferingid=cls.service_offering.id, @@ -727,7 +726,7 @@ class TestXDCCPInterop(cloudstackTestCase): ) restorevm = VirtualMachine.create( self.user_api_client, - self.services["medium"], + self.services["small"], accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, @@ -862,7 +861,7 @@ class TestXDCCPInterop(cloudstackTestCase): restorevm = VirtualMachine.create( self.user_api_client, - self.services["medium"], + self.services["small"], networkids=vm1network.id, accountid=self.account.name, domainid=self.account.domainid, @@ -974,7 +973,7 @@ class TestXDCCPInterop(cloudstackTestCase): templatevm = VirtualMachine.create( self.user_api_client, - self.services["medium"], + self.services["small"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, @@ -1089,7 +1088,7 @@ class TestXDCCPInterop(cloudstackTestCase): templatevm = VirtualMachine.create( self.user_api_client, - self.services["medium"], + self.services["small"], templateid=roottemplate.id, networkids=vm3network.id, serviceofferingid=self.service_offering.id, @@ -1227,8 +1226,8 @@ class TestXDCCPInterop(cloudstackTestCase): vm_1 = VirtualMachine.create( self.user_api_client, - self.services["medium"], - templateid=template.id, + self.services["small"], + templateid=self.template.id, networkids=vm4network.id, serviceofferingid=self.service_offering.id, accountid=self.account.name, diff --git a/test/integration/smoke/test_affinity_groups.py b/test/integration/smoke/test_affinity_groups.py index c1c5d5b8e38..3f78a84481c 100644 --- a/test/integration/smoke/test_affinity_groups.py +++ b/test/integration/smoke/test_affinity_groups.py @@ -62,7 +62,7 @@ class TestDeployVmWithAffinityGroup(cloudstackTestCase): ) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.ag = AffinityGroup.create(cls.apiclient, cls.services["virtual_machine"]["affinity"], diff --git a/test/integration/smoke/test_deploy_vgpu_enabled_vm.py b/test/integration/smoke/test_deploy_vgpu_enabled_vm.py index e71bae1f3eb..c9eb7672e2d 100644 --- a/test/integration/smoke/test_deploy_vgpu_enabled_vm.py +++ b/test/integration/smoke/test_deploy_vgpu_enabled_vm.py @@ -125,11 +125,9 @@ class TestDeployvGPUenabledVM(cloudstackTestCase): domainid=self.domain.id ) - self.testdata["vgpu260q"]["zoneid"] = self.zone.id - self.testdata["vgpu260q"]["template"] = self.template.id + self.testdata["small"]["zoneid"] = self.zone.id + self.testdata["small"]["template"] = self.template.id - self.testdata["vgpu140q"]["zoneid"] = self.zone.id - self.testdata["vgpu140q"]["template"] = self.template.id self.testdata["service_offerings"]["vgpu260qwin"]["serviceofferingdetails"] = [ { 'pciDevice': 'Group of NVIDIA Corporation GK107GL [GRID K1] GPUs'}, { @@ -156,7 +154,7 @@ class TestDeployvGPUenabledVM(cloudstackTestCase): """ self.virtual_machine = VirtualMachine.create( self.apiclient, - self.testdata["vgpu260q"], + self.testdata["small"], accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, diff --git a/test/integration/smoke/test_deploy_vm_with_userdata.py b/test/integration/smoke/test_deploy_vm_with_userdata.py index c98b38aac0b..96c99861a9e 100644 --- a/test/integration/smoke/test_deploy_vm_with_userdata.py +++ b/test/integration/smoke/test_deploy_vm_with_userdata.py @@ -39,10 +39,10 @@ class TestDeployVmWithUserData(cloudstackTestCase): cls.zone = get_zone(cls.apiClient, testClient.getZoneForTests()) if cls.zone.localstorageenabled: #For devcloud since localstroage is enabled - cls.services["service_offerings"]["storagetype"] = "local" + cls.services["service_offerings"]["tiny"]["storagetype"] = "local" cls.service_offering = ServiceOffering.create( cls.apiClient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.account = Account.create(cls.apiClient, services=cls.services["account"]) cls.cleanup = [cls.account] diff --git a/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py b/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py index 041d23be056..1ef6af9064c 100644 --- a/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py +++ b/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py @@ -67,7 +67,7 @@ class TestDeployVmWithVariedPlanners(cloudstackTestCase): #FIXME: How do we know that first fit actually happened? self.service_offering_firstfit = ServiceOffering.create( self.apiclient, - self.services["service_offerings"], + self.services["service_offerings"]["tiny"], deploymentplanner='FirstFitPlanner' ) @@ -110,7 +110,7 @@ class TestDeployVmWithVariedPlanners(cloudstackTestCase): """ self.service_offering_userdispersing = ServiceOffering.create( self.apiclient, - self.services["service_offerings"], + self.services["service_offerings"]["tiny"], deploymentplanner='UserDispersingPlanner' ) @@ -169,7 +169,7 @@ class TestDeployVmWithVariedPlanners(cloudstackTestCase): """ self.service_offering_userconcentrated = ServiceOffering.create( self.apiclient, - self.services["service_offerings"], + self.services["service_offerings"]["tiny"], deploymentplanner='UserConcentratedPodPlanner' ) diff --git a/test/integration/smoke/test_internal_lb.py b/test/integration/smoke/test_internal_lb.py index d2e6364ad2f..174782f5a76 100644 --- a/test/integration/smoke/test_internal_lb.py +++ b/test/integration/smoke/test_internal_lb.py @@ -39,7 +39,7 @@ class TestInternalLb(cloudstackTestCase): cls.domain = get_domain(cls.apiclient) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.account = Account.create(cls.apiclient, services=cls.services["account"]) cls.template = get_template( diff --git a/test/integration/smoke/test_loadbalance.py b/test/integration/smoke/test_loadbalance.py index f6629743630..7da63ed7922 100644 --- a/test/integration/smoke/test_loadbalance.py +++ b/test/integration/smoke/test_loadbalance.py @@ -59,7 +59,7 @@ class TestLoadBalance(cloudstackTestCase): ) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.vm_1 = VirtualMachine.create( cls.apiclient, diff --git a/test/integration/smoke/test_network.py b/test/integration/smoke/test_network.py index f5a2a5f107e..80a093285c6 100644 --- a/test/integration/smoke/test_network.py +++ b/test/integration/smoke/test_network.py @@ -272,7 +272,7 @@ class TestPortForwarding(cloudstackTestCase): cls.services["virtual_machine"]["zoneid"] = cls.zone.id cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.virtual_machine = VirtualMachine.create( cls.apiclient, @@ -596,7 +596,7 @@ class TestRebootRouter(cloudstackTestCase): ) self.service_offering = ServiceOffering.create( self.apiclient, - self.services["service_offerings"] + self.services["service_offerings"]["tiny"] ) self.vm_1 = VirtualMachine.create( self.apiclient, @@ -765,7 +765,7 @@ class TestReleaseIP(cloudstackTestCase): self.service_offering = ServiceOffering.create( self.apiclient, - self.services["service_offerings"] + self.services["service_offerings"]["tiny"] ) self.virtual_machine = VirtualMachine.create( @@ -905,7 +905,7 @@ class TestDeleteAccount(cloudstackTestCase): ) self.service_offering = ServiceOffering.create( self.apiclient, - self.services["service_offerings"] + self.services["service_offerings"]["tiny"] ) self.vm_1 = VirtualMachine.create( self.apiclient, @@ -1050,7 +1050,7 @@ class TestRouterRules(cloudstackTestCase): cls.services["virtual_machine"]["zoneid"] = cls.zone.id cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.virtual_machine = VirtualMachine.create( cls.apiclient, diff --git a/test/integration/smoke/test_network_acl.py b/test/integration/smoke/test_network_acl.py index 015ebabba95..909da7e1e0b 100644 --- a/test/integration/smoke/test_network_acl.py +++ b/test/integration/smoke/test_network_acl.py @@ -37,7 +37,7 @@ class TestNetworkACL(cloudstackTestCase): cls.domain = get_domain(cls.apiclient) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.account = Account.create(cls.apiclient, services=cls.services["account"]) cls.template = get_template( diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py index a9010399ecf..4478c7b8a89 100644 --- a/test/integration/smoke/test_routers.py +++ b/test/integration/smoke/test_routers.py @@ -79,7 +79,7 @@ class TestRouterServices(cloudstackTestCase): ) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.vm_1 = VirtualMachine.create( cls.apiclient, diff --git a/test/integration/smoke/test_service_offerings.py b/test/integration/smoke/test_service_offerings.py index 56989e3b158..519b5ae4caa 100644 --- a/test/integration/smoke/test_service_offerings.py +++ b/test/integration/smoke/test_service_offerings.py @@ -75,7 +75,7 @@ class TestCreateServiceOffering(cloudstackTestCase): service_offering = ServiceOffering.create( self.apiclient, - self.services["service_offerings"] + self.services["service_offerings"]["tiny"] ) self.cleanup.append(service_offering) @@ -101,27 +101,27 @@ class TestCreateServiceOffering(cloudstackTestCase): self.assertEqual( list_service_response[0].cpunumber, - self.services["service_offerings"]["cpunumber"], + self.services["service_offerings"]["tiny"]["cpunumber"], "Check server id in createServiceOffering" ) self.assertEqual( list_service_response[0].cpuspeed, - self.services["service_offerings"]["cpuspeed"], + self.services["service_offerings"]["tiny"]["cpuspeed"], "Check cpuspeed in createServiceOffering" ) self.assertEqual( list_service_response[0].displaytext, - self.services["service_offerings"]["displaytext"], + self.services["service_offerings"]["tiny"]["displaytext"], "Check server displaytext in createServiceOfferings" ) self.assertEqual( list_service_response[0].memory, - self.services["service_offerings"]["memory"], + self.services["service_offerings"]["tiny"]["memory"], "Check memory in createServiceOffering" ) self.assertEqual( list_service_response[0].name, - self.services["service_offerings"]["name"], + self.services["service_offerings"]["tiny"]["name"], "Check name in createServiceOffering" ) return @@ -157,11 +157,11 @@ class TestServiceOfferings(cloudstackTestCase): cls.service_offering_1 = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.service_offering_2 = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) template = get_template( cls.apiclient, @@ -176,8 +176,6 @@ class TestServiceOfferings(cloudstackTestCase): cls.services["small"]["zoneid"] = cls.zone.id cls.services["small"]["template"] = template.id - cls.services["medium"]["zoneid"] = cls.zone.id - cls.services["medium"]["template"] = template.id # Create VMs, NAT Rules etc cls.account = Account.create( @@ -197,7 +195,7 @@ class TestServiceOfferings(cloudstackTestCase): ) cls.medium_virtual_machine = VirtualMachine.create( cls.apiclient, - cls.services["medium"], + cls.services["small"], accountid=cls.account.name, domainid=cls.account.domainid, serviceofferingid=cls.medium_offering.id, diff --git a/test/integration/smoke/test_snapshots.py b/test/integration/smoke/test_snapshots.py index 2f4c6c0d97f..4b1fcbd526f 100644 --- a/test/integration/smoke/test_snapshots.py +++ b/test/integration/smoke/test_snapshots.py @@ -62,7 +62,7 @@ class TestSnapshotRootDisk(cloudstackTestCase): "ostype"] cls.services["domainid"] = cls.domain.id - cls.services["server_without_disk"]["zoneid"] = cls.zone.id + cls.services["small"]["zoneid"] = cls.zone.id cls.services["templates"]["ostypeid"] = template.ostypeid cls.services["zoneid"] = cls.zone.id @@ -75,13 +75,13 @@ class TestSnapshotRootDisk(cloudstackTestCase): cls._cleanup.append(cls.account) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls._cleanup.append(cls.service_offering) cls.virtual_machine = cls.virtual_machine_with_disk = \ VirtualMachine.create( cls.apiclient, - cls.services["server_without_disk"], + cls.services["small"], templateid=template.id, accountid=cls.account.name, domainid=cls.account.domainid, diff --git a/test/integration/smoke/test_templates.py b/test/integration/smoke/test_templates.py index 21701631cfa..4d91d5915ca 100644 --- a/test/integration/smoke/test_templates.py +++ b/test/integration/smoke/test_templates.py @@ -106,7 +106,7 @@ class TestCreateTemplate(cloudstackTestCase): cls._cleanup.append(cls.account) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls._cleanup.append(cls.service_offering) #create virtual machine @@ -268,7 +268,7 @@ class TestTemplates(cloudstackTestCase): ) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) #create virtual machine cls.virtual_machine = VirtualMachine.create( diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py index 294dc7986f7..1553d0bd5e1 100755 --- a/test/integration/smoke/test_vm_life_cycle.py +++ b/test/integration/smoke/test_vm_life_cycle.py @@ -72,8 +72,6 @@ class TestDeployVM(cloudstackTestCase): cls.services["small"]["zoneid"] = cls.zone.id cls.services["small"]["template"] = template.id - cls.services["medium"]["zoneid"] = cls.zone.id - cls.services["medium"]["template"] = template.id cls.services["iso1"]["zoneid"] = cls.zone.id cls.account = Account.create( @@ -286,8 +284,6 @@ class TestVMLifeCycle(cloudstackTestCase): cls.services["small"]["zoneid"] = cls.zone.id cls.services["small"]["template"] = template.id - cls.services["medium"]["zoneid"] = cls.zone.id - cls.services["medium"]["template"] = template.id cls.services["iso1"]["zoneid"] = cls.zone.id # Create VMs, NAT Rules etc @@ -317,7 +313,7 @@ class TestVMLifeCycle(cloudstackTestCase): ) cls.medium_virtual_machine = VirtualMachine.create( cls.apiclient, - cls.services["medium"], + cls.services["small"], accountid=cls.account.name, domainid=cls.account.domainid, serviceofferingid=cls.medium_offering.id, diff --git a/test/integration/smoke/test_vm_snapshots.py b/test/integration/smoke/test_vm_snapshots.py index 58ac7e54d0b..93f1c3ebd74 100644 --- a/test/integration/smoke/test_vm_snapshots.py +++ b/test/integration/smoke/test_vm_snapshots.py @@ -60,7 +60,7 @@ class TestVmSnapshot(cloudstackTestCase): with description %s" % cls.services["ostype"] cls.services["domainid"] = cls.domain.id - cls.services["server"]["zoneid"] = cls.zone.id + cls.services["small"]["zoneid"] = cls.zone.id cls.services["templates"]["ostypeid"] = template.ostypeid cls.services["zoneid"] = cls.zone.id @@ -74,12 +74,12 @@ class TestVmSnapshot(cloudstackTestCase): cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls._cleanup.append(cls.service_offering) cls.virtual_machine = VirtualMachine.create( cls.apiclient, - cls.services["server"], + cls.services["small"], templateid=template.id, accountid=cls.account.name, domainid=cls.account.domainid, diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index 2ac592606e0..4dcf26387ad 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -101,7 +101,7 @@ class TestCreateVolume(cloudstackTestCase): ) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.virtual_machine = VirtualMachine.create( cls.apiclient, @@ -322,7 +322,7 @@ class TestVolumes(cloudstackTestCase): ) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.virtual_machine = VirtualMachine.create( cls.apiclient, diff --git a/test/integration/smoke/test_vpc_vpn.py b/test/integration/smoke/test_vpc_vpn.py index 9e8f97f61a6..0b78ad11340 100644 --- a/test/integration/smoke/test_vpc_vpn.py +++ b/test/integration/smoke/test_vpc_vpn.py @@ -39,7 +39,7 @@ class TestVpcRemoteAccessVpn(cloudstackTestCase): cls.domain = get_domain(cls.apiclient) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.account = Account.create(cls.apiclient, services=cls.services["account"]) cls.template = get_template( @@ -147,7 +147,7 @@ class TestVpcSite2SiteVpn(cloudstackTestCase): cls.domain = get_domain(cls.apiclient) cls.service_offering = ServiceOffering.create( cls.apiclient, - cls.services["service_offerings"] + cls.services["service_offerings"]["tiny"] ) cls.account = Account.create(cls.apiclient, services=cls.services["account"]) cls.template = get_template( diff --git a/tools/marvin/marvin/config/test_data.py b/tools/marvin/marvin/config/test_data.py index 4c1a1ba54b7..8b82b4a3e43 100644 --- a/tools/marvin/marvin/config/test_data.py +++ b/tools/marvin/marvin/config/test_data.py @@ -81,16 +81,6 @@ test_data = { "publicport": 22, "protocol": 'TCP', }, - "medium": { - "displayname": "testserver", - "username": "root", - "password": "password", - "ssh_port": 22, - "hypervisor": 'XenServer', - "privateport": 22, - "publicport": 22, - "protocol": 'TCP', - }, "service_offering": { "name": "Tiny Instance", "displaytext": "Tiny Instance", @@ -99,12 +89,6 @@ test_data = { "memory": 256, # In MBs }, "service_offerings": { - "name": "Tiny Instance", - "displaytext": "Tiny Instance", - "cpunumber": 1, - "cpuspeed": 100, - "memory": 128, - "tiny": { "name": "Tiny Instance", "displaytext": "Tiny Instance", @@ -380,16 +364,6 @@ test_data = { "name": "testvm3", "displayname": "Test VM3", }, - "server_without_disk": { - "displayname": "Test VM-No Disk", - "username": "root", - "password": "password", - "ssh_port": 22, - "hypervisor": 'XenServer', - "privateport": 22, - "publicport": 22, - "protocol": 'TCP', - }, "shared_network": { "name": "MySharedNetwork - Test", "displaytext": "MySharedNetwork", @@ -994,16 +968,6 @@ test_data = { "gateway": "10.2.1.1", "netmask": "255.255.255.192" }, - "server": { - "displayname": "TestVM", - "username": "root", - "password": "password", - "ssh_port": 22, - "hypervisor": 'XenServer', - "privateport": 22, - "publicport": 22, - "protocol": 'TCP' - }, "privateport": 22, "publicport": 22, "protocol": 'TCP', @@ -1114,28 +1078,6 @@ test_data = { # ensure unique username generated each time "password": "password", }, - "vgpu260q": # Create a virtual machine instance with vgpu type as 260q - { - "displayname": "testserver", - "username": "root", # VM creds for SSH - "password": "password", - "ssh_port": 22, - "hypervisor": 'XenServer', - "privateport": 22, - "publicport": 22, - "protocol": 'TCP', - }, - "vgpu140q": # Create a virtual machine instance with vgpu type as 140q - { - "displayname": "testserver", - "username": "root", - "password": "password", - "ssh_port": 22, - "hypervisor": 'XenServer', - "privateport": 22, - "publicport": 22, - "protocol": 'TCP', - }, "service_offerings": { "GRID K260Q": From 865623fd1edd0d2a5adb9c6be2cd9c9eab9b32db Mon Sep 17 00:00:00 2001 From: Damodar Date: Tue, 18 Nov 2014 17:12:28 +0530 Subject: [PATCH 115/314] Bug-Id: CS-27335: public_ip type resource count for an account is not decremented upon IP range deletion Reviewed-By: Kishan/Bharat Signed-off-by: Maneesha.P --- .../com/cloud/configuration/ConfigurationManagerImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 50e120a1720..fc7bff9c2aa 100644 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3312,6 +3312,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati // Check if the VLAN has any allocated public IPs final List ips = _publicIpAddressDao.listByVlanId(vlanDbId); if (isAccountSpecific) { + int resourceCountToBeDecrement = 0; try { vlanRange = _vlanDao.acquireInLockTable(vlanDbId, 30); if (vlanRange == null) { @@ -3338,19 +3339,23 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati throw new InvalidParameterValueException("Can't delete account specific vlan " + vlanDbId + " as ip " + ip + " belonging to the range has firewall rules applied. Cleanup the rules first"); } - if(ip.getAllocatedTime() != null) {// This means IP is allocated + if (ip.getAllocatedTime() != null) {// This means IP is allocated // release public ip address here success = _ipAddrMgr.disassociatePublicIpAddress(ip.getId(), userId, caller); } if (!success) { s_logger.warn("Some ip addresses failed to be released as a part of vlan " + vlanDbId + " removal"); } else { + resourceCountToBeDecrement++; UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NET_IP_RELEASE, acctVln.get(0).getAccountId(), ip.getDataCenterId(), ip.getId(), ip.getAddress().toString(), ip.isSourceNat(), vlanRange.getVlanType().toString(), ip.getSystem(), ip.getClass().getName(), ip.getUuid()); } } } finally { _vlanDao.releaseFromLockTable(vlanDbId); + if (resourceCountToBeDecrement > 0) { //Making sure to decrement the count of only success operations above. For any reaason if disassociation fails then this number will vary from original range length. + _resourceLimitMgr.decrementResourceCount(acctVln.get(0).getAccountId(), ResourceType.public_ip, new Long(resourceCountToBeDecrement)); + } } } else { // !isAccountSpecific final NicIpAliasVO ipAlias = _nicIpAliasDao.findByGatewayAndNetworkIdAndState(vlanRange.getVlanGateway(), vlanRange.getNetworkId(), NicIpAlias.state.active); From 2bdbaf453e63db3b07fedd1ea869dfaad5b549b6 Mon Sep 17 00:00:00 2001 From: Kevin Dierkx Date: Fri, 7 Aug 2015 11:25:15 +0200 Subject: [PATCH 116/314] Removed trailing whitespace from ui/scripts/*.js --- ui/scripts/accounts.js | 34 +- ui/scripts/accountsWizard.js | 8 +- ui/scripts/affinity.js | 10 +- ui/scripts/autoscaler.js | 2 +- ui/scripts/cloudStack.js | 28 +- ui/scripts/configuration.js | 46 +- ui/scripts/dashboard.js | 30 +- ui/scripts/domains.js | 14 +- ui/scripts/events.js | 24 +- ui/scripts/globalSettings.js | 44 +- ui/scripts/instanceWizard.js | 190 +- ui/scripts/instances.js | 232 +-- ui/scripts/network.js | 440 ++--- ui/scripts/projects.js | 22 +- ui/scripts/regions.js | 16 +- ui/scripts/sharedFunctions.js | 62 +- ui/scripts/storage.js | 134 +- ui/scripts/system.js | 2050 ++++++++++----------- ui/scripts/templates.js | 292 +-- ui/scripts/ui-custom/accountsWizard.js | 8 +- ui/scripts/ui-custom/instanceWizard.js | 22 +- ui/scripts/ui-custom/physicalResources.js | 2 +- ui/scripts/ui-custom/pluginListing.js | 4 +- ui/scripts/ui-custom/zoneWizard.js | 34 +- ui/scripts/ui/core.js | 4 +- ui/scripts/ui/dialog.js | 12 +- ui/scripts/ui/utils.js | 2 +- ui/scripts/ui/widgets/detailView.js | 18 +- ui/scripts/ui/widgets/listView.js | 28 +- ui/scripts/ui/widgets/multiEdit.js | 16 +- ui/scripts/vpc.js | 98 +- ui/scripts/zoneWizard.js | 428 ++--- 32 files changed, 2177 insertions(+), 2177 deletions(-) diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js index 6f55b3d54a9..f6fcc27fea9 100644 --- a/ui/scripts/accounts.js +++ b/ui/scripts/accounts.js @@ -17,7 +17,7 @@ (function(cloudStack) { var domainObjs; - + cloudStack.sections.accounts = { title: 'label.accounts', id: 'accounts', @@ -91,7 +91,7 @@ } }, - + addLdapAccount: { label: 'label.add.ldap.account', isHeader: true, @@ -123,7 +123,7 @@ ) } - } + } }, dataProvider: function(args) { @@ -422,11 +422,11 @@ data: data, async: true, success: function(json) { - var resourcecounts= json.updateresourcecountresponse.resourcecount; + var resourcecounts= json.updateresourcecountresponse.resourcecount; //pop up API response in a dialog box since only updateResourceCount API returns resourcecount (listResourceLimits API does NOT return resourcecount) var msg = ''; if (resourcecounts != null) { - for (var i = 0; i < resourcecounts.length; i++) { + for (var i = 0; i < resourcecounts.length; i++) { switch (resourcecounts[i].resourcetype) { case '0': msg += 'Instance'; //vmLimit @@ -443,8 +443,8 @@ case '4': msg += 'Template'; //templateLimit break; - case '5': - continue; //resourcetype 5 is not in use. so, skip to next item. + case '5': + continue; //resourcetype 5 is not in use. so, skip to next item. break; case '6': msg += 'Network'; //networkLimit @@ -463,18 +463,18 @@ break; case '11': msg += 'Secondary Storage'; //secondaryStorageLimit - break; + break; } - + msg += ' Count: ' + resourcecounts[i].resourcecount + '
'; } } - - + + cloudStack.dialog.notice({ message: msg - }); - + }); + args.response.success(); }, error: function(json) { @@ -653,12 +653,12 @@ } }, - + tabFilter: function(args) { var hiddenTabs = []; if(!isAdmin()) { hiddenTabs.push('settings'); - } + } return hiddenTabs; }, @@ -2011,13 +2011,13 @@ if (jsonObj.state == "disabled") allowedActions.push("enable"); allowedActions.push("remove"); - + allowedActions.push("changePassword"); allowedActions.push("generateKeys"); if (g_idpList) { allowedActions.push("configureSamlAuthorization"); } - } + } } return allowedActions; } diff --git a/ui/scripts/accountsWizard.js b/ui/scripts/accountsWizard.js index 03dc65c3c0a..2806bfbcbae 100644 --- a/ui/scripts/accountsWizard.js +++ b/ui/scripts/accountsWizard.js @@ -78,9 +78,9 @@ validation: { required: true }, - select: function(args) { + select: function(args) { $.ajax({ - url: createURL("listDomains"), + url: createURL("listDomains"), success: function(json) { var items = []; domainObjs = json.listdomainsresponse.domain; @@ -227,7 +227,7 @@ } var accountType = args.data.accounttype; - if (accountType == "1") { //if "admin" is selected in account type dropdown + if (accountType == "1") { //if "admin" is selected in account type dropdown if (rootDomainId == undefined || args.data.domainid != rootDomainId ) { //but current login has no visibility to root domain object, or the selected domain is not root domain accountType = "2"; // change accountType from root-domain("1") to domain-admin("2") } @@ -313,6 +313,6 @@ } }); } - } + } }; }(cloudStack, jQuery)); diff --git a/ui/scripts/affinity.js b/ui/scripts/affinity.js index 4f579e108b8..db8b79a0d0b 100644 --- a/ui/scripts/affinity.js +++ b/ui/scripts/affinity.js @@ -206,14 +206,14 @@ } } }; - + var affinitygroupActionfilter = cloudStack.actionFilter.affinitygroupActionfilter = function(args) { var jsonObj = args.context.item; - var allowedActions = []; + var allowedActions = []; if (jsonObj.type != 'ExplicitDedication' || isAdmin()) { - allowedActions.push("remove"); - } + allowedActions.push("remove"); + } return allowedActions; } - + })(cloudStack); diff --git a/ui/scripts/autoscaler.js b/ui/scripts/autoscaler.js index c0c41baaa86..cf39d2cae67 100644 --- a/ui/scripts/autoscaler.js +++ b/ui/scripts/autoscaler.js @@ -1341,7 +1341,7 @@ array1.push("&interval=" + args.data.interval); array1.push("&scaleuppolicyids=" + args.scaleUpPolicyResponse.id); array1.push("&scaledownpolicyids=" + args.scaleDownPolicyResponse.id); - + $.ajax({ url: createURL('createAutoScaleVmGroup' + array1.join("")), dataType: 'json', diff --git a/ui/scripts/cloudStack.js b/ui/scripts/cloudStack.js index 6d08735381f..146f8d1083d 100644 --- a/ui/scripts/cloudStack.js +++ b/ui/scripts/cloudStack.js @@ -136,15 +136,15 @@ dataType: "json", async: false, success: function(json) { - g_capabilities = json.listcapabilitiesresponse.capability; - g_supportELB = json.listcapabilitiesresponse.capability.supportELB.toString(); //convert boolean to string if it's boolean - g_kvmsnapshotenabled = json.listcapabilitiesresponse.capability.kvmsnapshotenabled; //boolean - g_regionsecondaryenabled = json.listcapabilitiesresponse.capability.regionsecondaryenabled; //boolean + g_capabilities = json.listcapabilitiesresponse.capability; + g_supportELB = json.listcapabilitiesresponse.capability.supportELB.toString(); //convert boolean to string if it's boolean + g_kvmsnapshotenabled = json.listcapabilitiesresponse.capability.kvmsnapshotenabled; //boolean + g_regionsecondaryenabled = json.listcapabilitiesresponse.capability.regionsecondaryenabled; //boolean if (json.listcapabilitiesresponse.capability.userpublictemplateenabled != null) { - g_userPublicTemplateEnabled = json.listcapabilitiesresponse.capability.userpublictemplateenabled.toString(); //convert boolean to string if it's boolean + g_userPublicTemplateEnabled = json.listcapabilitiesresponse.capability.userpublictemplateenabled.toString(); //convert boolean to string if it's boolean } g_userProjectsEnabled = json.listcapabilitiesresponse.capability.allowusercreateprojects; - + g_cloudstackversion = json.listcapabilitiesresponse.capability.cloudstackversion; @@ -251,7 +251,7 @@ }); $.cookie('role', g_role, { expires: 1 - }); + }); $.cookie('timezone', g_timezone, { expires: 1 }); @@ -268,14 +268,14 @@ async: false, success: function(json) { g_capabilities = json.listcapabilitiesresponse.capability; - g_supportELB = json.listcapabilitiesresponse.capability.supportELB.toString(); //convert boolean to string if it's boolean - g_kvmsnapshotenabled = json.listcapabilitiesresponse.capability.kvmsnapshotenabled; //boolean - g_regionsecondaryenabled = json.listcapabilitiesresponse.capability.regionsecondaryenabled; //boolean + g_supportELB = json.listcapabilitiesresponse.capability.supportELB.toString(); //convert boolean to string if it's boolean + g_kvmsnapshotenabled = json.listcapabilitiesresponse.capability.kvmsnapshotenabled; //boolean + g_regionsecondaryenabled = json.listcapabilitiesresponse.capability.regionsecondaryenabled; //boolean if (json.listcapabilitiesresponse.capability.userpublictemplateenabled != null) { - g_userPublicTemplateEnabled = json.listcapabilitiesresponse.capability.userpublictemplateenabled.toString(); //convert boolean to string if it's boolean + g_userPublicTemplateEnabled = json.listcapabilitiesresponse.capability.userpublictemplateenabled.toString(); //convert boolean to string if it's boolean } g_userProjectsEnabled = json.listcapabilitiesresponse.capability.allowusercreateprojects; - + g_cloudstackversion = json.listcapabilitiesresponse.capability.cloudstackversion; @@ -300,7 +300,7 @@ args.response.error(); } }); - + // Get project configuration // TEMPORARY -- replace w/ output of capability response, etc., once implemented window.g_projectsInviteRequired = false; @@ -462,6 +462,6 @@ cloudStack.uiCustom.login(loginArgs); - document.title = _l('label.app.name'); + document.title = _l('label.app.name'); }); })(cloudStack, jQuery); diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js index 5cb6f8d6468..61f2d1f96ff 100644 --- a/ui/scripts/configuration.js +++ b/ui/scripts/configuration.js @@ -137,7 +137,7 @@ } }, isCustomized: { - label: 'label.custom', + label: 'label.custom', isBoolean: true, isReverse: true, isChecked: false @@ -360,7 +360,7 @@ }, hostTags: { //Only one single host tag is supported at server-side. Multiple host tags are NOT supported at server-side. label: 'Host Tag', - docID: 'helpComputeOfferingHostTags' + docID: 'helpComputeOfferingHostTags' }, cpuCap: { label: 'label.CPU.cap', @@ -410,7 +410,7 @@ var $fields = $form.find('.field'); if ($(this).val() == "ImplicitDedicationPlanner") { $form.find('[rel=plannerMode]').css('display', 'block'); - } else { + } else { $form.find('[rel=plannerMode]').hide(); } }); @@ -596,9 +596,9 @@ provisioningType :args.data.provisioningType, customized: (args.data.isCustomized == "on") }; - + //custom fields (begin) - if (args.data.isCustomized != "on") { + if (args.data.isCustomized != "on") { $.extend(data, { cpuNumber: args.data.cpuNumber }); @@ -608,9 +608,9 @@ $.extend(data, { memory: args.data.memory }); - } + } //custom fields (end) - + if (args.data.deploymentPlanner != null && args.data.deploymentPlanner.length > 0) { $.extend(data, { deploymentplanner: args.data.deploymentPlanner @@ -872,7 +872,7 @@ converter: function(args) { if (args == undefined) return ''; - else + else return cloudStack.converters.convertBytes(args * 1024 * 1024); } }, @@ -936,10 +936,10 @@ }, deploymentplanner: { label: 'label.deployment.planner' - }, + }, plannerMode: { label: 'label.planner.mode' - }, + }, pciDevice: { label: 'label.gpu' }, @@ -972,13 +972,13 @@ async: true, success: function(json) { var item = json.listserviceofferingsresponse.serviceoffering[0]; - + if (item.deploymentplanner != null && item.serviceofferingdetails != null) { if (item.deploymentplanner == 'ImplicitDedicationPlanner' && item.serviceofferingdetails.ImplicitDedicationMode != null) { item.plannerMode = item.serviceofferingdetails.ImplicitDedicationMode; } } - + if (item.serviceofferingdetails != null) { item.pciDevice = item.serviceofferingdetails.pciDevice; item.vgpuType = item.serviceofferingdetails.vgpuType; @@ -1469,7 +1469,7 @@ converter: function(args) { if (args == undefined) return ''; - else + else return cloudStack.converters.convertBytes(args * 1024 * 1024); } }, @@ -1924,7 +1924,7 @@ customized: (args.data.isCustomized == "on") }; - if (args.data.isCustomized != "on") { + if (args.data.isCustomized != "on") { $.extend(data, { disksize: args.data.disksize }); @@ -2556,7 +2556,7 @@ args.$form.find('.form-item[rel=\"service.StaticNat.associatePublicIP\"]').hide(); args.$form.find('.form-item[rel=\"service.StaticNat.associatePublicIP\"]').find('input[type=checkbox]').attr('checked', false); } - + //StretchedL2Subnet checkbox should be displayed only when 'Connectivity' service is checked if (args.$form.find('.form-item[rel=\"service.Connectivity.isEnabled\"]').find('input[type=checkbox]').is(':checked')) { $supportsstrechedl2subnet.css('display', 'inline-block'); @@ -3045,8 +3045,8 @@ inputData['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilitytype'] = 'lbSchemes'; inputData['servicecapabilitylist[' + serviceCapabilityIndex + '].capabilityvalue'] = 'internal'; serviceCapabilityIndex++; - } - } else if (value != '') { // normal data (serviceData.length ==1), e.g. "name", "displayText", "networkRate", "guestIpType", "lbType" (unwanted), "availability" (unwated when value is "Optional"), "egressdefaultpolicy", "state" (unwanted), "status" (unwanted), "allocationstate" (unwanted) + } + } else if (value != '') { // normal data (serviceData.length ==1), e.g. "name", "displayText", "networkRate", "guestIpType", "lbType" (unwanted), "availability" (unwated when value is "Optional"), "egressdefaultpolicy", "state" (unwanted), "status" (unwanted), "allocationstate" (unwanted) if (!(key == "lbType" || (key == "availability" && value == "Optional") || key == "state" || key == "status" || key == "allocationstate" || key == "useVpc" )) { inputData[key] = value; } @@ -3097,21 +3097,21 @@ if (inputData['guestIpType'] == "Shared") { //specifyVlan checkbox is disabled, so inputData won't include specifyVlan inputData['specifyVlan'] = true; //hardcode inputData['specifyVlan'] inputData['specifyIpRanges'] = true; - delete inputData.isPersistent; //if Persistent checkbox is unchecked, do not pass isPersistent parameter to API call since we need to keep API call's size as small as possible (p.s. isPersistent is defaulted as false at server-side) + delete inputData.isPersistent; //if Persistent checkbox is unchecked, do not pass isPersistent parameter to API call since we need to keep API call's size as small as possible (p.s. isPersistent is defaulted as false at server-side) } else if (inputData['guestIpType'] == "Isolated") { //specifyVlan checkbox is shown //inputData['specifyIpRanges'] = false; - delete inputData.specifyIpRanges; //if specifyIpRanges should be false, do not pass specifyIpRanges parameter to API call since we need to keep API call's size as small as possible (p.s. specifyIpRanges is defaulted as false at server-side) + delete inputData.specifyIpRanges; //if specifyIpRanges should be false, do not pass specifyIpRanges parameter to API call since we need to keep API call's size as small as possible (p.s. specifyIpRanges is defaulted as false at server-side) if (inputData['specifyVlan'] == 'on') { //specifyVlan checkbox is checked - inputData['specifyVlan'] = true; + inputData['specifyVlan'] = true; } else { //specifyVlan checkbox is unchecked - delete inputData.specifyVlan; //if specifyVlan checkbox is unchecked, do not pass specifyVlan parameter to API call since we need to keep API call's size as small as possible (p.s. specifyVlan is defaulted as false at server-side) + delete inputData.specifyVlan; //if specifyVlan checkbox is unchecked, do not pass specifyVlan parameter to API call since we need to keep API call's size as small as possible (p.s. specifyVlan is defaulted as false at server-side) } if (inputData['isPersistent'] == 'on') { //It is a persistent network inputData['isPersistent'] = true; } else { //Isolated Network with Non-persistent network - delete inputData.isPersistent; //if Persistent checkbox is unchecked, do not pass isPersistent parameter to API call since we need to keep API call's size as small as possible (p.s. isPersistent is defaulted as false at server-side) + delete inputData.isPersistent; //if Persistent checkbox is unchecked, do not pass isPersistent parameter to API call since we need to keep API call's size as small as possible (p.s. isPersistent is defaulted as false at server-side) } } @@ -4112,5 +4112,5 @@ return allowedActions; }; - + })(cloudStack, jQuery); diff --git a/ui/scripts/dashboard.js b/ui/scripts/dashboard.js index dff6a91a9e8..50dfb22e676 100644 --- a/ui/scripts/dashboard.js +++ b/ui/scripts/dashboard.js @@ -28,7 +28,7 @@ user: { dataProvider: function(args) { var dataFns = { - instances: function(data) { + instances: function(data) { var totalInstanceCount = 0; $.ajax({ url: createURL("listVirtualMachines"), @@ -38,13 +38,13 @@ pageSize: 1 }, async: false, - success: function(json) { + success: function(json) { if (json.listvirtualmachinesresponse.count != undefined) { totalInstanceCount = json.listvirtualmachinesresponse.count; - } + } } }); - + var RunningInstanceCount = 0; $.ajax({ url: createURL("listVirtualMachines"), @@ -55,13 +55,13 @@ state: "Running" }, async: false, - success: function(json) { + success: function(json) { if (json.listvirtualmachinesresponse.count != undefined) { RunningInstanceCount = json.listvirtualmachinesresponse.count; - } + } } }); - + var stoppedInstanceCount = 0; $.ajax({ url: createURL("listVirtualMachines"), @@ -72,18 +72,18 @@ state: "Stopped" }, async: false, - success: function(json) { + success: function(json) { if (json.listvirtualmachinesresponse.count != undefined) { stoppedInstanceCount = json.listvirtualmachinesresponse.count; - } + } } }); - + dataFns.account($.extend(data, { runningInstances: RunningInstanceCount, stoppedInstances: stoppedInstanceCount, totalInstances: totalInstanceCount - })); + })); }, account: function(data) { @@ -103,7 +103,7 @@ data: { listAll: true, page: 1, - pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited) + pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited) //pageSize: 1 //for testing only }, success: function(json) { @@ -197,7 +197,7 @@ url: createURL('listAlerts'), data: { page: 1, - pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited) + pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited) }, success: function(json) { var alerts = json.listalertsresponse.alert ? @@ -222,7 +222,7 @@ data: { state: 'Alert', page: 1, - pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited) + pageSize: (pageSize > 4? 4: pageSize) //if default.page.size > 4, show 4 items only (since space on dashboard is limited) }, success: function(json) { var hosts = json.listhostsresponse.host ? @@ -247,7 +247,7 @@ fetchLatest: data.fetchLatest, sortBy: 'usage', page: 0, - pageSize: (pageSize > 8? 8: pageSize) + pageSize: (pageSize > 8? 8: pageSize) }, success: function(json) { var capacities = json.listcapacityresponse.capacity ? diff --git a/ui/scripts/domains.js b/ui/scripts/domains.js index e46f104364d..08a53cd7305 100644 --- a/ui/scripts/domains.js +++ b/ui/scripts/domains.js @@ -100,7 +100,7 @@ var domainObj; var data = { - id: args.context.domains[0].id + id: args.context.domains[0].id }; if (args.data.name != null) { //args.data.name == undefined means name field is not editable (when log in as normal user or domain admin) @@ -108,14 +108,14 @@ name: args.data.name }); } - + if (args.data.networkdomain != null) { //args.data.networkdomain == undefined means networkdomain field is not editable (when log in as normal user or domain admin) $.extend(data, { networkdomain: args.data.networkdomain }); } - - if('name' in data || 'networkdomain' in data) { + + if('name' in data || 'networkdomain' in data) { $.ajax({ url: createURL("updateDomain"), async: false, @@ -366,7 +366,7 @@ networkdomain: { label: 'label.network.domain', isEditable: function(args) { - if (isAdmin()) + if (isAdmin()) return true; else return false; @@ -652,8 +652,8 @@ if (jsonObj.level != 0) { //ROOT domain (whose level is 0) is not allowed to delete allowedActions.push("delete"); } - } else if (isDomainAdmin()) { - if (args.context.domains[0].id != g_domainid) { + } else if (isDomainAdmin()) { + if (args.context.domains[0].id != g_domainid) { allowedActions.push("edit"); //merge updateResourceLimit into edit } } diff --git a/ui/scripts/events.js b/ui/scripts/events.js index 92804290095..2fd70dd018d 100644 --- a/ui/scripts/events.js +++ b/ui/scripts/events.js @@ -75,7 +75,7 @@ }, action: function(args) { var events = args.context.events; - + $.ajax({ url: createURL("deleteEvents"), data: { @@ -90,7 +90,7 @@ error:function(data) { args.response.error(parseXMLHttpResponse(data)); } - }); + }); } }, @@ -154,7 +154,7 @@ }); } }, - + archive: { label: 'label.archive.events', isHeader: true, @@ -215,7 +215,7 @@ } }, - + // Archive multiple events archiveMulti: { label: 'label.archive.events', @@ -232,7 +232,7 @@ }, action: function(args) { var events = args.context.events; - + $.ajax({ url: createURL("archiveEvents"), data: { @@ -247,7 +247,7 @@ error:function(data) { args.response.error(parseXMLHttpResponse(data)); } - }); + }); } } @@ -494,7 +494,7 @@ }, action: function(args) { var events = args.context.alerts; - + $.ajax({ url: createURL("deleteAlerts"), data: { @@ -509,10 +509,10 @@ error:function(data) { args.response.error(parseXMLHttpResponse(data)); } - }); + }); } }, - + remove: { label: 'label.delete.alerts', isHeader: true, @@ -593,7 +593,7 @@ }, action: function(args) { var events = args.context.alerts; - + $.ajax({ url: createURL("archiveAlerts"), data: { @@ -608,10 +608,10 @@ error:function(data) { args.response.error(parseXMLHttpResponse(data)); } - }); + }); } }, - + archive: { label: 'label.archive.alerts', isHeader: true, diff --git a/ui/scripts/globalSettings.js b/ui/scripts/globalSettings.js index 2b1fe5c905e..680b0faaf03 100644 --- a/ui/scripts/globalSettings.js +++ b/ui/scripts/globalSettings.js @@ -234,14 +234,14 @@ } } } - }, + }, baremetalRct: { type: 'select', title: 'label.baremetal.rack.configuration', listView: { id: 'baremetalRct', label: 'label.baremetal.rack.configuration', - fields: { + fields: { id: { label: 'label.id' }, @@ -252,19 +252,19 @@ dataProvider: function(args) { var data = {}; listViewDataProvider(args, data); - + $.ajax({ url: createURL("listBaremetalRct"), data: data, - success: function(json) { + success: function(json) { args.response.success({ data: json.listbaremetalrctresponse.baremetalrct }); } - }); + }); }, actions: { add: { label: 'label.add.baremetal.rack.configuration', - messages: { + messages: { notification: function(args) { return 'label.add.baremetal.rack.configuration'; } @@ -280,18 +280,18 @@ } } }, - action: function(args) { + action: function(args) { $.ajax({ url: createURL("addBaremetalRct"), data: { baremetalrcturl: args.data.url }, - success: function(json) { + success: function(json) { var jid = json.addbaremetalrctresponse.jobid args.response.success({ _custom: { jobId: jid, - getUpdatedItem: function(json) { + getUpdatedItem: function(json) { return json.queryasyncjobresultresponse.jobresult.baremetalrct; } } @@ -303,8 +303,8 @@ poll: pollAsyncJobResult } } - }, - + }, + detailView: { name: "details", actions: { @@ -318,7 +318,7 @@ return 'label.delete.baremetal.rack.configuration'; } }, - action: function(args) { + action: function(args) { var data = { id: args.context.baremetalRct[0].id }; @@ -326,12 +326,12 @@ url: createURL('deleteBaremetalRct'), data: data, success: function(json) { - var jid = json.deletebaremetalrctresponse.jobid; + var jid = json.deletebaremetalrctresponse.jobid; args.response.success({ _custom: { jobId: jid } - }); + }); } }); }, @@ -339,7 +339,7 @@ poll: pollAsyncJobResult } } - }, + }, tabs: { details: { title: 'label.details', @@ -351,23 +351,23 @@ label: 'label.url' } }], - dataProvider: function(args) { + dataProvider: function(args) { var data = { id: args.context.baremetalRct[0].id - }; + }; $.ajax({ url: createURL("listBaremetalRct"), data: data, - success: function(json) { + success: function(json) { args.response.success({ data: json.listbaremetalrctresponse.baremetalrct[0] }); } - }); + }); } } - } - } + } + } } - }, + }, hypervisorCapabilities: { type: 'select', title: 'label.hypervisor.capabilities', diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js index 3d3f74e56e3..877658aef15 100644 --- a/ui/scripts/instanceWizard.js +++ b/ui/scripts/instanceWizard.js @@ -184,7 +184,7 @@ }); } } - }); + }); $.ajax({ url: createURL("listTemplates&templatefilter=sharedexecutable&zoneid=" + args.currentData.zoneid), dataType: "json", @@ -199,7 +199,7 @@ }); } } - }); + }); } else if (selectedTemplateOrIso == 'select-iso') { $.ajax({ url: createURL("listIsos&isofilter=featured&zoneid=" + args.currentData.zoneid + "&bootable=true"), @@ -248,7 +248,7 @@ sharedIsoObjs = json.listisosresponse.iso; } } - }); + }); } //***** get templates/ISOs (end) ***** @@ -282,19 +282,19 @@ //// return true; // Disabled -- not supported in backend right now //// - + if (selectedTemplateOrIso == 'select-template') { return false; //show Root Disk Size field } else { //selectedTemplateOrIso == 'select-iso' return true; //hide Root Disk Size field - } + } } }); }, // Step 3: Service offering function(args) { - selectedTemplateObj = null; //reset + selectedTemplateObj = null; //reset if (args.currentData["select-template"] == "select-template") { if (featuredTemplateObjs != null && featuredTemplateObjs.length > 0) { for (var i = 0; i < featuredTemplateObjs.length; i++) { @@ -323,7 +323,7 @@ } } } - } + } if (selectedTemplateObj == null) { if (sharedTemplateObjs != null && sharedTemplateObjs.length > 0) { for (var i = 0; i < sharedTemplateObjs.length; i++) { @@ -333,7 +333,7 @@ } } } - } + } if (selectedTemplateObj == null) { alert("unable to find matched template object"); } else { @@ -346,27 +346,27 @@ // if the user is leveraging a template, then we can show custom IOPS, if applicable var canShowCustomIopsForServiceOffering = (args.currentData["select-template"] != "select-iso" ? true : false); - + // get serviceOfferingObjs - $(window).removeData("cloudStack.module.instanceWizard.serviceOfferingObjs"); + $(window).removeData("cloudStack.module.instanceWizard.serviceOfferingObjs"); $(window).trigger("cloudStack.module.instanceWizard.serviceOffering.dataProvider", { context: args.context, currentData: args.currentData - }); - if ($(window).data("cloudStack.module.instanceWizard.serviceOfferingObjs") == undefined) { + }); + if ($(window).data("cloudStack.module.instanceWizard.serviceOfferingObjs") == undefined) { $.ajax({ url: createURL("listServiceOfferings&issystem=false"), dataType: "json", async: false, - success: function(json) { + success: function(json) { serviceOfferingObjs = json.listserviceofferingsresponse.serviceoffering; } - }); - } else { - serviceOfferingObjs = $(window).data("cloudStack.module.instanceWizard.serviceOfferingObjs"); + }); + } else { + serviceOfferingObjs = $(window).data("cloudStack.module.instanceWizard.serviceOfferingObjs"); } - - + + args.response.success({ canShowCustomIops: canShowCustomIopsForServiceOffering, customFlag: 'iscustomized', @@ -375,7 +375,7 @@ data: { serviceOfferings: serviceOfferingObjs } - }); + }); }, // Step 4: Data disk offering @@ -409,9 +409,9 @@ var data = { affinityGroups: affinitygroups }; - + if(selectedZoneObj.domainid != null && selectedZoneObj.affinitygroupid != null) { - var defaultAffinityGroup; + var defaultAffinityGroup; if(affinitygroups != null) { for(var i = 0; i < affinitygroups.length; i++) { if(affinitygroups[i].id == selectedZoneObj.affinitygroupid) { @@ -419,13 +419,13 @@ break; } } - } + } $.extend(data, { selectedObj: defaultAffinityGroup, selectedObjNonEditable: true }); - } - + } + args.response.success({ data: data }); @@ -608,21 +608,21 @@ } } - + // get networkObjsToPopulate - $(window).removeData("cloudStack.module.instanceWizard.networkObjs"); + $(window).removeData("cloudStack.module.instanceWizard.networkObjs"); $(window).trigger("cloudStack.module.instanceWizard.network.dataProvider", { context: args.context, currentData: args.currentData, networkObjsToPopulate: networkObjsToPopulate - }); - if ($(window).data("cloudStack.module.instanceWizard.networkObjs") == undefined) { - //do nothing - } else { - networkObjsToPopulate = $(window).data("cloudStack.module.instanceWizard.networkObjs"); //override networkObjsToPopulate - } - - + }); + if ($(window).data("cloudStack.module.instanceWizard.networkObjs") == undefined) { + //do nothing + } else { + networkObjsToPopulate = $(window).data("cloudStack.module.instanceWizard.networkObjs"); //override networkObjsToPopulate + } + + $.ajax({ url: createURL("listNetworkOfferings"), dataType: "json", @@ -729,49 +729,49 @@ // Create a new VM!!!! var deployVmData = {}; - //step 1 : select zone + //step 1 : select zone $.extend(deployVmData, { zoneid : args.data.zoneid }); - //step 2: select template + //step 2: select template $.extend(deployVmData, { templateid : args.data.templateid }); - + $.extend(deployVmData, { hypervisor : selectedHypervisor }); - + if (args.$wizard.find('input[name=rootDiskSize]').parent().css('display') != 'none') { - if (args.$wizard.find('input[name=rootDiskSize]').val().length > 0) { + if (args.$wizard.find('input[name=rootDiskSize]').val().length > 0) { $.extend(deployVmData, { rootdisksize : args.$wizard.find('input[name=rootDiskSize]').val() }); } } - - //step 3: select service offering + + //step 3: select service offering $.extend(deployVmData, { serviceofferingid : args.data.serviceofferingid }); - + if (args.$wizard.find('input[name=compute-cpu-cores]').parent().parent().css('display') != 'none') { - if (args.$wizard.find('input[name=compute-cpu-cores]').val().length > 0) { + if (args.$wizard.find('input[name=compute-cpu-cores]').val().length > 0) { $.extend(deployVmData, { 'details[0].cpuNumber' : args.$wizard.find('input[name=compute-cpu-cores]').val() }); - } - if (args.$wizard.find('input[name=compute-cpu]').val().length > 0) { + } + if (args.$wizard.find('input[name=compute-cpu]').val().length > 0) { $.extend(deployVmData, { 'details[0].cpuSpeed' : args.$wizard.find('input[name=compute-cpu]').val() }); - } - if (args.$wizard.find('input[name=compute-memory]').val().length > 0) { + } + if (args.$wizard.find('input[name=compute-memory]').val().length > 0) { $.extend(deployVmData, { 'details[0].memory' : args.$wizard.find('input[name=compute-memory]').val() }); - } + } } if (args.$wizard.find('input[name=disk-min-iops]').parent().parent().css('display') != 'none') { @@ -788,12 +788,12 @@ } //step 4: select disk offering - if (args.data.diskofferingid != null && args.data.diskofferingid != "0") { + if (args.data.diskofferingid != null && args.data.diskofferingid != "0") { $.extend(deployVmData, { diskofferingid : args.data.diskofferingid }); - - if (selectedDiskOfferingObj.iscustomized == true) { + + if (selectedDiskOfferingObj.iscustomized == true) { $.extend(deployVmData, { size : args.data.size }); @@ -825,7 +825,7 @@ checkedAffinityGroupIdArray = []; } - if (checkedAffinityGroupIdArray.length > 0) { + if (checkedAffinityGroupIdArray.length > 0) { $.extend(deployVmData, { affinitygroupids : checkedAffinityGroupIdArray.join(",") }); @@ -834,7 +834,7 @@ //step 6: select network if (step6ContainerType == 'select-network' || step6ContainerType == 'select-advanced-sg') { var array2 = []; - var array3 = []; + var array3 = []; var defaultNetworkId = args.data.defaultNetwork; //args.data.defaultNetwork might be equal to string "new-network" or a network ID var checkedNetworkIdArray; @@ -884,58 +884,58 @@ if (defaultNetworkId == null) { cloudStack.dialog.notice({ message: "Please select a default network in Network step." - }); + }); return; - } - + } + if (checkedNetworkIdArray.length > 0) { for (var i = 0; i < checkedNetworkIdArray.length; i++) { - if (checkedNetworkIdArray[i] == defaultNetworkId) { - array2.unshift(defaultNetworkId); - + if (checkedNetworkIdArray[i] == defaultNetworkId) { + array2.unshift(defaultNetworkId); + var ipToNetwork = { networkid: defaultNetworkId - }; + }; if (args.data["new-network"] == "create-new-network") { if (args.data['new-network-ip'] != null && args.data['new-network-ip'].length > 0) { $.extend(ipToNetwork, { ip: args.data['new-network-ip'] - }); + }); } } else { if (args.data["my-network-ips"][i] != null && args.data["my-network-ips"][i].length > 0) { $.extend(ipToNetwork, { ip: args.data["my-network-ips"][i] - }); + }); } } - array3.unshift(ipToNetwork); - - } else { + array3.unshift(ipToNetwork); + + } else { array2.push(checkedNetworkIdArray[i]); - + var ipToNetwork = { networkid: checkedNetworkIdArray[i] - }; + }; if (args.data["my-network-ips"][i] != null && args.data["my-network-ips"][i].length > 0) { $.extend(ipToNetwork, { ip: args.data["my-network-ips"][i] - }); + }); } - array3.push(ipToNetwork); - } + array3.push(ipToNetwork); + } } } - + //deployVmData.push("&networkIds=" + array2.join(",")); //ipToNetworkMap can't be specified along with networkIds or ipAddress - - for (var k = 0; k < array3.length; k++) { - deployVmData["iptonetworklist[" + k + "].networkid"] = array3[k].networkid; - if (array3[k].ip != undefined && array3[k].ip.length > 0) { - deployVmData["iptonetworklist[" + k + "].ip"] = array3[k].ip; + + for (var k = 0; k < array3.length; k++) { + deployVmData["iptonetworklist[" + k + "].networkid"] = array3[k].networkid; + if (array3[k].ip != undefined && array3[k].ip.length > 0) { + deployVmData["iptonetworklist[" + k + "].ip"] = array3[k].ip; } - } - + } + } else if (step6ContainerType == 'select-security-group') { var checkedSecurityGroupIdArray; if (typeof(args.data["security-groups"]) == "object" && args.data["security-groups"].length != null) { //args.data["security-groups"] is an array of string, e.g. ["2375f8cc-8a73-4b8d-9b26-50885a25ffe0", "27c60d2a-de7f-4bb7-96e5-a602cec681df","c6301d77-99b5-4e8a-85e2-3ea2ab31c342"], @@ -947,7 +947,7 @@ checkedSecurityGroupIdArray = []; } - if (checkedSecurityGroupIdArray.length > 0) { + if (checkedSecurityGroupIdArray.length > 0) { $.extend(deployVmData, { securitygroupids : checkedSecurityGroupIdArray.join(",") }); @@ -980,26 +980,26 @@ array2.push(checkedNetworkIdArray[i]); } } - + $.extend(deployVmData, { networkids : array2.join(",") }); } } else if (step6ContainerType == 'nothing-to-select') { - if ("vpc" in args.context) { //from VPC tier - deployVmData["iptonetworklist[0].networkid"] = args.context.networks[0].id; - if (args.data["vpc-specify-ip"] != undefined && args.data["vpc-specify-ip"].length > 0) { - deployVmData["iptonetworklist[0].ip"] = args.data["vpc-specify-ip"]; + if ("vpc" in args.context) { //from VPC tier + deployVmData["iptonetworklist[0].networkid"] = args.context.networks[0].id; + if (args.data["vpc-specify-ip"] != undefined && args.data["vpc-specify-ip"].length > 0) { + deployVmData["iptonetworklist[0].ip"] = args.data["vpc-specify-ip"]; } - + $.extend(deployVmData, { domainid : args.context.vpc[0].domainid }); - if (args.context.vpc[0].account != null) { + if (args.context.vpc[0].account != null) { $.extend(deployVmData, { account : args.context.vpc[0].account - }); - } else if (args.context.vpc[0].projectid != null) { + }); + } else if (args.context.vpc[0].projectid != null) { $.extend(deployVmData, { projectid : args.context.vpc[0].projectid }); @@ -1015,28 +1015,28 @@ } var displayname = args.data.displayname; - if (displayname != null && displayname.length > 0) { + if (displayname != null && displayname.length > 0) { $.extend(deployVmData, { displayname : displayname - }); + }); $.extend(deployVmData, { name : displayname }); } var group = args.data.groupname; - if (group != null && group.length > 0) { + if (group != null && group.length > 0) { $.extend(deployVmData, { group : group }); } - + var keyboard = args.data.keyboardLanguage; - if (keyboard != null && keyboard.length > 0) { //when blank option (default option) is selected => args.data.keyboardLanguage == "" + if (keyboard != null && keyboard.length > 0) { //when blank option (default option) is selected => args.data.keyboardLanguage == "" $.extend(deployVmData, { keyboard : keyboard }); - } + } if (g_hostid != null) { $.extend(deployVmData, { @@ -1050,7 +1050,7 @@ userdata : todb(btoa(userdata)) }); } - + $(window).trigger('cloudStack.deployVirtualMachine', { deployVmData: deployVmData, formData: args.data diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js index 81732d76307..9afb787fae6 100644 --- a/ui/scripts/instances.js +++ b/ui/scripts/instances.js @@ -61,7 +61,7 @@ } args.form.fields.quiescevm.isChecked = true; - + return false; } } @@ -69,7 +69,7 @@ }, action: function(args) { var instances = args.context.instances; - + $(instances).map(function(index, instance) { var array1 = []; array1.push("&snapshotmemory=" + (args.data.snapshotMemory == "on")); @@ -103,7 +103,7 @@ error: function(json) { args.response.error(parseXMLHttpResponse(json)); } - }); + }); }); }, @@ -118,10 +118,10 @@ isMultiSelectAction: true }); } - + return action; - }; - + }; + cloudStack.sections.instances = { title: 'label.instances', id: 'instances', @@ -616,7 +616,7 @@ label: 'label.action.destroy.instance', compactLabel: 'label.destroy', createForm: { - title: 'label.action.destroy.instance', + title: 'label.action.destroy.instance', desc: 'label.action.destroy.instance', isWarning: true, preFilter: function(args) { @@ -633,31 +633,31 @@ isChecked: false } } - }, - messages: { + }, + messages: { notification: function(args) { return 'label.action.destroy.instance'; } }, - action: function(args) { + action: function(args) { var data = { - id: args.context.instances[0].id - }; + id: args.context.instances[0].id + }; if (args.data.expunge == 'on') { $.extend(data, { expunge: true }); - } + } $.ajax({ url: createURL('destroyVirtualMachine'), - data: data, + data: data, success: function(json) { var jid = json.destroyvirtualmachineresponse.jobid; args.response.success({ _custom: { jobId: jid, - getUpdatedItem: function(json) { - if ('virtualmachine' in json.queryasyncjobresultresponse.jobresult) //destroy without expunge + getUpdatedItem: function(json) { + if ('virtualmachine' in json.queryasyncjobresultresponse.jobresult) //destroy without expunge return json.queryasyncjobresultresponse.jobresult.virtualmachine; else //destroy with expunge return { 'toRemove': true }; @@ -765,19 +765,19 @@ url: createURL("restoreVirtualMachine&virtualmachineid=" + args.context.instances[0].id), dataType: "json", async: true, - success: function(json) { - var jid = json.restorevmresponse.jobid; + success: function(json) { + var jid = json.restorevmresponse.jobid; args.response.success({ _custom: { jobId: jid, - getUpdatedItem: function(json) { + getUpdatedItem: function(json) { return json.queryasyncjobresultresponse.jobresult.virtualmachine; }, getActionFilter: function() { return vmActionfilter; } } - }); + }); } }); @@ -951,11 +951,11 @@ }); } }); - - + + //***** addResourceDetail ***** - //XenServer only (starts here) - if(args.$detailView.find('form').find('div .detail-group').find('.xenserverToolsVersion61plus').length > 0) { + //XenServer only (starts here) + if(args.$detailView.find('form').find('div .detail-group').find('.xenserverToolsVersion61plus').length > 0) { $.ajax({ url: createURL('addResourceDetail'), data: { @@ -964,7 +964,7 @@ 'details[0].key': 'hypervisortoolsversion', 'details[0].value': (args.data.xenserverToolsVersion61plus == "on") ? 'xenserver61' : 'xenserver56' }, - success: function(json) { + success: function(json) { var jobId = json.addResourceDetailresponse.jobid; var addResourceDetailIntervalID = setInterval(function() { $.ajax({ @@ -972,33 +972,33 @@ dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; - + if (result.jobstatus == 0) { return; //Job has not completed } else { clearInterval(addResourceDetailIntervalID); - if (result.jobstatus == 1) { - //do nothing + if (result.jobstatus == 1) { + //do nothing } else if (result.jobstatus == 2) { cloudStack.dialog.notice({ message: _s(result.jobresult.errortext) - }); + }); } } }, - error: function(XMLHttpResponse) { + error: function(XMLHttpResponse) { cloudStack.dialog.notice({ message: parseXMLHttpResponse(XMLHttpResponse) - }); + }); } }); - }, g_queryAsyncJobResultInterval); + }, g_queryAsyncJobResultInterval); } - }); - } - //XenServer only (ends here) - + }); + } + //XenServer only (ends here) + } }, @@ -1233,17 +1233,17 @@ }, osTypeId: { label: 'label.os.type', - select: function(args) { - if (ostypeObjs == undefined) { + select: function(args) { + if (ostypeObjs == undefined) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, - success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + success: function(json) { + ostypeObjs = json.listostypesresponse.ostype; } }); - } + } var items = []; $(ostypeObjs).each(function() { items.push({ @@ -1253,7 +1253,7 @@ }); args.response.success({ data: items - }); + }); } }, isPublic: { @@ -1493,12 +1493,12 @@ createForm: { title: 'label.change.service.offering', desc: function(args) { - var description = ''; - var vmObj = args.jsonObj; + var description = ''; + var vmObj = args.jsonObj; if (vmObj.state == 'Running' && vmObj.hypervisor == 'VMware') { description = 'message.read.admin.guide.scaling.up'; - } - return description; + } + return description; }, fields: { serviceofferingid: { @@ -1511,7 +1511,7 @@ async: true, success: function(json) { serviceofferingObjs = json.listserviceofferingsresponse.serviceoffering; - var items = []; + var items = []; if (serviceofferingObjs != null) { for (var i = 0; i < serviceofferingObjs.length; i++) { items.push({ @@ -1519,33 +1519,33 @@ description: serviceofferingObjs[i].name }); } - } + } args.response.success({ data: items }); } }); - + args.$select.change(function(){ var $form = $(this).closest('form'); - + var serviceofferingid = $(this).val(); if (serviceofferingid == null || serviceofferingid.length == 0) return; - + var items = []; var selectedServiceofferingObj; if (serviceofferingObjs != null) { for (var i = 0; i < serviceofferingObjs.length; i++) { if (serviceofferingObjs[i].id == serviceofferingid) { selectedServiceofferingObj = serviceofferingObjs[i]; - break; + break; } } - } - if (selectedServiceofferingObj == undefined) - return; - + } + if (selectedServiceofferingObj == undefined) + return; + if (selectedServiceofferingObj.iscustomized == true) { $form.find('.form-item[rel=cpuSpeed]').css('display', 'inline-block'); $form.find('.form-item[rel=cpuNumber]').css('display', 'inline-block'); @@ -1557,9 +1557,9 @@ } }); } - }, + }, cpuSpeed: { - label: 'label.cpu.mhz', + label: 'label.cpu.mhz', validation: { required: true, number: true @@ -1567,7 +1567,7 @@ isHidden: true }, cpuNumber: { - label: 'label.num.cpu.cores', + label: 'label.num.cpu.cores', validation: { required: true, number: true @@ -1575,13 +1575,13 @@ isHidden: true }, memory: { - label: 'label.memory.mb', + label: 'label.memory.mb', validation: { required: true, number: true }, isHidden: true - } + } } }, @@ -1589,24 +1589,24 @@ var data = { id: args.context.instances[0].id, serviceofferingid: args.data.serviceofferingid - }; - + }; + if (args.$form.find('.form-item[rel=cpuSpeed]').is(':visible')) { $.extend(data, { - 'details[0].cpuSpeed': args.data.cpuSpeed + 'details[0].cpuSpeed': args.data.cpuSpeed }); - } + } if (args.$form.find('.form-item[rel=cpuNumber]').is(':visible')) { $.extend(data, { 'details[0].cpuNumber': args.data.cpuNumber }); - } + } if (args.$form.find('.form-item[rel=memory]').is(':visible')) { $.extend(data, { 'details[0].memory': args.data.memory }); - } - + } + $.ajax({ url: createURL('scaleVirtualMachine'), data: data, @@ -1640,7 +1640,7 @@ poll: pollAsyncJobResult } }, - + resetSSHKeyForVirtualMachine: { label: 'Reset SSH Key Pair', createForm: { @@ -1732,18 +1732,18 @@ poll: pollAsyncJobResult } }, - + assignVmToAnotherAccount: { label: 'label.assign.instance.another', createForm: { title: 'label.assign.instance.another', - fields: { + fields: { domainid: { label: 'label.domain', validation: { required: true }, - select: function(args) { + select: function(args) { $.ajax({ url: createURL('listDomains'), data: { @@ -1768,7 +1768,7 @@ data: array1 }); } - }); + }); } }, account: { @@ -1776,22 +1776,22 @@ validation: { required: true } - } + } } }, - action: function(args) { + action: function(args) { $.ajax({ url: createURL('assignVirtualMachine'), data: { virtualmachineid: args.context.instances[0].id, domainid: args.data.domainid, account: args.data.account - }, - success: function(json) { - var item = json.assignvirtualmachineresponse.virtualmachine; + }, + success: function(json) { + var item = json.assignvirtualmachineresponse.virtualmachine; args.response.success({ data: item - }); + }); } }); }, @@ -1805,8 +1805,8 @@ args.complete(); } } - }, - + }, + viewConsole: { label: 'label.view.console', action: { @@ -1835,36 +1835,36 @@ } else { hiddenFields = ["hypervisor", 'xenserverToolsVersion61plus']; } - + if ('instances' in args.context && args.context.instances[0].hypervisor != 'XenServer') { hiddenFields.push('xenserverToolsVersion61plus'); } - - if ('instances' in args.context && args.context.instances[0].guestosid != undefined) { + + if ('instances' in args.context && args.context.instances[0].guestosid != undefined) { if (ostypeObjs == undefined) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, - success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + success: function(json) { + ostypeObjs = json.listostypesresponse.ostype; } }); - } + } if (ostypeObjs != undefined) { var ostypeName; for (var i = 0; i < ostypeObjs.length; i++) { - if (ostypeObjs[i].id == args.context.instances[0].guestosid) { + if (ostypeObjs[i].id == args.context.instances[0].guestosid) { ostypeName = ostypeObjs[i].description; break; } - } - if (ostypeName == undefined || ostypeName.indexOf("Win") == -1) { + } + if (ostypeName == undefined || ostypeName.indexOf("Win") == -1) { hiddenFields.push('xenserverToolsVersion61plus'); - } + } } } - + if (!args.context.instances[0].publicip) { hiddenFields.push('publicip'); } @@ -1920,17 +1920,17 @@ guestosid: { label: 'label.os.type', isEditable: true, - select: function(args) { - if (ostypeObjs == undefined) { + select: function(args) { + if (ostypeObjs == undefined) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, - success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + success: function(json) { + ostypeObjs = json.listostypesresponse.ostype; } }); - } + } var items = []; $(ostypeObjs).each(function() { items.push({ @@ -1959,7 +1959,7 @@ }, converter: cloudStack.converters.toBooleanText }, - + /* isoid: { label: 'label.attached.iso', @@ -2045,7 +2045,7 @@ var jsonObj; if (json.listvirtualmachinesresponse.virtualmachine != null && json.listvirtualmachinesresponse.virtualmachine.length > 0) jsonObj = json.listvirtualmachinesresponse.virtualmachine[0]; - else if (isAdmin()) + else if (isAdmin()) jsonObj = $.extend(args.context.instances[0], { state: "Expunged" }); //after root/domain admin expunge a VM, listVirtualMachines API will no longer returns this expunged VM to all users. @@ -2060,12 +2060,12 @@ else jsonObj.xenserverToolsVersion61plus = false; } - + $(window).trigger('cloudStack.module.sharedFunctions.addExtraProperties', { obj: jsonObj, objType: "UserVM" }); - + args.response.success({ actionFilter: vmActionfilter, data: jsonObj @@ -2100,7 +2100,7 @@ label: 'label.network', select: function(args) { var data1 = { - zoneid: args.context.instances[0].zoneid + zoneid: args.context.instances[0].zoneid }; if (isAdmin()) { $.extend(data1, { @@ -2111,7 +2111,7 @@ account: args.context.instances[0].account, domainid: args.context.instances[0].domainid }); - } + } $.ajax({ url: createURL('listNetworks'), data: data1, @@ -2322,7 +2322,7 @@ secondaryips: secondaryips }) } - + var name = 'NIC ' + (index + 1); if (nic.isdefault) { name += ' (' + _l('label.default') + ')'; @@ -2442,19 +2442,19 @@ } else if (jsonObj.state == 'Running') { allowedActions.push("stop"); allowedActions.push("restart"); - - if ((jsonObj.hypervisor != 'KVM' || g_kvmsnapshotenabled == true) + + if ((jsonObj.hypervisor != 'KVM' || g_kvmsnapshotenabled == true) && (jsonObj.hypervisor != 'LXC')) { allowedActions.push("snapshot"); } - - allowedActions.push("destroy"); + + allowedActions.push("destroy"); allowedActions.push("reinstall"); - + //when userVm is running, scaleUp is not supported for KVM, LXC if (jsonObj.hypervisor != 'KVM' && jsonObj.hypervisor != 'LXC') { allowedActions.push("scaleUp"); - } + } if (isAdmin()) allowedActions.push("migrate"); @@ -2476,13 +2476,13 @@ allowedActions.push("start"); allowedActions.push("destroy"); allowedActions.push("reinstall"); - - if ((jsonObj.hypervisor != 'KVM' || g_kvmsnapshotenabled == true) + + if ((jsonObj.hypervisor != 'KVM' || g_kvmsnapshotenabled == true) && (jsonObj.hypervisor != 'LXC')) { allowedActions.push("snapshot"); } - - allowedActions.push("scaleUp"); //when vm is stopped, scaleUp is supported for all hypervisors + + allowedActions.push("scaleUp"); //when vm is stopped, scaleUp is supported for all hypervisors allowedActions.push("changeAffinity"); if (isAdmin()) @@ -2493,11 +2493,11 @@ } else { allowedActions.push("detachISO"); } - allowedActions.push("resetPassword"); + allowedActions.push("resetPassword"); if (jsonObj.hypervisor == "BareMetal") { allowedActions.push("createTemplate"); } - + if (isAdmin() || isDomainAdmin()) { allowedActions.push("assignVmToAnotherAccount"); } diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 4e337fb57e3..5aa5b62bd68 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -37,7 +37,7 @@ }; //value of Primary IP in subselect dropdown is -1, for single VM selection (API parameter virtualmachineid + vmguestip), e.g. enableStaticNat API, createPortForwardingRule API. - var singleVmSecondaryIPSubselect = function(args) { + var singleVmSecondaryIPSubselect = function(args) { var instance = args.context.instances[0]; var network = args.context.networks[0]; @@ -50,8 +50,8 @@ success: function(json) { var nics = json.listnicsresponse.nic; var ipSelection = []; - - $(nics).map(function(index, nic) { + + $(nics).map(function(index, nic) { var primaryIp = nic.ipaddress; var secondaryIps = nic.secondaryip ? nic.secondaryip : []; var prefix = '[NIC ' + (index + 1) + '] '; @@ -61,7 +61,7 @@ id: nic.networkid + ',-1', description: prefix + primaryIp + ' (Primary)' }); - + // Add secondary IPs $(secondaryIps).map(function(index, secondaryIp) { ipSelection.push({ @@ -69,21 +69,21 @@ description: prefix + secondaryIp.ipaddress }); }); - }); + }); args.response.success({ data: ipSelection }); } }); - - } else { //non-portable IP which has only one NIC + + } else { //non-portable IP which has only one NIC /* var nic = $.grep(instance.nic, function(nic) { return nic.networkid == network.id; })[0]; */ - + // Get NIC IPs $.ajax({ url: createURL('listNics'), @@ -91,18 +91,18 @@ virtualmachineid: instance.id, nicId: instance.nic[0].id }, - success: function(json) { + success: function(json) { var nic = json.listnicsresponse.nic[0]; var primaryIp = nic.ipaddress; var secondaryIps = nic.secondaryip ? nic.secondaryip : []; var ipSelection = []; - + // Add primary IP as default ipSelection.push({ id: primaryIp, description: primaryIp + ' (Primary)' }); - + // Add secondary IPs $(secondaryIps).map(function(index, secondaryIp) { ipSelection.push({ @@ -110,7 +110,7 @@ description: secondaryIp.ipaddress }); }); - + args.response.success({ data: ipSelection }); @@ -120,7 +120,7 @@ }; //value of Primary IP in subselect dropdown is itself (not -1), for multiple VM selection (API parameter vmidipmap), e.g. assignToLoadBalancerRule API. - var multipleVmSecondaryIPSubselect = function(args) { + var multipleVmSecondaryIPSubselect = function(args) { var instance = args.context.instances[0]; var network = args.context.networks[0]; @@ -145,7 +145,7 @@ id: nic.networkid + ',' + primaryIp, description: prefix + primaryIp + ' (Primary)' }); - + // Add secondary IPs $(secondaryIps).map(function(index, secondaryIp) { ipSelection.push({ @@ -153,21 +153,21 @@ description: prefix + secondaryIp.ipaddress }); }); - }); - + }); + args.response.success({ data: ipSelection }); } - }); - - } else { //non-portable IP which has only one NIC + }); + + } else { //non-portable IP which has only one NIC /* var nic = $.grep(instance.nic, function(nic) { return nic.networkid == network.id; })[0]; */ - + // Get NIC IPs $.ajax({ url: createURL('listNics'), @@ -175,7 +175,7 @@ virtualmachineid: instance.id, nicId: instance.nic[0].id }, - success: function(json) { + success: function(json) { var nic = json.listnicsresponse.nic[0]; var primaryIp = nic.ipaddress; var secondaryIps = nic.secondaryip ? nic.secondaryip : []; @@ -207,9 +207,9 @@ }); } }); - } + } }; - + var ipChangeNotice = function() { cloudStack.dialog.confirm({ message: 'message.ip.address.changed', @@ -243,7 +243,7 @@ ipObj.issystem == true) { return []; } - + if (ipObj.issourcenat) { //sourceNAT IP doesn't support staticNAT disallowedActions.push('enableStaticNAT'); disallowedActions.push('disableStaticNAT'); @@ -255,10 +255,10 @@ } else { disallowedActions.push('disableStaticNAT'); } - } + } //***** apply to both Isolated Guest Network IP, VPC IP (end) ***** - - + + if (!('vpc' in args.context)) { //***** Guest Network section > Guest Network page > IP Address page ***** if (args.context.networks[0].networkofferingconservemode == false) { /* @@ -268,7 +268,7 @@ disallowedActions.push('enableStaticNAT'); disallowedActions.push('enableVPN'); } - + /* (2) If IP is non-SourceNat, show StaticNat/VPN/PortForwarding/LoadBalancer at first. 1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer. @@ -283,7 +283,7 @@ if (ipObj.vpnenabled) { //2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer. disallowedActions.push('enableStaticNAT'); } - + //3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer. $.ajax({ url: createURL('listPortForwardingRules'), @@ -301,7 +301,7 @@ } } }); - + //4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding. $.ajax({ url: createURL('listLoadBalancerRules'), @@ -321,7 +321,7 @@ }); } } - + if (ipObj.networkOfferingHavingVpnService == true) { if (ipObj.vpnenabled) { disallowedActions.push('enableVPN'); @@ -332,8 +332,8 @@ disallowedActions.push('disableVPN'); disallowedActions.push('enableVPN'); } - } else { //***** VPC section > Configuration VPC > Router > Public IP Addresses ***** - if (ipObj.issourcenat) { //VPC sourceNAT IP: supports VPN + } else { //***** VPC section > Configuration VPC > Router > Public IP Addresses ***** + if (ipObj.issourcenat) { //VPC sourceNAT IP: supports VPN if (ipObj.vpnenabled) { disallowedActions.push('enableVPN'); } else { @@ -343,7 +343,7 @@ disallowedActions.push('enableVPN'); disallowedActions.push('disableVPN'); } - } + } allowedActions = $.grep(allowedActions, function(item) { return $.inArray(item, disallowedActions) == -1; @@ -487,15 +487,15 @@ }, dependsOn: 'zoneId', docID: 'helpGuestNetworkNetworkOffering', - select: function(args) { + select: function(args) { var data = { zoneid: args.zoneId, guestiptype: 'Isolated', supportedServices: 'SourceNat', state: 'Enabled' }; - - if ('vpc' in args.context) { //from VPC section + + if ('vpc' in args.context) { //from VPC section $.extend(data, { forVpc: true }); @@ -508,10 +508,10 @@ listAll: true }, async: false, - success: function(json) { - vpcs = json.listvpcsresponse.vpc; + success: function(json) { + vpcs = json.listvpcsresponse.vpc; } - }); + }); if (vpcs == null || vpcs.length == 0) { //if there is no VPC in the system $.extend(data, { forVpc: false @@ -519,12 +519,12 @@ } } - if(!isAdmin()) { //normal user is not aware of the VLANs in the system, so normal user is not allowed to create network with network offerings whose specifyvlan = true + if(!isAdmin()) { //normal user is not aware of the VLANs in the system, so normal user is not allowed to create network with network offerings whose specifyvlan = true $.extend(data, { specifyvlan: false }); } - + $.ajax({ url: createURL('listNetworkOfferings'), data: data, @@ -554,7 +554,7 @@ }) }); } - }); + }); } }, @@ -1124,8 +1124,8 @@ var isAdvancedSGZone = false; var hiddenTabs = []; var isSharedNetwork; - - var thisNetwork = args.context.networks[0]; + + var thisNetwork = args.context.networks[0]; if (thisNetwork.vpcid != null) { isVPC = true; } @@ -1157,7 +1157,7 @@ return true; }); } - }); + }); // Get zone data $.ajax({ @@ -1261,7 +1261,7 @@ return _l('label.na'); } }, - + ispersistent: { label: 'label.persistent', converter: cloudStack.converters.toBooleanText @@ -1279,11 +1279,11 @@ vlan: { label: 'label.vnet.id' }, - + broadcasturi: { label: 'label.broadcasturi' }, - + networkofferingid: { label: 'label.network.offering', isEditable: true, @@ -1317,13 +1317,13 @@ }); } }); - + //include currently selected network offeirng to dropdown items.push({ id: args.context.networks[0].networkofferingid, description: args.context.networks[0].networkofferingdisplaytext - }); - + }); + args.response.success({ data: items }); @@ -1390,13 +1390,13 @@ async: true, success: function(json) { var jsonObj = json.listnetworksresponse.network[0]; - addExtraPropertiesToGuestNetworkObject(jsonObj); - + addExtraPropertiesToGuestNetworkObject(jsonObj); + $(window).trigger('cloudStack.module.sharedFunctions.addExtraProperties', { obj: jsonObj, objType: "Network" }); - + args.response.success({ actionFilter: cloudStack.actionFilter.guestNetwork, data: jsonObj @@ -2108,35 +2108,35 @@ if (zoneObj.networktype == 'Basic') { var havingEIP = false, - havingELB = false; - + havingELB = false; + var services = args.context.networks[0].service; if(services != null) { - for(var i = 0; i < services.length; i++) { + for(var i = 0; i < services.length; i++) { var thisService = services[i]; var capabilities = thisService.capability; - if (thisService.name == "StaticNat") { + if (thisService.name == "StaticNat") { if(capabilities != null) { - for(var k = 0; k < capabilities.length; k++) { - if (capabilities[k].name == "ElasticIp" && capabilities[k].value == "true") { + for(var k = 0; k < capabilities.length; k++) { + if (capabilities[k].name == "ElasticIp" && capabilities[k].value == "true") { havingEIP = true; - break; + break; } } - } + } } else if (thisService.name == "Lb") { if(capabilities != null) { - for(var k = 0; k < capabilities.length; k++) { - if (capabilities[k].name == "ElasticLb" && capabilities[k].value == "true") { + for(var k = 0; k < capabilities.length; k++) { + if (capabilities[k].name == "ElasticLb" && capabilities[k].value == "true") { havingELB = true; - break; + break; } } - } - } + } + } } } - + if (havingEIP != true || havingELB != true) { //not EIP-ELB return false; //acquire new IP is not allowed in non-EIP-ELB basic zone } @@ -2155,7 +2155,7 @@ return true; //VPC section, show Acquire IP button } }, - messages: { + messages: { notification: function(args) { return 'label.acquire.new.ip'; } @@ -2163,29 +2163,29 @@ createForm: { title: 'label.acquire.new.ip', desc: 'Please confirm that you want to acquire new IP', - preFilter: function(args) { + preFilter: function(args) { $.ajax({ url: createURL('listRegions'), success: function(json) { var selectedRegionName = $(".region-switcher .title").text(); if ( selectedRegionName == undefined || selectedRegionName.length == 0) { selectedRegionName = "Local"; - } - var items = json.listregionsresponse.region; + } + var items = json.listregionsresponse.region; if(items != null) { - for(var i = 0; i < items.length; i++) { + for(var i = 0; i < items.length; i++) { if(items[i].name == selectedRegionName) { if(items[i].portableipserviceenabled == true) { args.$form.find('.form-item[rel=isportable]').css('display', 'inline-block'); } else { args.$form.find('.form-item[rel=isportable]').hide(); - } + } break; } - } + } } - } - }); + } + }); }, fields: { isportable: { @@ -2209,13 +2209,13 @@ } }, action: function(args) { - var dataObj = {}; + var dataObj = {}; if (args.$form.find('.form-item[rel=isportable]').css("display") != "none") { $.extend(dataObj, { isportable: args.data.isportable - }); + }); } - + if ('vpc' in args.context) { //from VPC section $.extend(dataObj, { vpcid: args.context.vpc[0].id @@ -2266,9 +2266,9 @@ }, dataProvider: function(args) { - var items = []; + var items = []; var data = {}; - listViewDataProvider(args, data); + listViewDataProvider(args, data); if (args.context.networks) { $.extend(data, { associatedNetworkId: args.context.networks[0].id @@ -2278,8 +2278,8 @@ $.extend(data, { vpcid: args.context.vpc[0].id }); - } - + } + $.ajax({ url: createURL('listPublicIpAddresses'), data: $.extend({}, data, { @@ -2288,48 +2288,48 @@ dataType: "json", async: false, success: function(json) { - var ips = json.listpublicipaddressesresponse.publicipaddress; + var ips = json.listpublicipaddressesresponse.publicipaddress; if(ips != null) { - for(var i = 0; i < ips.length; i++) { + for(var i = 0; i < ips.length; i++) { getExtaPropertiesForIpObj(ips[i], args); - items.push(ips[i]); + items.push(ips[i]); } - } + } } }); - - if (g_supportELB == "guest") { + + if (g_supportELB == "guest") { $.ajax({ url: createURL('listPublicIpAddresses'), data: $.extend({}, data, { - forvirtualnetwork: false, // ELB IPs are allocated on guest network + forvirtualnetwork: false, // ELB IPs are allocated on guest network forloadbalancing: true }), dataType: "json", async: false, success: function(json) { - var ips = json.listpublicipaddressesresponse.publicipaddress; + var ips = json.listpublicipaddressesresponse.publicipaddress; if(ips != null) { - for(var i = 0; i < ips.length; i++) { + for(var i = 0; i < ips.length; i++) { getExtaPropertiesForIpObj(ips[i], args); - items.push(ips[i]); + items.push(ips[i]); } - } + } } }); } - + args.response.success({ actionFilter: actionFilters.ipAddress, data: items - }); + }); }, // Detail view detailView: { name: 'IP address detail', tabFilter: function(args) { - var item = args.context.ipAddresses[0]; + var item = args.context.ipAddresses[0]; var disabledTabs = []; var ipAddress = args.context.ipAddresses[0]; @@ -2351,14 +2351,14 @@ if (ipAddress.vpcid != null && ipAddress.issourcenat) { //don't show Configuration(ipRules) tab on VPC sourceNAT IP disableIpRules = true; } - + if (('vpc' in args.context) == false && ipAddress.vpcid != null) { //from Guest Network section, don't show Configuration(ipRules) tab on VPC IP disableIpRules = true; } - if (disableVpn) + if (disableVpn) disabledTabs.push('vpn'); - if (disableIpRules) + if (disableIpRules) disabledTabs.push('ipRules'); return disabledTabs; @@ -2379,12 +2379,12 @@ success: function(data) { args.response.success({ _custom: { - getUpdatedItem: function(json) { + getUpdatedItem: function(json) { var vpnenabledAndRunning = false; if (json.queryasyncjobresultresponse.jobresult.remoteaccessvpn.state == "Running") { vpnenabledAndRunning = true; - } - + } + return { remoteaccessvpn: json.queryasyncjobresultresponse.jobresult.remoteaccessvpn, vpnenabled: vpnenabledAndRunning @@ -2412,10 +2412,10 @@ complete: function(args) { var msg; if (args.remoteaccessvpn.state == "Running") { - msg = _l('message.enabled.vpn') + ' ' + args.remoteaccessvpn.publicip + '.' + '
' + _l('message.enabled.vpn.ip.sec') + '
' + args.remoteaccessvpn.presharedkey; + msg = _l('message.enabled.vpn') + ' ' + args.remoteaccessvpn.publicip + '.' + '
' + _l('message.enabled.vpn.ip.sec') + '
' + args.remoteaccessvpn.presharedkey; } else { msg = "Remote Access VPN configuration has been generated, but it failed to apply. Please check connectivity of the network element, then re-try."; - } + } return msg; } }, @@ -2797,10 +2797,10 @@ }, associatednetworkid: { label: 'label.associated.network.id' - }, + }, associatednetworkname: { label: 'label.network.name' - }, + }, state: { label: 'label.state' }, @@ -2896,7 +2896,7 @@ if (!('vpc' in args.context)) { //from Guest Network section var services = args.context.networks[0].service; if(services != null) { - for(var i = 0; i < services.length; i++) { + for(var i = 0; i < services.length; i++) { var thisService = services[i]; if (thisService.name == "Firewall") havingFirewallService = true; @@ -2905,9 +2905,9 @@ if (thisService.name == "Lb") havingLbService = true; if (thisService.name == "Vpn") - havingVpnService = true; + havingVpnService = true; } - } + } } else { //from VPC section //a VPC network from Guest Network section or from VPC section // Firewall is not supported in IP from VPC section @@ -2929,7 +2929,7 @@ }, async: false, success: function(json) { - var networkObj = json.listnetworksresponse.network[0]; + var networkObj = json.listnetworksresponse.network[0]; var services = networkObj.service; if(services != null) { for(var i = 0; i < services.length; i++) { @@ -2938,8 +2938,8 @@ if (services[i].name == "Lb") havingLbService = true; } - } - + } + if (networkObj.networkofferingconservemode == false) { /* (1) If IP is SourceNat, no StaticNat/VPN/PortForwarding/LoadBalancer can be enabled/added. @@ -3012,11 +3012,11 @@ } }); } - } + } } }); } - } + } return disallowedActions; }, @@ -3368,28 +3368,28 @@ } }, filters: false, - - //when server-side change of adding new parameter "vmidipmap" to assignToLoadBalancerRule API is in, uncomment the following commented 4 lines. + + //when server-side change of adding new parameter "vmidipmap" to assignToLoadBalancerRule API is in, uncomment the following commented 4 lines. subselect: { isMultiple: true, label: 'label.use.vm.ips', - dataProvider: multipleVmSecondaryIPSubselect + dataProvider: multipleVmSecondaryIPSubselect }, - + dataProvider: function(args) { var itemData = $.isArray(args.context.multiRule) && args.context.subItemData ? args.context.subItemData : []; var data = {}; listViewDataProvider(args, data); - + var networkid; if ('vpc' in args.context) { networkid = args.context.multiData.tier; } else { networkid = args.context.ipAddresses[0].associatednetworkid; } - $.extend(data, { - networkid: networkid + $.extend(data, { + networkid: networkid }); if (!args.context.projects) { @@ -3520,7 +3520,7 @@ } }, multipleAdd: true, - + fields: { 'name': { edit: true, @@ -3587,8 +3587,8 @@ buttonLabel: 'label.configure', action: cloudStack.uiCustom.autoscaler(cloudStack.autoscaler) }, - isHidden: function(args) { - if (!('vpc' in args.context)) { //from Guest Network section + isHidden: function(args) { + if (!('vpc' in args.context)) { //from Guest Network section var lbProviderIsNetscaler = false; $.ajax({ url: createURL('listNetworkOfferings'), @@ -3596,8 +3596,8 @@ id: args.context.networks[0].networkofferingid }, async: false, - success: function(json) { - var networkOffering = json.listnetworkofferingsresponse.networkoffering[0]; + success: function(json) { + var networkOffering = json.listnetworkofferingsresponse.networkoffering[0]; var services = networkOffering.service; if (services != null) { for (var i = 0; i < services.length; i++) { @@ -3609,23 +3609,23 @@ lbProviderIsNetscaler = true; break; } - } + } } break; } } } } - }); + }); if (lbProviderIsNetscaler == true) { //AutoScale is only supported on Netscaler (but not on any other provider like VirtualRouter) return false; //show AutoScale button } else { return 2; //hide Autoscale button (both header and form) - } + } } else { //from VPC section //VPC doesn't support autoscale return 2; - } + } } }, @@ -3633,7 +3633,7 @@ label: 'label.add.vms', addButton: true }, - + 'state' : { edit: 'ignore', label: 'label.state' @@ -3669,7 +3669,7 @@ }; var stickyData = $.extend(true, {}, args.data.sticky); - + //***** create new LB rule > Add VMs ***** $.ajax({ url: createURL('createLoadBalancerRule'), @@ -3680,52 +3680,52 @@ var itemData = args.itemData; var jobID = data.createloadbalancerruleresponse.jobid; var lbID = data.createloadbalancerruleresponse.id; - + var inputData = { - id: data.createloadbalancerruleresponse.id - }; - + id: data.createloadbalancerruleresponse.id + }; + /* var inputData = { id: data.createloadbalancerruleresponse.id, virtualmachineids: $.map(itemData, function(elem) { return elem.id; }).join(',') - }; - */ + }; + */ //virtualmachineids parameter has been replaced with vmidipmap parameter, so comment out the 6 lines above. - - - /* + + + /* * e.g. first VM(xxx) has two IPs(10.1.1.~), second VM(yyy) has three IPs(10.2.2.~): - * vmidipmap[0].vmid=xxx vmidipmap[0].vmip=10.1.1.11 - * vmidipmap[1].vmid=xxx vmidipmap[1].vmip=10.1.1.12 - * vmidipmap[2].vmid=yyy vmidipmap[2].vmip=10.2.2.77 - * vmidipmap[3].vmid=yyy vmidipmap[3].vmip=10.2.2.78 - * vmidipmap[4].vmid=yyy vmidipmap[4].vmip=10.2.2.79 + * vmidipmap[0].vmid=xxx vmidipmap[0].vmip=10.1.1.11 + * vmidipmap[1].vmid=xxx vmidipmap[1].vmip=10.1.1.12 + * vmidipmap[2].vmid=yyy vmidipmap[2].vmip=10.2.2.77 + * vmidipmap[3].vmid=yyy vmidipmap[3].vmip=10.2.2.78 + * vmidipmap[4].vmid=yyy vmidipmap[4].vmip=10.2.2.79 */ var selectedVMs = args.itemData; if (selectedVMs != null) { var vmidipmapIndex = 0; - for (var vmIndex = 0; vmIndex < selectedVMs.length; vmIndex++) { + for (var vmIndex = 0; vmIndex < selectedVMs.length; vmIndex++) { var selectedIPs = selectedVMs[vmIndex]._subselect; for (var ipIndex = 0; ipIndex < selectedIPs.length; ipIndex++) { inputData['vmidipmap[' + vmidipmapIndex + '].vmid'] = selectedVMs[vmIndex].id; - + if (args.context.ipAddresses[0].isportable) { - inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; } else { inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; } - + vmidipmapIndex++; - } + } } - } - + } + $.ajax({ url: createURL('assignToLoadBalancerRule'), - data: inputData, + data: inputData, success: function(data) { var jobID = data.assigntoloadbalancerruleresponse.jobid; var lbStickyCreated = false; @@ -3837,36 +3837,36 @@ label: 'label.add.vms.to.lb', action: function(args) { var inputData = { - id: args.multiRule.id - }; - - /* + id: args.multiRule.id + }; + + /* * e.g. first VM(xxx) has two IPs(10.1.1.~), second VM(yyy) has three IPs(10.2.2.~): - * vmidipmap[0].vmid=xxx vmidipmap[0].vmip=10.1.1.11 - * vmidipmap[1].vmid=xxx vmidipmap[1].vmip=10.1.1.12 - * vmidipmap[2].vmid=yyy vmidipmap[2].vmip=10.2.2.77 - * vmidipmap[3].vmid=yyy vmidipmap[3].vmip=10.2.2.78 - * vmidipmap[4].vmid=yyy vmidipmap[4].vmip=10.2.2.79 + * vmidipmap[0].vmid=xxx vmidipmap[0].vmip=10.1.1.11 + * vmidipmap[1].vmid=xxx vmidipmap[1].vmip=10.1.1.12 + * vmidipmap[2].vmid=yyy vmidipmap[2].vmip=10.2.2.77 + * vmidipmap[3].vmid=yyy vmidipmap[3].vmip=10.2.2.78 + * vmidipmap[4].vmid=yyy vmidipmap[4].vmip=10.2.2.79 */ var selectedVMs = args.data; if (selectedVMs != null) { var vmidipmapIndex = 0; - for (var vmIndex = 0; vmIndex < selectedVMs.length; vmIndex++) { + for (var vmIndex = 0; vmIndex < selectedVMs.length; vmIndex++) { var selectedIPs = selectedVMs[vmIndex]._subselect; for (var ipIndex = 0; ipIndex < selectedIPs.length; ipIndex++) { inputData['vmidipmap[' + vmidipmapIndex + '].vmid'] = selectedVMs[vmIndex].id; - + if (args.context.ipAddresses[0].isportable) { - inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; + inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex].split(',')[1]; } else { inputData['vmidipmap[' + vmidipmapIndex + '].vmip'] = selectedIPs[ipIndex]; } - + vmidipmapIndex++; - } + } } - } - + } + $.ajax({ url: createURL('assignToLoadBalancerRule'), data: inputData, @@ -3892,21 +3892,21 @@ }, destroy: { label: 'label.remove.vm.from.lb', - action: function(args) { + action: function(args) { var inputData; if (args.item.itemIp == undefined) { inputData = { id: args.multiRule.id, virtualmachineids: args.item.id }; - } else { + } else { inputData = { id: args.multiRule.id, "vmidipmap[0].vmid": args.item.id, - "vmidipmap[0].vmip": args.item.itemIp - }; - } - + "vmidipmap[0].vmip": args.item.itemIp + }; + } + $.ajax({ url: createURL('removeFromLoadBalancerRule'), data: inputData, @@ -3943,12 +3943,12 @@ dataType: 'json', async: true, success: function(data) { - var loadbalancerrules = data.listloadbalancerrulesresponse.loadbalancerrule; - - $(loadbalancerrules).each(function() { + var loadbalancerrules = data.listloadbalancerrulesresponse.loadbalancerrule; + + $(loadbalancerrules).each(function() { var lbRule = this; var stickyData = {}; - + //var lbInstances = []; var itemData = []; @@ -4017,19 +4017,19 @@ data: { listAll: true, lbvmips: true, - id: lbRule.id + id: lbRule.id }, success: function(data) { //when "lbvmips: true" is not passed to API - //lbVMs = data.listloadbalancerruleinstancesresponse.loadbalancerruleinstance; - + //lbVMs = data.listloadbalancerruleinstancesresponse.loadbalancerruleinstance; + //when "lbvmips: true" is passed to API - lbrulevmidips = data.listloadbalancerruleinstancesresponse.lbrulevmidip; - + lbrulevmidips = data.listloadbalancerruleinstancesresponse.lbrulevmidip; + if (lbrulevmidips != null) { for (var k = 0; k < lbrulevmidips.length; k++) { var lbrulevmidip = lbrulevmidips[k]; - var lbVM = lbrulevmidip.loadbalancerruleinstance; + var lbVM = lbrulevmidip.loadbalancerruleinstance; if (lbVM.displayname.indexOf('AutoScale-LB-') > -1) //autoscale VM is not allowed to be deleted manually. So, hide destroy button lbVM._hideActions = ['destroy']; @@ -4037,24 +4037,24 @@ lbVM._itemStateLabel = 'label.service.state'; lbVM._itemState = lbVM.servicestate; } - + if (lbrulevmidip.lbvmipaddresses != null) { for (var m = 0 ; m < lbrulevmidip.lbvmipaddresses.length; m++) { var ip = lbrulevmidip.lbvmipaddresses[m]; itemData.push($.extend({}, lbVM, { itemIp: ip - })); + })); } } else { itemData.push(lbVM); - } + } } - } + } }, error: function(data) { args.response.error(parseXMLHttpResponse(data)); } - }); + }); $.extend(lbRule, { _itemName: 'name', @@ -4160,16 +4160,16 @@ dataProvider: function(args) { var data = {}; listViewDataProvider(args, data); - + var networkid; if ('vpc' in args.context) { networkid = args.context.multiData.tier; } else { networkid = args.context.ipAddresses[0].associatednetworkid; - } + } $.extend(data, { networkid: networkid - }); + }); if (!args.context.projects) { $.extend(data, { @@ -4261,7 +4261,7 @@ virtualmachineid: args.itemData[0].id, openfirewall: false }; - + if (args.context.ipAddresses[0].isportable) { var subselect = args.itemData[0]._subselect.split(','); //var networkid = subselect[0]; @@ -4274,7 +4274,7 @@ } } else if (args.itemData[0]._subselect && args.itemData[0]._subselect != -1) { data.vmguestip = args.itemData[0]._subselect; - } + } if ('vpc' in args.context) { //from VPC section if (args.data.tier == null) { @@ -4297,7 +4297,7 @@ args.response.success({ _custom: { jobId: data.createportforwardingruleresponse.jobid, - getUpdatedItem: function(json) { + getUpdatedItem: function(json) { return json.queryasyncjobresultresponse.jobresult.portforwardingrule; } }, @@ -4378,16 +4378,16 @@ success: function(data) { loadCurrent++; var vms = data.listvirtualmachinesresponse.virtualmachine; - + //if this VM is destroyed, data.listvirtualmachinesresponse.virtualmachine will be undefined for regular-user (CLOUDSTACK-3195) - if (vms == undefined) { + if (vms == undefined) { vms = [{ "id": item.virtualmachineid, "name": item.virtualmachinename, "displayname": item.virtualmachinedisplayname - }]; - } - + }]; + } + $.extend(item, { _itemData: $.map(vms, function(vm) { return $.extend(vm, { @@ -5558,7 +5558,7 @@ return 'message.restart.vpc.remark'; } }, - + preFilter: function(args) { var zoneObj; $.ajax({ @@ -5569,13 +5569,13 @@ zoneObj = json.listzonesresponse.zone[0]; } }); - - + + args.$form.find('.form-item[rel=cleanup]').find('input').attr('checked', 'checked'); //checked args.$form.find('.form-item[rel=cleanup]').css('display', 'inline-block'); //shown args.$form.find('.form-item[rel=makeredundant]').find('input').attr('checked', 'checked'); //checked args.$form.find('.form-item[rel=makeredundant]').css('display', 'inline-block'); //shown - + if (Boolean(args.context.vpc[0].redundantvpcrouter)) { args.$form.find('.form-item[rel=makeredundant]').hide(); } else { @@ -6479,18 +6479,18 @@ } }; - function getExtaPropertiesForIpObj(ipObj, args) { - if (!('vpc' in args.context)) { //***** Guest Network section > Guest Network page > IP Address page ***** + function getExtaPropertiesForIpObj(ipObj, args) { + if (!('vpc' in args.context)) { //***** Guest Network section > Guest Network page > IP Address page ***** var services = args.context.networks[0].service; if(services != null) { - for(var i = 0; i < services.length; i++) { - var thisService = services[i]; + for(var i = 0; i < services.length; i++) { + var thisService = services[i]; if (thisService.name == "Vpn") { - ipObj.networkOfferingHavingVpnService = true; + ipObj.networkOfferingHavingVpnService = true; break; } } - } + } if (ipObj.networkOfferingHavingVpnService == true) { $.ajax({ url: createURL('listRemoteAccessVpns'), @@ -6509,9 +6509,9 @@ } } }); - } - } else { //***** VPC section > Configuration VPC > Router > Public IP Addresses ***** - if (ipObj.issourcenat) { //VPC sourceNAT IP: supports VPN + } + } else { //***** VPC section > Configuration VPC > Router > Public IP Addresses ***** + if (ipObj.issourcenat) { //VPC sourceNAT IP: supports VPN $.ajax({ url: createURL('listRemoteAccessVpns'), data: { @@ -6528,8 +6528,8 @@ ipObj.vpnenabled = false; } } - }); - } + }); + } } }; diff --git a/ui/scripts/projects.js b/ui/scripts/projects.js index 86e4f88b052..edfd80a5dbc 100644 --- a/ui/scripts/projects.js +++ b/ui/scripts/projects.js @@ -621,7 +621,7 @@ }, // Project listing data provider - dataProvider: function(args) { + dataProvider: function(args) { var user = args.context.users[0]; var data1 = { accountId: user.userid, @@ -632,20 +632,20 @@ } var array1 = []; - var page = 1; - var getNextPage = function() { + var page = 1; + var getNextPage = function() { var data2 = $.extend({}, data1, { page: page, pageSize: 500 }); - + $.ajax({ url: createURL('listProjects', { ignoreProject: true }), - data: data2, + data: data2, async: false, - success: function(json) { + success: function(json) { var projects = json.listprojectsresponse.project; if (projects != undefined) { for(var i = 0; i < projects.length; i++) { @@ -653,16 +653,16 @@ displayText: projects[i].displaytext })); } - } - if (array1.length < json.listprojectsresponse.count) { + } + if (array1.length < json.listprojectsresponse.count) { page++; getNextPage(); - } + } } }); } - getNextPage(); - args.response.success({ data: array1 }); + getNextPage(); + args.response.success({ data: array1 }); } }; diff --git a/ui/scripts/regions.js b/ui/scripts/regions.js index f7cb8fdaeed..d27719dff30 100644 --- a/ui/scripts/regions.js +++ b/ui/scripts/regions.js @@ -481,32 +481,32 @@ path: 'regions.lbUnderGSLB', label: 'label.gslb.assigned.lb' }, - actions: { + actions: { edit: { label: 'label.edit', - action: function(args) { + action: function(args) { var data = { id: args.context.GSLB[0].id, description: args.data.description, gslblbmethod: args.data.gslblbmethod - }; + }; $.ajax({ url: createURL('updateGlobalLoadBalancerRule'), data: data, - success: function(json) { - var jid = json.updategloballoadbalancerruleresponse.jobid; + success: function(json) { + var jid = json.updategloballoadbalancerruleresponse.jobid; args.response.success({ _custom: { jobId: jid } - }); + }); } }); - }, + }, notification: { poll: pollAsyncJobResult } - }, + }, remove: { label: 'label.gslb.delete', messages: { diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index 2dc19d94dcc..cf0b064bcb7 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -268,7 +268,7 @@ var addGuestNetworkDialog = { if (items != null) { for (var i = 0; i < items.length; i++) { if (items[i].networktype == 'Advanced') { - addGuestNetworkDialog.zoneObjs.push(items[i]); + addGuestNetworkDialog.zoneObjs.push(items[i]); } } } @@ -294,7 +294,7 @@ var addGuestNetworkDialog = { if ('physicalNetworks' in args.context) { //Infrastructure menu > zone detail > guest traffic type > network tab (only shown in advanced zone) > add guest network dialog addGuestNetworkDialog.physicalNetworkObjs = args.context.physicalNetworks; } else { //Network menu > guest network section > add guest network dialog - var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val(); + var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val(); if (selectedZoneId != undefined && selectedZoneId.length > 0) { $.ajax({ url: createURL('listPhysicalNetworks'), @@ -302,7 +302,7 @@ var addGuestNetworkDialog = { zoneid: selectedZoneId }, async: false, - success: function(json) { + success: function(json) { var items = []; var physicalnetworks = json.listphysicalnetworksresponse.physicalnetwork; if (physicalnetworks != null) { @@ -313,7 +313,7 @@ var addGuestNetworkDialog = { physicalnetworkid: physicalnetworks[i].id }, async: false, - success: function(json) { + success: function(json) { var traffictypes = json.listtraffictypesresponse.traffictype; if (traffictypes != null) { for (var k = 0; k < traffictypes.length; k++) { @@ -322,13 +322,13 @@ var addGuestNetworkDialog = { break; } } - } + } } }); - } - } - - addGuestNetworkDialog.physicalNetworkObjs = items; + } + } + + addGuestNetworkDialog.physicalNetworkObjs = items; } }); } @@ -536,14 +536,14 @@ var addGuestNetworkDialog = { label: 'label.network.offering', docID: 'helpGuestNetworkZoneNetworkOffering', dependsOn: ['zoneId', 'physicalNetworkId', 'scope'], - select: function(args) { + select: function(args) { if(args.$form.find('.form-item[rel=zoneId]').find('select').val() == null || args.$form.find('.form-item[rel=zoneId]').find('select').val().length == 0) { args.response.success({ data: null }); return; } - + var data = { state: 'Enabled', zoneid: args.$form.find('.form-item[rel=zoneId]').find('select').val() @@ -977,7 +977,7 @@ cloudStack.converters = { convertBytes: function(bytes) { if (bytes == undefined) return ''; - + if (bytes < 1024 * 1024) { return (bytes / 1024).toFixed(2) + " KB"; } else if (bytes < 1024 * 1024 * 1024) { @@ -1030,20 +1030,20 @@ cloudStack.converters = { if (g_timezoneoffset != null) { localDate = disconnected.getTimePlusTimezoneOffset(g_timezoneoffset); - } else { + } else { var browserDate = new Date(); - var browserTimezoneoffset = browserDate.getTimezoneOffset(); - if (browserTimezoneoffset == undefined || isNaN(browserTimezoneoffset) ) { + var browserTimezoneoffset = browserDate.getTimezoneOffset(); + if (browserTimezoneoffset == undefined || isNaN(browserTimezoneoffset) ) { localDate = disconnected.toUTCString(); } else { g_timezoneoffset = (browserTimezoneoffset/60) * (-1); localDate = disconnected.getTimePlusTimezoneOffset(g_timezoneoffset); - } + } } } return localDate; }, - toBooleanText: function(booleanValue) { + toBooleanText: function(booleanValue) { var text1; if (booleanValue == true) { text1 = "Yes"; @@ -1052,7 +1052,7 @@ cloudStack.converters = { } else { //booleanValue == undefined text1 = ""; } - return text1; + return text1; }, convertHz: function(hz) { if (hz == null) @@ -1239,13 +1239,13 @@ cloudStack.converters = { } } -function isModuleIncluded(moduleName) { +function isModuleIncluded(moduleName) { for(var moduleIndex = 0; moduleIndex < cloudStack.modules.length; moduleIndex++) { if (cloudStack.modules[moduleIndex] == moduleName) { - return true; - break; + return true; + break; } - } + } return false; } @@ -1313,7 +1313,7 @@ var addExtraPropertiesToGuestNetworkObject = function(jsonObj) { jsonObj.vlan = jsonObj.broadcasturi.replace("vlan://", ""); } if(jsonObj.vxlan == null && jsonObj.broadcasturi != null && jsonObj.broadcasturi.substring(0,8) == "vxlan://") { - jsonObj.vxlan = jsonObj.broadcasturi.replace("vxlan://", ""); + jsonObj.vxlan = jsonObj.broadcasturi.replace("vxlan://", ""); } } @@ -1324,7 +1324,7 @@ var addExtraPropertiesToUcsBladeObject = function(jsonObj) { jsonObj.bladeid = array1[2]; } -var processPropertiesInImagestoreObject = function(jsonObj) { +var processPropertiesInImagestoreObject = function(jsonObj) { if (jsonObj.url != undefined) { var url = jsonObj.url; //e.g. 'cifs://10.1.1.1/aaa/aaa2/aaa3?user=bbb&password=ccc&domain=ddd' var passwordIndex = url.indexOf('&password='); //38 @@ -1332,7 +1332,7 @@ var processPropertiesInImagestoreObject = function(jsonObj) { if (passwordIndex >= 0) { jsonObj.url = url.substring(0, passwordIndex) + url.substring(domainIndex); //remove '&password=ccc' from jsonObj.url } - } + } } //find service object in network object @@ -1390,12 +1390,12 @@ var processPropertiesInImagestoreObject = function(jsonObj) { if (server.indexOf('://') == -1) { url += 'cifs://'; } - + url += (server + path); - + return url; } - + function presetupURL(server, path) { var url; if (server.indexOf("://") == -1) @@ -1499,11 +1499,11 @@ var processPropertiesInImagestoreObject = function(jsonObj) { } return vmName; } - + var timezoneMap = new Object(); timezoneMap["Etc/GMT+12"] = "Etc/GMT+12 [GMT-12:00]"; timezoneMap["Etc/GMT+11"] = "Etc/GMT+11 [GMT-11:00]"; -timezoneMap["Pacific/Midway"] = "Pacific/Midway [Samoa Standard Time]"; +timezoneMap["Pacific/Midway"] = "Pacific/Midway [Samoa Standard Time]"; timezoneMap["Pacific/Niue"] = "Pacific/Niue [Niue Time]"; timezoneMap["Pacific/Pago_Pago"] = "Pacific/Pago_Pago [Samoa Standard Time]"; timezoneMap["Pacific/Samoa"] = "Pacific/Samoa [Samoa Standard Time]"; @@ -2256,7 +2256,7 @@ cloudStack.api = { args.response.error(parseXMLHttpResponse(json)); } }); - } + } } }; } diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js index 9cabaf9a83a..782622dec89 100644 --- a/ui/scripts/storage.js +++ b/ui/scripts/storage.js @@ -330,7 +330,7 @@ }); } - }, + }, diskOffering: { label: 'Custom Disk Offering', docID: 'helpVolumeDiskOffering', @@ -347,7 +347,7 @@ description: '' }]; $(diskofferingObjs).each(function() { - if (this.iscustomized == true) { + if (this.iscustomized == true) { items.push({ id: this.id, description: this.displaytext @@ -360,7 +360,7 @@ } }); } - }, + }, diskOffering: { label: 'Custom Disk Offering', docID: 'helpVolumeDiskOffering', @@ -377,7 +377,7 @@ description: '' }]; $(diskofferingObjs).each(function() { - if (this.iscustomized == true) { + if (this.iscustomized == true) { items.push({ id: this.id, description: this.displaytext @@ -390,7 +390,7 @@ } }); } - }, + }, checksum: { docID: 'helpUploadVolumeChecksum', label: 'label.md5.checksum' @@ -406,12 +406,12 @@ url: args.data.url }; - if (args.data.diskOffering != '' && args.data.diskOffering.length > 0) { + if (args.data.diskOffering != '' && args.data.diskOffering.length > 0) { $.extend(data, { diskofferingid: args.data.diskOffering }); } - + if (args.data.checksum != null && args.data.checksum.length > 0) { $.extend(data, { checksum: args.data.checksum @@ -445,7 +445,7 @@ poll: pollAsyncJobResult } }, - + uploadVolumefromLocal: { isHeader: true, label: 'Upload from Local', @@ -462,7 +462,7 @@ fileUpload: { getURL: function(args) { args.data = args.formData; - + var data = { name: args.data.name, zoneId: args.data.availabilityZone, @@ -475,7 +475,7 @@ checksum: args.data.checksum }); } - + $.ajax({ url: createURL('getUploadParamsForVolume'), data: data, @@ -506,7 +506,7 @@ args.response.success(); } } - }, + }, fields: { volumeFileUpload: { label: 'local file', @@ -584,7 +584,7 @@ notification: { poll: pollAsyncJobResult } - } + } }, advSearchFields: { @@ -686,12 +686,12 @@ $.extend(data, { virtualMachineId: args.context.instances[0].id }); - } + } if ("primarystorages" in args.context) { $.extend(data, { storageid: args.context.primarystorages[0].id }); - } + } } $.ajax({ @@ -804,7 +804,7 @@ isBoolean: true, isHidden: function(args) { if (args.context.volumes[0].quiescevm == true) - return false; + return false; else return true; } @@ -1137,7 +1137,7 @@ hypervisor: args.context.volumes[0].hypervisor }); } - + $(['Running', 'Stopped']).each(function() { $.ajax({ url: createURL('listVirtualMachines'), @@ -1147,11 +1147,11 @@ async: false, success: function(json) { var instanceObjs = json.listvirtualmachinesresponse.virtualmachine; - $(instanceObjs).each(function() { + $(instanceObjs).each(function() { items.push({ id: this.id, description: this.displayname ? this.displayname : this.name - }); + }); }); } }); @@ -1285,12 +1285,12 @@ title: 'label.create.template', preFilter: cloudStack.preFilter.createTemplate, desc: '', - preFilter: function(args) { - if (args.context.volumes[0].hypervisor == "XenServer") { - if (isAdmin()) { + preFilter: function(args) { + if (args.context.volumes[0].hypervisor == "XenServer") { + if (isAdmin()) { args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css('display', 'inline-block'); - } - } + } + } }, fields: { name: { @@ -1304,24 +1304,24 @@ validation: { required: true } - }, + }, xenserverToolsVersion61plus: { label: 'label.xenserver.tools.version.61.plus', isBoolean: true, - isChecked: function (args) { + isChecked: function (args) { var b = false; - var vmObj; + var vmObj; $.ajax({ url: createURL("listVirtualMachines"), data: { id: args.context.volumes[0].virtualmachineid }, async: false, - success: function(json) { + success: function(json) { vmObj = json.listvirtualmachinesresponse.virtualmachine[0]; - } - }); - if (vmObj == undefined) { //e.g. VM has failed over + } + }); + if (vmObj == undefined) { //e.g. VM has failed over if (isAdmin()) { $.ajax({ url: createURL('listConfigurations'), @@ -1336,18 +1336,18 @@ } }); } - } else { + } else { if ('details' in vmObj && 'hypervisortoolsversion' in vmObj.details) { if (vmObj.details.hypervisortoolsversion == 'xenserver61') b = true; else b = false; } - } + } return b; }, isHidden: true - }, + }, osTypeId: { label: 'label.os.type', select: function(args) { @@ -1406,17 +1406,17 @@ isfeatured: (args.data.isFeatured == "on") }); } - - //XenServer only (starts here) + + //XenServer only (starts here) if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').length > 0) { if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css("display") != "none") { $.extend(data, { 'details[0].hypervisortoolsversion': (args.data.xenserverToolsVersion61plus == "on") ? "xenserver61" : "xenserver56" }); } - } - //XenServer only (ends here) - + } + //XenServer only (ends here) + $.ajax({ url: createURL('createTemplate'), data: data, @@ -1580,8 +1580,8 @@ return; var $form = $(this).closest('form'); - - var $shrinkok = $form.find('.form-item[rel=shrinkok]'); + + var $shrinkok = $form.find('.form-item[rel=shrinkok]'); //unit of args.context.volumes[0].size is "byte" //unit of selectedDiskOfferingObj.disksize is "gigabyte" ("GB"), so transfer it into "byte" by multiply (1024 * 1024 * 1024) if (args.context.volumes[0].size > selectedDiskOfferingObj.disksize * (1024 * 1024 * 1024)) { //if original disk size > new disk size @@ -1589,7 +1589,7 @@ } else { $shrinkok.hide(); } - + var $newsize = $form.find('.form-item[rel=newsize]'); if (selectedDiskOfferingObj.iscustomized == true) { $newsize.css('display', 'inline-block'); @@ -1642,11 +1642,11 @@ }, action: function(args) { var array1 = []; - - if(args.$form.find('.form-item[rel=shrinkok]').css("display") != "none") { - array1.push("&shrinkok=" + (args.data.shrinkok == "on")); - } - + + if(args.$form.find('.form-item[rel=shrinkok]').css("display") != "none") { + array1.push("&shrinkok=" + (args.data.shrinkok == "on")); + } + var newDiskOffering = args.data.newdiskoffering; var newSize; if (selectedDiskOfferingObj.iscustomized == true) { @@ -1838,13 +1838,13 @@ dataType: "json", async: true, success: function(json) { - var jsonObj = json.listvolumesresponse.volume[0]; - + var jsonObj = json.listvolumesresponse.volume[0]; + $(window).trigger('cloudStack.module.sharedFunctions.addExtraProperties', { obj: jsonObj, objType: "Volume" }); - + args.response.success({ actionFilter: volumeActionfilter, data: jsonObj @@ -2129,9 +2129,9 @@ validation: { required: true } - }, + }, zoneid: { - label: 'label.availability.zone', + label: 'label.availability.zone', isHidden: true, select: function(args) { $.ajax({ @@ -2139,11 +2139,11 @@ dataType: "json", async: true, success: function(json) { - var zoneObjs = json.listzonesresponse.zone; + var zoneObjs = json.listzonesresponse.zone; var items = [{ id: '', description: '' - }]; + }]; if (zoneObjs != null) { for (i = 0; i < zoneObjs.length; i++) { items.push({ @@ -2151,14 +2151,14 @@ description: zoneObjs[i].name }); } - } - args.response.success({ + } + args.response.success({ data: items }); } }); } - } + } } }, action: function(args) { @@ -2166,13 +2166,13 @@ snapshotid: args.context.snapshots[0].id, name: args.data.name }; - - if (args.$form.find('.form-item[rel=zoneid]').css("display") != "none" && args.data.zoneid != '') { + + if (args.$form.find('.form-item[rel=zoneid]').css("display") != "none" && args.data.zoneid != '') { $.extend(data, { zoneId: args.data.zoneid - }); - } - + }); + } + $.ajax({ url: createURL('createVolume'), data: data, @@ -2329,22 +2329,22 @@ return ["remove"]; } - if (jsonObj.hypervisor != "Ovm" && jsonObj.state == "Ready") { - if (jsonObj.hypervisor == 'KVM') { - if (jsonObj.vmstate == 'Running') { + if (jsonObj.hypervisor != "Ovm" && jsonObj.state == "Ready") { + if (jsonObj.hypervisor == 'KVM') { + if (jsonObj.vmstate == 'Running') { if (g_kvmsnapshotenabled == true) { //"kvm.snapshot.enabled" flag should be taken to account only when snapshot is being created for Running vm (CLOUDSTACK-4428) allowedActions.push("takeSnapshot"); allowedActions.push("recurringSnapshot"); - } + } } else { allowedActions.push("takeSnapshot"); allowedActions.push("recurringSnapshot"); - } + } } else { allowedActions.push("takeSnapshot"); allowedActions.push("recurringSnapshot"); } - + if (jsonObj.type == "DATADISK") { allowedActions.push("resize"); } diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 0f8fe6a9b38..d4dc3020e7b 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -16,27 +16,27 @@ // under the License. (function ($, cloudStack) { - + var zoneObjs, podObjs, clusterObjs, domainObjs, networkOfferingObjs, physicalNetworkObjs; var selectedClusterObj, selectedZoneObj, selectedPublicNetworkObj, selectedManagementNetworkObj, selectedPhysicalNetworkObj, selectedGuestNetworkObj; var nspMap = { }; //from listNetworkServiceProviders API var nspHardcodingArray =[]; //for service providers listView (hardcoding, not from listNetworkServiceProviders API) - + // Add router type to virtual router // -- can be either Project, VPC, or System (standard) var mapRouterType = function (index, router) { var routerType = _l('label.menu.system'); - + if (router.projectid) routerType = _l('label.project'); if (router.vpcid) routerType = _l('label.vpc'); - + return $.extend(router, { routerType: routerType }); }; - + cloudStack.publicIpRangeAccount = { dialog: function (args) { return function (args) { @@ -71,7 +71,7 @@ } }; var success = args.response.success; - + if (args.$item) { // Account data is read-only after creation $.ajax({ @@ -82,7 +82,7 @@ }, success: function (json) { var domain = json.listdomainsresponse.domain[0]; - + cloudStack.dialog.notice({ message: '
  • ' + _l('label.account') + ': ' + data.account + '
  • ' + '
  • ' + _l('label.domain') + ': ' + domain.path + '
' }); @@ -97,7 +97,7 @@ }, after: function (args) { var data = cloudStack.serializeForm(args.$form); - + success({ data: data }); @@ -107,11 +107,11 @@ }; } }; - + var getTrafficType = function (physicalNetwork, typeID) { var trafficType = { }; - + $.ajax({ url: createURL('listTrafficTypes'), data: { @@ -126,7 +126,7 @@ })[0]; } }); - + if (trafficType.xennetworklabel == null || trafficType.xennetworklabel == 0) trafficType.xennetworklabel = _l( 'label.network.label.display.for.blank.value'); if (trafficType.kvmnetworklabel == null || trafficType.kvmnetworklabel == 0) @@ -141,10 +141,10 @@ trafficType.hypervnetworklabel = _l( 'label.network.label.display.for.blank.value'); if (trafficType.ovm3networklabel == null || trafficType.ovm3networklabel == 0) trafficType.ovm3networklabel = _l( 'label.network.label.display.for.blank.value'); - + return trafficType; }; - + var updateTrafficLabels = function (trafficType, labels, complete) { var array1 =[]; if (labels.xennetworklabel != _l( 'label.network.label.display.for.blank.value')) @@ -161,7 +161,7 @@ array1.push("&hypervnetworklabel=" + labels.hypervnetworklabel); if (labels.ovm3networklabel != _l( 'label.network.label.display.for.blank.value')) array1.push("&ovm3networklabel=" + labels.ovm3networklabel); - + $.ajax({ url: createURL('updateTrafficType' + array1.join("")), data: { @@ -169,7 +169,7 @@ }, success: function (json) { var jobID = json.updatetraffictyperesponse.jobid; - + cloudStack.ui.notifications.add({ desc: 'Update traffic labels', poll: pollAsyncJobResult, @@ -193,7 +193,7 @@ } }) }; - + function virtualRouterProviderActionFilter(args) { var allowedActions =[]; var jsonObj = args.context.item; //args.context.item == nspMap["virtualRouter"] @@ -202,7 +202,7 @@ allowedActions.push("enable"); return allowedActions; }; - + function ovsProviderActionFilter(args) { var allowedActions = []; var jsonObj = args.context.item; //args.context.item == nspMap["virtualRouter"] @@ -212,11 +212,11 @@ allowedActions.push("enable"); return allowedActions; }; - + cloudStack.sections.system = { title: 'label.menu.infrastructure', id: 'system', - + // System dashboard dashboard: { dataProvider: function (args) { @@ -236,7 +236,7 @@ } }); }, - + podCount: function (data) { $.ajax({ url: createURL('listPods'), @@ -251,7 +251,7 @@ } }); }, - + clusterCount: function (data) { $.ajax({ url: createURL('listClusters'), @@ -263,9 +263,9 @@ dataFns.hostCount($.extend(data, { clusterCount: json.listclustersresponse.count ? json.listclustersresponse.count: 0 })); - + //comment the 4 lines above and uncomment the following 4 lines if listHosts API still responds slowly. - + /* dataFns.primaryStorageCount($.extend(data, { clusterCount: json.listclustersresponse.count ? @@ -275,7 +275,7 @@ } }); }, - + hostCount: function (data) { var data2 = { type: 'routing', @@ -292,7 +292,7 @@ } }); }, - + primaryStorageCount: function (data) { var data2 = { page: 1, @@ -308,7 +308,7 @@ } }); }, - + secondaryStorageCount: function (data) { var data2 = { page: 1, @@ -324,7 +324,7 @@ } }); }, - + systemVmCount: function (data) { $.ajax({ url: createURL('listSystemVms'), @@ -339,7 +339,7 @@ } }); }, - + virtualRouterCount: function (data) { var data2 = { listAll: true, @@ -352,12 +352,12 @@ success: function (json) { var total1 = json.listroutersresponse.count ? json.listroutersresponse.count: 0; var total2 = 0; //reset - + /* * In project view, the first listRotuers API(without projectid=-1) will return the same objects as the second listRouters API(with projectid=-1), - * because in project view, all API calls are appended with projectid=[projectID]. + * because in project view, all API calls are appended with projectid=[projectID]. * Therefore, we only call the second listRouters API(with projectid=-1) in non-project view. - */ + */ if (cloudStack.context && cloudStack.context.projects == null) { //non-project view var data3 = { listAll: true, @@ -370,39 +370,39 @@ data: data3, async: false, success: function (json) { - total2 = json.listroutersresponse.count ? json.listroutersresponse.count : 0; + total2 = json.listroutersresponse.count ? json.listroutersresponse.count : 0; } }); } - + dataFns.capacity($.extend(data, { virtualRouterCount: (total1 + total2) })); } }); }, - + capacity: function (data) { if (data.zoneCount) { $.ajax({ url: createURL('listCapacity'), success: function (json) { var capacities = json.listcapacityresponse.capacity; - + var capacityTotal = function (id, converter) { var capacity = $.grep(capacities, function (capacity) { return capacity.type == id; })[0]; - + var total = capacity ? capacity.capacitytotal: 0; - + if (converter) { return converter(total); } - + return total; }; - + dataFns.socketInfo($.extend(data, { cpuCapacityTotal: capacityTotal(1, cloudStack.converters.convertHz), memCapacityTotal: capacityTotal(0, cloudStack.converters.convertBytes), @@ -418,7 +418,7 @@ })); } }, - + socketInfo: function (data) { var socketCount = 0; $.ajax({ @@ -431,8 +431,8 @@ var currentPage = 1; var returnedHostCount = 0; var returnedHostCpusocketsSum = 0; - - var callListHostsWithPage = function() { + + var callListHostsWithPage = function() { $.ajax({ url: createURL('listHosts'), async: false, @@ -446,17 +446,17 @@ if (json.listhostsresponse.count == undefined) { return; } - + totalHostCount = json.listhostsresponse.count; returnedHostCount += json.listhostsresponse.host.length; - + var items = json.listhostsresponse.host; for (var i = 0; i < items.length; i++) { if (items[i].cpusockets != undefined && isNaN(items[i].cpusockets) == false) { returnedHostCpusocketsSum += items[i].cpusockets; } } - + if (returnedHostCount < totalHostCount) { currentPage++; callListHostsWithPage(); @@ -464,32 +464,32 @@ } }); } - + callListHostsWithPage(); - + socketCount += returnedHostCpusocketsSum; }) }); } }); - + complete($.extend(data, { socketCount: socketCount })); } }; - + var complete = function (data) { args.response.success({ data: data }); }; - + dataFns.zoneCount({ }); } }, - + zoneDashboard: function (args) { $.ajax({ url: createURL('listCapacity'), @@ -500,24 +500,24 @@ var capacities = json.listcapacityresponse.capacity; var data = { }; - + $(capacities).each(function () { var capacity = this; - + data[capacity.type] = { used: cloudStack.converters.convertByType(capacity.type, capacity.capacityused), total: cloudStack.converters.convertByType(capacity.type, capacity.capacitytotal), percent: parseInt(capacity.percentused) }; }); - + args.response.success({ data: data }); } }); }, - + // Network-as-a-service configuration naas: { providerListView: { @@ -545,7 +545,7 @@ data: nspHardcodingArray }) }, - + detailView: function (args) { return cloudStack.sections.system.naas.networkProviders.types[ args.context.networkProviders[0].id]; @@ -559,7 +559,7 @@ label: 'label.edit', action: function (args) { var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Public'); - + updateTrafficLabels(trafficType, args.data, function () { args.response.success(); }); @@ -607,7 +607,7 @@ isEditable: true } }], - + dataProvider: function (args) { $.ajax({ url: createURL("listNetworks&listAll=true&trafficType=Public&isSystem=true&zoneId=" + selectedZoneObj.id, { @@ -618,9 +618,9 @@ success: function (json) { var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Public'); var items = json.listnetworksresponse.network; - + selectedPublicNetworkObj = items[0]; - + // Include traffic labels selectedPublicNetworkObj.xennetworklabel = trafficType.xennetworklabel; selectedPublicNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel; @@ -636,7 +636,7 @@ }); } }, - + ipAddresses: { title: 'label.ip.ranges', custom: function (args) { @@ -682,25 +682,25 @@ action: function (args) { var array1 =[]; array1.push("&zoneId=" + args.context.zones[0].id); - + if (args.data.vlan != null && args.data.vlan.length > 0) array1.push("&vlan=" + todb(args.data.vlan)); else array1.push("&vlan=untagged"); - + array1.push("&gateway=" + args.data.gateway); array1.push("&netmask=" + args.data.netmask); array1.push("&startip=" + args.data.startip); if (args.data.endip != null && args.data.endip.length > 0) array1.push("&endip=" + args.data.endip); - + if (args.data.account) { array1.push("&account=" + args.data.account.account); array1.push("&domainid=" + args.data.account.domainid); } - + array1.push("&forVirtualNetwork=true"); //indicates this new IP range is for public network, not guest network - + $.ajax({ url: createURL("createVlanIpRange" + array1.join("")), dataType: "json", @@ -754,7 +754,7 @@ }); } }, - + releaseFromAccount: { label: 'label.release.account', action: function (args) { @@ -779,7 +779,7 @@ }); } }, - + addAccount: { label: 'label.add.account', createForm: { @@ -844,7 +844,7 @@ dataType: "json", success: function (json) { var items = json.listvlaniprangesresponse.vlaniprange; - + args.response.success({ data: $.map(items, function (item) { return $.extend(item, { @@ -865,7 +865,7 @@ } } }, - + 'storage': { detailView: { actions: { @@ -873,7 +873,7 @@ label: 'label.edit', action: function (args) { var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Storage'); - + updateTrafficLabels(trafficType, args.data, function () { args.response.success(); }); @@ -921,7 +921,7 @@ isEditable: true } }], - + dataProvider: function (args) { $.ajax({ url: createURL("listNetworks&listAll=true&trafficType=Storage&isSystem=true&zoneId=" + selectedZoneObj.id), @@ -931,7 +931,7 @@ var items = json.listnetworksresponse.network; var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Storage'); selectedPublicNetworkObj = items[0]; - + selectedPublicNetworkObj.xennetworklabel = trafficType.xennetworklabel; selectedPublicNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel; selectedPublicNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel; @@ -946,7 +946,7 @@ }); } }, - + ipAddresses: { title: 'label.ip.ranges', custom: function (args) { @@ -1009,17 +1009,17 @@ var array1 =[]; array1.push("&zoneId=" + args.context.zones[0].id); array1.push("&podid=" + args.data.podid); - + array1.push("&gateway=" + args.data.gateway); - + if (args.data.vlan != null && args.data.vlan.length > 0) array1.push("&vlan=" + todb(args.data.vlan)); - + array1.push("&netmask=" + args.data.netmask); array1.push("&startip=" + args.data.startip); if (args.data.endip != null && args.data.endip.length > 0) array1.push("&endip=" + args.data.endip); - + $.ajax({ url: createURL("createStorageNetworkIpRange" + array1.join("")), dataType: "json", @@ -1081,7 +1081,7 @@ } } }, - + 'management': { detailView: { actions: { @@ -1089,7 +1089,7 @@ label: 'label.edit', action: function (args) { var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Management'); - + updateTrafficLabels(trafficType, args.data, function () { args.response.success(); }); @@ -1143,9 +1143,9 @@ dataType: "json", success: function (json) { selectedManagementNetworkObj = json.listnetworksresponse.network[0]; - + var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Management'); - + selectedManagementNetworkObj.xennetworklabel = trafficType.xennetworklabel; selectedManagementNetworkObj.kvmnetworklabel = trafficType.kvmnetworklabel; selectedManagementNetworkObj.vmwarenetworklabel = trafficType.vmwarenetworklabel; @@ -1215,7 +1215,7 @@ } } }, - + 'guest': { //physical network + Guest traffic type detailView: { @@ -1226,23 +1226,23 @@ var data = { id: selectedPhysicalNetworkObj.id }; - + $.extend(data, { vlan: args.data.vlan }); - + $.extend(data, { tags: args.data.tags }); - + $.ajax({ url: createURL('updatePhysicalNetwork'), data: data, success: function (json) { var jobId = json.updatephysicalnetworkresponse.jobid; - + var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Guest'); - + updateTrafficLabels(trafficType, args.data, function () { args.response.success({ _custom: { @@ -1258,7 +1258,7 @@ } } }, - + tabFilter: function (args) { var hiddenTabs =[]; if (selectedZoneObj.networktype == 'Basic') { @@ -1270,7 +1270,7 @@ } return hiddenTabs; }, - + tabs: { details: { title: 'label.details', @@ -1341,7 +1341,7 @@ async: true, success: function (json) { selectedPhysicalNetworkObj = json.listphysicalnetworksresponse.physicalnetwork[0]; - + // var startVlan, endVlan; var vlan = selectedPhysicalNetworkObj.vlan; /* if(vlan != null && vlan.length > 0) { @@ -1356,7 +1356,7 @@ selectedPhysicalNetworkObj["startVlan"] = startVlan; selectedPhysicalNetworkObj["endVlan"] = endVlan; }*/ - + //traffic type var xenservertrafficlabel, kvmtrafficlabel, vmwaretrafficlabel; var trafficType = getTrafficType(selectedPhysicalNetworkObj, 'Guest'); @@ -1379,7 +1379,7 @@ }); } }, - + ipAddresses: { title: 'label.ip.ranges', custom: function (args) { @@ -1444,7 +1444,7 @@ array1.push("&endip=" + args.data.endip); array1.push("&forVirtualNetwork=false"); //indicates this new IP range is for guest network, not public network - + $.ajax({ url: createURL("createVlanIpRange" + array1.join("")), dataType: "json", @@ -1507,7 +1507,7 @@ }); if (selectedGuestNetworkObj == null) return; - + $.ajax({ url: createURL("listVlanIpRanges&zoneid=" + selectedZoneObj.id + "&networkId=" + selectedGuestNetworkObj.id), dataType: "json", @@ -1522,7 +1522,7 @@ }); } }, - + network: { title: 'label.network', listView: { @@ -1552,7 +1552,7 @@ actions: { add: addGuestNetworkDialog.def }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -1565,7 +1565,7 @@ } } } - + //need to make 2 listNetworks API call to get all guest networks from one physical network in Advanced zone var items =[]; //"listNetworks&projectid=-1": list guest networks under all projects (no matter who the owner is) @@ -1578,13 +1578,13 @@ items = json.listnetworksresponse.network; } }); - + var networkCollectionMap = { }; $(items).each(function () { networkCollectionMap[ this.id] = this.name; }); - + //"listNetworks&listAll=true: list guest networks that are not under any project (no matter who the owner is) $.ajax({ url: createURL("listNetworks&listAll=true&trafficType=Guest&zoneId=" + selectedZoneObj.id + "&physicalnetworkid=" + selectedPhysicalNetworkObj.id + "&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), @@ -1597,16 +1597,16 @@ }); } }); - + $(items).each(function () { addExtraPropertiesToGuestNetworkObject(this); }); - + args.response.success({ data: items }); }, - + detailView: { name: 'label.guest.network.details', noCompact: true, @@ -1634,15 +1634,15 @@ var array1 =[]; array1.push("&name=" + todb(args.data.name)); array1.push("&displaytext=" + todb(args.data.displaytext)); - + //args.data.networkdomain is null when networkdomain field is hidden if (args.data.networkdomain != null && args.data.networkdomain != selectedGuestNetworkObj.networkdomain) array1.push("&networkdomain=" + todb(args.data.networkdomain)); - + //args.data.networkofferingid is null when networkofferingid field is hidden if (args.data.networkofferingid != null && args.data.networkofferingid != args.context.networks[0].networkofferingid) { array1.push("&networkofferingid=" + todb(args.data.networkofferingid)); - + if (args.context.networks[0].type == "Isolated") { //Isolated network cloudStack.dialog.confirm({ @@ -1695,7 +1695,7 @@ return; } } - + $.ajax({ url: createURL("updateNetwork&id=" + args.context.networks[0].id + array1.join("")), dataType: "json", @@ -1719,7 +1719,7 @@ poll: pollAsyncJobResult } }, - + 'restart': { label: 'label.restart.network', createForm: { @@ -1774,7 +1774,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.action.delete.network', messages: { @@ -1820,7 +1820,7 @@ hiddenFields.push("gateway"); //hiddenFields.push("netmask"); } - + if (selectedGuestNetworkObj.type == "Isolated") { hiddenFields.push("networkofferingdisplaytext"); hiddenFields.push("networkdomaintext"); @@ -1892,23 +1892,23 @@ }); } }); - + //include currently selected network offeirng to dropdown items.push({ id: selectedGuestNetworkObj.networkofferingid, description: selectedGuestNetworkObj.networkofferingdisplaytext }); - + args.response.success({ data: items }); } }, - + networkofferingidText: { label: 'label.network.offering.id' }, - + gateway: { label: 'label.ipv4.gateway' }, @@ -1916,14 +1916,14 @@ cidr: { label: 'label.ipv4.cidr' }, - + ip6gateway: { label: 'label.ipv6.gateway' }, ip6cidr: { label: 'label.ipv6.CIDR' }, - + networkdomaintext: { label: 'label.network.domain' }, @@ -1931,7 +1931,7 @@ label: 'label.network.domain', isEditable: true }, - + domain: { label: 'label.domain' }, @@ -1961,7 +1961,7 @@ listAll: true //pass "&listAll=true" to "listNetworks&id=xxxxxxxx" for now before API gets fixed. }); } - + $.ajax({ url: createURL("listNetworks"), data: data, @@ -1969,12 +1969,12 @@ success: function (json) { selectedGuestNetworkObj = json.listnetworksresponse.network[0]; addExtraPropertiesToGuestNetworkObject(selectedGuestNetworkObj); - + $(window).trigger('cloudStack.module.sharedFunctions.addExtraProperties', { obj: selectedGuestNetworkObj, objType: "Network" }); - + args.response.success({ actionFilter: cloudStack.actionFilter.guestNetwork, data: selectedGuestNetworkObj @@ -1987,7 +1987,7 @@ } } }, - + dedicatedGuestVlanRanges: { title: 'label.dedicated.vlan.vni.ranges', listView: { @@ -2102,7 +2102,7 @@ } } }, - + detailView: { name: 'label.vlan.range.details', actions: { @@ -2139,7 +2139,7 @@ } } }, - + tabs: { details: { title: 'label.details', @@ -2182,7 +2182,7 @@ } } }, - + networks: { listView: { id: 'physicalNetworks', @@ -2206,7 +2206,7 @@ label: 'label.isolation.method' } }, - + actions: { remove: { label: 'label.action.delete.physical.network', @@ -2255,11 +2255,11 @@ }); } }, - + trafficTypes: { dataProvider: function (args) { selectedPhysicalNetworkObj = args.context.physicalNetworks[0]; - + $.ajax({ url: createURL('listTrafficTypes'), data: { @@ -2278,25 +2278,25 @@ }); } }, - + networkProviders: { statusLabels: { enabled: 'Enabled', //having device, network service provider is enabled 'not-configured': 'Not setup', //no device disabled: 'Disabled' //having device, network service provider is disabled }, - + // Actions performed on entire net. provider type actions: { enable: function (args) { args.response.success(); }, - + disable: function (args) { args.response.success(); } }, - + types: { virtualRouter: { id: 'virtualRouterProviders', @@ -2352,7 +2352,7 @@ }); } }, - + instances: { title: 'label.instances', listView: { @@ -2393,7 +2393,7 @@ } } } - + var data2 = { forvpc: false }; @@ -2404,16 +2404,16 @@ success: function (json) { var items = json.listroutersresponse.router ? json.listroutersresponse.router:[]; - + $(items).map(function (index, item) { routers.push(item); }); - + /* * In project view, the first listRotuers API(without projectid=-1) will return the same objects as the second listRouters API(with projectid=-1), - * because in project view, all API calls are appended with projectid=[projectID]. + * because in project view, all API calls are appended with projectid=[projectID]. * Therefore, we only call the second listRouters API(with projectid=-1) in non-project view. - */ + */ if (cloudStack.context && cloudStack.context.projects == null) { //non-project view $.ajax({ url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"), @@ -2422,14 +2422,14 @@ success: function (json) { var items = json.listroutersresponse.router ? json.listroutersresponse.router:[]; - + $(items).map(function (index, item) { routers.push(item); }); } }); } - + args.response.success({ actionFilter: routerActionfilter, data: $(routers).map(mapRouterType) @@ -2475,7 +2475,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.action.stop.router', createForm: { @@ -2521,7 +2521,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.destroy.router', messages: { @@ -2551,7 +2551,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.action.migrate.router', createForm: { @@ -2631,7 +2631,7 @@ poll: pollAsyncJobResult } }, - + viewConsole: { label: 'label.view.console', action: { @@ -2780,7 +2780,7 @@ async: true, success: function (json) { var jsonObj = json.listroutersresponse.router[0].nic; - + args.response.success({ actionFilter: routerActionfilter, data: $.map(jsonObj, function (nic, index) { @@ -2867,7 +2867,7 @@ } } }, - + InternalLbVm: { id: 'InternalLbVm', label: 'label.internallbvm', @@ -2922,7 +2922,7 @@ }); } }, - + instances: { title: 'label.instances', listView: { @@ -2963,25 +2963,25 @@ } } } - + var routers =[]; $.ajax({ url: createURL("listInternalLoadBalancerVMs&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), success: function (json) { var items = json.listinternallbvmssresponse.internalloadbalancervm ? json.listinternallbvmssresponse.internalloadbalancervm:[]; - + $(items).map(function (index, item) { routers.push(item); }); - + // Get project routers $.ajax({ url: createURL("listInternalLoadBalancerVMs&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"), success: function (json) { var items = json.listinternallbvmssresponse.internalloadbalancervm ? json.listinternallbvmssresponse.internalloadbalancervm:[]; - + $(items).map(function (index, item) { routers.push(item); }); @@ -3032,7 +3032,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.stop.lb.vm', createForm: { @@ -3078,7 +3078,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.migrate.lb.vm', createForm: { @@ -3157,7 +3157,7 @@ poll: pollAsyncJobResult } }, - + viewConsole: { label: 'label.view.console', action: { @@ -3306,7 +3306,7 @@ async: true, success: function (json) { var jsonObj = json.listinternallbvmssresponse.internalloadbalancervm[0].nic; - + args.response.success({ actionFilter: internallbinstanceActionfilter, data: $.map(jsonObj, function (nic, index) { @@ -3393,7 +3393,7 @@ } } }, - + vpcVirtualRouter: { id: 'vpcVirtualRouterProviders', label: 'label.vpc.virtual.router', @@ -3448,7 +3448,7 @@ }); } }, - + instances: { title: 'label.instances', listView: { @@ -3489,7 +3489,7 @@ } } } - + var data2 = { forvpc: true }; @@ -3504,12 +3504,12 @@ $(items).map(function (index, item) { routers.push(item); }); - + /* * In project view, the first listRotuers API(without projectid=-1) will return the same objects as the second listRouters API(with projectid=-1), - * because in project view, all API calls are appended with projectid=[projectID]. + * because in project view, all API calls are appended with projectid=[projectID]. * Therefore, we only call the second listRouters API(with projectid=-1) in non-project view. - */ + */ if (cloudStack.context && cloudStack.context.projects == null) { //non-project view $.ajax({ url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"), @@ -3524,7 +3524,7 @@ } }); } - + args.response.success({ actionFilter: routerActionfilter, data: $(routers).map(mapRouterType) @@ -3570,7 +3570,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.action.stop.router', createForm: { @@ -3616,7 +3616,7 @@ poll: pollAsyncJobResult } }, - + restart: { label: 'label.action.reboot.router', messages: { @@ -3652,7 +3652,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.destroy.router', messages: { @@ -3682,7 +3682,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.action.migrate.router', createForm: { @@ -3762,7 +3762,7 @@ poll: pollAsyncJobResult } }, - + viewConsole: { label: 'label.view.console', action: { @@ -3938,7 +3938,7 @@ } } }, - + Ovs: { id: "Ovs", label: "label.ovs", @@ -3947,7 +3947,7 @@ fields: { name: { label: 'label.name' - }, + }, state: { label: 'label.status', indicator: { @@ -3962,10 +3962,10 @@ name: { label: 'label.name' } - }, { + }, { state: { label: 'label.state' - }, + }, supportedServices: { label: 'label.supported.services' }, @@ -4051,8 +4051,8 @@ } } } - }, - + }, + // NetScaler provider detail view netscaler: { type: 'detailView', @@ -4141,7 +4141,7 @@ label: 'label.private.interface', docID: 'helpNetScalerPrivateInterface' }, - + gslbprovider: { label: 'label.gslb.service', isBoolean: true, @@ -4153,7 +4153,7 @@ gslbproviderprivateip: { label: 'label.gslb.service.private.ip' }, - + numretries: { label: 'label.numretries', defaultValue: '2', @@ -4307,7 +4307,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -4326,7 +4326,7 @@ } } }, - + //Baremetal DHCP provider detail view BaremetalDhcpProvider: { type: 'detailView', @@ -4479,7 +4479,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -4498,7 +4498,7 @@ } } }, - + //Baremetal PXE provider detail view BaremetalPxeProvider: { type: 'detailView', @@ -4657,7 +4657,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -4676,7 +4676,7 @@ } } }, - + //f5 provider detail view f5: { type: 'detailView', @@ -4914,7 +4914,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -4933,7 +4933,7 @@ } } }, - + // SRX provider detailView srx: { type: 'detailView', @@ -5188,7 +5188,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -5207,7 +5207,7 @@ } } }, - + // Palo Alto provider detailView pa: { type: 'detailView', @@ -5472,7 +5472,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -5491,7 +5491,7 @@ } } }, - + // Security groups detail view securityGroups: { id: 'securityGroup-providers', @@ -5601,7 +5601,7 @@ } } }, - + fields: { id: { label: 'label.id' @@ -5805,7 +5805,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -6214,7 +6214,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -6233,8 +6233,8 @@ } } }, - - + + // MidoNet provider detailView midoNet: { id: 'midoNet', @@ -6354,7 +6354,7 @@ } } }, - + //ovs Ovs: { id: 'ovsProviders', @@ -6410,7 +6410,7 @@ }); } }, - + instances: { title: 'label.instances', listView: { @@ -6451,7 +6451,7 @@ } } } - + var data2 = { forvpc: false }; @@ -6462,11 +6462,11 @@ success: function (json) { var items = json.listroutersresponse.router ? json.listroutersresponse.router:[]; - + $(items).map(function (index, item) { routers.push(item); }); - + // Get project routers $.ajax({ url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"), @@ -6474,7 +6474,7 @@ success: function (json) { var items = json.listroutersresponse.router ? json.listroutersresponse.router:[]; - + $(items).map(function (index, item) { routers.push(item); }); @@ -6525,7 +6525,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.action.stop.router', createForm: { @@ -6571,7 +6571,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.destroy.router', messages: { @@ -6601,7 +6601,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.action.migrate.router', createForm: { @@ -6681,7 +6681,7 @@ poll: pollAsyncJobResult } }, - + viewConsole: { label: 'label.view.console', action: { @@ -6830,7 +6830,7 @@ async: true, success: function (json) { var jsonObj = json.listroutersresponse.router[0].nic; - + args.response.success({ actionFilter: routerActionfilter, data: $.map(jsonObj, function (nic, index) { @@ -7141,7 +7141,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -7434,7 +7434,7 @@ jobId: jid } }); - + $(window).trigger('cloudStack.fullRefresh'); } }); @@ -7696,7 +7696,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -7722,7 +7722,7 @@ } }); }, - + actions: { add: { label: 'label.add.zone', @@ -7745,7 +7745,7 @@ } } }, - + detailView: { isMaximized: true, actions: { @@ -7793,7 +7793,7 @@ name: args.data.name, vcenter: args.data.vcenter }; - + if (args.data.username != null && args.data.username.length > 0) { $.extend(data, { username: args.data.username @@ -7804,7 +7804,7 @@ password: args.data.password }) } - + $.ajax({ url: createURL('addVmwareDc'), data: data, @@ -7821,7 +7821,7 @@ } } }, - + removeVmwareDc: { label: 'label.remove.vmware.datacenter', messages: { @@ -7843,9 +7843,9 @@ delete args.context.physicalResources[0].vmwaredcName; delete args.context.physicalResources[0].vmwaredcVcenter; delete args.context.physicalResources[0].vmwaredcId; - + selectedZoneObj = args.context.physicalResources[0]; - + args.response.success({ data: args.context.physicalResources[0] }); @@ -7862,7 +7862,7 @@ } } }, - + enable: { label: 'label.action.enable.zone', messages: { @@ -7893,7 +7893,7 @@ } } }, - + disable: { label: 'label.action.disable.zone', messages: { @@ -7924,7 +7924,7 @@ } } }, - + dedicateZone: { label: 'label.dedicate.zone', messages: { @@ -7951,7 +7951,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -7983,7 +7983,7 @@ var array2 =[]; if (args.data.accountId != "") array2.push("&account=" + todb(args.data.accountId)); - + $.ajax({ url: createURL("dedicateZone&zoneId=" + args.context.physicalResources[0].id + @@ -8042,7 +8042,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.action.delete.zone', messages: { @@ -8087,11 +8087,11 @@ //p6dns1 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank. array1.push("&ip6dns2=" + todb(args.data.ip6dns2)); //ip6dns2 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank. - + if (selectedZoneObj.networktype == "Advanced" && args.data.guestcidraddress) { array1.push("&guestcidraddress=" + todb(args.data.guestcidraddress)); } - + array1.push("&internaldns1=" + todb(args.data.internaldns1)); array1.push("&internaldns2=" + todb(args.data.internaldns2)); //internaldns2 can be empty ("") when passed to API, so a user gets to update this field from an existing value to blank. @@ -8117,14 +8117,14 @@ tabs: { details: { title: 'label.details', - + preFilter: function (args) { var hiddenFields =[]; if (selectedZoneObj.networktype == "Basic") hiddenFields.push("guestcidraddress"); return hiddenFields; }, - + fields:[ { name: { label: 'label.zone', @@ -8219,12 +8219,12 @@ }, success: function (json) { selectedZoneObj = json.listzonesresponse.zone[0]; - + $(window).trigger('cloudStack.module.sharedFunctions.addExtraProperties', { obj: selectedZoneObj, objType: "Zone" }); - + $.ajax({ url: createURL('listDedicatedZones'), data: { @@ -8250,7 +8250,7 @@ } } }); - + $.ajax({ url: createURL('listApis'), //listVmwareDcs API only exists in non-oss bild, so have to check whether it exists before calling it. data: { @@ -8279,7 +8279,7 @@ } //override default error handling: cloudStack.dialog.notice({ message: parseXMLHttpResponse(XMLHttpResponse)}); }); - + args.response.success({ actionFilter: zoneActionfilter, data: selectedZoneObj @@ -8288,7 +8288,7 @@ }); } }, - + compute: { title: 'label.compute.and.storage', custom: cloudStack.uiCustom.systemChart('compute') @@ -8301,7 +8301,7 @@ title: 'label.resources', custom: cloudStack.uiCustom.systemChart('resources') }, - + systemVMs: { title: 'label.system.vms', listView: { @@ -8349,7 +8349,7 @@ } } } - + var selectedZoneObj = args.context.physicalResources[0]; $.ajax({ url: createURL("listSystemVms&zoneid=" + selectedZoneObj.id + "&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), @@ -8364,7 +8364,7 @@ } }); }, - + detailView: { noCompact: true, name: 'label.system.vm.details', @@ -8404,7 +8404,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.action.stop.systemvm', messages: { @@ -8440,7 +8440,7 @@ poll: pollAsyncJobResult } }, - + restart: { label: 'label.action.reboot.systemvm', messages: { @@ -8476,7 +8476,7 @@ poll: pollAsyncJobResult } }, - + remove: { label: 'label.action.destroy.systemvm', messages: { @@ -8511,7 +8511,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.action.migrate.systemvm', messages: { @@ -8593,7 +8593,7 @@ poll: pollAsyncJobResult } }, - + scaleUp: { label: 'label.change.service.offering', createForm: { @@ -8639,7 +8639,7 @@ } } }, - + action: function (args) { $.ajax({ url: createURL("scaleSystemVm&id=" + args.context.systemVMs[0].id + "&serviceofferingid=" + args.data.serviceOfferingId), @@ -8669,7 +8669,7 @@ return 'message.confirm.scale.up.system.vm'; }, notification: function (args) { - + return 'label.system.vm.scaled.up'; } }, @@ -8677,8 +8677,8 @@ poll: pollAsyncJobResult } }, - - + + viewConsole: { label: 'label.view.console', action: { @@ -8764,7 +8764,7 @@ } } }, - + // Granular settings for zone settings: { title: 'label.settings', @@ -8782,7 +8782,7 @@ data: json.listconfigurationsresponse.configuration }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -8795,7 +8795,7 @@ name: args.data.jsonObj.name, value: args.data.value }; - + $.ajax({ url: createURL('updateConfiguration&zoneid=' + args.context.physicalResources[0].id), data: data, @@ -8805,7 +8805,7 @@ data: item }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -8825,7 +8825,7 @@ var data = { }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listPods'), data: data, @@ -8839,11 +8839,11 @@ } }); }, - + detailView: { updateContext: function (args) { var zone; - + $.ajax({ url: createURL('listZones'), data: { @@ -8854,16 +8854,16 @@ zone = json.listzonesresponse.zone[0]; } }); - + selectedZoneObj = zone; - + return { zones:[zone] }; } } }); - + return listView; }, clusters: function () { @@ -8874,7 +8874,7 @@ var data = { }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listClusters'), data: data, @@ -8888,11 +8888,11 @@ } }); }, - + detailView: { updateContext: function (args) { var zone; - + $.ajax({ url: createURL('listZones'), data: { @@ -8903,16 +8903,16 @@ zone = json.listzonesresponse.zone[0]; } }); - + selectedZoneObj = zone; - + return { zones:[zone] }; } } }); - + return listView; }, hosts: function () { @@ -8924,7 +8924,7 @@ type: 'routing' }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listHosts'), data: data, @@ -8938,11 +8938,11 @@ } }); }, - + detailView: { updateContext: function (args) { var zone; - + $.ajax({ url: createURL('listZones'), data: { @@ -8953,16 +8953,16 @@ zone = json.listzonesresponse.zone[0]; } }); - + selectedZoneObj = zone; - + return { zones:[zone] }; } } }); - + return listView; }, primaryStorage: function () { @@ -8973,7 +8973,7 @@ var data = { }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listStoragePools'), data: data, @@ -8987,11 +8987,11 @@ } }); }, - + detailView: { updateContext: function (args) { var zone; - + $.ajax({ url: createURL('listZones'), data: { @@ -9002,19 +9002,19 @@ zone = json.listzonesresponse.zone[0]; } }); - + selectedZoneObj = zone; - + return { zones:[zone] }; } } }); - + return listView; }, - + secondaryStorage: function () { var listView = $.extend( true, { @@ -9028,7 +9028,7 @@ type: 'SecondaryStorage' }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listImageStores'), data: data, @@ -9056,7 +9056,7 @@ var data = { }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listSecondaryStagingStores'), data: data, @@ -9070,7 +9070,7 @@ } }); } - + /* , detailView: { @@ -9085,7 +9085,7 @@ } } }); - + return listView; }, systemVms: function () { @@ -9096,7 +9096,7 @@ var data = { }; listViewDataProvider(args, data); - + $.ajax({ url: createURL('listSystemVms'), data: data, @@ -9131,11 +9131,11 @@ } }); }, - + detailView: { updateContext: function (args) { var zone; - + $.ajax({ url: createURL('listZones'), data: { @@ -9146,16 +9146,16 @@ zone = json.listzonesresponse.zone[0]; } }); - + selectedZoneObj = zone; - + return { zones:[zone] }; } } }); - + return listView; }, virtualRouters: function () { @@ -9169,9 +9169,9 @@ var data = { }; listViewDataProvider(args, data); - + var routers =[]; - + //get account-owned routers $.ajax({ url: createURL('listRouters'), @@ -9184,22 +9184,22 @@ $(items).map(function (index, item) { routers.push(item); }); - + //if account is specified in advanced search, don't search project-owned routers var accountIsNotSpecifiedInAdvSearch = true; if (args.filterBy != null) { if (args.filterBy.advSearch != null && typeof(args.filterBy.advSearch) == "object") { //advanced search - if ('account' in args.filterBy.advSearch && args.filterBy.advSearch.account.length > 0) { + if ('account' in args.filterBy.advSearch && args.filterBy.advSearch.account.length > 0) { accountIsNotSpecifiedInAdvSearch = false; //since account and projectid can't be specified together } } } - if (accountIsNotSpecifiedInAdvSearch) { + if (accountIsNotSpecifiedInAdvSearch) { /* * In project view, the first listRotuers API(without projectid=-1) will return the same objects as the second listRouters API(with projectid=-1), - * because in project view, all API calls are appended with projectid=[projectID]. + * because in project view, all API calls are appended with projectid=[projectID]. * Therefore, we only call the second listRouters API(with projectid=-1) in non-project view. - */ + */ if (cloudStack.context && cloudStack.context.projects == null) { //non-project view $.ajax({ url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + "&projectid=-1"), @@ -9211,27 +9211,27 @@ }); } }); - + } } - + args.response.success({ actionFilter: routerActionfilter, data: $(routers).map(mapRouterType) - }); + }); } }); - + args.response.success({ actionFilter: routerActionfilter, data: $(routers).map(mapRouterType) }); }, - + detailView: { updateContext: function (args) { var zone; - + $.ajax({ url: createURL('listZones'), data: { @@ -9242,9 +9242,9 @@ zone = json.listzonesresponse.zone[0]; } }); - + selectedZoneObj = zone; - + return { zones:[zone] }; @@ -9254,10 +9254,10 @@ } } }); - + return listView; }, - + sockets: function () { var listView = { id: 'sockets', @@ -9274,7 +9274,7 @@ }, dataProvider: function (args) { var array1 = []; - + // ***** non XenServer (begin) ***** var hypervisors = ["Hyperv", "KVM", "VMware", "BareMetal", "LXC", "Ovm3"]; @@ -9283,15 +9283,15 @@ "KVM": 1, "VMware": 1, "Ovm3": 1 - }; - + }; + for (var h = 0; h < hypervisors.length; h++) { var totalHostCount = 0; var currentPage = 1; var returnedHostCount = 0; var returnedHostCpusocketsSum = 0; - - var callListHostsWithPage = function() { + + var callListHostsWithPage = function() { $.ajax({ url: createURL('listHosts'), async: false, @@ -9305,17 +9305,17 @@ if (json.listhostsresponse.count == undefined) { return; } - + totalHostCount = json.listhostsresponse.count; returnedHostCount += json.listhostsresponse.host.length; - + var items = json.listhostsresponse.host; for (var i = 0; i < items.length; i++) { if (items[i].cpusockets != undefined && isNaN(items[i].cpusockets) == false) { returnedHostCpusocketsSum += items[i].cpusockets; } } - + if (returnedHostCount < totalHostCount) { currentPage++; callListHostsWithPage(); @@ -9323,18 +9323,18 @@ } }); } - + callListHostsWithPage(); - - if ((hypervisors[h] in supportSocketHypervisors) == false) { - returnedHostCpusocketsSum = 'N/A'; + + if ((hypervisors[h] in supportSocketHypervisors) == false) { + returnedHostCpusocketsSum = 'N/A'; } - + var hypervisorName = hypervisors[h]; if (hypervisorName == "Hyperv") { hypervisorName = "Hyper-V"; } - + array1.push({ hypervisor: hypervisorName, hosts: totalHostCount, @@ -9342,22 +9342,22 @@ }); } // ***** non XenServer (end) ***** - - + + // ***** XenServer (begin) ***** - var totalHostCount = 0; + var totalHostCount = 0; var currentPage = 1; var returnedHostCount = 0; - - var returnedHostCountForXenServer650 = 0; //'XenServer 6.5.0' - var returnedHostCpusocketsSumForXenServer650 = 0; - - var returnedHostCountForXenServer620 = 0; //'XenServer 6.2.0' - var returnedHostCpusocketsSumForXenServer620 = 0; - + + var returnedHostCountForXenServer650 = 0; //'XenServer 6.5.0' + var returnedHostCpusocketsSumForXenServer650 = 0; + + var returnedHostCountForXenServer620 = 0; //'XenServer 6.2.0' + var returnedHostCpusocketsSumForXenServer620 = 0; + var returnedHostCountForXenServer61x = 0; //'XenServer 6.1.x and before' - - var callListHostsWithPage = function() { + + var callListHostsWithPage = function() { $.ajax({ url: createURL('listHosts'), async: false, @@ -9367,69 +9367,69 @@ page: currentPage, pagesize: pageSize //global variable }, - success: function(json) { - if (json.listhostsresponse.count == undefined) { + success: function(json) { + if (json.listhostsresponse.count == undefined) { return; - } - - totalHostCount = json.listhostsresponse.count; + } + + totalHostCount = json.listhostsresponse.count; returnedHostCount += json.listhostsresponse.host.length; - + var items = json.listhostsresponse.host; - for (var i = 0; i < items.length; i++) { + for (var i = 0; i < items.length; i++) { if (items[i].hypervisorversion == "6.5.0") { returnedHostCountForXenServer650 ++; if (items[i].cpusockets != undefined && isNaN(items[i].cpusockets) == false) { returnedHostCpusocketsSumForXenServer650 += items[i].cpusockets; - } + } } else if (items[i].hypervisorversion == "6.2.0") { returnedHostCountForXenServer620 ++; if (items[i].cpusockets != undefined && isNaN(items[i].cpusockets) == false) { returnedHostCpusocketsSumForXenServer620 += items[i].cpusockets; - } + } } else { returnedHostCountForXenServer61x++; } - } - + } + if (returnedHostCount < totalHostCount) { currentPage++; callListHostsWithPage(); - } + } } - }); + }); } - - callListHostsWithPage(); - + + callListHostsWithPage(); + array1.push({ hypervisor: 'XenServer 6.5.0', hosts: returnedHostCountForXenServer650, - sockets: returnedHostCpusocketsSumForXenServer650 + sockets: returnedHostCpusocketsSumForXenServer650 }); - + array1.push({ hypervisor: 'XenServer 6.2.0', hosts: returnedHostCountForXenServer620, - sockets: returnedHostCpusocketsSumForXenServer620 + sockets: returnedHostCpusocketsSumForXenServer620 }); - + array1.push({ hypervisor: 'XenServer 6.1.x and before', hosts: returnedHostCountForXenServer61x, - sockets: 'N/A' - }); - + sockets: 'N/A' + }); + // ***** XenServer (end) ***** - - + + args.response.success({ data: array1 }); - + } }; - + return listView; } } @@ -9440,18 +9440,18 @@ virtualRouters: { sectionSelect: { label: 'label.select-view', - preFilter: function(args) { + preFilter: function(args) { //Only clicking ViewAll Link("view all Virtual Routers") in "Virtual Routers group by XXXXXXX" detailView will have "routerGroupByXXXXXXX" included in args.context if ("routerGroupByZone" in args.context) { - return ["routerGroupByZone"]; // read-only (i.e. text "group by Zone") + return ["routerGroupByZone"]; // read-only (i.e. text "group by Zone") } else if ( "routerGroupByPod" in args.context) { - return ["routerGroupByPod"]; // read-only (i.e. text "group by Pod") + return ["routerGroupByPod"]; // read-only (i.e. text "group by Pod") } else if ("routerGroupByCluster" in args.context) { - return ["routerGroupByCluster"]; // read-only (i.e. text "group by Cluster") + return ["routerGroupByCluster"]; // read-only (i.e. text "group by Cluster") } else if ("routerGroupByAccount" in args.context) { - return ["routerGroupByAccount"]; // read-only (i.e. text "group by Account") + return ["routerGroupByAccount"]; // read-only (i.e. text "group by Account") } else { - return ["routerNoGroup", "routerGroupByZone", "routerGroupByPod", "routerGroupByCluster", "routerGroupByAccount"]; //editable dropdown + return ["routerNoGroup", "routerGroupByZone", "routerGroupByPod", "routerGroupByCluster", "routerGroupByAccount"]; //editable dropdown } } }, @@ -9502,11 +9502,11 @@ } } } - + var data2 = { // forvpc: false }; - + if (args.context != undefined) { if ("routerGroupByZone" in args.context) { $.extend(data2, { @@ -9526,8 +9526,8 @@ domainid: args.context.routerGroupByAccount[0].domainid }) } - } - + } + var routers =[]; $.ajax({ url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), @@ -9535,28 +9535,28 @@ success: function (json) { var items = json.listroutersresponse.router ? json.listroutersresponse.router:[]; - + $(items).map(function (index, item) { routers.push(item); }); - + /* * In project view, the first listRotuers API(without projectid=-1) will return the same objects as the second listRouters API(with projectid=-1), - * because in project view, all API calls are appended with projectid=[projectID]. + * because in project view, all API calls are appended with projectid=[projectID]. * Therefore, we only call the second listRouters API(with projectid=-1) in non-project view. - */ + */ if (cloudStack.context && cloudStack.context.projects == null) { //non-project view - /* - * account parameter(account+domainid) and project parameter(projectid) are not allowed to be passed together to listXXXXXXX API. + /* + * account parameter(account+domainid) and project parameter(projectid) are not allowed to be passed together to listXXXXXXX API. * So, remove account parameter(account+domainid) from data2 - */ + */ if ("account" in data2) { delete data2.account; } if ("domainid" in data2) { delete data2.domainid; - } - + } + $.ajax({ url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"), data: data2, @@ -9564,14 +9564,14 @@ success: function (json) { var items = json.listroutersresponse.router ? json.listroutersresponse.router:[]; - + $(items).map(function (index, item) { routers.push(item); }); } }); } - + args.response.success({ actionFilter: routerActionfilter, data: $(routers).map(mapRouterType) @@ -9617,7 +9617,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.action.stop.router', createForm: { @@ -9663,7 +9663,7 @@ poll: pollAsyncJobResult } }, - + upgradeRouterToUseNewerTemplate: { label: 'label.upgrade.router.newer.template', messages: { @@ -9696,7 +9696,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.destroy.router', messages: { @@ -9726,7 +9726,7 @@ poll: pollAsyncJobResult } }, - + restart: { label: 'label.action.reboot.router', messages: { @@ -9762,7 +9762,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.action.migrate.router', createForm: { @@ -9842,7 +9842,7 @@ poll: pollAsyncJobResult } }, - + scaleUp: { //*** Infrastructure > Virtual Routers > change service offering *** label: 'label.change.service.offering', createForm: { @@ -9887,7 +9887,7 @@ } } }, - + action: function (args) { $.ajax({ url: createURL("scaleSystemVm&id=" + args.context.routers[0].id + "&serviceofferingid=" + args.data.serviceOfferingId), @@ -9917,7 +9917,7 @@ return 'message.confirm.scale.up.router.vm'; }, notification: function (args) { - + return 'label.router.vm.scaled.up'; } }, @@ -9925,8 +9925,8 @@ poll: pollAsyncJobResult } }, - - + + viewConsole: { label: 'label.view.console', action: { @@ -9969,7 +9969,7 @@ } } }); - + return hiddenFields; }, fields:[ { @@ -10098,7 +10098,7 @@ async: true, success: function (json) { var jsonObj = json.listroutersresponse.router[0].nic; - + args.response.success({ actionFilter: routerActionfilter, data: $.map(jsonObj, function (nic, index) { @@ -10144,7 +10144,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -10173,11 +10173,11 @@ }); }, detailView: { - name: 'label.virtual.routers.group.zone', + name: 'label.virtual.routers.group.zone', viewAll: { path: '_zone.virtualRouters', label: 'label.virtual.appliances' - }, + }, actions: { upgradeRouterToUseNewerTemplate: { label: 'label.upgrade.router.newer.template', @@ -10233,7 +10233,7 @@ return _l('label.no'); } } - }, + }, numberOfRouterRequiresUpgrade: { label: 'label.total.virtual.routers.upgrade' } @@ -10275,7 +10275,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -10304,11 +10304,11 @@ }); }, detailView: { - name: 'label.virtual.routers.group.pod', + name: 'label.virtual.routers.group.pod', viewAll: { path: '_zone.virtualRouters', label: 'label.virtual.appliances' - }, + }, actions: { upgradeRouterToUseNewerTemplate: { label: 'label.upgrade.router.newer.template', @@ -10409,7 +10409,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -10438,11 +10438,11 @@ }); }, detailView: { - name: 'label.virtual.routers.group.cluster', + name: 'label.virtual.routers.group.cluster', viewAll: { path: '_zone.virtualRouters', label: 'label.virtual.appliances' - }, + }, actions: { upgradeRouterToUseNewerTemplate: { label: 'label.upgrade.router.newer.template', @@ -10549,7 +10549,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -10585,14 +10585,14 @@ var routerCountFromAllPages = json.listroutersresponse.count; var routerCountFromFirstPageToCurrentPage = json.listroutersresponse.router.length; var routerRequiresUpgrade = 0; - + var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } - } - + } + var callListApiWithPage = function () { $.ajax({ url: createURL('listRouters'), @@ -10607,7 +10607,7 @@ success: function (json) { routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } @@ -10639,11 +10639,11 @@ }); }, detailView: { - name: 'label.virtual.routers.group.account', + name: 'label.virtual.routers.group.account', viewAll: { path: '_zone.virtualRouters', label: 'label.virtual.appliances' - }, + }, actions: { upgradeRouterToUseNewerTemplate: { label: 'label.upgrade.router.newer.template', @@ -10703,7 +10703,7 @@ return _l('label.no'); } } - }, + }, numberOfRouterRequiresUpgrade: { label: 'label.total.virtual.routers.upgrade' } @@ -10726,14 +10726,14 @@ var routerCountFromAllPages = json.listroutersresponse.count; var routerCountFromFirstPageToCurrentPage = json.listroutersresponse.router.length; var routerRequiresUpgrade = 0; - + var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } - } - + } + var callListApiWithPage = function () { $.ajax({ url: createURL('listRouters'), @@ -10748,7 +10748,7 @@ success: function (json) { routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } @@ -10820,7 +10820,7 @@ 'Destroyed': 'off' } }, - + agentstate: { label: 'label.agent.state', indicator: { @@ -10841,7 +10841,7 @@ } } } - + var selectedZoneObj = args.context.physicalResources[0]; $.ajax({ url: createURL("listSystemVms&zoneid=" + selectedZoneObj.id + "&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), @@ -10856,7 +10856,7 @@ } }); }, - + detailView: { name: 'label.system.vm.details', actions: { @@ -10895,7 +10895,7 @@ poll: pollAsyncJobResult } }, - + stop: { label: 'label.action.stop.systemvm', messages: { @@ -10931,7 +10931,7 @@ poll: pollAsyncJobResult } }, - + restart: { label: 'label.action.reboot.systemvm', messages: { @@ -10967,7 +10967,7 @@ poll: pollAsyncJobResult } }, - + remove: { label: 'label.action.destroy.systemvm', messages: { @@ -11002,7 +11002,7 @@ poll: pollAsyncJobResult } }, - + migrate: { label: 'label.action.migrate.systemvm', messages: { @@ -11084,7 +11084,7 @@ poll: pollAsyncJobResult } }, - + scaleUp: { //*** Infrastructure > System VMs (consoleProxy or SSVM) > change service offering *** label: 'label.change.service.offering', createForm: { @@ -11105,7 +11105,7 @@ var data1 = { issystem: 'true', virtualmachineid: args.context.systemVMs[0].id - }; + }; if (args.context.systemVMs[0].systemvmtype == "secondarystoragevm") { $.extend(data1, { systemvmtype: 'secondarystoragevm' @@ -11114,7 +11114,7 @@ else if (args.context.systemVMs[0].systemvmtype == "consoleproxy") { $.extend(data1, { systemvmtype: 'consoleproxy' - }); + }); } $.ajax({ url: createURL('listServiceOfferings'), @@ -11139,7 +11139,7 @@ } } }, - + action: function (args) { $.ajax({ url: createURL("scaleSystemVm&id=" + args.context.systemVMs[0].id + "&serviceofferingid=" + args.data.serviceOfferingId), @@ -11169,7 +11169,7 @@ return 'message.confirm.scale.up.system.vm'; }, notification: function (args) { - + return 'label.system.vm.scaled.up'; } }, @@ -11177,9 +11177,9 @@ poll: pollAsyncJobResult } }, - - - + + + viewConsole: { label: 'label.view.console', action: { @@ -11344,7 +11344,7 @@ privateinterface: { label: 'label.private.interface' }, - + gslbprovider: { label: 'label.gslb.service', isBoolean: true, @@ -11356,7 +11356,7 @@ gslbproviderprivateip: { label: 'label.gslb.service.private.ip' }, - + numretries: { label: 'label.numretries', defaultValue: '2' @@ -11459,7 +11459,7 @@ } }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -11522,7 +11522,7 @@ } } }, - + // Baremetal DHCP devices listView BaremetalDhcpDevices: { id: 'BaremetalDhcpDevices', @@ -11594,7 +11594,7 @@ } } }, - + // Baremetal PXE devices listView BaremetalPxeDevices: { id: 'BaremetalPxeDevices', @@ -11672,7 +11672,7 @@ } } }, - + // F5 devices listView f5Devices: { id: 'f5Devices', @@ -11898,7 +11898,7 @@ } } }, - + //SRX devices listView srxDevices: { id: 'srxDevices', @@ -12135,7 +12135,7 @@ } } }, - + //Palo Alto devices listView paDevices: { id: 'paDevices', @@ -12379,7 +12379,7 @@ } } }, - + // FIXME convert to nicira detailview // NiciraNvp devices listView niciraNvpDevices: { @@ -12468,7 +12468,7 @@ addNiciraNvpDevice(args, selectedPhysicalNetworkObj, "addNiciraNvpDevice", "addniciranvpdeviceresponse", "niciranvpdevice") } }, - + messages: { notification: function (args) { return 'label.added.nicira.nvp.controller'; @@ -12811,7 +12811,7 @@ addBigSwitchBcfDevice(args, selectedPhysicalNetworkObj, "addBigSwitchBcfDevice", "addbigswitchbcfdeviceresponse", "bigswitchbcfdevice") } }, - + messages: { notification: function (args) { return 'label.added.new.bigswitch.bcf.controller'; @@ -13120,7 +13120,7 @@ label: 'label.allocation.state' } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -13133,7 +13133,7 @@ } } } - + $.ajax({ url: createURL("listPods&zoneid=" + args.context.zones[0].id + "&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), dataType: "json", @@ -13147,11 +13147,11 @@ } }); }, - + actions: { add: { label: 'label.add.pod', - + createForm: { title: 'label.add.pod', fields: { @@ -13165,13 +13165,13 @@ var data = args.context.zones ? { id: args.context.zones[0].id }: {}; - + $.ajax({ url: createURL('listZones'), data: data, success: function (json) { var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[]; - + args.response.success({ data: $.map(zones, function (zone) { return { @@ -13219,14 +13219,14 @@ required: false } }, - + isDedicated: { label: 'label.dedicate', isBoolean: true, isChecked: false, docID: 'helpDedicateResource' }, - + domainId: { label: 'label.domain', isHidden: true, @@ -13242,7 +13242,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -13252,7 +13252,7 @@ items.sort(function(a, b) { return a.description.localeCompare(b.description); }); - + args.response.success({ data: items }); @@ -13260,7 +13260,7 @@ }); } }, - + accountId: { label: 'label.account', isHidden: true, @@ -13272,18 +13272,18 @@ } } }, - + action: function (args) { var array1 =[]; var appendData = args.data.append ? args.data.append: { }; - + array1.push("&zoneId=" + args.data.zoneid); array1.push("&name=" + todb(args.data.podname)); array1.push("&gateway=" + todb(args.data.reservedSystemGateway)); array1.push("&netmask=" + todb(args.data.reservedSystemNetmask)); array1.push("&startIp=" + todb(args.data.reservedSystemStartIp)); - + var endip = args.data.reservedSystemEndIp; //optional if (endip != null && endip.length > 0) array1.push("&endIp=" + todb(endip)); @@ -13295,13 +13295,13 @@ success: function (json) { var item = json.createpodresponse.pod; podId = json.createpodresponse.pod.id; - + //EXPLICIT DEDICATION if (args.$form.find('.form-item[rel=isDedicated]').find('input[type=checkbox]').is(':Checked') == true) { var array2 =[]; if (args.data.accountId != "") array2.push("&account=" + todb(args.data.accountId)); - + if (podId != null) { $.ajax({ url: createURL("dedicatePod&podId=" + podId + "&domainId=" + args.data.domainId + array2.join("")), @@ -13317,11 +13317,11 @@ interval: 4500, desc: "Dedicate Pod" }, - + data: item }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(XMLHttpResponse)); } @@ -13338,7 +13338,7 @@ } }); }, - + notification: { poll: function (args) { args.complete({ @@ -13346,7 +13346,7 @@ }); } }, - + messages: { notification: function (args) { return 'label.add.pod'; @@ -13354,7 +13354,7 @@ } } }, - + detailView: { viewAll: { path: '_zone.clusters', @@ -13385,7 +13385,7 @@ array1.push("&endIp=" + todb(args.data.endip)); if (args.data.gateway != null && args.data.gateway.length > 0) array1.push("&gateway=" + todb(args.data.gateway)); - + $.ajax({ url: createURL("updatePod&id=" + args.context.pods[0].id + array1.join("")), dataType: "json", @@ -13402,7 +13402,7 @@ }); } }, - + enable: { label: 'label.action.enable.pod', messages: { @@ -13433,7 +13433,7 @@ } } }, - + dedicate: { label: 'label.dedicate.pod', messages: { @@ -13460,7 +13460,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -13492,7 +13492,7 @@ var array2 =[]; if (args.data.accountId != "") array2.push("&account=" + todb(args.data.accountId)); - + $.ajax({ url: createURL("dedicatePod&podId=" + args.context.pods[0].id + @@ -13553,8 +13553,8 @@ poll: pollAsyncJobResult } }, - - + + disable: { label: 'label.action.disable.pod', messages: { @@ -13585,7 +13585,7 @@ } } }, - + 'remove': { label: 'label.delete', messages: { @@ -13665,7 +13665,7 @@ label: 'label.allocation.state' } }, { - + isdedicated: { label: 'label.dedicated' }, @@ -13673,15 +13673,15 @@ label: 'label.domain.id' } }], - + dataProvider: function (args) { - + $.ajax({ url: createURL("listPods&id=" + args.context.pods[0].id), success: function (json) { var item = json.listpodsresponse.pod[0]; - - + + $.ajax({ url: createURL("listDedicatedPods&podid=" + args.context.pods[0].id), success: function (json) { @@ -13696,7 +13696,7 @@ $.extend(item, { isdedicated: _l('label.no') }); - + args.response.success({ actionFilter: podActionfilter, data: item @@ -13714,7 +13714,7 @@ }); } }, - + ipAllocations: { title: 'label.ip.allocations', multiple: true, @@ -13781,7 +13781,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -13806,7 +13806,7 @@ $(items).each(function () { addExtraPropertiesToClusterObject(this); }); - + args.response.success({ actionFilter: clusterActionfilter, data: items @@ -13814,7 +13814,7 @@ } }); }, - + actions: { add: { label: 'label.add.cluster', @@ -13842,19 +13842,19 @@ 'vsmpassword_req']; return $.inArray($(this).attr('rel'), nexusDvsReqFields) > -1; }); - + if ($form.find('.form-item[rel=hypervisor] select').val() == 'VMware') { $form.find('.form-item[rel=vCenterHost]').css('display', 'inline-block'); $form.find('.form-item[rel=vCenterUsername]').css('display', 'inline-block'); $form.find('.form-item[rel=vCenterPassword]').css('display', 'inline-block'); $form.find('.form-item[rel=vCenterDatacenter]').css('display', 'inline-block'); - + var $overridePublicTraffic = $form.find('.form-item[rel=overridepublictraffic] input[type=checkbox]'); var $vSwitchPublicType = $form.find('.form-item[rel=vSwitchPublicType] select'); var $overrideGuestTraffic = $form.find('.form-item[rel=overrideguesttraffic] input[type=checkbox]'); var $vSwitchGuestType = $form.find('.form-item[rel=vSwitchGuestType] select'); - - + + var useDvs = false; $.ajax({ url: createURL('listConfigurations'), @@ -13872,7 +13872,7 @@ //If using Distributed vswitch, there is OverrideTraffic option. $form.find('.form-item[rel=overridepublictraffic]').css('display', 'inline-block'); $form.find('.form-item[rel=overrideguesttraffic]').css('display', 'inline-block'); - + var useNexusDvs = false; $.ajax({ url: createURL('listConfigurations'), @@ -13906,11 +13906,11 @@ $form.find('.form-item[rel=overridepublictraffic]').css('display', 'none'); $form.find('.form-item[rel=vSwitchPublicType]').css('display', 'none'); $form.find('.form-item[rel=vSwitchPublicName]').css('display', 'none'); - + $form.find('.form-item[rel=overrideguesttraffic]').css('display', 'none'); $form.find('.form-item[rel=vSwitchGuestType]').css('display', 'none'); $form.find('.form-item[rel=vSwitchGuestName]').css('display', 'none'); - + $nexusDvsOptFields.hide(); $nexusDvsReqFields.hide(); } @@ -13921,13 +13921,13 @@ $form.find('.form-item[rel=vCenterPassword]').css('display', 'none'); $form.find('.form-item[rel=vCenterDatacenter]').css('display', 'none'); $form.find('.form-item[rel=enableNexusVswitch]').css('display', 'none'); - + $form.find('.form-item[rel=overridepublictraffic]').css('display', 'none'); $form.find('.form-item[rel=overrideguesttraffic]').css('display', 'none'); $nexusDvsOptFields.hide(); $nexusDvsReqFields.hide(); } - + if ($form.find('.form-item[rel=overridepublictraffic]').css('display') != 'none' && $overridePublicTraffic.is(':checked')) { $form.find('.form-item[rel=vSwitchPublicType]').css('display', 'inline-block'); $form.find('.form-item[rel=vSwitchPublicName]').css('display', 'inline-block'); @@ -13935,7 +13935,7 @@ $form.find('.form-item[rel=vSwitchPublicType]').css('display', 'none'); $form.find('.form-item[rel=vSwitchPublicName]').css('display', 'none'); } - + if ($form.find('.form-item[rel=overrideguesttraffic]').css('display') != 'none' && $overrideGuestTraffic.is(':checked')) { $form.find('.form-item[rel=vSwitchGuestType]').css('display', 'inline-block'); $form.find('.form-item[rel=vSwitchGuestName]').css('display', 'inline-block'); @@ -13944,7 +13944,7 @@ $form.find('.form-item[rel=vSwitchGuestName]').css('display', 'none'); } }); - + $form.trigger('click'); }, fields: { @@ -13958,13 +13958,13 @@ var data = args.context.zones ? { id: args.context.zones[0].id }: {}; - + $.ajax({ url: createURL('listZones'), data: data, success: function (json) { var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[]; - + args.response.success({ data: $.map(zones, function (zone) { return { @@ -14038,14 +14038,14 @@ required: true } }, - + isDedicated: { label: 'label.dedicate', isBoolean: true, isChecked: false, docID: 'helpDedicateResource' }, - + domainId: { label: 'label.domain', isHidden: true, @@ -14061,7 +14061,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -14079,7 +14079,7 @@ }); } }, - + accountId: { label: 'label.account', isHidden: true, @@ -14144,7 +14144,7 @@ } //legacy zone - validation not required for new VMware dc model }, - + overridepublictraffic: { label: 'label.override.public.traffic', isBoolean: true, @@ -14152,8 +14152,8 @@ isChecked: false, docID: 'helpOverridePublicNetwork' }, - - + + vSwitchPublicType: { label: 'label.public.traffic.vswitch.type', select: function (args) { @@ -14171,7 +14171,7 @@ } } }); - + if (useNexusDvs) { items.push({ id: "nexusdvs", @@ -14199,19 +14199,19 @@ description: "Cisco Nexus 1000v Distributed Virtual Switch" }); } - + args.response.success({ data: items }); }, isHidden: true }, - + vSwitchPublicName: { label: 'label.public.traffic.vswitch.name', isHidden: true }, - + overrideguesttraffic: { label: 'label.override.guest.traffic', isBoolean: true, @@ -14219,12 +14219,12 @@ isChecked: false, docID: 'helpOverrideGuestNetwork' }, - + vSwitchGuestType: { label: 'label.guest.traffic.vswitch.type', select: function (args) { var items =[] - + var useNexusDvs = false; $.ajax({ url: createURL('listConfigurations'), @@ -14238,8 +14238,8 @@ } } }); - - + + if (useNexusDvs) { items.push({ id: "nexusdvs", @@ -14267,20 +14267,20 @@ description: "Cisco Nexus 1000v Distributed Virtual Switch" }); } - + args.response.success({ data: items }); }, isHidden: true }, - + vSwitchGuestName: { label: 'label.guest.traffic.vswitch.name', isHidden: true }, - - + + vsmipaddress: { label: 'label.cisco.nexus1000v.ip.address', validation: { @@ -14328,20 +14328,20 @@ //hypervisor==VMWare ends here } }, - + action: function (args) { var array1 =[]; array1.push("&zoneId=" + args.data.zoneid); array1.push("&hypervisor=" + args.data.hypervisor); - + var clusterType; if (args.data.hypervisor == "VMware") clusterType = "ExternalManaged"; else clusterType = "CloudManaged"; array1.push("&clustertype=" + clusterType); - + array1.push("&podId=" + args.data.podId); - + var clusterName = args.data.name; if (args.data.hypervisor == "Ovm3") { array1.push("&ovm3pool=" + todb(args.data.ovm3pool)); @@ -14351,7 +14351,7 @@ if (args.data.hypervisor == "VMware") { array1.push("&username=" + todb(args.data.vCenterUsername)); array1.push("&password=" + todb(args.data.vCenterPassword)); - + //vSwitch Public Type if (args.$form.find('.form-item[rel=vSwitchPublicType]').css('display') != 'none' && args.data.vSwitchPublicType != "") { array1.push("&publicvswitchtype=" + args.data.vSwitchPublicType); @@ -14359,7 +14359,7 @@ if (args.$form.find('.form-item[rel=vSwitchPublicName]').css('display') != 'none' && args.data.vSwitchPublicName != "") { array1.push("&publicvswitchname=" + args.data.vSwitchPublicName); } - + //vSwitch Guest Type if (args.$form.find('.form-item[rel=vSwitchGuestType]').css('display') != 'none' && args.data.vSwitchGuestType != "") { array1.push("&guestvswitchtype=" + args.data.vSwitchGuestType); @@ -14367,7 +14367,7 @@ if (args.$form.find('.form-item[rel=vSwitchGuestName]').css('display') != 'none' && args.data.vSwitchGuestName != "") { array1.push("&guestvswitchname=" + args.data.vSwitchGuestName); } - + //Nexus VSM fields if (args.$form.find('.form-item[rel=vsmipaddress]').css('display') != 'none' && args.data.vsmipaddress != null && args.data.vsmipaddress.length > 0) { array1.push('&vsmipaddress=' + args.data.vsmipaddress); @@ -14375,25 +14375,25 @@ if (args.$form.find('.form-item[rel=vsmipaddress_req]').css('display') != 'none' && args.data.vsmipaddress_req != null && args.data.vsmipaddress_req.length > 0) { array1.push('&vsmipaddress=' + args.data.vsmipaddress_req); } - + if (args.$form.find('.form-item[rel=vsmusername]').css('display') != 'none' && args.data.vsmusername != null && args.data.vsmusername.length > 0) { array1.push('&vsmusername=' + args.data.vsmusername); } if (args.$form.find('.form-item[rel=vsmusername_req]').css('display') != 'none' && args.data.vsmusername_req != null && args.data.vsmusername_req.length > 0) { array1.push('&vsmusername=' + args.data.vsmusername_req); } - + if (args.$form.find('.form-item[rel=vsmpassword]').css('display') != 'none' && args.data.vsmpassword != null && args.data.vsmpassword.length > 0) { array1.push('&vsmpassword=' + args.data.vsmpassword); } if (args.$form.find('.form-item[rel=vsmpassword_req]').css('display') != 'none' && args.data.vsmpassword_req != null && args.data.vsmpassword_req.length > 0) { array1.push('&vsmpassword=' + args.data.vsmpassword_req); } - - + + var hostname = args.data.vCenterHost; var dcName = args.data.vCenterDatacenter; - + if (hostname.length == 0 && dcName.length == 0) { $.ajax({ url: createURL('listVmwareDcs'), @@ -14411,14 +14411,14 @@ } }); } - + var url; if (hostname.indexOf("http://") == -1) url = "http://" + hostname; else url = hostname; url += "/" + dcName + "/" + clusterName; array1.push("&url=" + todb(url)); - + clusterName = hostname + "/" + dcName + "/" + clusterName; //override clusterName } array1.push("&clustername=" + todb(clusterName)); @@ -14430,13 +14430,13 @@ success: function (json) { var item = json.addclusterresponse.cluster[0]; clusterId = json.addclusterresponse.cluster[0].id; - + //EXPLICIT DEDICATION var array2 =[]; if (args.$form.find('.form-item[rel=isDedicated]').find('input[type=checkbox]').is(':Checked') == true) { if (args.data.accountId != "") array2.push("&account=" + todb(args.data.accountId)); - + if (clusterId != null) { $.ajax({ url: createURL("dedicateCluster&clusterId=" + clusterId + "&domainId=" + args.data.domainId + array2.join("")), @@ -14452,7 +14452,7 @@ interval: 4500, desc: "Dedicate Cluster" }, - + data: $.extend(item, { state: 'Enabled' }) @@ -14477,7 +14477,7 @@ } } }, - + detailView: { viewAll: { path: '_zone.hosts', @@ -14496,21 +14496,21 @@ vSwichConfigEnabled = json.listconfigurationsresponse.configuration[0].value; } }); - + var hypervisorType = args.context.clusters[0].hypervisortype; if (vSwichConfigEnabled != "true" || hypervisorType != 'VMware') { return[ 'nexusVswitch']; } return[]; }, - + actions: { - + edit: { label: 'label.edit', action: function (args) { var array1 =[]; - + $.ajax({ url: createURL("updateCluster&id=" + args.context.clusters[0].id + array1.join("")), dataType: "json", @@ -14526,7 +14526,7 @@ }); } }, - + enable: { label: 'label.action.enable.cluster', messages: { @@ -14559,7 +14559,7 @@ } } }, - + disable: { label: 'label.action.disable.cluster', messages: { @@ -14592,7 +14592,7 @@ } } }, - + dedicate: { label: 'label.dedicate.cluster', messages: { @@ -14619,7 +14619,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -14629,7 +14629,7 @@ items.sort(function(a, b) { return a.description.localeCompare(b.description); }); - + args.response.success({ data: items }); @@ -14708,8 +14708,8 @@ poll: pollAsyncJobResult } }, - - + + manage: { label: 'label.action.manage.cluster', messages: { @@ -14741,7 +14741,7 @@ } } }, - + unmanage: { label: 'label.action.unmanage.cluster', messages: { @@ -14773,7 +14773,7 @@ } } }, - + 'remove': { label: 'label.action.delete.cluster', messages: { @@ -14804,7 +14804,7 @@ } } }, - + tabs: { details: { title: 'label.details', @@ -14875,7 +14875,7 @@ data: item }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(XMLHttpResponse)); } @@ -14936,7 +14936,7 @@ } } }, - + disable: { label: 'label.action.disable.nexusVswitch', messages: { @@ -14974,7 +14974,7 @@ } } } - + /* 'remove': { label: 'label.action.delete.nexusVswitch' , messages: { @@ -15000,7 +15000,7 @@ } }*/ }, - + tabs: { details: { title: 'label.details', @@ -15027,7 +15027,7 @@ } } }, - + dataProvider: function (args) { $.ajax({ url: createURL("listCiscoNexusVSMs&clusterid=" + args.context.clusters[0].id), @@ -15048,7 +15048,7 @@ } } }, - + dataProvider: function (args) { $.ajax({ url: createURL("listCiscoNexusVSMs&clusterid=" + args.context.clusters[0].id), @@ -15070,7 +15070,7 @@ } } }, - + // Granular settings for cluster settings: { title: 'label.settings', @@ -15088,7 +15088,7 @@ data: json.listconfigurationsresponse.configuration }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -15097,29 +15097,29 @@ actions: { edit: function (args) { // call updateClusterLevelParameters - + var data = { name: args.data.jsonObj.name, value: args.data.value }; - + $.ajax({ url: createURL('updateConfiguration&clusterid=' + args.context.clusters[0].id), data: data, success: function (json) { var item = json.updateconfigurationresponse.configuration; - + if (args.data.jsonObj.name == 'cpu.overprovisioning.factor' || args.data.jsonObj.name == 'mem.overprovisioning.factor') { cloudStack.dialog.notice({ message: 'Please note - if you are changing the over provisioning factor for a cluster with vms running, please refer to the admin guide to understand the capacity calculation.' }); } - + args.response.success({ data: item }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -15162,7 +15162,7 @@ } } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -15175,7 +15175,7 @@ } } } - + if (! args.context.instances) { array1.push("&zoneid=" + args.context.zones[0].id); if ("pods" in args.context) @@ -15186,7 +15186,7 @@ //Instances menu > Instance detailView > View Hosts array1.push("&id=" + args.context.instances[0].hostid); } - + $.ajax({ url: createURL("listHosts&type=Routing" + array1.join("") + "&page=" + args.page + "&pagesize=" + pageSize), dataType: "json", @@ -15200,11 +15200,11 @@ } }); }, - + actions: { add: { label: 'label.add.host', - + createForm: { title: 'label.add.host', fields: { @@ -15218,13 +15218,13 @@ var data = args.context.zones ? { id: args.context.zones[0].id }: {}; - + $.ajax({ url: createURL('listZones'), data: data, success: function (json) { var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[]; - + args.response.success({ data: $.map(zones, function (zone) { return { @@ -15237,7 +15237,7 @@ }); } }, - + //always appear (begin) podId: { label: 'label.pod', @@ -15272,7 +15272,7 @@ }); } }, - + clusterId: { label: 'label.cluster', docID: 'helpHostCluster', @@ -15304,14 +15304,14 @@ }); } }); - + args.$select.change(function () { var $form = $(this).closest('form'); - + var clusterId = $(this).val(); if (clusterId == null) return; - + var items =[]; $(clusterObjs).each(function () { if (this.id == clusterId) { @@ -15321,22 +15321,22 @@ }); if (selectedClusterObj == null) return; - + if (selectedClusterObj.hypervisortype == "VMware") { //$('li[input_group="general"]', $dialogAddHost).hide(); $form.find('.form-item[rel=hostname]').hide(); $form.find('.form-item[rel=username]').hide(); $form.find('.form-item[rel=password]').hide(); - + //$('li[input_group="vmware"]', $dialogAddHost).show(); $form.find('.form-item[rel=vcenterHost]').css('display', 'inline-block'); - + //$('li[input_group="baremetal"]', $dialogAddHost).hide(); $form.find('.form-item[rel=baremetalCpuCores]').hide(); $form.find('.form-item[rel=baremetalCpu]').hide(); $form.find('.form-item[rel=baremetalMemory]').hide(); $form.find('.form-item[rel=baremetalMAC]').hide(); - + //$('li[input_group="Ovm"]', $dialogAddHost).hide(); $form.find('.form-item[rel=agentUsername]').hide(); $form.find('.form-item[rel=agentPassword]').hide(); @@ -15353,13 +15353,13 @@ $form.find('.form-item[rel=hostname]').css('display', 'inline-block'); $form.find('.form-item[rel=username]').css('display', 'inline-block'); $form.find('.form-item[rel=password]').css('display', 'inline-block'); - + //$('li[input_group="baremetal"]', $dialogAddHost).show(); $form.find('.form-item[rel=baremetalCpuCores]').css('display', 'inline-block'); $form.find('.form-item[rel=baremetalCpu]').css('display', 'inline-block'); $form.find('.form-item[rel=baremetalMemory]').css('display', 'inline-block'); $form.find('.form-item[rel=baremetalMAC]').css('display', 'inline-block'); - + //$('li[input_group="vmware"]', $dialogAddHost).hide(); $form.find('.form-item[rel=vcenterHost]').hide(); @@ -15379,16 +15379,16 @@ $form.find('.form-item[rel=hostname]').css('display', 'inline-block'); $form.find('.form-item[rel=username]').css('display', 'inline-block'); $form.find('.form-item[rel=password]').css('display', 'inline-block'); - + //$('li[input_group="vmware"]', $dialogAddHost).hide(); $form.find('.form-item[rel=vcenterHost]').hide(); - + //$('li[input_group="baremetal"]', $dialogAddHost).hide(); $form.find('.form-item[rel=baremetalCpuCores]').hide(); $form.find('.form-item[rel=baremetalCpu]').hide(); $form.find('.form-item[rel=baremetalMemory]').hide(); $form.find('.form-item[rel=baremetalMAC]').hide(); - + //$('li[input_group="Ovm"]', $dialogAddHost).show(); $form.find('.form-item[rel=agentUsername]').css('display', 'inline-block'); $form.find('.form-item[rel=agentUsername]').find('input').val("oracle"); @@ -15430,16 +15430,16 @@ $form.find('.form-item[rel=hostname]').css('display', 'inline-block'); $form.find('.form-item[rel=username]').css('display', 'inline-block'); $form.find('.form-item[rel=password]').css('display', 'inline-block'); - + //$('li[input_group="vmware"]', $dialogAddHost).hide(); $form.find('.form-item[rel=vcenterHost]').hide(); - + //$('li[input_group="baremetal"]', $dialogAddHost).hide(); $form.find('.form-item[rel=baremetalCpuCores]').hide(); $form.find('.form-item[rel=baremetalCpu]').hide(); $form.find('.form-item[rel=baremetalMemory]').hide(); $form.find('.form-item[rel=baremetalMAC]').hide(); - + //$('li[input_group="Ovm"]', $dialogAddHost).hide(); $form.find('.form-item[rel=agentUsername]').hide(); $form.find('.form-item[rel=agentPassword]').hide(); @@ -15453,12 +15453,12 @@ $form.find('.form-item[rel=ovm3cluster]').hide(); } }); - + args.$select.trigger("change"); } }, //always appear (end) - + //input_group="general" starts here hostname: { label: 'label.host.name', @@ -15468,7 +15468,7 @@ }, isHidden: true }, - + username: { label: 'label.username', docID: 'helpHostUsername', @@ -15477,7 +15477,7 @@ }, isHidden: true }, - + password: { label: 'label.password', docID: 'helpHostPassword', @@ -15487,14 +15487,14 @@ isHidden: true, isPassword: true }, - + isDedicated: { label: 'label.dedicate', isBoolean: true, isChecked: false, docID: 'helpDedicateResource' }, - + domainId: { label: 'label.domain', isHidden: true, @@ -15509,7 +15509,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -15519,7 +15519,7 @@ items.sort(function(a, b) { return a.description.localeCompare(b.description); }); - + args.response.success({ data: items }); @@ -15527,7 +15527,7 @@ }); } }, - + accountId: { label: 'label.account', isHidden: true, @@ -15537,9 +15537,9 @@ required: false } }, - + //input_group="general" ends here - + //input_group="VMWare" starts here vcenterHost: { label: 'label.esx.host', @@ -15549,7 +15549,7 @@ isHidden: true }, //input_group="VMWare" ends here - + //input_group="BareMetal" starts here baremetalCpuCores: { label: 'label.num.cpu.cores', @@ -15580,7 +15580,7 @@ isHidden: true }, //input_group="BareMetal" ends here - + //input_group="OVM" starts here agentUsername: { label: 'label.agent.username', @@ -15652,7 +15652,7 @@ //always appear (end) } }, - + action: function (args) { var data = { zoneid: args.data.zoneid, @@ -15662,19 +15662,19 @@ clustertype: selectedClusterObj.clustertype, hosttags: args.data.hosttags }; - + if (selectedClusterObj.hypervisortype == "VMware") { $.extend(data, { username: '', password: '' }); - + var hostname = args.data.vcenterHost; var url; if (hostname.indexOf("http://") == -1) url = "http://" + hostname; else url = hostname; - + $.extend(data, { url: url }); @@ -15683,17 +15683,17 @@ username: args.data.username, password: args.data.password }); - + var hostname = args.data.hostname; var url; if (hostname.indexOf("http://") == -1) url = "http://" + hostname; else url = hostname; - + $.extend(data, { url: url }); - + if (selectedClusterObj.hypervisortype == "BareMetal") { $.extend(data, { cpunumber: args.data.baremetalCpuCores, @@ -15714,7 +15714,7 @@ }); } } - + var hostId = null; $.ajax({ url: createURL("addHost"), @@ -15722,17 +15722,17 @@ data: data, success: function (json) { var item = json.addhostresponse.host[0]; - + hostId = json.addhostresponse.host[0].id; - + //EXPLICIT DEDICATION var array2 =[]; - + if (args.$form.find('.form-item[rel=isDedicated]').find('input[type=checkbox]').is(':Checked') == true) { if (args.data.accountId != "") array2.push("&account=" + todb(args.data.accountId)); - - + + if (hostId != null) { $.ajax({ url: createURL("dedicateHost&hostId=" + hostId + "&domainId=" + args.data.domainId + array2.join("")), @@ -15748,11 +15748,11 @@ interval: 4500, desc: "Dedicate Host" }, - + data: item }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(XMLHttpResponse)); } @@ -15763,14 +15763,14 @@ data: item }); }, - + error: function (XMLHttpResponse) { var errorMsg = parseXMLHttpResponse(XMLHttpResponse); args.response.error(errorMsg); } }); }, - + notification: { poll: function (args) { args.complete({ @@ -15778,7 +15778,7 @@ }); } }, - + messages: { notification: function (args) { return 'label.add.host'; @@ -15798,10 +15798,10 @@ action: function (args) { var array1 =[]; array1.push("&hosttags=" + todb(args.data.hosttags)); - + if (args.data.oscategoryid != null && args.data.oscategoryid.length > 0) array1.push("&osCategoryId=" + args.data.oscategoryid); - + $.ajax({ url: createURL("updateHost&id=" + args.context.hosts[0].id + array1.join("")), dataType: "json", @@ -15815,7 +15815,7 @@ }); } }, - + dedicate: { label: 'label.dedicate.host', messages: { @@ -15842,7 +15842,7 @@ success: function (json) { var domainObjs = json.listdomainsresponse.domain; var items =[]; - + $(domainObjs).each(function () { items.push({ id: this.id, @@ -15852,7 +15852,7 @@ items.sort(function(a, b) { return a.description.localeCompare(b.description); }); - + args.response.success({ data: items }); @@ -15874,7 +15874,7 @@ var array2 =[]; if (args.data.accountId != "") array2.push("&account=" + todb(args.data.accountId)); - + $.ajax({ url: createURL("dedicateHost&hostId=" + args.context.hosts[0].id + @@ -15882,7 +15882,7 @@ dataType: "json", success: function (json) { var jid = json.dedicatehostresponse.jobid; - + args.response.success({ _custom: { jobId: jid, @@ -15933,8 +15933,8 @@ poll: pollAsyncJobResult } }, - - + + enableMaintenanceMode: { label: 'label.action.enable.maintenance.mode', action: function (args) { @@ -15970,7 +15970,7 @@ poll: pollAsyncJobResult } }, - + cancelMaintenanceMode: { label: 'label.action.cancel.maintenance.mode', action: function (args) { @@ -16006,7 +16006,7 @@ poll: pollAsyncJobResult } }, - + forceReconnect: { label: 'label.action.force.reconnect', action: function (args) { @@ -16042,14 +16042,14 @@ poll: pollAsyncJobResult } }, - + enable: { label: 'label.enable.host', action: function (args) { var data = { id: args.context.hosts[0].id, allocationstate: "Enable" - }; + }; $.ajax({ url: createURL("updateHost"), data: data, @@ -16083,7 +16083,7 @@ var data = { id: args.context.hosts[0].id, allocationstate: "Disable" - }; + }; $.ajax({ url: createURL("updateHost"), data: data, @@ -16110,7 +16110,7 @@ } } }, - + 'remove': { label: 'label.action.remove.host', messages: { @@ -16137,13 +16137,13 @@ action: function (args) { var data = { id: args.context.hosts[0].id - }; + }; if(args.$form.find('.form-item[rel=isForced]').css("display") != "none") { $.extend(data, { forced: (args.data.isForced == "on") - }); + }); } - + $.ajax({ url: createURL("deleteHost"), data: data, @@ -16153,10 +16153,10 @@ data: { } }); - + if (args.context.hosts[0].hypervisor == "XenServer"){ cloudStack.dialog.notice({ message: _s("The host has been deleted. Please eject the host from XenServer Pool") }) - } + } } }); }, @@ -16177,7 +16177,7 @@ tabs: { details: { title: 'label.details', - + preFilter: function (args) { var hiddenFields =[]; $.ajax({ @@ -16192,7 +16192,7 @@ }); return hiddenFields; }, - + fields:[ { name: { label: 'label.name' @@ -16303,7 +16303,7 @@ label: 'label.number.of.cpu.sockets' } }, { - + isdedicated: { label: 'label.dedicated' }, @@ -16311,7 +16311,7 @@ label: 'label.domain.id' } }], - + dataProvider: function (args) { $.ajax({ url: createURL("listHosts&id=" + args.context.hosts[0].id), @@ -16349,7 +16349,7 @@ }); } }, - + stats: { title: 'label.statistics', fields: { @@ -16506,7 +16506,7 @@ label: 'label.scope' } }, - + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -16537,11 +16537,11 @@ } }); }, - + actions: { add: { label: 'label.add.primary.storage', - + createForm: { title: 'label.add.primary.storage', fields: { @@ -16558,22 +16558,22 @@ } // { id: 'host', description: _l('label.host') } ]; - + args.response.success({ data: scope }); - + args.$select.change(function () { var $form = $(this).closest('form'); var scope = $(this).val(); - + if (scope == 'zone') { $form.find('.form-item[rel=podId]').hide(); $form.find('.form-item[rel=clusterId]').hide(); $form.find('.form-item[rel=hostId]').hide(); $form.find('.form-item[rel=hypervisor]').css('display', 'inline-block'); } else if (scope == 'cluster') { - + $form.find('.form-item[rel=hostId]').hide(); $form.find('.form-item[rel=podId]').css('display', 'inline-block'); $form.find('.form-item[rel=clusterId]').css('display', 'inline-block'); @@ -16587,8 +16587,8 @@ }) } }, - - + + hypervisor: { label: 'label.hypervisor', isHidden: true, @@ -16615,7 +16615,7 @@ }); } }, - + zoneid: { label: 'label.zone', docID: 'helpPrimaryStorageZone', @@ -16626,13 +16626,13 @@ var data = args.context.zones ? { id: args.context.zones[0].id }: {}; - + $.ajax({ url: createURL('listZones'), data: data, success: function (json) { var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[]; - + args.response.success({ data: $.map(zones, function (zone) { return { @@ -16673,7 +16673,7 @@ }); } }, - + clusterId: { label: 'label.cluster', docID: 'helpPrimaryStorageCluster', @@ -16703,7 +16703,7 @@ }); } }, - + hostId: { label: 'label.host', validation: { @@ -16731,7 +16731,7 @@ }); } }, - + name: { label: 'label.name', docID: 'helpPrimaryStorageName', @@ -16739,7 +16739,7 @@ required: true } }, - + protocol: { label: 'label.protocol', docID: 'helpPrimaryStorageProtocol', @@ -16755,14 +16755,14 @@ }); return; } - + $(clusterObjs).each(function () { if (this.id == clusterId) { selectedClusterObj = this; return false; //break the $.each() loop } }); - + if (selectedClusterObj.hypervisortype == "KVM") { var items =[]; items.push({ @@ -16877,35 +16877,35 @@ data:[] }); } - + args.$select.change(function () { var $form = $(this).closest('form'); - + var protocol = $(this).val(); if (protocol == null) return; - - + + if (protocol == "nfs") { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); - + $form.find('.form-item[rel=path]').css('display', 'inline-block'); var $required = $form.find('.form-item[rel=path]').find(".name").find("label span"); $form.find('.form-item[rel=path]').find(".name").find("label").text("Path:").prepend($required); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -16916,23 +16916,23 @@ //"SMB" show almost the same fields as "nfs" does, except 3 more SMB-specific fields. $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); - + $form.find('.form-item[rel=path]').css('display', 'inline-block'); var $required = $form.find('.form-item[rel=path]').find(".name").find("label span"); $form.find('.form-item[rel=path]').find(".name").find("label").text("Path:").prepend($required); - + $form.find('.form-item[rel=smbUsername]').css('display', 'inline-block'); $form.find('.form-item[rel=smbPassword]').css('display', 'inline-block'); $form.find('.form-item[rel=smbDomain]').css('display', 'inline-block'); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -16943,23 +16943,23 @@ //ocfs2 is the same as nfs, except no server field. $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); - + $form.find('.form-item[rel=path]').css('display', 'inline-block'); var $required = $form.find('.form-item[rel=path]').find(".name").find("label span"); $form.find('.form-item[rel=path]').find(".name").find("label").text("Path:").prepend($required); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -16969,23 +16969,23 @@ } else if (protocol == "PreSetup") { $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=server]').find(".value").find("input").val("localhost"); - + $form.find('.form-item[rel=path]').css('display', 'inline-block'); var $required = $form.find('.form-item[rel=path]').find(".name").find("label span"); $form.find('.form-item[rel=path]').find(".name").find("label").text("SR Name-Label:").prepend($required); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -17019,21 +17019,21 @@ } else if (protocol == "iscsi") { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); - + $form.find('.form-item[rel=path]').hide(); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').css('display', 'inline-block'); $form.find('.form-item[rel=lun]').css('display', 'inline-block'); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -17043,21 +17043,21 @@ } else if ($(this).val() == "clvm") { $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=server]').find(".value").find("input").val("localhost"); - + $form.find('.form-item[rel=path]').hide(); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').css('display', 'inline-block'); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -17067,21 +17067,21 @@ } else if (protocol == "vmfs") { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); - + $form.find('.form-item[rel=path]').hide(); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').css('display', 'inline-block'); $form.find('.form-item[rel=vCenterDataStore]').css('display', 'inline-block'); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -17092,23 +17092,23 @@ //"SharedMountPoint" show the same fields as "nfs" does. $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=server]').find(".value").find("input").val("localhost"); - + $form.find('.form-item[rel=path]').css('display', 'inline-block'); var $required = $form.find('.form-item[rel=path]').find(".name").find("label span"); $form.find('.form-item[rel=path]').find(".name").find("label").text("Path:").prepend($required); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); @@ -17118,16 +17118,16 @@ } else if (protocol == "rbd") { $form.find('.form-item[rel=rbdmonitor]').css('display', 'inline-block'); $form.find('.form-item[rel=rbdmonitor]').find(".name").find("label").text("RADOS Monitor:"); - + $form.find('.form-item[rel=rbdpool]').css('display', 'inline-block'); $form.find('.form-item[rel=rbdpool]').find(".name").find("label").text("RADOS Pool:"); - + $form.find('.form-item[rel=rbdid]').css('display', 'inline-block'); $form.find('.form-item[rel=rbdid]').find(".name").find("label").text("RADOS User:"); - + $form.find('.form-item[rel=rbdsecret]').css('display', 'inline-block'); $form.find('.form-item[rel=rbdsecret]').find(".name").find("label").text("RADOS Secret:"); - + $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); @@ -17135,7 +17135,7 @@ $form.find('.form-item[rel=path]').hide(); $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); @@ -17169,20 +17169,20 @@ } else { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); - + $form.find('.form-item[rel=iqn]').hide(); $form.find('.form-item[rel=lun]').hide(); - + $form.find('.form-item[rel=volumegroup]').hide(); - + $form.find('.form-item[rel=vCenterDataCenter]').hide(); $form.find('.form-item[rel=vCenterDataStore]').hide(); - + $form.find('.form-item[rel=rbdmonitor]').hide(); $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); - + $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); @@ -17190,12 +17190,12 @@ $form.find('.form-item[rel=glustervolume]').hide(); } }); - + args.$select.trigger("change"); } }, //always appear (end) - + server: { label: 'label.server', docID: 'helpPrimaryStorageServer', @@ -17204,7 +17204,7 @@ }, isHidden: true }, - + //nfs path: { label: 'label.path', @@ -17313,7 +17313,7 @@ }, isHidden: true }, - + //iscsi iqn: { label: 'label.target.iqn', @@ -17331,7 +17331,7 @@ }, isHidden: true }, - + //clvm volumegroup: { label: 'label.volgroup', @@ -17340,7 +17340,7 @@ }, isHidden: true }, - + //vmfs vCenterDataCenter: { label: 'label.vcenter.datacenter', @@ -17356,7 +17356,7 @@ }, isHidden: true }, - + // RBD rbdmonitor: { label: 'label.rbd.monitor', @@ -17443,25 +17443,25 @@ //always appear (end) } }, - + /******************************/ action: function (args) { var array1 =[]; array1.push("&scope=" + todb(args.data.scope)); - + array1.push("&zoneid=" + args.data.zoneid); - + if (args.data.scope == 'zone') { - + array1.push("&hypervisor=" + args.data.hypervisor); } - + if (args.data.scope == 'cluster') { - + array1.push("&podid=" + args.data.podId); array1.push("&clusterid=" + args.data.clusterId); } - + if (args.data.scope == 'host') { array1.push("&podid=" + args.data.podId); array1.push("&clusterid=" + args.data.clusterId); @@ -17564,11 +17564,11 @@ array1.push("&tags=" + todb(args.data.storageTags)); } - if ("custom" in args.response) { - args.response.custom(array1); - return; - } - + if ("custom" in args.response) { + args.response.custom(array1); + return; + } + $.ajax({ url: createURL("createStoragePool" + array1.join("")), dataType: "json", @@ -17584,7 +17584,7 @@ } }); }, - + notification: { poll: function (args) { args.complete({ @@ -17592,7 +17592,7 @@ }); } }, - + messages: { notification: function (args) { return 'label.add.primary.storage'; @@ -17600,7 +17600,7 @@ } } }, - + detailView: { name: "Primary storage details", viewAll: { @@ -17614,7 +17614,7 @@ action: function (args) { var array1 =[]; array1.push("&tags=" + todb(args.data.tags)); - + if (args.data.disksizetotal != null && args.data.disksizetotal.length > 0) { var diskSizeTotal = args.data.disksizetotal.split(",").join(""); @@ -17642,7 +17642,7 @@ }); } }, - + enableMaintenanceMode: { label: 'label.action.enable.maintenance.mode', action: function (args) { @@ -17678,7 +17678,7 @@ poll: pollAsyncJobResult } }, - + cancelMaintenanceMode: { label: 'label.action.cancel.maintenance.mode', messages: { @@ -17714,7 +17714,7 @@ poll: pollAsyncJobResult } }, - + 'remove': { label: 'label.action.delete.primary.storage', messages: { @@ -17753,7 +17753,7 @@ } } }, - + tabs: { details: { title: 'label.details', @@ -17850,7 +17850,7 @@ } } }], - + dataProvider: function (args) { $.ajax({ url: createURL("listStoragePools&id=" + args.context.primarystorages[0].id), @@ -17866,13 +17866,13 @@ }); } }, - + // Granular settings for storage pool settings: { title: 'label.settings', custom: cloudStack.uiCustom.granularSettings({ dataProvider: function (args) { - + $.ajax({ url: createURL('listConfigurations&storageid=' + args.context.primarystorages[0].id), data: listViewDataProvider(args, { @@ -17885,7 +17885,7 @@ data: json.listconfigurationsresponse.configuration }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -17898,7 +17898,7 @@ name: args.data.jsonObj.name, value: args.data.value }; - + $.ajax({ url: createURL('updateConfiguration&storageid=' + args.context.primarystorages[0].id), data: data, @@ -17908,7 +17908,7 @@ data: item }); }, - + error: function (json) { args.response.error(parseXMLHttpResponse(json)); } @@ -17921,7 +17921,7 @@ } } }, - + ucs: { title: 'UCS', id: 'ucs', @@ -17960,7 +17960,7 @@ }; */ //for testing only (end) - + var items = json.listucsmanagerreponse.ucsmanager; args.response.success({ data: items @@ -17971,13 +17971,13 @@ actions: { add: { label: 'label.add.ucs.manager', - + messages: { notification: function (args) { return 'label.add.ucs.manager'; } }, - + createForm: { title: 'label.add.ucs.manager', fields: { @@ -18008,7 +18008,7 @@ } } }, - + action: function (args) { var data = { zoneid: args.context.physicalResources[0].id, @@ -18021,7 +18021,7 @@ name: args.data.name }); } - + $.ajax({ url: createURL('addUcsManager'), data: data, @@ -18038,7 +18038,7 @@ } }); }, - + notification: { poll: function (args) { args.complete(); @@ -18046,7 +18046,7 @@ } } }, - + detailView: { isMaximized: true, noCompact: true, @@ -18086,7 +18086,7 @@ tabs: { details: { title: 'label.details', - + fields:[ { name: { label: 'label.name' @@ -18100,7 +18100,7 @@ label: 'label.url' } }], - + dataProvider: function (args) { $.ajax({ url: createURL('listUcsManagers'), @@ -18126,7 +18126,7 @@ }; */ //for testing only (end) - + var item = json.listucsmanagerreponse.ucsmanager[0]; args.response.success({ data: item @@ -18135,7 +18135,7 @@ }); } }, - + blades: { title: 'label.blades', listView: { @@ -18192,7 +18192,7 @@ }; */ //for testing only (end) - + var items = json.listucsbladeresponse.ucsblade ? json.listucsbladeresponse.ucsblade:[]; for (var i = 0; i < items.length; i++) { addExtraPropertiesToUcsBladeObject(items[i]); @@ -18269,7 +18269,7 @@ }; */ //for testing only (end) - + /* var item = json.refreshucsbladesresponse.ucsblade[0]; addExtraPropertiesToUcsBladeObject(item); @@ -18287,7 +18287,7 @@ } } }, - + associateTemplateToBlade: { label: 'label.instanciate.template.associate.profile.blade', addRow: 'false', @@ -18303,7 +18303,7 @@ label: 'label.select.template', select: function (args) { var items =[]; - + $.ajax({ url: createURL('listUcsTemplates'), data: { @@ -18325,7 +18325,7 @@ }; */ //for testing only (end) - + var ucstemplates = json.listucstemplatesresponse.ucstemplate; if (ucstemplates != null) { for (var i = 0; i < ucstemplates.length; i++) { @@ -18337,7 +18337,7 @@ } } }); - + args.response.success({ data: items }); @@ -18357,13 +18357,13 @@ templatedn: args.data.templatedn, bladeid: args.context.blades[0].id }; - + if (args.data.profilename != null && args.data.profilename.length > 0) { $.extend(data, { profilename: args.data.profilename }); } - + $.ajax({ url: createURL('instantiateUcsTemplateAndAssocaciateToBlade'), data: data, @@ -18377,7 +18377,7 @@ } */ //for testing only (end) - + var jid = json.instantiateucstemplateandassociatetobladeresponse.jobid; args.response.success({ _custom: { @@ -18408,7 +18408,7 @@ }; */ //for testing only (end) - + addExtraPropertiesToUcsBladeObject(json.queryasyncjobresultresponse.jobresult.ucsblade); return json.queryasyncjobresultresponse.jobresult.ucsblade; } @@ -18421,7 +18421,7 @@ poll: pollAsyncJobResult } }, - + disassociateProfileFromBlade: { label: 'label.disassociate.profile.blade', addRow: 'false', @@ -18457,7 +18457,7 @@ } */ //for testing only (end) - + var jid = json.disassociateucsprofilefrombladeresponse.jobid; args.response.success({ _custom: { @@ -18487,7 +18487,7 @@ }; */ //for testing only (end) - + addExtraPropertiesToUcsBladeObject(json.queryasyncjobresultresponse.jobresult.ucsblade); return json.queryasyncjobresultresponse.jobresult.ucsblade; } @@ -18507,7 +18507,7 @@ } } }, - + 'secondary-storage': { title: 'label.secondary.storage', id: 'secondarystorages', @@ -18529,8 +18529,8 @@ label: 'label.protocol' } }, - - + + dataProvider: function (args) { var array1 =[]; if (args.filterBy != null) { @@ -18544,7 +18544,7 @@ } } array1.push("&zoneid=" + args.context.zones[0].id); - + $.ajax({ url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), dataType: "json", @@ -18558,14 +18558,14 @@ } }); }, - + actions: { add: { label: 'label.add.secondary.storage', - + createForm: { title: 'label.add.secondary.storage', - + fields: { name: { label: 'label.name' @@ -18594,11 +18594,11 @@ id: 'Swift', description: 'Swift' }]; - + args.response.success({ data: items }); - + args.$select.change(function () { var $form = $(this).closest('form'); if ($(this).val() == "NFS") { @@ -18606,12 +18606,12 @@ $form.find('.form-item[rel=zoneid]').css('display', 'inline-block'); $form.find('.form-item[rel=nfsServer]').css('display', 'inline-block'); $form.find('.form-item[rel=path]').css('display', 'inline-block'); - + //SMB $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + //S3 $form.find('.form-item[rel=accesskey]').hide(); $form.find('.form-item[rel=secretkey]').hide(); @@ -18621,13 +18621,13 @@ $form.find('.form-item[rel=connectiontimeout]').hide(); $form.find('.form-item[rel=maxerrorretry]').hide(); $form.find('.form-item[rel=sockettimeout]').hide(); - + $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked'); $form.find('.form-item[rel=createNfsCache]').hide(); $form.find('.form-item[rel=nfsCacheZoneid]').hide(); $form.find('.form-item[rel=nfsCacheNfsServer]').hide(); $form.find('.form-item[rel=nfsCachePath]').hide(); - + //Swift $form.find('.form-item[rel=url]').hide(); $form.find('.form-item[rel=account]').hide(); @@ -18638,12 +18638,12 @@ $form.find('.form-item[rel=zoneid]').css('display', 'inline-block'); $form.find('.form-item[rel=nfsServer]').css('display', 'inline-block'); $form.find('.form-item[rel=path]').css('display', 'inline-block'); - + //SMB $form.find('.form-item[rel=smbUsername]').css('display', 'inline-block'); $form.find('.form-item[rel=smbPassword]').css('display', 'inline-block'); $form.find('.form-item[rel=smbDomain]').css('display', 'inline-block'); - + //S3 $form.find('.form-item[rel=accesskey]').hide(); $form.find('.form-item[rel=secretkey]').hide(); @@ -18653,13 +18653,13 @@ $form.find('.form-item[rel=connectiontimeout]').hide(); $form.find('.form-item[rel=maxerrorretry]').hide(); $form.find('.form-item[rel=sockettimeout]').hide(); - + $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked'); $form.find('.form-item[rel=createNfsCache]').hide(); $form.find('.form-item[rel=nfsCacheZoneid]').hide(); $form.find('.form-item[rel=nfsCacheNfsServer]').hide(); $form.find('.form-item[rel=nfsCachePath]').hide(); - + //Swift $form.find('.form-item[rel=url]').hide(); $form.find('.form-item[rel=account]').hide(); @@ -18670,12 +18670,12 @@ $form.find('.form-item[rel=zoneid]').hide(); $form.find('.form-item[rel=nfsServer]').hide(); $form.find('.form-item[rel=path]').hide(); - + //SMB $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + //S3 $form.find('.form-item[rel=accesskey]').css('display', 'inline-block'); $form.find('.form-item[rel=secretkey]').css('display', 'inline-block'); @@ -18685,15 +18685,15 @@ $form.find('.form-item[rel=connectiontimeout]').css('display', 'inline-block'); $form.find('.form-item[rel=maxerrorretry]').css('display', 'inline-block'); $form.find('.form-item[rel=sockettimeout]').css('display', 'inline-block'); - + $form.find('.form-item[rel=createNfsCache]').find('input').attr('checked', 'checked'); //$form.find('.form-item[rel=createNfsCache]').find('input').attr('disabled', 'disabled'); //This checkbox should not be disabled any more because NFS staging (of a zone) might already exist (from "NFS secondary storage => Prepare Object Store Migration => NFS staging") $form.find('.form-item[rel=createNfsCache]').css('display', 'inline-block'); $form.find('.form-item[rel=nfsCacheZoneid]').css('display', 'inline-block'); $form.find('.form-item[rel=nfsCacheNfsServer]').css('display', 'inline-block'); $form.find('.form-item[rel=nfsCachePath]').css('display', 'inline-block'); - - + + //Swift $form.find('.form-item[rel=url]').hide(); $form.find('.form-item[rel=account]').hide(); @@ -18704,12 +18704,12 @@ $form.find('.form-item[rel=zoneid]').hide(); $form.find('.form-item[rel=nfsServer]').hide(); $form.find('.form-item[rel=path]').hide(); - + //SMB $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); - + //S3 $form.find('.form-item[rel=accesskey]').hide(); $form.find('.form-item[rel=secretkey]').hide(); @@ -18719,13 +18719,13 @@ $form.find('.form-item[rel=connectiontimeout]').hide(); $form.find('.form-item[rel=maxerrorretry]').hide(); $form.find('.form-item[rel=sockettimeout]').hide(); - + $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked'); $form.find('.form-item[rel=createNfsCache]').hide(); $form.find('.form-item[rel=nfsCacheZoneid]').hide(); $form.find('.form-item[rel=nfsCacheNfsServer]').hide(); $form.find('.form-item[rel=nfsCachePath]').hide(); - + //Swift $form.find('.form-item[rel=url]').css('display', 'inline-block'); $form.find('.form-item[rel=account]').css('display', 'inline-block'); @@ -18733,12 +18733,12 @@ $form.find('.form-item[rel=key]').css('display', 'inline-block'); } }); - + args.$select.change(); } }, - - + + //NFS, SMB (begin) zoneid: { label: 'label.zone', @@ -18752,7 +18752,7 @@ data: {}, success: function (json) { var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[]; - + if (zones != null) { //$.map(items, fn) - items can not be null args.response.success({ @@ -18787,8 +18787,8 @@ } }, //NFS, SMB (end) - - + + //SMB (begin) smbUsername: { label: 'label.smb.username', @@ -18856,7 +18856,7 @@ label: 'label.s3.socket_timeout', docID: 'helpS3SocketTimeout' }, - + createNfsCache: { label: 'label.create.nfs.secondary.staging.store', isBoolean: true, @@ -18874,7 +18874,7 @@ data: {}, success: function (json) { var zones = json.listzonesresponse.zone; - + if (zones != null) { //$.map(items, fn) - items can not be null args.response.success({ @@ -18911,8 +18911,8 @@ } }, //S3 (end) - - + + //Swift (begin) url: { label: 'label.url', @@ -18932,7 +18932,7 @@ //Swift (end) } }, - + action: function (args) { var data = { }; @@ -18941,19 +18941,19 @@ name: args.data.name }); } - + if (args.data.provider == 'NFS') { var zoneid = args.data.zoneid; var nfs_server = args.data.nfsServer; var path = args.data.path; var url = nfsURL(nfs_server, path); - + $.extend(data, { provider: args.data.provider, zoneid: zoneid, url: url }); - + $.ajax({ url: createURL('addImageStore'), data: data, @@ -18984,7 +18984,7 @@ 'details[2].key': 'domain', 'details[2].value': args.data.smbDomain }); - + $.ajax({ url: createURL('addImageStore'), data: data, @@ -19011,7 +19011,7 @@ 'details[3].key': 'usehttps', 'details[3].value': (args.data.usehttps != null && args.data.usehttps == 'on' ? 'true': 'false') }); - + var index = 4; if (args.data.endpoint != null && args.data.endpoint.length > 0) { data[ 'details[' + index.toString() + '].key'] = 'endpoint'; @@ -19033,13 +19033,13 @@ data[ 'details[' + index.toString() + '].value'] = args.data.sockettimeout; index++; } - + $.ajax({ url: createURL('addImageStore'), data: data, success: function (json) { g_regionsecondaryenabled = true; - + var item = json.addimagestoreresponse.imagestore; args.response.success({ data: item @@ -19049,19 +19049,19 @@ args.response.error(parseXMLHttpResponse(json)); } }); - + if (args.data.createNfsCache == 'on') { var zoneid = args.data.nfsCacheZoneid; var nfs_server = args.data.nfsCacheNfsServer; var path = args.data.nfsCachePath; var url = nfsURL(nfs_server, path); - + var nfsCacheData = { provider: 'NFS', zoneid: zoneid, url: url }; - + $.ajax({ url: createURL('createSecondaryStagingStore'), data: nfsCacheData, @@ -19078,7 +19078,7 @@ provider: args.data.provider, url: args.data.url }); - + var index = 0; if (args.data.account != null && args.data.account.length > 0) { data[ 'details[' + index.toString() + '].key'] = 'account'; @@ -19100,7 +19100,7 @@ data: data, success: function (json) { g_regionsecondaryenabled = true; - + var item = json.addimagestoreresponse.imagestore; args.response.success({ data: item @@ -19112,7 +19112,7 @@ }); } }, - + notification: { poll: function (args) { args.complete({ @@ -19120,7 +19120,7 @@ }); } }, - + messages: { notification: function (args) { return 'label.add.secondary.storage'; @@ -19128,11 +19128,11 @@ } } }, - + detailView: { name: 'label.secondary.storage.details', isMaximized: true, - actions: { + actions: { remove: { label: 'label.action.delete.secondary.storage', messages: { @@ -19196,7 +19196,7 @@ for (var i = 0; i < array1.length; i++) { if (i > 0) string1 += ', '; - + string1 += array1[i].name + ': ' + array1[i].value; } } @@ -19207,7 +19207,7 @@ label: 'label.id' } }], - + dataProvider: function (args) { $.ajax({ url: createURL("listImageStores&id=" + args.context.secondaryStorage[0].id), @@ -19224,7 +19224,7 @@ }); } } - + // Granular settings for storage pool for secondary storage is not required /* settings: { title: 'label.menu.global.settings', @@ -19266,7 +19266,7 @@ label: 'label.provider' } }, - + /* dataProvider: function(args) { //being replaced with dataProvider in line 6898 var array1 = []; @@ -19281,7 +19281,7 @@ } } array1.push("&zoneid=" + args.context.zones[0].id); - + $.ajax({ url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")), dataType: "json", @@ -19296,7 +19296,7 @@ }); }, */ - + actions: { add: { label: 'label.add.nfs.secondary.staging.store', @@ -19314,7 +19314,7 @@ data: {}, success: function (json) { var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[]; - + if (zones != null) { //$.map(items, fn) - items can not be null args.response.success({ @@ -19380,7 +19380,7 @@ } } }, - + detailView: { name: 'label.secondary.staging.store.details', isMaximized: true, @@ -19447,7 +19447,7 @@ for (var i = 0; i < array1.length; i++) { if (i > 0) string1 += ', '; - + string1 += array1[i].name + ': ' + array1[i].value; } } @@ -19458,7 +19458,7 @@ label: 'label.id' } }], - + dataProvider: function (args) { $.ajax({ url: createURL('listSecondaryStagingStores'), @@ -19475,7 +19475,7 @@ }); } } - + // Granular settings for storage pool for secondary storage is not required /* settings: { title: 'label.menu.global.settings', @@ -19502,7 +19502,7 @@ } } }, - + guestIpRanges: { //Advanced zone - Guest traffic type - Network tab - Network detailView - View IP Ranges title: 'label.guest.ip.range', @@ -19529,7 +19529,7 @@ label: 'label.netmask' } }, - + dataProvider: function (args) { $.ajax({ url: createURL("listVlanIpRanges&zoneid=" + selectedZoneObj.id + "&networkid=" + args.context.networks[0].id + "&page=" + args.page + "&pagesize=" + pageSize), @@ -19543,7 +19543,7 @@ } }); }, - + actions: { add: { label: 'label.add.ip.range', @@ -19578,27 +19578,27 @@ }, action: function (args) { var array2 =[]; - + if (args.data.gateway != null && args.data.gateway.length > 0) array2.push("&gateway=" + args.data.gateway); if (args.data.netmask != null && args.data.netmask.length > 0) array2.push("&netmask=" + args.data.netmask); - + if (args.data.startipv4 != null && args.data.startipv4.length > 0) array2.push("&startip=" + args.data.startipv4); if (args.data.endipv4 != null && args.data.endipv4.length > 0) array2.push("&endip=" + args.data.endipv4); - + if (args.data.ip6cidr != null && args.data.ip6cidr.length > 0) array2.push("&ip6cidr=" + args.data.ip6cidr); if (args.data.ip6gateway != null && args.data.ip6gateway.length > 0) array2.push("&ip6gateway=" + args.data.ip6gateway); - + if (args.data.startipv6 != null && args.data.startipv6.length > 0) array2.push("&startipv6=" + args.data.startipv6); if (args.data.endipv6 != null && args.data.endipv6.length > 0) array2.push("&endipv6=" + args.data.endipv6); - + $.ajax({ url: createURL("createVlanIpRange&forVirtualNetwork=false&networkid=" + args.context.networks[0].id + array2.join("")), dataType: "json", @@ -19625,7 +19625,7 @@ } } }, - + 'remove': { label: 'label.remove.ip.range', messages: { @@ -19663,7 +19663,7 @@ } } }; - + function addBaremetalDhcpDeviceFn(args) { if (nspMap[ "BaremetalDhcpProvider"] == null) { $.ajax({ @@ -19684,7 +19684,7 @@ clearInterval(addBaremetalDhcpProviderIntervalID); if (result.jobstatus == 1) { nspMap[ "BaremetalDhcpProvider"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider; - + $.ajax({ url: createURL('addBaremetalDhcp'), data: { @@ -19747,7 +19747,7 @@ }); } } - + function addBaremetalPxeDeviceFn(args) { if (nspMap[ "BaremetalPxeProvider"] == null) { $.ajax({ @@ -19768,7 +19768,7 @@ clearInterval(addBaremetalPxeProviderIntervalID); if (result.jobstatus == 1) { nspMap[ "BaremetalPxeProvider"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider; - + $.ajax({ url: createURL('addBaremetalPxeKickStartServer'), data: { @@ -19833,28 +19833,28 @@ }); } } - + function addExternalLoadBalancer(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) { var array1 =[]; array1.push("&physicalnetworkid=" + physicalNetworkObj.id); array1.push("&username=" + todb(args.data.username)); array1.push("&password=" + todb(args.data.password)); array1.push("&networkdevicetype=" + todb(args.data.networkdevicetype)); - + if (apiCmd == "addNetscalerLoadBalancer") { array1.push("&gslbprovider=" + (args.data.gslbprovider == "on")); array1.push("&gslbproviderpublicip=" + todb(args.data.gslbproviderpublicip)); array1.push("&gslbproviderprivateip=" + todb(args.data.gslbproviderprivateip)); } - + //construct URL starts here var url =[]; - + var ip = args.data.ip; url.push("https://" + ip); - + var isQuestionMarkAdded = false; - + var publicInterface = args.data.publicinterface; if (publicInterface != null && publicInterface.length > 0) { if (isQuestionMarkAdded == false) { @@ -19865,7 +19865,7 @@ } url.push("publicinterface=" + publicInterface); } - + var privateInterface = args.data.privateinterface; if (privateInterface != null && privateInterface.length > 0) { if (isQuestionMarkAdded == false) { @@ -19876,7 +19876,7 @@ } url.push("privateinterface=" + privateInterface); } - + var numretries = args.data.numretries; if (numretries != null && numretries.length > 0) { if (isQuestionMarkAdded == false) { @@ -19887,7 +19887,7 @@ } url.push("numretries=" + numretries); } - + var isInline = args.data.inline; if (isInline != null && isInline.length > 0) { if (isQuestionMarkAdded == false) { @@ -19898,7 +19898,7 @@ } url.push("inline=" + isInline); } - + var capacity = args.data.capacity; if (capacity != null && capacity.length > 0) { if (isQuestionMarkAdded == false) { @@ -19909,7 +19909,7 @@ } url.push("lbdevicecapacity=" + capacity); } - + var dedicated = (args.data.dedicated == "on"); //boolean (true/false) if (isQuestionMarkAdded == false) { @@ -19919,11 +19919,11 @@ url.push("&"); } url.push("lbdevicededicated=" + dedicated.toString()); - - + + array1.push("&url=" + todb(url.join(""))); //construct URL ends here - + $.ajax({ url: createURL(apiCmd + array1.join("")), dataType: "json", @@ -19935,7 +19935,7 @@ jobId: jid, getUpdatedItem: function (json) { var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj]; - + return item; } } @@ -19943,22 +19943,22 @@ } }); } - + function addExternalFirewall(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) { var array1 =[]; array1.push("&physicalnetworkid=" + physicalNetworkObj.id); array1.push("&username=" + todb(args.data.username)); array1.push("&password=" + todb(args.data.password)); array1.push("&networkdevicetype=" + todb(args.data.networkdevicetype)); - + //construct URL starts here var url =[]; - + var ip = args.data.ip; url.push("https://" + ip); - + var isQuestionMarkAdded = false; - + var publicInterface = args.data.publicinterface; if (publicInterface != null && publicInterface.length > 0) { if (isQuestionMarkAdded == false) { @@ -19969,7 +19969,7 @@ } url.push("publicinterface=" + publicInterface); } - + var privateInterface = args.data.privateinterface; if (privateInterface != null && privateInterface.length > 0) { if (isQuestionMarkAdded == false) { @@ -19980,7 +19980,7 @@ } url.push("privateinterface=" + privateInterface); } - + var usageInterface = args.data.usageinterface; if (usageInterface != null && usageInterface.length > 0) { if (isQuestionMarkAdded == false) { @@ -19991,7 +19991,7 @@ } url.push("usageinterface=" + usageInterface); } - + var numretries = args.data.numretries; if (numretries != null && numretries.length > 0) { if (isQuestionMarkAdded == false) { @@ -20002,7 +20002,7 @@ } url.push("numretries=" + numretries); } - + var timeout = args.data.timeout; if (timeout != null && timeout.length > 0) { if (isQuestionMarkAdded == false) { @@ -20013,7 +20013,7 @@ } url.push("timeout=" + timeout); } - + var isInline = args.data.inline; if (isInline != null && isInline.length > 0) { if (isQuestionMarkAdded == false) { @@ -20024,7 +20024,7 @@ } url.push("inline=" + isInline); } - + var publicNetwork = args.data.publicnetwork; if (publicNetwork != null && publicNetwork.length > 0) { if (isQuestionMarkAdded == false) { @@ -20035,7 +20035,7 @@ } url.push("publicnetwork=" + publicNetwork); } - + var privateNetwork = args.data.privatenetwork; if (privateNetwork != null && privateNetwork.length > 0) { if (isQuestionMarkAdded == false) { @@ -20046,7 +20046,7 @@ } url.push("privatenetwork=" + privateNetwork); } - + var capacity = args.data.capacity; if (capacity != null && capacity.length > 0) { if (isQuestionMarkAdded == false) { @@ -20057,7 +20057,7 @@ } url.push("fwdevicecapacity=" + capacity); } - + var dedicated = (args.data.dedicated == "on"); //boolean (true/false) if (isQuestionMarkAdded == false) { @@ -20067,7 +20067,7 @@ url.push("&"); } url.push("fwdevicededicated=" + dedicated.toString()); - + // START - Palo Alto Specific Fields var externalVirtualRouter = args.data.pavr; if (externalVirtualRouter != null && externalVirtualRouter.length > 0) { @@ -20079,7 +20079,7 @@ } url.push("pavr=" + encodeURIComponent(externalVirtualRouter)); } - + var externalThreatProfile = args.data.patp; if (externalThreatProfile != null && externalThreatProfile.length > 0) { if (isQuestionMarkAdded == false) { @@ -20090,7 +20090,7 @@ } url.push("patp=" + encodeURIComponent(externalThreatProfile)); } - + var externalLogProfile = args.data.palp; if (externalLogProfile != null && externalLogProfile.length > 0) { if (isQuestionMarkAdded == false) { @@ -20102,10 +20102,10 @@ url.push("palp=" + encodeURIComponent(externalLogProfile)); } // END - Palo Alto Specific Fields - + array1.push("&url=" + todb(url.join(""))); //construct URL ends here - + $.ajax({ url: createURL(apiCmd + array1.join("")), dataType: "json", @@ -20117,7 +20117,7 @@ jobId: jid, getUpdatedItem: function (json) { var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj]; - + return item; } } @@ -20125,7 +20125,7 @@ } }); } - + function addNiciraNvpDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) { var array1 =[]; array1.push("&physicalnetworkid=" + physicalNetworkObj.id); @@ -20133,12 +20133,12 @@ array1.push("&password=" + todb(args.data.password)); array1.push("&hostname=" + todb(args.data.host)); array1.push("&transportzoneuuid=" + todb(args.data.transportzoneuuid)); - + var l3GatewayServiceUuid = args.data.l3gatewayserviceuuid; if (l3GatewayServiceUuid != null && l3GatewayServiceUuid.length > 0) { array1.push("&l3gatewayserviceuuid=" + todb(args.data.l3gatewayserviceuuid)); } - + $.ajax({ url: createURL(apiCmd + array1.join("")), dataType: "json", @@ -20150,7 +20150,7 @@ jobId: jid, getUpdatedItem: function (json) { var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj]; - + return item; } } @@ -20192,7 +20192,7 @@ array1.push("&username=" + todb(args.data.username)); array1.push("&password=" + todb(args.data.password)); array1.push("&url=" + todb(args.data.url)); - + $.ajax({ url: createURL(apiCmd + array1.join("")), dataType: "json", @@ -20204,7 +20204,7 @@ jobId: jid, getUpdatedItem: function (json) { var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj]; - + return item; } } @@ -20212,7 +20212,7 @@ } }); } - + function addBigSwitchBcfDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) { var array1 =[]; array1.push("&physicalnetworkid=" + physicalNetworkObj.id); @@ -20231,7 +20231,7 @@ jobId: jid, getUpdatedItem: function (json) { var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj]; - + return item; } } @@ -20239,7 +20239,7 @@ } }); } - + function addNuageVspDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) { var array1 = []; array1.push("&physicalnetworkid=" + physicalNetworkObj.id); @@ -20312,7 +20312,7 @@ clearInterval(enablePhysicalNetworkIntervalID); if (result.jobstatus == 1) { //alert("updatePhysicalNetwork succeeded."); - + // get network service provider ID of Virtual Router var virtualRouterProviderId; $.ajax({ @@ -20330,7 +20330,7 @@ alert("error: listNetworkServiceProviders API doesn't return VirtualRouter provider ID"); return; } - + var virtualRouterElementId; $.ajax({ url: createURL("listVirtualRouterElements&nspid=" + virtualRouterProviderId), @@ -20347,7 +20347,7 @@ alert("error: listVirtualRouterElements API doesn't return Virtual Router Element Id"); return; } - + $.ajax({ url: createURL("configureVirtualRouterElement&enabled=true&id=" + virtualRouterElementId), dataType: "json", @@ -20366,7 +20366,7 @@ clearInterval(enableVirtualRouterElementIntervalID); if (result.jobstatus == 1) { //alert("configureVirtualRouterElement succeeded."); - + $.ajax({ url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + virtualRouterProviderId), dataType: "json", @@ -20385,7 +20385,7 @@ clearInterval(enableVirtualRouterProviderIntervalID); if (result.jobstatus == 1) { //alert("Virtual Router Provider is enabled"); - + if (newZoneObj.networktype == "Basic") { if (args.data[ "security-groups-enabled"] == "on") { //need to Enable security group provider first @@ -20406,7 +20406,7 @@ alert("error: listNetworkServiceProviders API doesn't return security group provider ID"); return; } - + $.ajax({ url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + securityGroupProviderId), dataType: "json", @@ -20425,7 +20425,7 @@ clearInterval(enableSecurityGroupProviderIntervalID); if (result.jobstatus == 1) { //alert("Security group provider is enabled"); - + //create network (for basic zone only) var array2 =[]; array2.push("&zoneid=" + newZoneObj.id); @@ -20444,11 +20444,11 @@ array3.push("&gateway=" + todb(args.data.podGateway)); array3.push("&netmask=" + todb(args.data.podNetmask)); array3.push("&startIp=" + todb(args.data.podStartIp)); - + var endip = args.data.podEndIp; //optional if (endip != null && endip.length > 0) array3.push("&endIp=" + todb(endip)); - + $.ajax({ url: createURL("createPod" + array3.join("")), dataType: "json", @@ -20495,11 +20495,11 @@ array3.push("&gateway=" + todb(args.data.podGateway)); array3.push("&netmask=" + todb(args.data.podNetmask)); array3.push("&startIp=" + todb(args.data.podStartIp)); - + var endip = args.data.podEndIp; //optional if (endip != null && endip.length > 0) array3.push("&endIp=" + todb(endip)); - + $.ajax({ url: createURL("createPod" + array3.join("")), dataType: "json", @@ -20523,11 +20523,11 @@ array3.push("&gateway=" + todb(args.data.podGateway)); array3.push("&netmask=" + todb(args.data.podNetmask)); array3.push("&startIp=" + todb(args.data.podStartIp)); - + var endip = args.data.podEndIp; //optional if (endip != null && endip.length > 0) array3.push("&endIp=" + todb(endip)); - + $.ajax({ url: createURL("createPod" + array3.join("")), dataType: "json", @@ -20583,31 +20583,31 @@ } }); }; - + //action filters (begin) var zoneActionfilter = cloudStack.actionFilter.zoneActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[ 'enableSwift']; - + if (jsonObj.vmwaredcId == null) allowedActions.push('addVmwareDc'); else allowedActions.push('removeVmwareDc'); - + if (jsonObj.domainid != null) allowedActions.push("releaseDedicatedZone"); else allowedActions.push("dedicateZone"); - + allowedActions.push("edit"); - + if (jsonObj.allocationstate == "Disabled") allowedActions.push("enable"); else if (jsonObj.allocationstate == "Enabled") allowedActions.push("disable"); - + allowedActions.push("remove"); return allowedActions; } - - + + var nexusActionfilter = function (args) { var nexusObj = args.context.item; var allowedActions =[]; @@ -20618,23 +20618,23 @@ allowedActions.push("remove"); return allowedActions; } - + var podActionfilter = function (args) { var podObj = args.context.item; var dedicatedPodObj = args.context.podItem; var allowedActions =[]; - + if (podObj.domainid != null) allowedActions.push("release"); else allowedActions.push("dedicate"); - - + + allowedActions.push("edit"); if (podObj.allocationstate == "Disabled") allowedActions.push("enable"); else if (podObj.allocationstate == "Enabled") allowedActions.push("disable"); allowedActions.push("remove"); - + /* var selectedZoneObj; $(zoneObjs).each(function(){ @@ -20644,7 +20644,7 @@ } }); */ - + if (selectedZoneObj.networktype == "Basic") { //basic-mode network (pod-wide VLAN) //$("#tab_ipallocation, #add_iprange_button, #tab_network_device, #add_network_device_button").show(); @@ -20654,24 +20654,24 @@ //advanced-mode network (zone-wide VLAN) //$("#tab_ipallocation, #add_iprange_button, #tab_network_device, #add_network_device_button").hide(); } - + return allowedActions; } - + var networkDeviceActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; return allowedActions; } - + var clusterActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; - + if (jsonObj.domainid != null) allowedActions.push("release"); else allowedActions.push("dedicate"); - + if (jsonObj.state == "Enabled") { //managed, allocation enabled allowedActions.push("unmanage"); @@ -20686,26 +20686,26 @@ //Unmanaged, PrepareUnmanaged , PrepareUnmanagedError allowedActions.push("manage"); } - + allowedActions.push("remove"); - + return allowedActions; } - + var hostActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; - + if (jsonObj.domainid != null) allowedActions.push("release"); else allowedActions.push("dedicate"); - - + + if (jsonObj.resourcestate == "Enabled") { allowedActions.push("edit"); allowedActions.push("enableMaintenanceMode"); - allowedActions.push("disable"); - + allowedActions.push("disable"); + if (jsonObj.state != "Disconnected") allowedActions.push("forceReconnect"); } else if (jsonObj.resourcestate == "ErrorInMaintenance") { @@ -20724,20 +20724,20 @@ allowedActions.push("enable"); allowedActions.push("remove"); } - + if ((jsonObj.state == "Down" || jsonObj.state == "Alert" || jsonObj.state == "Disconnected") && ($.inArray("remove", allowedActions) == -1)) { allowedActions.push("remove"); } - + return allowedActions; } - + var primarystorageActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; - + allowedActions.push("edit"); - + if (jsonObj.state == 'Up' || jsonObj.state == "Connecting") { allowedActions.push("enableMaintenanceMode"); } else if (jsonObj.state == 'Down') { @@ -20758,53 +20758,53 @@ } return allowedActions; } - + var secondarystorageActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions = []; - allowedActions.push("remove"); + allowedActions.push("remove"); return allowedActions; } - + var routerActionfilter = cloudStack.sections.system.routerActionFilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; - + if (jsonObj.requiresupgrade == true) { allowedActions.push('upgradeRouterToUseNewerTemplate'); } - + if (jsonObj.state == 'Running') { allowedActions.push("stop"); - + //when router is Running, only VMware support scaleUp(change service offering) if (jsonObj.hypervisor == "VMware") { allowedActions.push("scaleUp"); - } - + } + allowedActions.push("restart"); - + allowedActions.push("viewConsole"); if (isAdmin()) allowedActions.push("migrate"); } else if (jsonObj.state == 'Stopped') { allowedActions.push("start"); - + //when router is Stopped, all hypervisors support scaleUp(change service offering) allowedActions.push("scaleUp"); - + allowedActions.push("remove"); } return allowedActions; } - + var internallbinstanceActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; - + if (jsonObj.state == 'Running') { allowedActions.push("stop"); - + allowedActions.push("viewConsole"); if (isAdmin()) allowedActions.push("migrate"); @@ -20813,37 +20813,37 @@ } return allowedActions; } - + var systemvmActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; - + if (jsonObj.state == 'Running') { allowedActions.push("stop"); allowedActions.push("restart"); allowedActions.push("remove"); - + //when systemvm is Running, only VMware support scaleUp(change service offering) if (jsonObj.hypervisor == "VMware") { allowedActions.push("scaleUp"); } - + allowedActions.push("viewConsole"); if (isAdmin()) allowedActions.push("migrate"); } else if (jsonObj.state == 'Stopped') { allowedActions.push("start"); - + //when systemvm is Stopped, all hypervisors support scaleUp(change service offering) allowedActions.push("scaleUp"); - + allowedActions.push("remove"); } else if (jsonObj.state == 'Error') { allowedActions.push("remove"); } return allowedActions; } - + var routerGroupActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; @@ -20852,7 +20852,7 @@ } return allowedActions; } - + var bladeActionfilter = function (args) { var jsonObj = args.context.item; var allowedActions =[]; @@ -20863,29 +20863,29 @@ } return allowedActions; } - + //action filters (end) - + var networkProviderActionFilter = function (id) { return function (args) { var allowedActions =[]; var jsonObj = nspMap[id] ? nspMap[id]: { }; - + if (jsonObj.state) { if (jsonObj.state == "Enabled") allowedActions.push("disable"); else if (jsonObj.state == "Disabled") allowedActions.push("enable"); allowedActions.push("destroy"); } - + allowedActions.push('add'); - + return allowedActions; } }; - + var addExtraPropertiesToClusterObject = function (jsonObj) { if (jsonObj.managedstate == "Managed") { jsonObj.state = jsonObj.allocationstate; //jsonObj.state == Enabled, Disabled @@ -20893,7 +20893,7 @@ jsonObj.state = jsonObj.managedstate; //jsonObj.state == Unmanaged, PrepareUnmanaged, PrepareUnmanagedError } } - + var addExtraPropertiesToRouterInstanceObject = function (jsonObj) { if (jsonObj.isredundantrouter == true) { jsonObj[ "redundantRouterState"] = jsonObj.redundantstate; @@ -20901,12 +20901,12 @@ jsonObj[ "redundantRouterState"] = ""; } } - + var refreshNspData = function (nspName) { var array1 =[]; if (nspName != null) array1.push("&name=" + nspName); - + $.ajax({ url: createURL("listNetworkServiceProviders&physicalnetworkid=" + selectedPhysicalNetworkObj.id + array1.join("")), dataType: "json", @@ -20915,7 +20915,7 @@ nspMap = { }; //reset - + var items = json.listnetworkserviceprovidersresponse.networkserviceprovider; if (items != null) { for (var i = 0; i < items.length; i++) { @@ -20931,7 +20931,7 @@ break; case "Ovs": nspMap["Ovs"] = items[i]; - break; + break; case "Netscaler": nspMap[ "netscaler"] = items[i]; break; @@ -20982,7 +20982,7 @@ } } }); - + nspHardcodingArray =[ { id: 'netscaler', name: 'NetScaler', @@ -21017,19 +21017,19 @@ id: 'BaremetalPxeProvider', name: 'Baremetal PXE', state: nspMap.BaremetalPxeProvider ? nspMap.BaremetalPxeProvider.state: 'Disabled' - }, + }, { id: 'Opendaylight', name: 'OpenDaylight (Experimental)', state: nspMap.Opendaylight ? nspMap.Opendaylight.state: 'Disabled' }]; - + $(window).trigger('cloudStack.system.serviceProviders.makeHarcodedArray', { nspHardcodingArray: nspHardcodingArray, selectedZoneObj: selectedZoneObj, selectedPhysicalNetworkObj: selectedPhysicalNetworkObj }); - + if (selectedZoneObj.networktype == "Basic") { nspHardcodingArray.push({ id: 'securityGroups', @@ -21048,13 +21048,13 @@ name: 'Nuage Vsp', state: nspMap.nuageVsp ? nspMap.nuageVsp.state : 'Disabled' }); - + nspHardcodingArray.push({ id: 'InternalLbVm', name: 'Internal LB VM', state: nspMap.InternalLbVm ? nspMap.InternalLbVm.state: 'Disabled' }); - + nspHardcodingArray.push({ id: 'vpcVirtualRouter', name: 'VPC Virtual Router', @@ -21080,43 +21080,43 @@ name: 'GloboDNS', state: nspMap.GloboDns ? nspMap.GloboDns.state : 'Disabled' }); - + //CLOUDSTACK-6840: OVS refers to SDN provider. However, we are not supporting SDN in this release. /* nspHardcodingArray.push({ id: 'Ovs', name: 'Ovs', - state: nspMap.Ovs ? nspMap.Ovs.state: 'Disabled' - }); - */ - } + state: nspMap.Ovs ? nspMap.Ovs.state: 'Disabled' + }); + */ + } }; - + cloudStack.actionFilter.physicalNetwork = function (args) { var state = args.context.item.state; - + if (state != 'Destroyed') { return[ 'remove']; } - + return[]; }; - + function addExtraPropertiesToGroupbyObjects(groupbyObjs, groupbyId) { for (var i = 0; i < groupbyObjs.length; i++) { addExtraPropertiesToGroupbyObject(groupbyObjs[i], groupbyId); } } - + function addExtraPropertiesToGroupbyObject(groupbyObj, groupbyId) { var currentPage = 1; - + var listRoutersData = { listAll: true, pagesize: pageSize //global variable }; listRoutersData[groupbyId] = groupbyObj.id; - + $.ajax({ url: createURL('listRouters'), data: $.extend({ @@ -21126,60 +21126,60 @@ }), async: false, success: function(json) { - if (json.listroutersresponse.count != undefined) { - var routerCountFromAllPages = json.listroutersresponse.count; - var routerCountFromFirstPageToCurrentPage = json.listroutersresponse.router.length; - var routerRequiresUpgrade = 0; - + if (json.listroutersresponse.count != undefined) { + var routerCountFromAllPages = json.listroutersresponse.count; + var routerCountFromFirstPageToCurrentPage = json.listroutersresponse.router.length; + var routerRequiresUpgrade = 0; + var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } - } - + } + $.ajax({ url: createURL('listRouters'), data: $.extend({}, listRoutersData, { page: currentPage, projectid: -1 }), - async: false, - success: function(json) { - if (json.listroutersresponse.count != undefined) { - routerCountFromAllPages += json.listroutersresponse.count; + async: false, + success: function(json) { + if (json.listroutersresponse.count != undefined) { + routerCountFromAllPages += json.listroutersresponse.count; groupbyObj.routerCount = routerCountFromAllPages; - - routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; - + + routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; + var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } - } + } } else { groupbyObj.routerCount = routerCountFromAllPages; } - } - }); - - var callListApiWithPage = function() { + } + }); + + var callListApiWithPage = function() { $.ajax({ url: createURL('listRouters'), async: false, data: $.extend({}, listRoutersData, { page: currentPage }), - success: function(json) { - routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; + success: function(json) { + routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } - } - + } + $.ajax({ url: createURL('listRouters'), async: false, @@ -21187,45 +21187,45 @@ page: currentPage, projectid: -1 }), - success: function(json) { - if (json.listroutersresponse.count != undefined) { - routerCountFromAllPages += json.listroutersresponse.count; + success: function(json) { + if (json.listroutersresponse.count != undefined) { + routerCountFromAllPages += json.listroutersresponse.count; groupbyObj.routerCount = routerCountFromAllPages; - - routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; - + + routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length; + var items = json.listroutersresponse.router; - for (var k = 0; k < items.length; k++) { + for (var k = 0; k < items.length; k++) { if (items[k].requiresupgrade) { routerRequiresUpgrade++; } - } + } } else { groupbyObj.routerCount = routerCountFromAllPages; } } - }); - + }); + if (routerCountFromFirstPageToCurrentPage < routerCountFromAllPages) { currentPage++; callListApiWithPage(); - } + } } - }); - } - + }); + } + if (routerCountFromFirstPageToCurrentPage < routerCountFromAllPages) { currentPage++; callListApiWithPage(); - } - + } + groupbyObj.routerRequiresUpgrade = routerRequiresUpgrade; groupbyObj.numberOfRouterRequiresUpgrade = routerRequiresUpgrade; } else { groupbyObj.routerCount = 0; groupbyObj.routerRequiresUpgrade = 0; groupbyObj.numberOfRouterRequiresUpgrade = 0; - } + } } }); } diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js index 98861dde42c..915d23ae8a0 100644 --- a/ui/scripts/templates.js +++ b/ui/scripts/templates.js @@ -16,7 +16,7 @@ // under the License. (function(cloudStack, $) { var ostypeObjs; - + cloudStack.sections.templates = { title: 'label.menu.templates', id: 'templates', @@ -131,19 +131,19 @@ validation: { required: true } - }, + }, zone: { label: 'label.zone', docID: 'helpRegisterTemplateZone', - select: function(args) { + select: function(args) { if(g_regionsecondaryenabled == true) { args.response.success({ data: [{ id: -1, description: "All Zones" }] - }); - } else { + }); + } else { $.ajax({ url: createURL("listZones&available=true"), dataType: "json", @@ -184,7 +184,7 @@ var apiCmd; if (args.zone == -1) { //All Zones //apiCmd = "listHypervisors&zoneid=-1"; //"listHypervisors&zoneid=-1" has been changed to return only hypervisors available in all zones (bug 8809) - apiCmd = "listHypervisors"; + apiCmd = "listHypervisors"; } else { apiCmd = "listHypervisors&zoneid=" + args.zone; @@ -215,20 +215,20 @@ $form.find('.form-item[rel=rootDiskControllerType]').css('display', 'inline-block'); $form.find('.form-item[rel=nicAdapterType]').css('display', 'inline-block'); $form.find('.form-item[rel=keyboardType]').css('display', 'inline-block'); - + $form.find('.form-item[rel=xenserverToolsVersion61plus]').hide(); } else if ($(this).val() == "XenServer") { $form.find('.form-item[rel=rootDiskControllerType]').hide(); $form.find('.form-item[rel=nicAdapterType]').hide(); - $form.find('.form-item[rel=keyboardType]').hide(); - + $form.find('.form-item[rel=keyboardType]').hide(); + if (isAdmin()) - $form.find('.form-item[rel=xenserverToolsVersion61plus]').css('display', 'inline-block'); + $form.find('.form-item[rel=xenserverToolsVersion61plus]').css('display', 'inline-block'); } else { $form.find('.form-item[rel=rootDiskControllerType]').hide(); $form.find('.form-item[rel=nicAdapterType]').hide(); $form.find('.form-item[rel=keyboardType]').hide(); - + $form.find('.form-item[rel=xenserverToolsVersion61plus]').hide(); } }); @@ -260,7 +260,7 @@ }, isHidden: true }, - + //fields for hypervisor == "VMware" (starts here) rootDiskControllerType: { label: 'label.root.disk.controller', @@ -419,18 +419,18 @@ osTypeId: { label: 'label.os.type', docID: 'helpRegisterTemplateOSType', - select: function(args) { + select: function(args) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: true, - success: function(json) { + success: function(json) { var ostypeObjs = json.listostypesresponse.ostype; args.response.success({ data: ostypeObjs }); } - }); + }); } }, @@ -519,16 +519,16 @@ }); } - - //XenServer only (starts here) + + //XenServer only (starts here) if (args.$form.find('.form-item[rel=xenserverToolsVersion61plus]').css("display") != "none") { $.extend(data, { 'details[0].hypervisortoolsversion': (args.data.xenserverToolsVersion61plus == "on") ? "xenserver61" : "xenserver56" }); } //XenServer only (ends here) - - + + //VMware only (starts here) if (args.$form.find('.form-item[rel=rootDiskControllerType]').css("display") != "none" && args.data.rootDiskControllerType != "") { $.extend(data, { @@ -579,7 +579,7 @@ } } }, - + uploadTemplateFromLocal: { isHeader: true, label: 'Upload from Local', @@ -592,9 +592,9 @@ title: 'Upload Template from Local', preFilter: cloudStack.preFilter.createTemplate, fileUpload: { - getURL: function(args) { + getURL: function(args) { args.data = args.formData; - + var data = { name: args.data.name, displayText: args.data.description, @@ -606,7 +606,7 @@ osTypeId: args.data.osTypeId, hypervisor: args.data.hypervisor }; - + if (args.$form.find('.form-item[rel=isPublic]').css("display") != "none") { $.extend(data, { ispublic: (args.data.isPublic == "on") @@ -630,15 +630,15 @@ isrouting: (args.data.isrouting === 'on') }); } - + $.ajax({ url: createURL('getUploadParamsForTemplate'), data: data, async: false, - success: function(json) { + success: function(json) { var uploadparams = json.postuploadtemplateresponse.getuploadparams; var templateId = uploadparams.id; - + args.response.success({ url: uploadparams.postURL, ajaxPost: true, @@ -647,9 +647,9 @@ 'X-expires': uploadparams.expires, 'X-metadata': uploadparams.metadata } - }); + }); } - }); + }); }, postUpload: function(args) { if(args.error) { @@ -685,7 +685,7 @@ validation: { required: true } - }, + }, zone: { label: 'label.zone', @@ -742,24 +742,24 @@ }); } }, - + format: { label: 'label.format', docID: 'helpRegisterTemplateFormat', dependsOn: 'hypervisor', select: function(args) { var items = []; - if (args.hypervisor == "XenServer") { + if (args.hypervisor == "XenServer") { items.push({ id: 'VHD', description: 'VHD' }); - } else if (args.hypervisor == "VMware") { + } else if (args.hypervisor == "VMware") { items.push({ id: 'OVA', description: 'OVA' }); - } else if (args.hypervisor == "KVM") { + } else if (args.hypervisor == "KVM") { items.push({ id: 'QCOW2', description: 'QCOW2' @@ -776,17 +776,17 @@ id: 'VMDK', description: 'VMDK' }); - } else if (args.hypervisor == "BareMetal") { + } else if (args.hypervisor == "BareMetal") { items.push({ id: 'BareMetal', description: 'BareMetal' }); - } else if (args.hypervisor == "Ovm") { + } else if (args.hypervisor == "Ovm") { items.push({ id: 'RAW', description: 'RAW' }); - } else if (args.hypervisor == "LXC") { + } else if (args.hypervisor == "LXC") { items.push({ id: 'TAR', description: 'TAR' @@ -805,23 +805,23 @@ data: items }); } - }, + }, osTypeId: { label: 'label.os.type', docID: 'helpRegisterTemplateOSType', - select: function(args) { + select: function(args) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: true, - success: function(json) { + success: function(json) { var ostypeObjs = json.listostypesresponse.ostype; args.response.success({ data: ostypeObjs }); } - }); + }); } }, @@ -830,40 +830,40 @@ docID: 'helpRegisterTemplateExtractable', isBoolean: true }, - + isPasswordEnabled: { label: "label.password.enabled", docID: 'helpRegisterTemplatePasswordEnabled', isBoolean: true }, - + isdynamicallyscalable: { label: "label.dynamically.scalable", docID: 'helpRegisterTemplateDynamicallyScalable', isBoolean: true - }, - + }, + isPublic: { label: "label.public", docID: 'helpRegisterTemplatePublic', isBoolean: true, isHidden: true - }, - + }, + isFeatured: { label: "label.featured", docID: 'helpRegisterTemplateFeatured', isBoolean: true, isHidden: true }, - + isrouting: { label: 'label.routing', docID: 'helpRegisterTemplateRouting', isBoolean: true, isHidden: true }, - + requireshvm: { label: 'label.hvm', docID: 'helpRegisterTemplateHvm', @@ -934,14 +934,14 @@ success: function(json) { var items = json.listtemplatesresponse.template; var itemsView = []; - + $(items).each(function(index, item) { var existing = $.grep(itemsView, function(it){ return it != null && it.id !=null && it.id == item.id; }); - + if (existing.length == 0) { - itemsView.push($.extend(item, { + itemsView.push($.extend(item, { zones: item.zonename, zoneids: [item.zoneid] })); @@ -950,7 +950,7 @@ existing[0].zones = 'label.multiplezones'; existing[0].zoneids.push(item.zoneid); } - }); + }); args.response.success({ actionFilter: templateActionfilter, @@ -1035,10 +1035,10 @@ } }); - + //***** addResourceDetail ***** - //XenServer only (starts here) - if(args.$detailView.find('form').find('div .detail-group').find('.xenserverToolsVersion61plus').length > 0) { + //XenServer only (starts here) + if(args.$detailView.find('form').find('div .detail-group').find('.xenserverToolsVersion61plus').length > 0) { $.ajax({ url: createURL('addResourceDetail'), data: { @@ -1055,33 +1055,33 @@ dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; - + if (result.jobstatus == 0) { return; //Job has not completed } else { clearInterval(addResourceDetailIntervalID); - if (result.jobstatus == 1) { - //do nothing + if (result.jobstatus == 1) { + //do nothing } else if (result.jobstatus == 2) { cloudStack.dialog.notice({ message: "message.XSTools61plus.update.failed" + " " + _s(result.jobresult.errortext) - }); + }); } } }, - error: function(XMLHttpResponse) { + error: function(XMLHttpResponse) { cloudStack.dialog.notice({ message: "message.XSTools61plus.update.failed" + " " + parseXMLHttpResponse(XMLHttpResponse) - }); + }); } }); - }, g_queryAsyncJobResultInterval); + }, g_queryAsyncJobResultInterval); } - }); - } - //XenServer only (ends here) - + }); + } + //XenServer only (ends here) + //***** listTemplates ***** //So, we call listTemplates API to get a complete template object @@ -1162,36 +1162,36 @@ } else { hiddenFields = ["hypervisor", 'xenserverToolsVersion61plus']; } - + if ('templates' in args.context && args.context.templates[0].hypervisor != 'XenServer') { hiddenFields.push('xenserverToolsVersion61plus'); } - + if ('templates' in args.context && args.context.templates[0].ostypeid != undefined) { var ostypeObjs; $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, - success: function(json) { - var ostypeObjs = json.listostypesresponse.ostype; + success: function(json) { + var ostypeObjs = json.listostypesresponse.ostype; } }); - + if (ostypeObjs != undefined) { var ostypeName; for (var i = 0; i < ostypeObjs.length; i++) { - if (ostypeObjs[i].id == args.context.templates[0].ostypeid) { + if (ostypeObjs[i].id == args.context.templates[0].ostypeid) { ostypeName = ostypeObjs[i].description; break; } - } - if (ostypeName == undefined || ostypeName.indexOf("Win") == -1) { + } + if (ostypeName == undefined || ostypeName.indexOf("Win") == -1) { hiddenFields.push('xenserverToolsVersion61plus'); - } + } } } - + return hiddenFields; }, @@ -1203,7 +1203,7 @@ required: true } } - }, { + }, { hypervisor: { label: 'label.hypervisor' }, @@ -1217,8 +1217,8 @@ return false; }, converter: cloudStack.converters.toBooleanText - }, - + }, + size: { label: 'label.size', converter: function(args) { @@ -1276,8 +1276,8 @@ return false; }, converter: cloudStack.converters.toBooleanText - }, - + }, + ostypeid: { label: 'label.os.type', isEditable: true, @@ -1287,11 +1287,11 @@ url: createURL("listOsTypes"), dataType: "json", async: false, - success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + success: function(json) { + ostypeObjs = json.listostypesresponse.ostype; } }); - + var items = []; $(ostypeObjs).each(function() { items.push({ @@ -1315,8 +1315,8 @@ validation: { required: true } - }, - + }, + domain: { label: 'label.domain' }, @@ -1327,11 +1327,11 @@ label: 'label.created', converter: cloudStack.converters.toLocalDate }, - + templatetype: { label: 'label.type' }, - + id: { label: 'label.id' } @@ -1343,7 +1343,7 @@ }), - dataProvider: function(args) { // UI > Templates menu (listing) > select a template from listing > Details tab + dataProvider: function(args) { // UI > Templates menu (listing) > select a template from listing > Details tab $.ajax({ url: createURL("listTemplates"), data: { @@ -1352,14 +1352,14 @@ }, success: function(json) { var jsonObj = json.listtemplatesresponse.template[0]; - + if ('details' in jsonObj && 'hypervisortoolsversion' in jsonObj.details) { if (jsonObj.details.hypervisortoolsversion == 'xenserver61') jsonObj.xenserverToolsVersion61plus = true; else jsonObj.xenserverToolsVersion61plus = false; } - + args.response.success({ actionFilter: templateActionfilter, data: jsonObj @@ -1388,7 +1388,7 @@ hideSearchBar: true, - dataProvider: function(args) { // UI > Templates menu (listing) > select a template from listing > Details tab > Zones tab (listing) + dataProvider: function(args) { // UI > Templates menu (listing) > select a template from listing > Details tab > Zones tab (listing) $.ajax({ url: createURL("listTemplates"), data: { @@ -1397,7 +1397,7 @@ }, success: function(json) { var jsonObjs = json.listtemplatesresponse.template; - + if (jsonObjs != undefined) { for (var i = 0; i < jsonObjs.length; i++) { var jsonObj = jsonObjs[i]; @@ -1408,16 +1408,16 @@ jsonObj.xenserverToolsVersion61plus = false; } } - } - + } + args.response.success({ actionFilter: templateActionfilter, data: jsonObjs }); } - }); + }); }, - + detailView: { noCompact: true, actions: { @@ -1500,18 +1500,18 @@ } } }, - action: function(args) { + action: function(args) { var data = { id: args.context.templates[0].id, destzoneid: args.data.destinationZoneId - }; + }; $.extend(data, { sourcezoneid: args.context.zones[0].zoneid - }); - + }); + $.ajax({ url: createURL('copyTemplate'), - data: data, + data: data, success: function(json) { var jid = json.copytemplateresponse.jobid; args.response.success({ @@ -1532,7 +1532,7 @@ poll: pollAsyncJobResult } } - }, + }, tabs: { details: { @@ -1544,36 +1544,36 @@ } else { hiddenFields = ["hypervisor", 'xenserverToolsVersion61plus']; } - + if ('templates' in args.context && args.context.templates[0].hypervisor != 'XenServer') { hiddenFields.push('xenserverToolsVersion61plus'); } - + if ('templates' in args.context && args.context.templates[0].ostypeid != undefined) { var ostypeObjs; $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, - success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + success: function(json) { + ostypeObjs = json.listostypesresponse.ostype; } }); - + if (ostypeObjs != undefined) { var ostypeName; for (var i = 0; i < ostypeObjs.length; i++) { - if (ostypeObjs[i].id == args.context.templates[0].ostypeid) { + if (ostypeObjs[i].id == args.context.templates[0].ostypeid) { ostypeName = ostypeObjs[i].description; break; } - } - if (ostypeName == undefined || ostypeName.indexOf("Win") == -1) { + } + if (ostypeName == undefined || ostypeName.indexOf("Win") == -1) { hiddenFields.push('xenserverToolsVersion61plus'); - } + } } - } - + } + return hiddenFields; }, @@ -1585,13 +1585,13 @@ required: true } } - }, { + }, { id: { label: 'label.id' }, zonename: { label: 'label.zone.name' - }, + }, zoneid: { label: 'label.zone.id' }, @@ -1616,8 +1616,8 @@ return false; }, converter: cloudStack.converters.toBooleanText - }, - + }, + size: { label: 'label.size', converter: function(args) { @@ -1675,22 +1675,22 @@ return false; }, converter: cloudStack.converters.toBooleanText - }, - + }, + ostypeid: { label: 'label.os.type', isEditable: true, - select: function(args) { + select: function(args) { var ostypeObjs; $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + ostypeObjs = json.listostypesresponse.ostype; } }); - + var items = []; $(ostypeObjs).each(function() { items.push({ @@ -1711,8 +1711,8 @@ validation: { required: true } - }, - + }, + domain: { label: 'label.domain' }, @@ -1723,7 +1723,7 @@ label: 'label.created', converter: cloudStack.converters.toLocalDate }, - + templatetype: { label: 'label.type' } @@ -1736,7 +1736,7 @@ }), - dataProvider: function(args) { // UI > Templates menu (listing) > select a template from listing > Details tab > Zones tab (listing) > select a zone from listing > Details tab + dataProvider: function(args) { // UI > Templates menu (listing) > select a template from listing > Details tab > Zones tab (listing) > select a zone from listing > Details tab var jsonObj = args.context.zones[0]; if ('details' in jsonObj && 'hypervisortoolsversion' in jsonObj.details) { @@ -1749,11 +1749,11 @@ args.response.success({ actionFilter: templateActionfilter, data: jsonObj - }); + }); } } }} - } + } } } } @@ -1838,8 +1838,8 @@ id: -1, description: "All Zones" }] - }); - } else { + }); + } else { $.ajax({ url: createURL("listZones&available=true"), dataType: "json", @@ -1891,7 +1891,7 @@ dataType: "json", async: true, success: function(json) { - var ostypeObjs = json.listostypesresponse.ostype; + var ostypeObjs = json.listostypesresponse.ostype; var items = []; //items.push({id: "", description: "None"}); //shouldn't have None option when bootable is checked $(ostypeObjs).each(function() { @@ -1904,7 +1904,7 @@ data: items }); } - }); + }); } }, @@ -2316,13 +2316,13 @@ label: 'label.os.type', isEditable: true, select: function(args) { - if (ostypeObjs == undefined) { + if (ostypeObjs == undefined) { $.ajax({ url: createURL("listOsTypes"), dataType: "json", async: false, success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + ostypeObjs = json.listostypesresponse.ostype; } }); } @@ -2412,7 +2412,7 @@ } }); }, - + detailView: { actions: { copyISO: { @@ -2458,17 +2458,17 @@ } } }, - action: function(args) { + action: function(args) { var data = { id: args.context.isos[0].id, destzoneid: args.data.destinationZoneId - }; + }; if (args.context.zones[0].zoneid != undefined) { $.extend(data, { sourcezoneid: args.context.zones[0].zoneid - }); - } - + }); + } + $.ajax({ url: createURL('copyIso'), data: data, @@ -2616,10 +2616,10 @@ dataType: "json", async: false, success: function(json) { - ostypeObjs = json.listostypesresponse.ostype; + ostypeObjs = json.listostypesresponse.ostype; } }); - + var items = []; $(ostypeObjs).each(function() { items.push({ @@ -2629,7 +2629,7 @@ }); args.response.success({ data: items - }); + }); } }, @@ -2689,14 +2689,14 @@ //do nothing } else { allowedActions.push("edit"); - + allowedActions.push("copyTemplate"); /* if(g_regionsecondaryenabled != true) { allowedActions.push("copyTemplate"); } */ - + //allowedActions.push("createVm"); // For Beta2, this simply doesn't work without a network. } diff --git a/ui/scripts/ui-custom/accountsWizard.js b/ui/scripts/ui-custom/accountsWizard.js index 0d416e1ffee..3e2a64665d6 100644 --- a/ui/scripts/ui-custom/accountsWizard.js +++ b/ui/scripts/ui-custom/accountsWizard.js @@ -209,10 +209,10 @@ } ] } - }; - */ + }; + */ //for testing only (end) - + if (json.ldapuserresponse.count > 0) { $(json.ldapuserresponse.LdapUser).each(function() { var $result = $(''); @@ -334,4 +334,4 @@ accountsWizard(args); }; }; -})(jQuery, cloudStack); \ No newline at end of file +})(jQuery, cloudStack); diff --git a/ui/scripts/ui-custom/instanceWizard.js b/ui/scripts/ui-custom/instanceWizard.js index 0a5370e53cb..86901c560e5 100644 --- a/ui/scripts/ui-custom/instanceWizard.js +++ b/ui/scripts/ui-custom/instanceWizard.js @@ -301,7 +301,7 @@ 'select-iso': function($step, formData) { $step.find('.section.custom-size').hide(); - + var originalValues = function(formData) { var $inputs = $step.find('.wizard-step-conditional:visible') .find('input[type=radio]'); @@ -323,7 +323,7 @@ return { response: { - success: function(args) { + success: function(args) { if (formData['select-template']) { $step.find('.wizard-step-conditional').filter(function() { return $(this).hasClass(formData['select-template']); @@ -462,7 +462,7 @@ }, { 'wizard-field': 'service-offering' }) - ); + ); $step.find('input[type=radio]').bind('change', function() { var $target = $(this); @@ -576,7 +576,7 @@ $selectContainer.hide(); // Fix issue with containers always showing after reload - $multiDiskSelect.find('.select-container').attr('style', null); + $multiDiskSelect.find('.select-container').attr('style', null); } else { $selectContainer.show(); $step.find('.content .select-container').append( @@ -618,7 +618,7 @@ // handle removal of custom IOPS controls $step.removeClass('custom-iops-do'); } - + return true; } @@ -1137,19 +1137,19 @@ // Next button if ($target.closest('div.button.next').size()) { //step 2 - select template/ISO - if($activeStep.hasClass('select-iso')) { + if($activeStep.hasClass('select-iso')) { if ($activeStep.find('.content:visible input:checked').size() == 0) { cloudStack.dialog.notice({ message: 'message.step.1.continue' }); return false; - } + } $(window).trigger("cloudStack.module.instanceWizard.clickNextButton", { $form: $form, currentStep: 2 - }); - } - + }); + } + //step 6 - select network if ($activeStep.find('.wizard-step-conditional.select-network:visible').size() > 0) { var data = $activeStep.data('my-networks'); @@ -1277,7 +1277,7 @@ $wizard.find('.tab-view').tabs(); $wizard.find('.slider').each(function() { var $slider = $(this); - + $slider.slider({ min: minCustomDiskSize, max: maxCustomDiskSize, diff --git a/ui/scripts/ui-custom/physicalResources.js b/ui/scripts/ui-custom/physicalResources.js index 2a0ac8547fe..e815fc533f3 100644 --- a/ui/scripts/ui-custom/physicalResources.js +++ b/ui/scripts/ui-custom/physicalResources.js @@ -61,7 +61,7 @@ ); $li.appendTo($socketInfo); - }); + }); } } }); diff --git a/ui/scripts/ui-custom/pluginListing.js b/ui/scripts/ui-custom/pluginListing.js index e679c626526..fce7daaf406 100644 --- a/ui/scripts/ui-custom/pluginListing.js +++ b/ui/scripts/ui-custom/pluginListing.js @@ -53,13 +53,13 @@ $plugin.click(function() { var $mainSection = $('#navigation ul li').filter('.' + plugin.id); - + if ($mainSection.size()) { $mainSection.click(); return; } - + $browser.cloudBrowser('addPanel', { title: plugin.title, $parent: $('.panel:first'), diff --git a/ui/scripts/ui-custom/zoneWizard.js b/ui/scripts/ui-custom/zoneWizard.js index 8344d956892..7e1a2a2767e 100644 --- a/ui/scripts/ui-custom/zoneWizard.js +++ b/ui/scripts/ui-custom/zoneWizard.js @@ -296,21 +296,21 @@ var hypervisor = getData($trafficType.closest('.zone-wizard')).zone.hypervisor; var zoneType = getData($trafficType.closest('.zone-wizard')).zone.networkType; var fields; - + if (hypervisor == 'VMware') { fields = { vSwitchName: { label: 'label.vswitch.name' , defaultValue: trafficData.vSwitchName }, - vlanId: { + vlanId: { label: 'label.vlan.id', defaultValue: trafficData.vlanId - } - }; - + } + }; + if(zoneType == 'Advanced') { - if($trafficType.hasClass('guest') || $trafficType.hasClass('public')) { + if($trafficType.hasClass('guest') || $trafficType.hasClass('public')) { if(trafficData.vSwitchType == null) { var useDvs = false; $.ajax({ @@ -324,9 +324,9 @@ useDvs = true; } } - }); - if (useDvs == true) { - var useNexusDvs = false; + }); + if (useDvs == true) { + var useNexusDvs = false; $.ajax({ url: createURL('listConfigurations'), data: { @@ -345,17 +345,17 @@ } else { trafficData.vSwitchType = 'vmwaredvs'; fields.vSwitchName.defaultValue = 'dvSwitch0'; - } + } } else { //useDvs == false trafficData.vSwitchType = 'vmwaresvs'; fields.vSwitchName.defaultValue = 'vSwitch0'; - } + } } - + $.extend(fields, { vSwitchType: { label: 'label.vSwitch.type', - select: function (args) { + select: function (args) { args.response.success({ data: [{ id: 'nexusdvs', @@ -371,10 +371,10 @@ }, defaultValue: trafficData.vSwitchType } - }); - } + }); + } } - } else { + } else { fields = { label: { label: hypervisor + ' ' + _l('label.traffic.label'), @@ -390,7 +390,7 @@ fields: fields }, - after: function(args) { + after: function(args) { $trafficType.data('traffic-type-data', args.data); } }); diff --git a/ui/scripts/ui/core.js b/ui/scripts/ui/core.js index 7756390b372..f05db2ce397 100644 --- a/ui/scripts/ui/core.js +++ b/ui/scripts/ui/core.js @@ -98,7 +98,7 @@ $navItem.addClass('active'); $browser.cloudBrowser('removeAllPanels'); } - + $browser.cloudBrowser('addPanel', { title: '' + _l(data.title) + '' + '', data: '', @@ -106,7 +106,7 @@ if(!isPlugin) { $breadcrumb.attr('title', _l(data.title)); } - + data.$breadcrumb = $breadcrumb; // Hide breadcrumb if this is the home section diff --git a/ui/scripts/ui/dialog.js b/ui/scripts/ui/dialog.js index cb6fcb52630..6f2b7a83740 100644 --- a/ui/scripts/ui/dialog.js +++ b/ui/scripts/ui/dialog.js @@ -48,11 +48,11 @@ // Description text var formDesc; - if (typeof(args.form.desc) == 'function') { + if (typeof(args.form.desc) == 'function') { formDesc = args.form.desc(args); } else { //typeof(args.form.desc) == 'string' or 'undefined' formDesc = args.form.desc; - } + } $('').addClass('message').prependTo($formContainer).html( _l(formDesc) ); @@ -225,7 +225,7 @@ if ($dependsOn.is('[type=checkbox]')) { var isReverse = false; - + if (args.form.fields[dependsOn]) { isReverse = args.form.fields[dependsOn].isReverse; isChecked = args.form.fields[dependsOn].isChecked; @@ -238,10 +238,10 @@ if (($target.is(':checked') && !isReverse) || ($target.is(':unchecked') && isReverse)) { - + $dependent.css('display', 'inline-block'); //show dependent dropdown field $dependent.change(); //trigger event handler for default option in dependent dropdown field (CLOUDSTACK-7826) - + $dependent.each(function() { if ($(this).data('dialog-select-fn')) { $(this).data('dialog-select-fn')(); @@ -283,7 +283,7 @@ success: function(args) { if (args.data == undefined || args.data.length == 0) { var $option = $('