diff --git a/Dockerfile b/Dockerfile index ee0fc01827..a1ff652a2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,8 @@ 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.5.2-SNAPSHOT.tar.gz + MARVIN_FILE=`find tools/marvin/dist/ -name "Marvin*.tar.gz"` \ + pip install $MARVIN_FILE EXPOSE 8080 diff --git a/agent/bindir/cloud-setup-agent.in b/agent/bindir/cloud-setup-agent.in index 9ec24994e5..e8f8f2f452 100755 --- a/agent/bindir/cloud-setup-agent.in +++ b/agent/bindir/cloud-setup-agent.in @@ -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 @@ -65,7 +65,7 @@ def getUserInputs(): if oldHypervisor == "": oldHypervisor = "kvm" - hypervisor = raw_input("Please input the Hypervisor type kvm/lxc:[%s]"%oldCluster) + hypervisor = raw_input("Please input the Hypervisor type kvm/lxc:[%s]"%oldHypervisor) if hypervisor == "": hypervisor = oldHypervisor @@ -138,7 +138,7 @@ if __name__ == '__main__': glbEnv.nics.append(options.prvNic) glbEnv.nics.append(options.pubNic) glbEnv.nics.append(options.guestNic) - + print "Starting to configure your system:" syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) try: diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties index fcd8b5c299..daad05f3b6 100644 --- a/agent/conf/agent.properties +++ b/agent/conf/agent.properties @@ -133,6 +133,22 @@ hypervisor.type=kvm # Disable memory ballooning on vm guests for overcommit, by default overcommit # feature enables balloon and sets currentMemory to a minimum value. # +# vm.diskactivity.checkenabled=false +# Set to true to check disk activity on VM's disks before starting a VM. This only applies +# to QCOW2 files, and ensures that there is no other running instance accessing +# the file before starting. It works by checking the modify time against the current time, +# so care must be taken to ensure the cluster has time synced, otherwise VMs may fail to start. +# +# vm.diskactivity.checktimeout_s=120 +# Timeout for giving up on waiting for VM's disk files to become inactive. Hitting +# this timeout will result in failure to start VM. +# +# vm.diskactivity.inactivetime_ms=30000 +# This is the length of time that the disk needs to be inactive in order to pass the check. +# This means current time minus mtime of disk file needs to be greater than this number. +# It also has the side effect of setting the minimum threshold between a stop and start of +# a given VM. +# # kvmclock.disable=false # Some newer linux kernels are incapable of reliably migrating vms with kvmclock # This is a workaround for the bug, admin can set this to true per-host diff --git a/agent/conf/cloudstack-agent.logrotate b/agent/conf/cloudstack-agent.logrotate new file mode 100644 index 0000000000..202de8f15a --- /dev/null +++ b/agent/conf/cloudstack-agent.logrotate @@ -0,0 +1,26 @@ +# 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. + +/var/log/cloudstack/agent/cloudstack-agent.out +/var/log/cloudstack/agent/cloudstack-agent.err +{ + copytruncate + daily + rotate 5 + compress + missingok +} diff --git a/agent/pom.xml b/agent/pom.xml index b8d24f97a7..3603bce862 100644 --- a/agent/pom.xml +++ b/agent/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT @@ -92,6 +92,12 @@ + + + + + diff --git a/api/pom.xml b/api/pom.xml index eaccd7d2dd..7bbf8b18ed 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT diff --git a/api/src/com/cloud/dc/DataCenter.java b/api/src/com/cloud/dc/DataCenter.java index 6cd054e28b..5b3d3c01f3 100644 --- a/api/src/com/cloud/dc/DataCenter.java +++ b/api/src/com/cloud/dc/DataCenter.java @@ -20,7 +20,6 @@ import org.apache.cloudstack.acl.InfrastructureEntity; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; -import org.apache.cloudstack.framework.config.ConfigKey; import java.util.Map; @@ -28,9 +27,6 @@ * */ public interface DataCenter extends InfrastructureEntity, Grouping, Identity, InternalIdentity { - public static final String SystemVMUseLocalStorageCK = "system.vm.use.local.storage"; - public static final ConfigKey UseSystemVMLocalStorage = new ConfigKey(Boolean.class, SystemVMUseLocalStorageCK, "Advanced", "false", - "Indicates whether to use local storage pools or shared storage pools for system VMs.", true, ConfigKey.Scope.Zone, null); public enum NetworkType { Basic, Advanced, diff --git a/api/src/com/cloud/user/DomainService.java b/api/src/com/cloud/user/DomainService.java index 4c1f93d073..3ccfcbcea4 100644 --- a/api/src/com/cloud/user/DomainService.java +++ b/api/src/com/cloud/user/DomainService.java @@ -56,4 +56,14 @@ public interface DomainService { */ Domain findDomainByPath(String domainPath); + /** + * finds the domain by either id or provided path + * + * @param id the domain id + * @param domainPath the domain path use to lookup a domain + * + * @return domainId the long value of the domain ID, or null if no domain id exists with provided id/path + */ + Domain findDomainByIdOrPath(Long id, String domainPath); + } diff --git a/api/src/com/cloud/user/User.java b/api/src/com/cloud/user/User.java index 33d6235f32..1f0dcfd2b4 100644 --- a/api/src/com/cloud/user/User.java +++ b/api/src/com/cloud/user/User.java @@ -23,7 +23,7 @@ public interface User extends OwnedBy, InternalIdentity { public enum Source { - LDAP, UNKNOWN + LDAP, SAML2, SAML2DISABLED, UNKNOWN } public static final long UID_SYSTEM = 1; @@ -83,4 +83,9 @@ public enum Source { public Source getSource(); + void setSource(Source source); + + public String getExternalEntity(); + + public void setExternalEntity(String entity); } diff --git a/api/src/com/cloud/user/UserAccount.java b/api/src/com/cloud/user/UserAccount.java index d44fcf72a8..0449514cc1 100644 --- a/api/src/com/cloud/user/UserAccount.java +++ b/api/src/com/cloud/user/UserAccount.java @@ -63,4 +63,8 @@ public interface UserAccount extends InternalIdentity { int getLoginAttempts(); public User.Source getSource(); + + public String getExternalEntity(); + + public void setExternalEntity(String entity); } diff --git a/api/src/com/cloud/vm/VmDetailConstants.java b/api/src/com/cloud/vm/VmDetailConstants.java index bd6f0e2f64..d06ad67197 100644 --- a/api/src/com/cloud/vm/VmDetailConstants.java +++ b/api/src/com/cloud/vm/VmDetailConstants.java @@ -22,4 +22,5 @@ public interface VmDetailConstants { public static final String ROOK_DISK_CONTROLLER = "rootDiskController"; public static final String NESTED_VIRTUALIZATION_FLAG = "nestedVirtualizationFlag"; public static final String HYPERVISOR_TOOLS_VERSION = "hypervisortoolsversion"; + public static final String DATA_DISK_CONTROLLER = "dataDiskController"; } diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index b6aed6f80f..2471e08895 100755 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -373,6 +373,7 @@ public class ApiConstants { public static final String ISOLATION_METHODS = "isolationmethods"; public static final String PHYSICAL_NETWORK_ID = "physicalnetworkid"; public static final String DEST_PHYSICAL_NETWORK_ID = "destinationphysicalnetworkid"; + public static final String ENABLE = "enable"; public static final String ENABLED = "enabled"; public static final String SERVICE_NAME = "servicename"; public static final String DHCP_RANGE = "dhcprange"; @@ -515,7 +516,7 @@ public class ApiConstants { public static final String VMPROFILE_ID = "vmprofileid"; public static final String VMGROUP_ID = "vmgroupid"; public static final String CS_URL = "csurl"; - public static final String IDP_URL = "idpurl"; + public static final String IDP_ID = "idpid"; public static final String SCALEUP_POLICY_IDS = "scaleuppolicyids"; public static final String SCALEDOWN_POLICY_IDS = "scaledownpolicyids"; public static final String SCALEUP_POLICIES = "scaleuppolicies"; diff --git a/api/src/org/apache/cloudstack/api/auth/APIAuthenticationType.java b/api/src/org/apache/cloudstack/api/auth/APIAuthenticationType.java index e8c7f0f5ed..fac969dbfc 100644 --- a/api/src/org/apache/cloudstack/api/auth/APIAuthenticationType.java +++ b/api/src/org/apache/cloudstack/api/auth/APIAuthenticationType.java @@ -17,5 +17,5 @@ package org.apache.cloudstack.api.auth; public enum APIAuthenticationType { - LOGIN_API, LOGOUT_API + LOGIN_API, LOGOUT_API, READONLY_API } diff --git a/api/src/org/apache/cloudstack/api/response/HostResponse.java b/api/src/org/apache/cloudstack/api/response/HostResponse.java index 9cb0fcb0a4..c6697fbe30 100644 --- a/api/src/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/org/apache/cloudstack/api/response/HostResponse.java @@ -16,20 +16,19 @@ // under the License. package org.apache.cloudstack.api.response; -import java.util.Date; -import java.util.List; -import java.util.Map; - +import com.cloud.host.Host; +import com.cloud.host.Status; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.serializer.Param; import com.google.gson.annotations.SerializedName; - import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.EntityReference; -import com.cloud.host.Host; -import com.cloud.host.Status; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.serializer.Param; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @EntityReference(value = Host.class) public class HostResponse extends BaseResponse { @@ -217,6 +216,12 @@ public class HostResponse extends BaseResponse { @Param(description = "Host details in key/value pairs.", since = "4.5") private Map details; + + // Default visibility to support accessing the details from unit tests + Map getDetails() { + return details; + } + @Override public String getObjectId() { return this.getId(); @@ -423,7 +428,21 @@ public void setHaHost(Boolean haHost) { } public void setDetails(Map details) { - this.details = details; + + if (details == null) { + return; + } + + final Map detailsCopy = new HashMap(details); + + // Fix for CVE ID 2015-3251 + // Remove sensitive host credential information from + // the details to prevent leakage through API calls + detailsCopy.remove("username"); + detailsCopy.remove("password"); + + this.details = detailsCopy; + } } diff --git a/api/src/org/apache/cloudstack/config/ApiServiceConfiguration.java b/api/src/org/apache/cloudstack/config/ApiServiceConfiguration.java index 94c0a55de6..701af62588 100644 --- a/api/src/org/apache/cloudstack/config/ApiServiceConfiguration.java +++ b/api/src/org/apache/cloudstack/config/ApiServiceConfiguration.java @@ -26,6 +26,8 @@ public class ApiServiceConfiguration implements Configurable { public static final ConfigKey ManagementHostIPAdr = new ConfigKey("Advanced", String.class, "host", "localhost", "The ip address of management server", true); public static final ConfigKey ApiServletPath = new ConfigKey("Advanced", String.class, "endpointe.url", "http://localhost:8080/client/api", "API end point. Can be used by CS components/services deployed remotely, for sending CS API requests", true); + public static final ConfigKey DefaultUIPageSize = new ConfigKey("Advanced", Long.class, "default.ui.page.size", "20", + "The default pagesize to be used by UI and other clients when making list* API calls", true, ConfigKey.Scope.Global); @Override public String getConfigComponentName() { @@ -34,7 +36,7 @@ public String getConfigComponentName() { @Override public ConfigKey[] getConfigKeys() { - return new ConfigKey[] {ManagementHostIPAdr, ApiServletPath}; + return new ConfigKey[] {ManagementHostIPAdr, ApiServletPath, DefaultUIPageSize}; } } diff --git a/api/test/org/apache/cloudstack/api/response/HostResponseTest.java b/api/test/org/apache/cloudstack/api/response/HostResponseTest.java new file mode 100644 index 0000000000..523b3de9e3 --- /dev/null +++ b/api/test/org/apache/cloudstack/api/response/HostResponseTest.java @@ -0,0 +1,80 @@ +// 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.api.response; + +import junit.framework.TestCase; +import org.apache.commons.collections.map.HashedMap; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +public final class HostResponseTest extends TestCase { + + private static final String VALID_KEY = "validkey"; + private static final String VALID_VALUE = "validvalue"; + + @Test + public void testSetDetailsNull() { + + final HostResponse hostResponse = new HostResponse(); + hostResponse.setDetails(null); + + assertEquals(null, hostResponse.getDetails()); + + } + + @Test + public void testSetDetailsWithRootCredentials() { + + final HostResponse hostResponse = new HostResponse(); + final Map details = new HashMap<>(); + + details.put(VALID_KEY, VALID_VALUE); + details.put("username", "test"); + details.put("password", "password"); + + final Map expectedDetails = new HashedMap(); + expectedDetails.put(VALID_KEY, VALID_VALUE); + + hostResponse.setDetails(details); + final Map actualDetails = hostResponse.getDetails(); + + assertTrue(details != actualDetails); + assertEquals(expectedDetails, actualDetails); + + } + + @Test + public void testSetDetailsWithoutRootCredentials() { + + final HostResponse hostResponse = new HostResponse(); + final Map details = new HashMap<>(); + + details.put(VALID_KEY, VALID_VALUE); + + final Map expectedDetails = new HashedMap(); + expectedDetails.put(VALID_KEY, VALID_VALUE); + + hostResponse.setDetails(details); + final Map actualDetails = hostResponse.getDetails(); + + assertTrue(details != actualDetails); + assertEquals(expectedDetails, actualDetails); + + } +} diff --git a/awsapi/pom.xml b/awsapi/pom.xml index 8d15a45497..9e3348d452 100644 --- a/awsapi/pom.xml +++ b/awsapi/pom.xml @@ -26,7 +26,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT @@ -204,6 +204,19 @@ cloud-framework-db ${project.version} + + mysql + mysql-connector-java + ${cs.mysql.version} + runtime + + + + org.apache.ws.xmlschema + xmlschema-core + 2.2.1 + runtime + diff --git a/build/replace.properties b/build/replace.properties index 791334d3c3..76732191c0 100644 --- a/build/replace.properties +++ b/build/replace.properties @@ -27,4 +27,4 @@ MSMNTDIR=/mnt COMPONENTS-SPEC=components.xml AWSAPILOG=awsapi.log REMOTEHOST=localhost -COMMONLIBDIR=client/target/cloud-client-ui-4.5.2-SNAPSHOT/WEB-INF/lib/ +COMMONLIBDIR=client/target/cloud-client-ui-4.5.2/WEB-INF/lib/ diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 523c7cc86a..f5e058855d 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -112,6 +112,7 @@ label.action.attach.iso=Attach ISO label.action.cancel.maintenance.mode.processing=Cancelling Maintenance Mode.... label.action.cancel.maintenance.mode=Cancel Maintenance Mode label.action.change.password=Change Password +label.action.configure.samlauthorization=Configure SAML SSO Authorization label.action.change.service.processing=Changing Service.... label.action.change.service=Change Service label.action.copy.ISO.processing=Copying ISO.... @@ -752,12 +753,15 @@ label.load.balancer=Load Balancer label.load.balancing.policies=Load balancing policies label.load.balancing=Load Balancing label.loading=Loading -label.local.storage.enabled=Local storage enabled +label.local.storage.enabled=Enable local storage for User VMs +label.local.storage.enabled.system.vms=Enable local storage for System VMs label.local.storage=Local Storage label.local=Local label.login=Login label.logout=Logout -label.saml.login=SAML Login +label.saml.enable=Authorize SAML SSO +label.saml.entity=Identity Provider +label.add.LDAP.account=Add LDAP Account label.LUN.number=LUN \# label.lun=LUN label.make.project.owner=Make account project owner diff --git a/client/WEB-INF/classes/resources/messages_ar.properties b/client/WEB-INF/classes/resources/messages_ar.properties index de90c43610..334e8ea4e4 100644 --- a/client/WEB-INF/classes/resources/messages_ar.properties +++ b/client/WEB-INF/classes/resources/messages_ar.properties @@ -100,7 +100,6 @@ label.isolation.uri=\u0639\u0632\u0644 \u0627\u0644\u0631\u0627\u0628\u0637 label.keyboard.type=\u0646\u0648\u0639 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d label.lb.algorithm.leastconn=\u0623\u0642\u0644 \u0627\u0644\u0625\u062a\u0635\u0627\u0644\u0627\u062a label.lb.algorithm.source=\u0645\u0635\u062f\u0631 -label.local.storage.enabled=\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u062d\u0644\u064a label.make.project.owner=\u062c\u0639\u0644 \u0627\u0644\u062d\u0633\u0627\u0628 \u0645\u0627\u0644\u0643 \u0644\u0644\u0645\u0634\u0631\u0648\u0639 label.max.guest.limit=\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0627\u0621 \u0644\u0636\u064a\u0641 label.memory.mb=\u0627\u0644\u0630\u0627\u0643\u0631\u0629 ( \u0628\u0627\u0644\u0645\u064a\u062c\u0627\u0628\u0627\u064a\u0628\u062a) diff --git a/client/WEB-INF/classes/resources/messages_de_DE.properties b/client/WEB-INF/classes/resources/messages_de_DE.properties index f5aced42fc..63119456e7 100644 --- a/client/WEB-INF/classes/resources/messages_de_DE.properties +++ b/client/WEB-INF/classes/resources/messages_de_DE.properties @@ -16,12 +16,19 @@ # under the License. changed.item.properties=Ge\u00e4nderte Eintragseigenschaften +confirm.enable.s3=Bitte f\u00fcgen Sie die folgenden Informationen hinzu, um die Unterst\u00fctzung f\u00fcr "S3-backed Secondary Storage" hinzuzuf\u00fcgen +confirm.enable.swift=Bitte f\u00fcgen Sie die folgenden Informationen hinzu, um die Unterst\u00fctzung f\u00fcr Swift zu erm\u00f6glichen. +error.could.not.change.your.password.because.ldap.is.enabled=Fehler\! Ihr Passwort konnte nicht ge\u00e4ndert werden da LDAP aktiviert ist. error.could.not.enable.zone=Zone konnte nicht aktiviert werden error.installWizard.message=Ein Fehler ist aufgetreten; Sie k\u00f6nnen zur\u00fcckgehen und den Fehler korregieren error.invalid.username.password=Ung\u00fcltiger Benutzername oder ung\u00fcltiges Passwort error.login=Ihr Benutzername / Passwort stimmt nicht mit uneren unseren Aufzeichnungen \u00fcberein. +error.menu.select=Es ist nich m\u00f6glich dies auszuf\u00fchren, weil nichts ausgew\u00e4hlt wurde. +error.mgmt.server.inaccessible=Der Management Server ist nicht erreichbar. Bitte versuche Sie es sp\u00e4ter noch einmal. error.password.not.match=Die Passwortfelder stimmen nicht \u00fcberein +error.please.specify.physical.network.tags=Netzwerk-Angebote sind nicht verf\u00fcgbar solange Sie keine Tags f\u00fcr dieses physische Netzwerk auff\u00fchren. error.session.expired=Ihre Sitzung ist abgelaufen. +error.something.went.wrong.please.correct.the.following=Etwas ging schief; bitte korrigieren Sie folgende Angaben error.unable.to.reach.management.server=Verwaltungsserver kann nicht erreicht werden error.unresolved.internet.name=Ihr Internetname kann nicht aufgel\u00f6st werden. force.delete.domain.warning=Achtung\: Diese Auswahl f\u00fchrt zu einer L\u00f6schung aller untergeordneten Domains und aller angeschlossenen Konten sowie ihrer Quellen. @@ -29,9 +36,11 @@ force.delete=Erzwinge L\u00f6schung force.remove=Erzwinge Entfernung force.remove.host.warning=Achtung\: Diese Auswahl wird CloudStack zum sofortigen Anhalten der virtuellen Maschine f\u00fchren, bevor der Host vom Cluster entfernt wurde. force.stop=Erzwinge Abbruch +force.stop.instance.warning=Warnung\: Das erwzungene Stoppen dieser Instanz sollte Ihre letzte Option sein. Es kann zu Datenverlust und inkonsistentem Zustand der virtuellen Maschine f\u00fchren. ICMP.code=ICMP Code ICMP.type=ICMP-Typ image.directory=Bildverzeichnis +inline=Inline instances.actions.reboot.label=Instanz neu starten label.about.app=\u00dcber CloudStack label.about=\u00dcber @@ -59,6 +68,7 @@ label.action.cancel.maintenance.mode=Wartungsmodus abbrechen label.action.change.password=Passwort \u00e4ndern label.action.change.service=Dienst \u00e4ndern label.action.change.service.processing=Wechseln des Dienstes .... +label.action.configure.samlauthorization=SAML SSO Autorisation konfigurieren label.action.copy.ISO=ISO kopieren label.action.copy.ISO.processing=ISO wird kopiert.... label.action.copy.template.processing=Vorlage wird kopiert.... @@ -174,6 +184,8 @@ label.action.enable.user=Nutzer aktivieren label.action.enable.user.processing=Aktivierung des Nutzers... label.action.enable.zone=Aktivieren der Zone label.action.enable.zone.processing=Aktivierung der Zone.... +label.action.expunge.instance=Instanz unwiderbringlich l\u00f6schen +label.action.expunge.instance.processing=L\u00f6sche die Instanz unwiderbringlich label.action.force.reconnect=Erzwinge wieder verbinden label.action.force.reconnect.processing=Wieder verbinden.... label.action.generate.keys.processing=Genieren der Schl\u00fcssel @@ -193,8 +205,9 @@ label.action.reboot.instance=Instanz neustarten label.action.reboot.instance.processing=Neustarten der Instanz... label.action.reboot.router.processing=Neustart vom Router .... label.action.reboot.router=Router neu starten -label.action.reboot.systemvm.processing=Neustart-System VM .... +label.action.reboot.systemvm.processing=Neustart System-VM.... label.action.reboot.systemvm=System VM neu starten +label.action.recurring.snapshot=Wiederkehrende Schnappsch\u00fcsse label.action.register.iso=ISO registrieren label.action.register.template=Vorlage registrieren label.action.release.ip=IP ver\u00f6ffentlichen @@ -209,29 +222,31 @@ label.action.resource.limits=Grenzen der Ressourcen label.action.restore.instance=Instanz wiederherstellen label.action.restore.instance.processing=Wiederherstellen der Instanz.... 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=Beginnen mit der Instanz.... label.action.start.router.processing=Starten des Routers .... label.action.start.router=Router starten -label.action.start.systemvm.processing=Starten von System VM .... -label.action.start.systemvm=System VM starten +label.action.start.systemvm.processing=Starten von System-VM .... +label.action.start.systemvm=System-VM starten label.action.stop.instance=Instanz stoppen label.action.stop.instance.processing=Stoppen der Instanz.... label.action.stop.router.processing=Stoppen des Routers .... label.action.stop.router=Router stoppen -label.action.stop.systemvm.processing=Stoppen vom System VM .... +label.action.stop.systemvm.processing=Stoppen vom System-VM .... label.action.stop.systemvm=System VM stoppen label.action.take.snapshot.processing=Schnappschuss erstellen... label.action.take.snapshot=Schnappschuss erstellen -label.action.unmanage.cluster.processing=Vernachl\u00e4ssigung des Clusters .... -label.action.unmanage.cluster=Vernachl\u00e4ssige Cluster +label.action.unmanage.cluster=Cluster nichtverwalten +label.action.unmanage.cluster.processing=Entfernen des Clusters aus Verwaltung.... label.action.update.OS.preference=Betriebssystem Pr\u00e4verenz aktualisieren label.action.update.OS.preference.processing=Aktualisierung der Betriebssystem Pr\u00e4verenz.... 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 @@ -240,13 +255,23 @@ label.add.accounts.to=Konten hinzuf\u00fcgen zu label.add.account.to.project=Konto zu Projekt hinzuf\u00fcgen label.add.ACL=ACL hinzuf\u00fcgen label.add.acl.list=ACL-Liste hinzuf\u00fcgen +label.add.affinity.group=Neue Affinity Gruppe hinzuf\u00fcgen +label.add.baremetal.dhcp.device=Baremetal DHCP-Ger\u00e4t hinzuf\u00fcgen +label.add.BigSwitchVns.device=BigSwitch Vns Controller hinzuf\u00fcgen +label.add.BrocadeVcs.device=Brocade Vcs Switch hinzuf\u00fcgen label.add.by.cidr=Hinzuf\u00fcgen durch CIDR label.add.by.group=Hinzuf\u00fcgen durch Gruppe +label.add.by=Hinzugef\u00fcgt von label.add.ciscoASA1000v=CiscoASA1000v-Ressource hinzuf\u00fcgen label.add.cluster=Cluster hinzuf\u00fcgen -label.add.direct.iprange=Direkten Ip-Bereich hinzuf\u00fcgen +label.add.compute.offering=Berechnungsangebot hinzuf\u00fcgen +label.add.direct.iprange=Direkten IP-Bereich hinzuf\u00fcgen label.add.disk.offering=Festplatten-Angebot hinzuf\u00fcgen label.add.domain=Domain hinzuf\u00fcgen +label.added.brocade.vcs.switch=Neuer Brocade Vcs Switch hinzugef\u00fcgt +label.added.new.bigswitch.vns.controller=BigSwitch VNS Controller hinzugef\u00fcgt +label.added.nicira.nvp.controller=Neuer Nicira NVP Controller hinzugef\u00fcgt +label.add.egress.rule=Egress-Regel hinzuf\u00fcgen label.addes.new.f5=Neues F5 hinzugef\u00fcgt label.add.F5.device=F5-Ger\u00e4t hinzuf\u00fcgen label.add.firewall=Firewall-Regel hinzuf\u00fcgen @@ -263,20 +288,32 @@ label.add.ingress.rule=Zutrittsregel hinzuf\u00fcgen label.adding.succeeded=Erfolgreich hinzugef\u00fcgt label.adding.user=Nutzer hinzuf\u00fcgen label.adding.zone=Hinzuf\u00fcgen der Zone -label.add.ip.range=IP Bereich hinzuf\u00fcgen +label.add.intermediate.certificate=Intermediate-Zertifikat hinzuf\u00fcgen +label.add.internal.lb=Interne LB hinzuf\u00fcgen +label.add.ip.range=IP-Bereich hinzuf\u00fcgen label.add.isolated.guest.network=Isoliertes Gastnetzwerk hinzuf\u00fcgen label.add.isolated.network=Isoliertes Netzwerk hinzuf\u00fcgen -label.additional.networks=Zus\u00e4tzliche Networks +label.additional.networks=Zus\u00e4tzliche Netzwerke +label.add.LDAP.account=LDAP-Konto hinzuf\u00fcgen label.add.list.name=ACL-Listename label.add.load.balancer=Serverlastverteilung hinzuf\u00fcgen label.add.more=Mehr hinzuf\u00fcgen +label.add.netScaler.device=Netscaler-Ger\u00e4t hinzuf\u00fcgen label.add.network.acl.list=Netzwerk-ACL-Liste hinzuf\u00fcgen label.add.network.ACL=Netzwerk-ACL hinzuf\u00fcgen label.add.network.device=Hinzuf\u00fcgen eines Netzwerkger\u00e4tes label.add.network=Netzwerk hinzuf\u00fcgen +label.add.network.offering=Netzwerkangebot hinzuf\u00fcgen label.add.new.F5=Neues F5 hinzuf\u00fcgen -label.add.new.gateway=Neues Gateway hinzuf\u00fcgen +label.add.new.gateway=Neuer Gateway hinzuf\u00fcgen +label.add.new.NetScaler=Neuer NetScaler hinzuf\u00fcgen label.add.new.PA=Neues Palo Alto hinzuf\u00fcgen +label.add.new.SRX=Neuer SRX hinzuf\u00fcgen +label.add.new.tier=Neue Ebene hinzuf\u00fcgen +label.add.nfs.secondary.staging.store=NFS Sekund\u00e4r Staging Store hinzuf\u00fcgen +label.add.NiciraNvp.device=Nvp Controller hinzuf\u00fcgen +label.add.NuageVsp.device=Nuage Virtualized Services Directory (VSD) hinzuf\u00fcgen +label.add.OpenDaylight.device=OpenDaylight Controller hinzuf\u00fcgen label.add.PA.device=Palo Alto-Ger\u00e4t hinzuf\u00fcgen label.add.physical.network=Physikalisches Netzwerk hinzuf\u00fcgen label.add.pod=Pod hinzuf\u00fcgen @@ -292,13 +329,16 @@ label.add.security.group=Sicherheitsgruppe hinzuf\u00fcgen label.add.service.offering=Service-Angebot hinzuf\u00fcgen label.add.SRX.device=SRX-Ger\u00e4t hinzuf\u00fcgen label.add.static.nat.rule=Statische NAT-Regel hinzuf\u00fcgen +label.add.static.route=F\u00fcge eine statische Route hinzu label.add.system.service.offering=System-Service-Angebot hinzuf\u00fcgen label.add.template=Vorlage hinzuf\u00fcgen label.add.to.group=Zur Gruppe hinzuf\u00fcgen +label.add.ucs.manager=UCS Manager hinzuf\u00fcgen label.add.user=Benutzer hinzuf\u00fcgen label.add.vlan=VLAN hinzuf\u00fcgen label.add.vms.to.lb=VM(s) zur Lastverteilerregel hinzuf\u00fcgen label.add.vms=VMs hinzuf\u00fcgen +label.add.VM.to.tier=VM zur Ebene hinzuf\u00fcgen label.add.vm=VM hinzuf\u00fcgen label.add.vmware.datacenter=VMware-Rechenzentrum hinzuf\u00fcgen label.add.vnmc.device=VNMC-Ger\u00e4t hinzuf\u00fcgen @@ -306,15 +346,21 @@ label.add.vnmc.provider=VNMC-Anbieter hinzuf\u00fcgen label.add.volume=Volume hinzuf\u00fcgen label.add.vpc.offering=VPC-Angebot hinzuf\u00fcgen label.add.vpc=VPC hinzuf\u00fcgen +label.add.vpn.customer.gateway=VPN Customer Gateway hinzuf\u00fcgen +label.add.VPN.gateway=VPN Gateway hinzuf\u00fcgen label.add.vpn.user=VPN-Benutzer hinzuf\u00fcgen label.add.vxlan=VXLAN hinzuf\u00fcgen label.add.zone=Zone hinzuf\u00fcgen label.admin.accounts=Administrator-Konten label.admin=Administrator +label.advanced=Erweitert label.advanced.mode=Erweiterter Modus label.advanced.search=Erweiterte Suche -label.advanced=Weitergehend +label.affinity=Affinit\u00e4t +label.affinity.group=Affinit\u00e4tsgruppe +label.affinity.groups=Affinit\u00e4tsgruppen label.agent.password=Agent-Passwort +label.agent.state=Agent-Status label.agent.username=Agent-Benutzername label.agree=Zustimmen label.alert.archived=Alarm archiviert @@ -325,6 +371,9 @@ label.algorithm=Algorithmus label.allocated=Zugeteilt label.allocation.state=Belegungszustand label.allow=Erlauben +label.anti.affinity=Anti-Affinit\u00e4t +label.anti.affinity.group=Anti-Affinit\u00e4tsgruppe +label.anti.affinity.groups=Anti-Affinit\u00e4tsgruppen label.api.key=API Schl\u00fcssel label.api.version=API-Version label.apply=Anwenden @@ -332,11 +381,16 @@ label.app.name=CloudStack label.archive.alerts=Alarme archivieren label.archive=Archiv label.archive.events=Ereignisse archivieren +label.assigned.vms=Zugewiesene VMs +label.assign.instance.another=Instanz einem anderen Benutzerkonto zuweisen label.assign.to.load.balancer=Instanz zum Lastverteiler hinzuf\u00fcgen label.assign=Zuweisen label.associated.network.id=Assozierte Netzwerk ID label.associated.network=Zugeh\u00f6riges Netzwerk +label.associated.profile=Zugeh\u00f6riges Profil +label.associate.public.ip=\u00d6ffentliche IP assoziieren label.attached.iso=Angeh\u00e4ngte ISO +label.author.email=Autor-Email label.author.name=Autorname label.autoscale=Automatische Skalierung label.availability=Verf\u00fcgbarkeit @@ -345,10 +399,25 @@ label.available.public.ips=Verf\u00fcgbaren \u00f6ffentlichen IP-Adressen label.available=Verf\u00fcgbar label.back=Zur\u00fcck label.bandwidth=Bandbreite +label.baremetal.dhcp.devices=Baremetal DHCP-Ger\u00e4te +label.baremetal.dhcp.provider=Baremetal DHCP-Provider +label.baremetal.pxe.device=Baremetal PXE-Ger\u00e4t hinzuf\u00fcgen +label.baremetal.pxe.devices=Baremetal PXE-Ger\u00e4te +label.baremetal.pxe.provider=Baremetal PXE-Provider label.basic=Basis label.basic.mode=Grundmodus +label.bigswitch.controller.address=BigSwitch Vns Controller-Adresse +label.bigswitch.vns.details=BigSwitch VNS Details +label.blade.id=Blade ID +label.blades=Blades label.bootable=Bootbar +label.broadcast.domain.range=Broadcast-Domain Typ label.broadcast.domain.type=Benachrichtigung an alle Nutzer \u00fcber Domain Typ +label.broadcast.uri=Broadcast URI +label.broadcasturi=Broadcast-URI +label.broadcat.uri=Broadcast URI +label.brocade.vcs.address=Vcs Switch Adresse +label.brocade.vcs.details=Brocade Vcs Switch Details label.by.account=Nach Benutzerkonto label.by.alert.type=Nach Alarmtyp label.by.availability=Nach Verf\u00fcgbarkeit @@ -368,11 +437,17 @@ label.by.traffic.type=Nach Traffic-Typ label.by.type.id=Nach Typ ID label.by.type=Nach Typ label.by.zone=Nach Zone +label.cache.mode=Schreib-Cache-Typ label.cancel=Abbrechen +label.capacity.bytes=Kapazit\u00e4ts-Bytes +label.capacity.iops=Kapazit\u00e4ts-IOPS label.capacity=Kapazit\u00e4t label.certificate=Zertifikat +label.change.affinity=Affinit\u00e4t \u00e4ndern +label.change.service.offering=Dienstangebot \u00e4ndern label.change.value=Wert \u00e4ndern label.character=Buchstabe +label.chassis=Chassis label.cidr.account=CIDR oder Benutzerkonto/Sicherheitsgruppe label.cidr=CIDR label.CIDR.list=CIDR-Liste @@ -394,6 +469,10 @@ label.cluster.type=Cluster-Typ label.clvm=CLVM label.code=Code label.community=Gemeinschaft +label.compute.and.storage=Berechnen und Speicher +label.compute=Berechnen +label.compute.offering=Berechnungsangebot +label.compute.offerings=Berechnungsangebote label.configuration=Konfiguration label.configure=Konfigurieren label.configure.ldap=LDAP konfigurieren @@ -401,13 +480,16 @@ label.configure.network.ACLs=Netzwerk-ACLs konfigurieren label.configure.vpc=VPC konfigurieren label.confirmation=Best\u00e4tigung label.confirm.password=Passwort best\u00e4tigen -label.congratulations=Herzlichen Gl\u00fcckwunsch +label.congratulations=Herzlichen Gl\u00fcckwunsch\! +label.conserve.mode=Konserven-Modus label.console.proxy=Konsolenproxy label.console.proxy.vm=Konsolenproxy-VM +label.continue.basic.install=Weiterfahren mit Basisinstallation label.continue=Fortsetzen label.copying.iso=ISO wird kopiert label.corrections.saved=Korrekturen gespeichert label.counter=Z\u00e4hler +label.cpu.allocated.for.VMs=CPU alloziert f\u00fcr VMs label.cpu.allocated=Zugeteilte CPU label.CPU.cap=CPU Obergrenze label.cpu=CPU @@ -416,11 +498,14 @@ label.cpu.mhz=CPU (in MHz) label.cpu.utilized=genutzte CPU label.created.by.system=Vom System erstellt label.created=Erstellt +label.create.nfs.secondary.staging.storage=NFS sekund\u00e4rer Staging Store erstellen +label.create.nfs.secondary.staging.store=NFS sekund\u00e4rer Staging Store erstellen label.create.project=Projekt erstellen label.create.template=Vorlage erstellen label.create.VPN.connection=VPN-Verbindung erstellen label.cross.zones=\u00fcberschneidende Zonen label.custom=Benutzerdefiniert +label.custom.disk.iops=Benutzerspezifische IOPS label.custom.disk.size=Benutzerdefinierte Festplattengr\u00f6sse label.daily=T\u00e4glich label.data.disk.offering=Daten-Speicherplatz-Angebot @@ -428,30 +513,56 @@ label.date=Datum label.day.of.month=Tag des Monats label.day.of.week=Tag der Woche label.dc.name=DC-Name +label.dead.peer.detection=Dead-Peer-Erkennung +label.decline.invitation=Einladung ablehnen +label.dedicate.cluster=Dediziere Cluster +label.dedicated=Dediziert +label.dedicate=Dedizieren +label.dedicated.vlan.vni.ranges=Dedizierte VLAN/VNI Bereiche +label.dedicate.host=Dediziere Host +label.dedicate.pod=Dediziere Pod +label.dedicate.vlan.vni.range=Dedizierter VLAN/VNI Bereich +label.dedicate.zone=Zone dedizieren +label.default.egress.policy=Standard Egress Richtlinie label.default=Standard label.default.use=Standardeinstellung nutzen label.default.view=Standardansicht label.delete.acl.list=ACL-Liste ersetzen +label.delete.affinity.group=Affinit\u00e4tsgruppe l\u00f6schen label.delete.alerts=Alarme l\u00f6schen +label.delete.BigSwitchVns=BigSwitch Vns Controller entfernen +label.delete.BrocadeVcs=Brocade Vcs Switch l\u00f6schen label.delete.ciscoASA1000v=CiscoASA1000v l\u00f6schen label.delete.ciscovnmc.resource=CiscoVNMC-Ressource l\u00f6schen label.delete.events=Ereignisse l\u00f6schen label.delete.F5=F5 l\u00f6schen +label.delete.gateway=L\u00f6sche Gateway +label.delete.internal.lb=Interne LB l\u00f6schen label.delete=L\u00f6schen +label.delete.NetScaler=L\u00f6sche NetScaler +label.delete.NiciraNvp=Entferne Nvp Controller +label.delete.NuageVsp=L\u00f6sche Nuage VSD +label.delete.OpenDaylight.device=OpenDaylight Controller l\u00f6schen label.delete.PA=Palo Alto l\u00f6schen label.delete.portable.ip.range=Portablen IP-Bereich l\u00f6schen label.delete.profile=Profil l\u00f6schen label.delete.project=Projekt l\u00f6schen +label.delete.secondary.staging.store=Sekund\u00e4rer Staging Store l\u00f6schen label.delete.SRX=SRX l\u00f6schen +label.delete.ucs.manager=UCS Manager l\u00f6schen label.delete.VPN.connection=VPN-Verbindung l\u00f6schen +label.delete.VPN.customer.gateway=VPN Customer Gateway l\u00f6schen label.delete.VPN.gateway=VPN-Gateway l\u00f6schen label.delete.vpn.user=VPN-Benutzer l\u00f6schen label.deleting.failed=L\u00f6schen fehlgeschlagen -label.deleting.processing=L\u00f6schen .... +label.deleting.processing=L\u00f6schen.... label.deny=Verweigern +label.deployment.planner=Deployment-Planer label.description=Beschreibung +label.destination.physical.network.id=Physiche Netzwerk-ID des Zielorts label.destination.zone=Zielzone label.destroy.router=Router zerst\u00f6ren +label.destroy.vm.graceperiod=Gnadenfrist bis zur Zerst\u00f6rung der VM label.destroy=Zerst\u00f6ren label.detaching.disk=Entfernen der Festplatte label.details=Details @@ -459,6 +570,7 @@ label.device.id=Ger\u00e4te-ID label.devices=Ger\u00e4te label.dhcp=DHCP label.DHCP.server.type=DHCP Server Type +label.direct.attached.public.ip=Direkt angeschlossene \u00f6ffentliche IP label.direct.ips=Gemeinsame Netzwerk-IPs label.disable.autoscale=Automatische Skalierung deaktivieren label.disabled=Deaktiviert @@ -469,51 +581,84 @@ label.disable.vnmc.provider=VNMC-Anbieter deaktivieren label.disable.vpc.offering=VPC-Angebot deaktivieren label.disable.vpn=Fernzugriff-VPN deaktivieren label.disabling.vpn.access=Deaktivierung des VPN Zugangs +label.disassociate.profile.blade=Verbindung vom Profil zum Blade entfernen 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.max=Max IOPS +label.disk.iops.min=Min IOPS +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.provisioningtype=Provisionierungstyp +label.disk.read.bytes=Festplatte Lesen (Bytes) +label.disk.read.io=Festplatte Lesen (EA) label.disk.size=Festplattengr\u00f6\u00dfe label.disk.size.gb=Festplattengr\u00f6\u00dfe (in GB) label.disk.total=Gesamtzahl der Festplatten label.disk.volume=Festplatten Volume +label.disk.write.bytes=Festplatte Schreiben (Bytes) +label.disk.write.io=Festplatte Schreiben (EA) +label.display.name=Anzeigename label.display.text=Anzeigetext label.distributedrouter=Verteilter Router label.dns.1=DNS 1 label.dns.2=DNS 2 label.dns=DNS +label.DNS.domain.for.guest.networks=DNS Domain f\u00fcr Gast-Netzwerke label.domain.admin=Domain Administrator label.domain=Domain label.domain.id=Domain ID label.domain.lower=Dom\u00e4ne label.domain.name=Domain Name +label.domain.router=Domain Router label.domain.suffix=DNS Domainsuffix (z.B. xzy.com) label.done=Fertig label.double.quotes.are.not.allowed=Anf\u00fchrungszeichen sind nicht erlaubt label.download.progress=Download-Fortschritt +label.drag.new.position=Ziehe zu neuer Position label.duration.in.sec=Dauer (in Sekunden) label.dynamically.scalable=Dynamisch skalierbar label.edit.acl.rule=ACL-Regel bearbeiten +label.edit.affinity.group=Affinit\u00e4tsgruppe 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.tags=Schlagw\u00f6rter bearbeiten +label.edit.traffic.type=Datenverkehrstyp bearbeiten label.edit.vpc=VPC bearbeiten +label.egress.default.policy=Egress Standard Policy +label.egress.rule=Egress-Regel +label.egress.rules=Egress-Regeln +label.elastic=Elastisch +label.elastic.IP=Elastische IP Adresse +label.elastic.LB=Elastischer LB label.email=E-Mail label.email.lower=E-Mail-Adresse label.enable.autoscale=Automatische Skalierung aktivieren label.enable.host=Host aktivieren label.enable.network.offering=Netzwerkangebot aktivieren +label.enable.provider=Anbieter aktivieren +label.enable.s3=Fernzugriff-VPN einschalten label.enable.swift=Swift aktivieren label.enable.vnmc.device=VNMC-Ger\u00e4t aktivieren label.enable.vnmc.provider=VNMC-Anbieter aktivieren label.enable.vpc.offering=VPC-Angebot aktivieren +label.enable.vpn=Fernzugriff-VPN einschalten label.enabling.vpn.access=Aktivieren des VPN-Zugriffs label.enabling.vpn=VPN aktivieren +label.end.IP=End-IP label.endpoint=Endpunkt label.endpoint.or.operation=Endpunkt oder Bedienung label.end.port=Beende Port +label.end.reserved.system.IP=Reservierte System-End-IP +label.end.vlan=End-VLAN +label.end.vxlan=End-VXLAN +label.enter.token=Token eingeben label.error.code=Fehlercode label.error=Fehler label.error.upper=FEHLER @@ -525,12 +670,14 @@ label.esx.host=ESX / ESXi-Host label.event.archived=Ereignis archiviert label.event.deleted=Ereignis gel\u00f6scht label.example=Beispiel +label.expunge=Ausl\u00f6schen label.external.link=Externer Link label.extractable=Extrahierbar label.f5.details=F5-Details label.f5=F5 label.failed=Fehlgeschlagen label.featured=Besonderheiten aufweisen +label.fetch.latest=Neuste abrufen label.filterBy=Filtern nach label.firewall=Firewall label.firstname.lower=Vorname @@ -550,20 +697,25 @@ label.go.step.5=Weiter mit Schritt 5 label.gpu=GPU label.group.by.account=Nach Konto gruppieren label.group.by.cluster=Nach Cluster gruppieren +label.group.by.pod=Gruppiert nach Pod label.group.by.zone=Nach Zone gruppieren label.group=Gruppe label.group.optional=Gruppe (optional) +label.gslb.assigned.lb.more=Mehr Lastverteilung zuweisen +label.gslb.assigned.lb=Zugewiesene Lastverteilung label.gslb.delete=GSLB l\u00f6schen label.gslb.details=GSLB-Details label.gslb.domain.name=GSLB-Dom\u00e4nenname label.gslb=GSLB label.gslb.lb.details=Lastverteilungsdetails +label.gslb.lb.remove=Lastverteilung aus diesem GSLB entfernen label.gslb.lb.rule=Lastverteilungsregel label.gslb.service=GSLB-Dienst label.gslb.service.private.ip=GSLB-Dienst Private IP label.gslb.service.public.ip=GSLB-Dienst \u00d6ffentliche IP label.gslb.servicetype=Diensttyp label.guest.cidr=Gast CIDR +label.guest.end.ip=Gast-End-IP label.guest=Gast label.guest.gateway=Gast-Schnittstelle label.guest.ip=Gast IP-Adresse @@ -571,12 +723,19 @@ label.guest.ip.range=Gast IP Berecih label.guest.netmask=Gast Netzmaske label.guest.network.details=Gastnetzwerkdetails label.guest.networks=Gastnetzwerke +label.guest.start.ip=Gast-Start-IP label.guest.traffic=Gast-Datenverkehr +label.guest.traffic.vswitch.name=Gast Datenverkehr vSwitch Name +label.guest.traffic.vswitch.type=Gast Datenverkehr vSwitch Typ label.guest.type=Gasttyp label.ha.enabled=HA aktiviert +label.health.check=Heath-Check +label.health.check.interval.in.sec=Health-Check-Interval (in Sek.) +label.healthy.threshold=Schwellwert f\u00fcr Gesund label.help=Hilfe label.hide.ingress.rule=Verstecke Regeln, die den Zutritt steuern label.hints=Hinweise +label.home=Start label.host.alerts=Host-Alarme label.host=Host label.host.MAC=Host-MAC @@ -588,9 +747,12 @@ label.hvm=HVM label.hypervisor.capabilities=Hypervisorf\u00e4higkeiten label.hypervisor=Hypervisor label.hypervisors=Hypervisoren +label.hypervisor.snapshot.reserve=Hypervisor Schnappschuss-Reserve label.hypervisor.type=Hypervisor Typ label.hypervisor.version=Hypervisor-Version +label.hyperv.traffic.label=HyperV Datenverkehrs-Bezeichnung label.id=Identifikation +label.IKE.DH=IKE DH label.IKE.encryption=IKE-Verschl\u00fcsselung label.IKE.hash=IKE-Pr\u00fcfsumme label.IKE.lifetime=IKE-Lebensdauer (Sekunde) @@ -599,6 +761,7 @@ label.info=Info label.info.upper=INFO label.ingress.rule=Zutrittsregel label.initiated.by=Initiiert durch +label.inside.port.profile=Inside Port Profil label.installWizard.addClusterIntro.subtitle=Was ist ein Cluster? label.installWizard.addClusterIntro.title=cluster hinzuf\u00fcgen label.installWizard.addHostIntro.subtitle=Was ist ein host? @@ -610,15 +773,23 @@ label.installWizard.addPrimaryStorageIntro.title=primary storage hinzuf\u00fcgen label.installWizard.addSecondaryStorageIntro.subtitle=Was ist secondary storage? label.installWizard.addSecondaryStorageIntro.title=secondary storage label.installWizard.addZoneIntro.subtitle=Was ist eine Zone? +label.installWizard.addZoneIntro.title=Zone hinzuf\u00fcgen label.installWizard.addZone.title=zone hinzuf\u00fcgen -label.installWizard.click.launch=Bitte den Start Button dr\u00fccken +label.installWizard.click.launch=Bitte den Startknopf dr\u00fccken +label.installWizard.subtitle=Diese F\u00fchrung wird Ihnen beim Aufsetzen Ihrer CloudStack Installation behilflich sein. label.installWizard.title=Hallo und Willkommen bei CloudStack&\#8482 label.instance=Instanz label.instance.limits=Instanz Grenzen label.instance.name=Name der Instanz +label.instance.port=Instanz-Port +label.instance.scaled.up=Instanz hochskaliert label.instances=Instanzen +label.instanciate.template.associate.profile.blade=Vorlage instanzieren und Profil zu Blade assoziieren +label.intermediate.certificate=Intermediate Zertifikat {0} label.internal.dns.1=Interne DNS 1 label.internal.dns.2=Interne DNS 2 +label.internal.lb.details=Interne LB-Details +label.internallbvm=Interne LB VM label.internal.name=Interner Name label.interval.type=Interval Typ label.introduction.to.cloudstack=Einf\u00fchrung in CloudStack&\#8482 @@ -636,6 +807,7 @@ label.ip.limits=\u00d6ffentliche IP-Begrenzungen label.ip.or.fqdn=IP oder FQDN label.ip.range=IP-Bereich label.ip.ranges=IP-Bereiche +label.IPsec.preshared.key=IPsec Preshared-Schl\u00fcssel label.ips=IPs label.ipv4.cidr=IPv4 CIDR label.ipv4.dns1=IPv4 DNS1 @@ -658,6 +830,7 @@ label.iso=ISO label.isolated.networks=Isolierte Netzwerke label.isolation.method=Isolationsmethode label.isolation.mode=Isolationsmodus +label.isolation.uri=Isolations-URI label.is.redundant.router=Redundant label.is.shared=Gemeinsam label.is.system=Ist System @@ -665,64 +838,78 @@ label.item.listing=Eintragsauflistung label.keep=Behalten label.keyboard.type=Tastaturtyp label.key=Schl\u00fcssel +label.kvm.traffic.label=KVM Datenverkehrs-Bezeichnung label.label=Bezeichnung label.lang.arabic=Arabisch label.lang.brportugese=Brasilianisches Portugiesisch label.lang.catalan=Katalanisch label.lang.chinese=chinesisch (vereinfacht) label.lang.dutch=Niederl\u00e4ndisch -label.lang.english=englisch +label.lang.english=Englisch label.lang.french=Franz\u00f6sisch label.lang.german=Deutsch label.lang.hungarian=Ungarisch label.lang.italian=Italienisch -label.lang.japanese=japanisch +label.lang.japanese=Japanisch label.lang.korean=Koreanisch label.lang.norwegian=Norwegisch label.lang.polish=Polnisch label.lang.russian=Russisch -label.lang.spanish=spanisch +label.lang.spanish=Spanisch label.last.disconnected=Zuletzt getrennt label.lastname.lower=Nachname label.last.name=Nachname label.latest.events=Neueste Ereignisse label.launch=Start label.launch.vm=VM starten +label.launch.zone=Zone starten +label.lb.algorithm.leastconn=Mindestverbindungen label.lb.algorithm.roundrobin=Rundlauf-Verfahren label.lb.algorithm.source=Quelle +label.LB.isolation=LB-Isolation label.ldap.configuration=LDAP-Konfiguration label.ldap.group.name=LDAP-Gruppe label.ldap.port=LDAP-Port label.level=Ebene +label.linklocal.ip=Link-Local IP-Adresse label.load.balancer=Serverlastverteilung label.load.balancer.type=Lastverteilungstyp label.load.balancing=Lastverteilung +label.load.balancing.policies=Verteilungsrichtlinien laden label.loading=Laden label.local=Lokal -label.local.storage.enabled=Lokaler Speicher aktiviert +label.local.storage.enabled=Erm\u00f6gliche lokalen Speicher f\u00fcr Benutzer VMs +label.local.storage.enabled.system.vms=Aktiviere lokaler Speicher f\u00fcr die System-VMs label.local.storage=Lokaler Speicher label.login=Login label.logout=Abmelden label.lun=LUN label.LUN.number=LUN \# +label.lxc.traffic.label=LXC Datenverkehrs-Bezeichnung +label.make.project.owner=Mache Benutzerkonto zum Projekteigent\u00fcmer label.managed=Verwaltet +label.management.ips=Verwaltung IP-Adressen label.management.server=Verwaltungsserver label.management=Verwaltung label.manage.resources=Ressourcen verwalten label.manage=Verwalten label.max.cpus=Max. CPU-Kerne +label.max.guest.limit=Maximales Limit f\u00fcr Anzahl der G\u00e4ste label.maximum=Maximum +label.max.instances=Max Instanzen label.max.memory=Max. Speicher (MiB) label.max.networks=Max. Netzwerke +label.max.primary.storage=Max. prim\u00e4rer (GiB) label.max.public.ips=Max. \u00f6ffentliche IPs +label.max.secondary.storage=Max. sekund\u00e4rer (GiB) label.max.snapshots=Max. Schnappsch\u00fcsse label.max.templates=Max. Vorlagen label.max.vms=Max. Benutzer-VMs label.max.volumes=Max. Volumen label.max.vpcs=Max. VPCs -label.may.continue=Sie k\u00f6nnen jetzt fortfahren +label.may.continue=Sie k\u00f6nnen jetzt fortfahren. label.md5.checksum=MD5-Pr\u00fcfsumme -label.memory.allocated=zugeordneter Speicher +label.memory.allocated=Zugeordneter Speicher label.memory.limits=Speicherbegrenzungen (MiB) label.memory.mb=Speicher (in MB) label.memory=Speicher (in MB) @@ -739,15 +926,16 @@ label.menu.dashboard=Dashboard label.menu.destroyed.instances=Zerst\u00f6rte Instanzen label.menu.disk.offerings=Festplatten-Angebote label.menu.domains=Domains -label.menu.events=Events +label.menu.events=Ereignisse label.menu.featured.isos=Besondere ISOs +label.menu.featured.templates=Hervorgehobene Vorlagen label.menu.global.settings=Allgemeine Einstellungen label.menu.infrastructure=Infrastruktur label.menu.instances=Instanzen label.menu.ipaddresses=IP-Adressen label.menu.isos=ISOs label.menu.my.accounts=Meine Konten -label.menu.my.instances=Meine F\u00e4lle +label.menu.my.instances=Meine Instanzen label.menu.my.isos=Meine ISOs label.menu.my.templates=Meine Vorlagen label.menu.network=Netzwerk @@ -760,9 +948,11 @@ label.menu.service.offerings=Service-Angebote label.menu.snapshots=Schnappsch\u00fcsse label.menu.stopped.instances=Beendete Instanzen label.menu.storage=Speicherung +label.menu.system.service.offerings=Systemangebote label.menu.system=System label.menu.system.vms=System VMs label.menu.templates=Vorlagen +label.menu.virtual.appliances=Virtuelle Appliances label.menu.virtual.resources=Virtuelle Ressourcen label.menu.volumes=Volumes label.menu.vpc.offerings=VPC-Angebote @@ -773,8 +963,11 @@ label.migrate.lb.vm=LB-VM migrieren label.migrate.router.to=Router migrieren zu label.migrate.systemvm.to=System-VM migrieren zu label.migrate.to.host=Zu Host migrieren +label.migrate.to.storage=Zu Speicher migrieren +label.migrate.volume.to.primary.storage=Migriere ein Speichervolumen zu einem anderen prim\u00e4ren Speicher label.migrate.volume=Volumen migrieren label.minimum=Minimum +label.min.instances=Min Instanzen label.minute.past.hour=Minute(n) seit der Stunde vergangen label.mode=Modus label.monday=Montag @@ -797,22 +990,31 @@ label.netscaler.details=NetScaler-Details label.netScaler=NetScaler label.network.ACL=Netzwerk-ACL label.network.ACLs=Netzwerk-ACLs +label.network.ACL.total=Netzwerk-ACL Total label.network.addVM=Netzwerk zur VM hinzuf\u00fcgen label.network.cidr=Netzwerk-CIDR +label.network.desc=Netzwerkbeschreibung label.network.device=Netzwerkger\u00e4t label.network.device.type=Netzwerkger\u00e4tetyp label.network.domain=Netzwerk-Domain label.network.domain.text=Netzwerkdom\u00e4ne label.network.id=Netzwerk-ID +label.networking.and.security=Netzwerkbetrieb und Sicherheit +label.network.label.display.for.blank.value=Standard-Gateway verwenden label.network.limits=Netzwerkbegrenzungen label.network.name=Netzwerk Name label.network=Netzwerk +label.network.offering.display.text=Netzwerkangebot-Anzeigetext +label.network.offering.id=Netzwerkangebotskennung +label.network.offering.name=Netzwerkangebotsname label.network.offering=Netzwerk-Angebot label.network.rate.megabytes=Netzwerkrate (MB/s) label.network.rate=Netzwerk-Rate +label.network.read=Netzwerk-Lesen label.network.service.providers=Netzwerkdienstanbieter label.networks=Netzwerke label.network.type=Netzwerk-Typ +label.network.write=Netzwerk Schreiben label.new=Neu label.new.password=Neues Passwort label.new.project=Neues Projekt @@ -822,11 +1024,15 @@ label.nexusVswitch=Nexus 1000v label.nfs=NFS label.nfs.server=NFS Server label.nfs.storage=NFS-Speicher +label.nic.adapter.type=NIC-Adaptertyp +label.nicira.controller.address=Controller-Adresse +label.nicira.l3gatewayserviceuuid=L3 Gateway Service Uuid label.nicira.nvp.details=Nicira NVP-Details +label.nicira.transportzoneuuid=Transportzone Uuid label.nics=NICs label.no.actions=Nicht verf\u00fcgbare Aktionen label.no.alerts=Keine aktuellen Alarme -label.no.data=Keine anzuzeigenden Daten +label.no.data=Keine Daten zum Anzeigen label.no.errors=Keine neuen Fehler label.no.grouping=(keine Gruppierung) label.no.isos=Kein verf\u00fcgbaren ISOs @@ -838,7 +1044,9 @@ label.not.found=Nicht gefunden label.no.thanks=Nein, danke label.notifications=Benachrichtigungen label.number.of.clusters=Anzahl der Cluster +label.number.of.cpu.sockets=Die Anzahl der CPU-Sockeln label.number.of.hosts=Anzahl an Hosts +label.number.of.pods=Anzahl Pods label.number.of.system.vms=Anzahl an System-VMs label.number.of.virtual.routers=Anzahl an virtuellen Routern label.number.of.zones=Anzahl an Zonen @@ -847,15 +1055,21 @@ label.numretries=Anzahl von Wiederholungen label.ocfs2=OCFS2 label.offer.ha=HA anbieten label.ok=OK +label.opendaylight.controllerdetail=OpenDayight Controller Details +label.opendaylight.controller=OpenDaylight Controller +label.opendaylight.controllers=OpenDaylight Controllers label.openDaylight=OpenDaylight label.operator=Betreiber label.optional=optional label.order=Reihenfolge label.os.preference=OS Pr\u00e4ferenz label.os.type=OS Typ +label.other=Andere label.override.guest.traffic=Gast-Datenverkehr \u00fcberschreiben label.override.public.traffic=\u00d6ffentlichen Datenverkehr \u00fcberschreiben +label.ovm.traffic.label=OVM Datenverkehrs-Bezeichnung label.ovs=OVS +label.owned.public.ips=Ihnen geh\u00f6rende \u00f6ffentliche IP-Adressen label.owner.account=Eigent\u00fcmerkonto label.owner.domain=Eigent\u00fcmerdom\u00e4ne label.palo.alto.details=Palo Alto-Details @@ -866,7 +1080,10 @@ label.passive=Passiv label.password.enabled=Passwort aktiviert label.password.lower=Passwort label.password=Passwort +label.password.reset.confirm=Passwort wurde zur\u00fcckgesetzt auf label.path=Pfad +label.PA.threat.profile=Palo Alto Threat Profil +label.perfect.forward.secrecy=Perfect Forward Secrecy label.persistent=Persistent label.physical.network.ID=Physikalisches Netzwerkkennung label.physical.network=Physikalisches Netzwerk @@ -875,9 +1092,16 @@ label.PING.CIFS.username=PING CIFS Benutzername label.PING.dir=PING-Verzeichnis label.ping.path=Ping-Pfad label.PING.storage.IP=IP des externen Speichers anpingen +label.planner.mode=Planungs Modus +label.please.specify.netscaler.info=Bitte Netscaler Info definieren label.please.wait=Bitte warten +label.plugin.details=Plugindetails +label.plugins=Plugins +label.pod.dedicated=Pod dediziert +label.pod.name=Podname label.pod=Pod -label.pods=Pod +label.pods=Pods +label.polling.interval.sec=Abfrageintervall (in Sekunden) label.portable.ip=Portable IP label.portable.ip.range.details=Details des portablen IP-Bereichs label.portable.ip.ranges=Portable IP-Bereiche @@ -891,10 +1115,12 @@ label.previous=Vorherige label.prev=Vor label.primary.allocated=Zugewiesener Hauptspeicher label.primary.network=Hauptnetzwerk +label.primary.storage.count=Hauptspeicher Pools label.primary.storage=Hauptspeicher +label.primary.storage.limits=Hauptspeicher-Limits (GiB) label.primary.used=Genutzter Hauptspeicher label.private.Gateway=Privater Gateway -label.private.interface=Privates Interface +label.private.interface=Private Schnittstelle label.private.ip=Private IP-Adresse label.private.ip.range=Privater IP-Bereich label.private.ips=Private IP-Adressen @@ -914,31 +1140,52 @@ label.protocol.number=Protokollnummer label.protocol=Protokoll label.provider=Anbieter label.providers=Anbieter -label.public.interface=\u00d6ffentliches Interface +label.public.interface=\u00d6ffentliche Schnittstelle label.public.ips=\u00d6ffentliche IP-Adressen label.public.ip=\u00d6ffentliche IP-Adresse +label.public.load.balancer.provider=\u00d6ffentlicher Lastverteileranbieter label.public.network=\u00d6ffentliches Netzwerk label.public.port=\u00d6ffentlicher Port label.public.traffic=\u00d6ffentlicher Datenverkehr +label.public.traffic.vswitch.name=\u00d6ffentlicher Datenverkehr vSwitch Name +label.public.traffic.vswitch.type=\u00d6ffentlicher Datenverkehr vSwitch Typ label.public=\u00d6ffentlich label.public.zone=\u00d6ffentliche Zone label.purpose=Zweck label.Pxe.server.type=PXE Server Type +label.qos.type=QoS-Typ label.quickview=Schnellansicht +label.quiesce.vm=VM stilllegen +label.quiet.time.sec=Ruhezeit (in Sekunden) label.rbd.id=Cephx-Benutzer +label.rbd.monitor=Ceph-\u00dcberwachung +label.rbd.pool=Ceph-Pool label.rbd=RBD label.rbd.secret=Cephx-Geheimnis label.reboot=Neustart label.recent.errors=Aktuelle Fehler label.recover.vm=VM wiederherstellen +label.redundant.router.capability=Redundanter Router Kapazit\u00e4t label.redundant.router=Redundanter Router label.redundant.state=Redundanter Status label.refresh=Aktualisieren +label.refresh.blades=Blades aktualisieren +label.regionlevelvpc=Region Level VPC label.region=Region label.reinstall.vm=VM neu installieren label.related=Verwandt +label.release.account.lowercase=Vom Benutzerkonto losl\u00f6sen +label.release.account=Vom Benutzerkonto losl\u00f6sen +label.release.dedicated.cluster=Dedizierter Cluster freigeben +label.release.dedicated.host=Dedizierter Host freigeben +label.release.dedicated.pod=Dedizierter Pod freigeben +label.release.dedicated.vlan.range=Dedizierter VLAN/VNI Bereich freigeben +label.release.dedicated.zone=Dedizierte Zone freigeben label.remind.later=Sp\u00e4ter erinnern label.remove.ACL=ACL entfernen +label.remove.egress.rule=Egress Regel entfernen +label.remove.from.load.balancer=Instanz von Lastverteiler entfernen +label.remove.ingress.rule=Ingress Regel entfernen label.remove.ip.range=IP-Bereich entfernen label.remove.ldap=LDAP entfernen label.remove.network.offering=Netzwerkangebot entfernen @@ -946,9 +1193,15 @@ label.remove.pf=Portweiterleitungsregel entfernen label.remove.project.account=Konto aus Projekt entfernen label.remove.region=Region entfernen label.remove.rule=Regel entfernen +label.remove.static.nat.rule=Statische NAT-Regel entfernen +label.remove.static.route=Statische Route entfernen +label.remove.tier=Ebene entfernen +label.remove.vm.from.lb=VM von Lastverteiler-Regel entfernen +label.remove.vm.load.balancer=VM aus Lastverteiler entfernen label.remove.vmware.datacenter=VMware-Rechenzentrum entfernen label.remove.vpc.offering=VPC-Angebot entfernen label.remove.vpc=VPC entfernen +label.removing=am Entfernen label.removing.user=Entfernen von Benutzern label.reource.id=Ressourcenkennung label.replace.acl=ACL ersetzen @@ -956,41 +1209,64 @@ label.replace.acl.list=ACL-Liste ersetzen label.required=Erforderlich label.requires.upgrade=Erfordert Aktualisierung label.reserved.ip.range=Reservierter IP-Bereich +label.reserved.system.gateway=Reservierter System-Gateway label.reserved.system.ip=Reservierte System-IP +label.reserved.system.netmask=Reservierte System-Netzmaske label.resetVM=VM zur\u00fccksetzen label.reset.VPN.connection=VPN-Verbindung zur\u00fccksetzen label.resize.new.offering.id=Neues Angebot label.resize.new.size=Neue Gr\u00f6\u00dfe (GB) +label.resize.shrink.ok=Verkleinern OK +label.resource.limit.exceeded=Ressourcenbegrenzung erreicht label.resource.limits=Ressourcenbegrenzungen label.resource.name=Ressourcenname label.resource=Ressource label.resources=Ressourcen label.resource.state=Ressourcenstatus +label.response.timeout.in.sec=Zeit\u00fcberschreitung der Antworkt (in Sek.) label.restart.network=Netzwerk neu starten label.restart.required=Neustart erforderlich label.restart.vpc=VPC neu starten label.restore=Wiederherstellen +label.retry.interval=Wiederversuchs-Interval +label.review=Nachpr\u00fcfung +label.revoke.project.invite=Einladung zur\u00fcckziehen label.role=Rolle label.root.certificate=Root-Zertifikat +label.root.disk.controller=Root-Festplatten-Controller +label.root.disk.offering=Root-Festplattenangebot label.root.disk.size=Root-Festplattengr\u00f6\u00dfe +label.router.vm.scaled.up=Router VM hochskaliert +label.routing.host=Routing Host +label.routing=Routing label.rule.number=Regelnummer label.rules=Regeln label.running.vms=Laufende VMs label.s3.access_key=Zugriffsschl\u00fcssel +label.s3.bucket=Bucket label.s3.connection_timeout=Verbindungszeit\u00fcberschreitung label.s3.endpoint=Endpunkt +label.s3.max_error_retry=Maximale Fehlerwiederholungen label.s3.nfs.path=S3 NFS-Pfad label.s3.nfs.server=S3 NFS-Server label.s3.secret_key=Secret Key label.s3.socket_timeout=Socket-Zeit\u00fcberschreitung label.s3.use_https=HTTPS verwenden +label.saml.enable=Autorisiere SAML SSO +label.saml.entity=Identit\u00e4tsanbieter label.saturday=Samstag label.save.and.continue=Speichern und fortsetzen label.save=Sichern label.saving.processing=Sichern .... +label.scale.up.policy=HOCHSKALIERUNGSRICHTLINIE label.scope=Geltungsbereich label.search=Suche +label.secondary.isolated.vlan.id=Sekund\u00e4re isolierte VLAN ID +label.secondary.staging.store.details=Sekund\u00e4rer Staging Store Details +label.secondary.staging.store=Sekund\u00e4rer Staging Store +label.secondary.storage.count=Sekund\u00e4respeicher-Pools label.secondary.storage.details=Sekund\u00e4rspeicherdetails +label.secondary.storage.limits=Sekund\u00e4rspeicherbegrenzungen (GiB) label.secondary.storage=Sekund\u00e4rspeicher label.secondary.storage.vm=Sekund\u00e4rspeicher-VM label.secondary.used=Genutzter Sekund\u00e4rspeicher @@ -1003,12 +1279,15 @@ label.select.a.template=Vorlage ausw\u00e4hlen label.select=Ausw\u00e4hlen label.select.a.zone=Zone ausw\u00e4hlen label.select.instance=Instanz ausw\u00e4hlen +label.select.instance.to.attach.volume.to=Instanz w\u00e4hlen an der das Volume angef\u00fcgt wird label.select.iso.or.template=ISO oder Vorlage ausw\u00e4hlen label.select.offering=Angebot ausw\u00e4hlen label.select.project=Projekt ausw\u00e4hlen label.select.region=Region ausw\u00e4hlen label.select.template=Vorlage ausw\u00e4hlen +label.select.tier=Ebene ausw\u00e4hlen label.select-view=Ansicht ausw\u00e4hlen +label.select.vm.for.static.nat=VM f\u00fcr statisches NAT ausw\u00e4hlen label.sent=Versendet label.server=Server label.service.capabilities=Dienstf\u00e4higkeiten @@ -1026,29 +1305,43 @@ label.shared=Gemeinsame label.SharedMountPoint=Geteilter Einh\u00e4ngepunkt label.show.advanced.settings=Erweiterte Einstellungen anzeigen label.show.ingress.rule=Zeige Regeln, die den Zutritt steuern +label.shutdown.provider=Herunterfahrungs-Anbieter +label.site.to.site.VPN=Site-to-site VPN label.size=Gr\u00f6\u00dfe +label.skip.guide=Ich habe CloudStack bereits vorher benutzt, diese Hilfe \u00fcberspringen label.smb.domain=SMB-Dom\u00e4ne label.smb.password=SMB-Passwort label.smb.username=SMB-Benutzername label.snapshot.limits=Schnappschuss Grenzen label.snapshot.name=Schnappschuss Name +label.snapshot.schedule=Wiederkehrende Schnappsch\u00fcsse einrichten label.snapshot=Schnappschuss label.snapshots=Schnappsch\u00fcsse label.snapshot.s=Schnappschuss (Schnappsch\u00fcsse) +label.SNMP.community=SNMP Community label.SNMP.port=SNMP-Port label.sockets=CPU-Sockets +label.source.ip.address=Quell IP-Adresse +label.source.nat=Source NAT +label.source.nat.supported=SourceNAT unterst\u00fctzt +label.source.port=Port der Quelle label.specify.IP.ranges=IP-Bereiche angeben label.specify.vlan=VLAN angeben label.specify.vxlan=VXLAN angeben +label.SR.name=SR Name-Bezeichnung label.srx.details=SRX-Details label.srx=SRX label.start.IP=Start-IP label.start.lb.vm=LB-VM starten label.start.port=Startport label.start.reserved.system.IP=Reservierte System-IP starten +label.start.vlan=Start VLAN label.start.vxlan=VXLAN starten label.state=Status +label.static.nat.enabled=Statisches NAT eingeschaltet label.static.nat=Statische NAT +label.static.nat.to=Statisches NAT nach +label.static.nat.vm.details=Statisches NAT VM Details label.statistics=Statistiken label.status=Status label.step.1=Schritt 1 @@ -1056,34 +1349,51 @@ label.step.1.title=Schritt 1\: W\u00e4hlen Sie eine Vorlage aus label.step.2=Schritt 2 label.step.2.title=Schritt 2\: Dienstangebot label.step.3=Schritt 3 +label.step.3.title=Schritt 3\: W\u00e4hlen Sie ein Festplattenangebot aus label.step.4=Schritt 4 label.step.4.title=Schritt 4\: Netzwerk label.step.5=Schritt 5 +label.step.5.title=Schritt 5\: \u00dcberpr\u00fcfung +label.stickiness.method=Stickness-Methode +label.stickiness=Stickiness label.sticky.cookie-name=Cookiename label.sticky.domain=Domain label.sticky.expire=L\u00e4uft ab +label.sticky.holdtime=Haltezeit label.sticky.indirect=Indirekt label.sticky.length=L\u00e4nge label.sticky.mode=Modus +label.sticky.name=Sticky-Name label.sticky.nocache=Kein Cache +label.sticky.postonly=nur Post label.sticky.prefix=Pr\u00e4fix +label.sticky.request-learn=Verlange zu lernen label.sticky.tablesize=Tabellengr\u00f6\u00dfe label.stop.lb.vm=LB-VM stoppen label.stopped.vms=Gestoppte VMs label.stop=Stopp +label.storage.pool=Speicher-Pool label.storage=Speicherung label.storage.tags=Datenspeicher-Markierung label.storage.traffic=Datenspeicherverkehr label.storage.type=Speichertyp +label.subdomain.access=Subdomain Zugriff label.submitted.by=[Eingereicht von\: ] label.submit=\u00dcberreichen label.succeeded=Erfolgreich label.sunday=Sonntag +label.super.cidr.for.guest.networks=Super CIDR f\u00fcr Gast-Netzwerke label.supported.services=Unterst\u00fctzte Dienste +label.supported.source.NAT.type=Unterst\u00fctzter Source-NAT-Typ +label.supportsstrechedl2subnet=Unters\u00fctzt Streched L2 Subnet +label.suspend.project=Projekt suspendieren +label.switch.type=Switch Typ label.system.capacity=Systemkapazit\u00e4t +label.system.offering.for.router=Systemangebot f\u00fcr Router label.system.offering=Systemangebot label.system.service.offering=System-Service-Angebot label.system.vm.details=System-VM-Details +label.system.vm.scaled.up=System-VM hochskaliert label.system.vms=System VMs label.system.vm=System-VM label.system.vm.type=System VM Typ @@ -1097,11 +1407,14 @@ label.task.completed=Aufgabe fertiggestellt label.template.limits=Vorlagen Grenzen label.template=Vorlage label.TFTP.dir=TFTP-Verzeichnis +label.tftp.root.directory=Tftp root-Verzeichnis label.theme.default=Motiv-Standardeinstellung label.theme.grey=personalisiertes - grau label.theme.lightblue=personalisiertes - hellblau label.threshold=Schwellenwert label.thursday=Donnerstag +label.tier.details=Ebenendetails +label.tier=Ebene label.timeout.in.second = Zeit\u00fcberschreitung (Sekunden) label.timeout=Zeit\u00fcberschreitung label.time=Zeit @@ -1112,9 +1425,13 @@ label.total.cpu=Gesamtanzahl CPU label.total.CPU=Gesamtanzahl CPU label.total.hosts=Gesamtanzahl Hosts label.total.memory=Gesamter Speicher -label.total.of.vm=Insgesamte VMs +label.total.of.ip=Gesamtzahl der IP-Adressen +label.total.of.vm=Gesamtanzahl VMs label.total.storage=Gesamter Speicher -label.total.vms=Insgesamte VMs +label.total.virtual.routers=Total an virtuellen Routern +label.total.virtual.routers.upgrade=Total an virtuellen Routern, die Aktuallisierung ben\u00f6tigen +label.total.vms=Gesamtanzahl VMs +label.traffic.label=Datenverkehrsbezeichnung label.traffic.types=Datenverkehrstypen label.traffic.type=Traffic Typ label.tuesday=Dienstag @@ -1123,6 +1440,7 @@ label.type.lower=Typ label.type=Typ label.ucs=UCS label.unavailable=nichtverf\u00fcgbar +label.unhealthy.threshold=Schwellwert ungesund label.unlimited=uneingeschr\u00e4nkt label.untagged=Unmarkiert label.update.project.resources=Projektressourcen aktualisieren @@ -1130,12 +1448,14 @@ label.update.ssl.cert= SSL-Zertifikat label.update.ssl= SSL-Zertifikat label.updating=Aktualisierung label.upgrade.required=Aktualisierung ist erforderlich +label.upgrade.router.newer.template=Router upgraden um neuere Vorlage zu verwenden label.upload=Hochladen label.upload.volume=Volumen hochladen label.url=URL label.usage.interface=Auslastungsoberfl\u00e4che +label.usage.sanity.result=Usage Sanity Resultat label.usage.server=Auslastungsserver -label.used=Gebraucht +label.used=Verwendet label.user=Benutzer label.user.data=Benutzerdaten label.username=Benutzername @@ -1145,6 +1465,7 @@ label.user.vm=Benutzer-VM label.use.vm.ips=VM-IPs verwenden label.use.vm.ip=VM-IP verwenden\: label.value=Wert +label.vcdcname=vCenter RZ-Name label.vcenter.cluster=vCenter Cluster label.vcenter.datacenter=vCenter Rechenzentrum label.vcenter.datastore=vCenter Datenspeicher @@ -1163,9 +1484,19 @@ label.vgpu.video.ram=Video RAM label.view.all=Alle ansehen label.view=Ansicht label.view.console=Konsole ansehen +label.viewing=Ansehen label.view.more=Ansichtsmodus label.view.secondary.ips=Sekund\u00e4re IPs ansehen +label.virtual.appliance.details=Virtuelle Appliance Details +label.virtual.appliances=Virtuelle Appliances +label.virtual.appliance=Virtuelle Applicance +label.virtual.machines=Virtuelle Maschinen +label.virtual.networking=Virtuelle Netzwerkverbindung label.virtual.network=Virtuelles Netzwerk +label.virtual.routers.group.account=Virtuelle Router gruppiert nach Benutzerkonto +label.virtual.routers.group.cluster=Virtuelle Router gruppiert nach Cluster +label.virtual.routers.group.pod=Virtuelle Router gruppiert nach Pod +label.virtual.routers.group.zone=Virtuelle Router gruppiert nach Zone label.virtual.routers=Virtuelle Router label.virtual.router=Virtueller Router label.vlan.id=VLAN ID @@ -1186,6 +1517,8 @@ label.vm.ip=VM IP-Adresse label.vm.name=VM-Name label.vm.password=Passwort der VM ist label.vm.reboot=Neustart +label.VMs.in.tier=VMs in Ebene +label.vmsnapshot.current=ist aktuell label.vmsnapshot.memory=Schnappschussspeicher label.vmsnapshot.parentname=\u00dcbergeordnet label.vmsnapshot.type=Typ @@ -1196,10 +1529,13 @@ label.vm.stop=Stopp label.vms=VMs label.vmware.datacenter.id=VMware-Rechenzentrumskennung label.vmware.datacenter.name=VMware-Rechenzentrumsname +label.vmware.datacenter.vcenter=VMware Rechenzentrum-vCenter +label.vmware.traffic.label=VMware Datenverkehrs-Bezeichnung label.vnet.id=VLAN ID label.vnet=VLAN label.vnmc.devices=VNMC-Ger\u00e4te label.vnmc=VNMC +label.volatile=Verg\u00e4nglich label.volgroup=Volumengruppe label.volume.details=Volumendetails label.volume.limits=Volume Grenzen @@ -1213,14 +1549,18 @@ label.VPC.limits=VPC-Begrenzungen label.vpc.offering.details=Details des VPC-Angebots label.vpc.offering=VPC-Angebot label.VPC.router.details=VPC-Routerdetails +label.vpc.supportsregionlevelvpc=Unterst\u00fctzt Reigion Level VPC label.vpc.virtual.router=VPC Virtueller Router label.vpc=VPC label.VPN.connection=VPN-Verbindung +label.vpn.customer.gateway=VPN Customer Gateway +label.VPN.customer.gateway=VPN Customer Gateway label.VPN.gateway=VPN-Gateway label.vpn=VPN label.vsmctrlvlanid=Steuerungs-VLAN-Kennung label.vsmpktvlanid=Paket-VLAN-Kennung label.vsmstoragevlanid=Speicher-VLAN-Kennung +label.vsphere.managed=vSphere verwaltet label.vswitch.name=vSwitch-Name label.vSwitch.type=vSwitch-Typ label.vxlan.id=VXLAN ID @@ -1236,18 +1576,29 @@ label.welcome=Willkommen label.what.is.cloudstack=Was ist CloudStack&\#8482? label.xenserver.tools.version.61.plus=Originale XS-Version ist 6.1\\+ label.Xenserver.Tools.Version61plus=Originale XS-Version ist 6.1\\+ +label.xenserver.traffic.label=XenServer Datenverkehrs-Bezeichnung label.yes=Ja +label.zone.dedicated=Zone dediziert label.zone.details=Zonendetails label.zone.id=Zone ID label.zone.lower=Zone label.zone.name=Zonenname label.zone.step.1.title=Schritt 1\: W\u00e4hlen Sie ein Netzwerk aus label.zone.step.2.title=Schritt 2\: F\u00fcgen Sie eine Zone hinzu +label.zone.step.3.title=Schritt 3\: Pod hinzuf\u00fcgen label.zone.step.4.title=Schritt 4\: F\u00fcgen Sie einen IP-Bereich hinzu label.zones=Zone label.zone.type=Zonentyp label.zone.wide=Zonenweit +label.zoneWizard.trafficType.guest=Gast\: Datenverkehr zwischen den virtuellen Maschinen der Endbenutzer +label.zoneWizard.trafficType.management=Management\: Datenverkehr zwischen den CloudStack internen Ressourcen, inklusive aller Komponenten, die mit dem Management Server kommunizieren, wie Hosts und CloudStack System VMs +label.zoneWizard.trafficType.public=\u00d6ffentlich\: Datenverkehr zwischen dem Internet und virtuellen Maschinen in der Cloud. +label.zoneWizard.trafficType.storage=Speicherung\: Datenverkehr zwischen Haupt- und Sekund\u00e4rspeicherserver, wie VM-Vorlagen und Schnappsch\u00fcsse. label.zone=Zone +managed.state=Verwalteter Status +message.acquire.ip.nic=Bitte best\u00e4tigen Sie, dass Sie eine neue, zweite IP-Adresse f\u00fcr dieses Netzwerk-Interface ben\u00f6tigen.
HINWEIS\: Sie m\u00fcssen diese neue zweite IP-Adresse manuell in der virtuellen Maschine hinzuf\u00fcgen. +message.acquire.new.ip=Bitte best\u00e4tigen Sie, dass sie eine neue IP Adresse f\u00fcr dieses Netzwerk haben m\u00f6chten. +message.acquire.new.ip.vpc=Bitte best\u00e4tigen Sie, dass sie eine neue IP Adresse f\u00fcr diesen VPC ben\u00f6tigen. message.acquire.public.ip=Bitte w\u00e4hlen Sie eine Zone, von der Sie Ihre neue IP erlangen m\u00f6chten. message.action.cancel.maintenance=Ihr Host ist erfolgreich f\u00fcr die Wartung abgebrochen. Dieser Prozess kann ein paar Minuten dauern. message.action.cancel.maintenance.mode=Bitte best\u00e4tigen Sie, dass Sie die Wartung abbrechen m\u00f6chten. @@ -1256,16 +1607,22 @@ message.action.change.service.warning.for.router=Ihre Instanz muss zuerst unterb message.action.delete.cluster=Bitte best\u00e4tigen Sie, dass Sie dieses Cluster l\u00f6schen m\u00f6chten. message.action.delete.disk.offering=Bitte best\u00e4tigen Sie, dass Sie dieses Festplatten-Angebot l\u00f6schen m\u00f6chten. message.action.delete.domain=Bitte best\u00e4tigen Sie, dass Sie diese Domain l\u00f6schen m\u00f6chten. +message.action.delete.external.firewall=Bitte best\u00e4tigen Sie, dass Sie die externe Firewall entfernen m\u00f6chten. Warnung\: Wenn Sie planen dieselbe exterene Firewall wieder hinzuzuf\u00fcgen, m\u00fcssen Sie s\u00e4mtliche Nutzungsdaten auf diesem Ger\u00e4t zur\u00fccksetzen +message.action.delete.external.load.balancer=Bitte best\u00e4tigen Sie, dass Sie diesen externen Loadbalancer entfernen m\u00f6chten. Warnung\: Wenn Sie planen denselben exterenen Loadbalancer wieder hinzuzuf\u00fcgen, m\u00fcssen Sie s\u00e4mtliche Nutzungsdaten auf diesem Ger\u00e4t zur\u00fccksetzen message.action.delete.ingress.rule=Bitte best\u00e4tigen Sie, dass Sie diese Zutrittsregel l\u00f6schen wollen. message.action.delete.ISO=Bitte best\u00e4tigen Sie, dass Sie diese ISO l\u00f6schen m\u00f6chten. message.action.delete.ISO.for.all.zones=Die ISO gilt f\u00fcr alle Zonen. Bitte best\u00e4tigen Sie, dass Sie diese aus allen Zonen l\u00f6schen m\u00f6chten. message.action.delete.network=Bitte best\u00e4tigen Sie, dass Sie dieses Netzwerk l\u00f6schen m\u00f6chten. +message.action.delete.nexusVswitch=Bitte best\u00e4tigen Sie, dass sie diesen nexus 1000v l\u00f6schen m\u00f6chten. +message.action.delete.nic=Bitte best\u00e4tigen Sie die L\u00f6schung dieser NIC, da dies auch zur L\u00f6schung des zugeh\u00f6rigen Netzwerks von der VM f\u00fchrt. +message.action.delete.physical.network=Bitte best\u00e4tigen Sie, dass Sie dieses physikalische Netzwerk l\u00f6schen m\u00f6chten message.action.delete.pod=Bitte best\u00e4tigen Sie, dass Sie dieses pod l\u00f6schen m\u00f6chten. message.action.delete.primary.storage=Bitte best\u00e4tigen Sie, dass Sie diese Hauptspeicher l\u00f6schen m\u00f6chten. message.action.delete.secondary.storage=Bitte best\u00e4tigen Sie, dass Sie diesen Sekund\u00e4rspeicher l\u00f6schen m\u00f6chten. message.action.delete.security.group=Bitte best\u00e4tigen Sie, dass Sie diese Sicherheitsgruppe l\u00f6schen m\u00f6chten. message.action.delete.service.offering=Bitte best\u00e4tigen Sie, dass Sie diesen Service-Angebot l\u00f6schen m\u00f6chten. message.action.delete.snapshot=Bitte best\u00e4tigen Sie, dass Sie diesen Schnappschuss l\u00f6schen m\u00f6chten. +message.action.delete.system.service.offering=Bitte best\u00e4tigen Sie, dass Sie dieses Dienstangebot des Systems l\u00f6schen m\u00f6chten message.action.delete.template=Bitte best\u00e4tigen Sie, dass Sie diese Vorlage l\u00f6schen m\u00f6chten. message.action.delete.template.for.all.zones=Die Vorlage wird f\u00fcr alle Zonen genutzt. Bitte best\u00e4tigen Sie, dass Sie diese f\u00fcr alle Zonen l\u00f6schen m\u00f6chten. message.action.delete.volume=Bitte best\u00e4tigen Sie, dass Sie dieses Volume l\u00f6schen m\u00f6chten. @@ -1273,127 +1630,368 @@ message.action.delete.zone=Bitte best\u00e4tigen Sie, dass Sie diese Zone l\u00f message.action.destroy.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz l\u00f6schen m\u00f6chten. message.action.destroy.systemvm=Bitte best\u00e4tigen Sie, dass Sie die System VM zerst\u00f6ren m\u00f6chten. message.action.disable.cluster=Bitte best\u00e4tigen Sie, dass Sie diesen Cluster deaktivieren m\u00f6chten. +message.action.disable.nexusVswitch=Bitte best\u00e4tigen Sie, dass sie diesen nexus 1000v deaktivieren m\u00f6chten. +message.action.disable.physical.network=Bitte best\u00e4tigen Sie, dass Sie dieses physikalische Netzwerk deaktivieren m\u00f6chten. message.action.disable.pod=Bitte best\u00e4tigen Sie, dass Sie diesen Pod deaktivieren m\u00f6chten. message.action.disable.static.NAT=Bitte best\u00e4tigen Sie, dass Sie die statische NAT deaktivieren m\u00f6chten. message.action.disable.zone=Bitte best\u00e4tigen Sie, dass Sie diese Zone deaktivieren m\u00f6chten. message.action.downloading.template=Vorlage wird heruntergeladen. +message.action.download.iso=Bitte best\u00e4tigen Sie, dass Sie dieses ISO herunterladen m\u00f6chten. +message.action.download.template=Bitte best\u00e4tigen Sie, dass Sie dieses Template herunterladen m\u00f6chten. message.action.enable.cluster=Bitte best\u00e4tigen Sie, dass Sie diesen Cluster aktivieren m\u00f6chten. +message.action.enable.maintenance=Ihr Host wurde erfolgreich f\u00fcr die Wartung vorbereitet. Dieser Prozess kann einige Minuten, oder abh\u00e4nig von der jetzigen Anzahl VMs auf diesem Host auch l\u00e4nger, in Anspruch nehmen. +message.action.enable.nexusVswitch=Bitte best\u00e4tigen Sie, dass sie diesen nexus 1000v aktivieren m\u00f6chten. +message.action.enable.physical.network=Bitte best\u00e4tigen Sie, dass Sie dieses physikalische Netzwerk aktivieren m\u00f6chten. message.action.enable.pod=Bitte best\u00e4tigen Sie, dass Sie diesen Pod aktivieren m\u00f6chten. message.action.enable.zone=Bitte best\u00e4tigen Sie, dass Sie diese Zone aktivieren m\u00f6chten. +message.action.expunge.instance=Bitte best\u00e4tigen Sie, dasss Sie diese Instanz unwiderbringlich l\u00f6schen m\u00f6chten. +message.action.force.reconnect=Ihr Host wurde erfolgreich gewzungen wiederzuverbinden. Dieser Prozess kann einige Minuten beanspruchen. +message.action.host.enable.maintenance.mode=Die Aktivierung des Wartungsmodus verursacht eine Livemigration aller laufenden Instanzen auf diesem Host zu einem anderen verf\u00fcgbaren Host. message.action.instance.reset.password=Bitte best\u00e4tigen Sie, dass Sie das ROOT Passwort f\u00fcr diese virtuelle Maschine \u00e4ndern m\u00f6chten. message.action.manage.cluster=Bitte best\u00e4tigen Sie, dass das Cluster bearbeitet werden soll. +message.action.primarystorage.enable.maintenance.mode=Warnung\: den Hauptspeicher in den Wartungsmodus zu stellen, wird alle VMs stoppen, welche noch Volumen auf demjenigen haben. M\u00f6chten Sie fortfahren? message.action.reboot.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz neustarten m\u00f6chten. +message.action.reboot.router=Alle angebotenen Dienste dieses Routers werden unterbrochen. Bitte best\u00e4tigen Sie, dass Sie den Router neu starten m\u00f6chten. message.action.reboot.systemvm=Bitte best\u00e4tigen Sie, dass Sie diese System VM neustarten m\u00f6chten. +message.action.release.ip=Bitte best\u00e4tigen Sie, dass Sie diese IP freigeben m\u00f6chten. +message.action.remove.host=Bitte best\u00e4tigen Sie, dass Sie diesen Host entfernen m\u00f6chten. message.action.reset.password.off=Ihre Instanz untersch\u00fctzt derzeitig nicht dieses Feature. message.action.reset.password.warning=Ihre Instanz muss zuerst unterbrochen werden, bevor Sie Ihr derzeitiges Passwort \u00e4ndern k\u00f6nnen. message.action.restore.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz wiederherstellen m\u00f6chten. +message.action.revert.snapshot=Bitte best\u00e4tigen Sie, dass Sie das dazugeh\u00f6rige Volumen zu diesen Schnappschuss zur\u00fccksetzten m\u00f6chten. message.action.start.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz starten m\u00f6chten. message.action.start.router=Bitte best\u00e4tigen Sie, dass Sie diesen Router starten m\u00f6chten. message.action.start.systemvm=Bitte best\u00e4tigen Sie, dass Sie diese System VM starten m\u00f6chten. message.action.stop.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz anhalten m\u00f6chten. +message.action.stop.router=Alle von diesem Router angebotenen Dienste werden unterbrochen. Bitte best\u00e4tigen Sie, dass Sie diesen Router stoppen m\u00f6chten. message.action.stop.systemvm=Bitte best\u00e4tigen Sie, dass Sie diese System VM anhalten m\u00f6chten. +message.action.take.snapshot=Bitte best\u00e4tigen Sie, dass Sie einen Schnappschuss von diesem Volumen sichern m\u00f6chten. message.action.unmanage.cluster=Bitte best\u00e4tigen Sie, dass Sie das Cluster vernachl\u00e4ssigen m\u00f6chten. +message.action.vmsnapshot.delete=Bitte best\u00e4tigen Sie, dass Sie diesen VM Schnappschuss l\u00f6schen wollen. +message.action.vmsnapshot.revert=VM-Schnappschuss zur\u00fccksetzen +message.activate.project=Sind Sie sicher, dass Sie dieses Projekt aktivieren wollen? +message.add.cluster=Hinzuf\u00fcgen eines vom Hypervisor verwaltender Clusters f\u00fcr Zone , Pod +message.add.cluster.zone=Ein Hypervisor verwalteter Cluster f\u00fcr Zone hinzuf\u00fcgen +message.add.disk.offering=Bitte spezifizieren Sie die folgenden Parameter, um ein neues Disk Angebot hinzuzuf\u00fcgen. +message.add.domain=Bitte spezifizieren Sie die Subdomain, die Sie unter dieser Domain erstellen wollen. message.add.firewall=Eine Firewall zur Zone hinzuf\u00fcgen +message.add.guest.network=Bitte best\u00e4tigen Sie, dass Sie ein Gast-Netzwerk hinzuf\u00fcgen m\u00f6chten. message.add.host=Bitte spezifizieren Sie die folgenden Parameter, um einen neuen Host hinzuzuf\u00fcgen. message.adding.host=Host wird hinzugef\u00fcgt +message.adding.Netscaler.device=Hinzuf\u00fcgen eines Netscaler Ger\u00e4tes +message.adding.Netscaler.provider=Hinzuf\u00fcgen eines Netscaler Provider +message.add.ip.range.direct.network=Einen IP-Bereich zum direkten Netzwerk in Zone hinzuf\u00fcgen +message.add.ip.range=IP-Bereich zu \u00f6ffentlichem Netzwerk in Zone hinzuf\u00fcgen +message.add.ip.range.to.pod=

Einen IP-Bereich zum Pod hinzuf\u00fcgen

message.additional.networks.desc=Bitte w\u00e4hlen Sie ein oder mehrere Netzwerke aus, an die Ihre virtuelle Instanz verbunden wird. message.add.load.balancer=Einen Lastverteiler zur Zone hinzuf\u00fcgen +message.add.load.balancer.under.ip=Die Lasterverteiler-Regel wurde hinzugef\u00fcgt zu IP\: +message.add.network=Eine neues Netzwerk f\u00fcr Zone hinzuf\u00fcgen\: +message.add.new.gateway.to.vpc=Bitte spezifizieren Sie Informationen um ein neues Gateway f\u00fcr dieses VPC hinzuzuf\u00fcgen. +message.add.pod.during.zone.creation=Jede Zone muss einen oder mehrere Pods enthalten, und wir werden nun den ersten Pod hinzuf\u00fcgen. Ein Pod enth\u00e4lt Hosts und Hauptspeicher der Server, welche in einem sp\u00e4teren Schritt hinzugef\u00fcgt werden. Zuerst konfigurieren Sie den Bereich der reservierten IP-Adressen f\u00fcr CloudStacks internen Verwaltungsdatenverkehr. Der reservierte IP-Bereich muss f\u00fcr jede Zone in der Cloud eindeutig sein. +message.add.pod=Ein neuer Pod f\u00fcr Zone hinzuf\u00fcgen message.add.primary=Bitte spezifizieren Sie die folgenden Parameter, um einen neuen Hauptspeicher hinzuzuf\u00fcgen +message.add.primary.storage=Bitte f\u00fcgen Sie einen neuen prim\u00e4ren Speicher f\u00fcr Zone , und Pod hinzu. +message.add.region=Bitte geben Sie die ben\u00f6tigten Informationen ein um eine neue Region hinzuzuf\u00fcgen +message.add.secondary.storage=Bitte f\u00fcgen Sie einen neuen Speicher f\u00fcr die Zone hinzu. +message.add.service.offering=Bitte spezifizieren Sie die folgenden Parameter, um ein neues Compute Angebot hinzuzuf\u00fcgen. +message.add.system.service.offering=Bitte geben Sie die folgenden Daten ein, um ein neues Dienst Angebot des Systems hinzuzuf\u00fcgen. message.add.template=Bitte geben Sie die folgende Daten ein, um Ihre neue Vorlage zu erstellen message.add.volume=Bitte geben Sie die folgende Daten ein, um ein neues Volume hinzuzuf\u00fcgen. +message.add.VPN.gateway=Bitte best\u00e4tigen Sie, dass sie ein VPN Gateway hinzuf\u00fcgen wollen. +message.admin.guide.read=F\u00fcr VMware basierte VMs, lesen Sie bitte den Abschnitt \u00fcber das dynamische Skalieren in dem Administrations-Leitfaden bevor Sie hochskalieren. M\u00f6chten Sie fortfahren? +message.advanced.mode.desc=W\u00e4hlen Sie dieses Netzwerkmodell aus, wenn Sie VLAN-Unterst\u00fctzung aktivieren m\u00f6chten. Dieses Netzwerkmodell bietet die gr\u00f6\u00dfte Flexibilit\u00e4t um Administratoren kundenspezifische Netzwerkangebote zu erm\u00f6glichen, wie das Anbieten von Firewall, VPN oder Lastverteilerunterst\u00fctzung wie auch aktivieren direkten gegen virtuellen Netzwerkverkehr. +message.advanced.security.group=W\u00e4hlen Sie dies, wenn Sie Sicherheits Gruppen verwenden wollen, um eine Isolation f\u00fcr Gast VMs anzubieten +message.advanced.virtual=W\u00e4hlen Sie dies, wenn Sie Zonen-weite VLANs verwenden wollen, um eine Isolation f\u00fcr Gast VMs anzubieten. +message.after.enable.s3=S3-gest\u00fctzter zweiter Speicher konfiguriert. Hinweis\: Wenn Sie dieses Seite verlassen, k\u00f6nnen Sie S3 nicht mehr umkonfigurieren. +message.after.enable.swift=Swift ist konfiguriert. Bemerkung\: Wenn Sie diese Seite verlassen, werden Sie nicht mehr in der Lage sein Swift um zu konfigurieren. message.alert.state.detected=Alarmstatus erkannt message.allow.vpn.access=Bitte geben Sie einen Benutzernamen und ein Kennwort f\u00fcr den Benutzer ein, f\u00fcr den Sie VPN-Zugang m\u00f6chten. message.apply.snapshot.policy=Sie haben Ihre derzeitige Schnappschuss Richtlinie erfolgreich aktualisiert. message.attach.iso.confirm=Bitte best\u00e4tigen Sie, dass sie die ISO zu Ihrer virtuellen Instanz hinzuf\u00fcgen m\u00f6chten. +message.attach.volume=Bitte f\u00fcllen Sie die folgenden Daten aus um neue Volumen anzubinden. Falls Sie das Festplattenvolumen zu einer Windows-basierten virtuellen Maschine anbinden, m\u00fcssen Sie die Instanz neu starten um die angebundene Festplatte verwenden zu k\u00f6nnen. +message.basic.mode.desc=W\u00e4hlen Sie dieses Netzwerk-Modell falls Sie *keine* VLAN-Unterst\u00fctzung aktivieren m\u00f6chten. Allen virtuellen Instanzen unter diesem Netzwerk-Modell erhalten eine IP direkt von Netzwerk, Sicherheitsgruppen werden verwendet um Sicherheit und Trennung zu gew\u00e4hrleisten. message.change.offering.confirm=Bitte best\u00e4tigen Sie, dass Sie das Service-Angebot dieser virtuellen Instanz \u00e4ndern m\u00f6chten. message.change.password=Bitte \u00e4ndern Sie Ihre Passwort. +message.cluster.dedicated=Cluster dediziert +message.cluster.dedication.released=Cluster-Dedizierung aufgehoben +message.configure.all.traffic.types=Sie haben mehrere physikalische Netzwerke; bitte konfigurieren Sie f\u00fcr jeden Datenverkehrstyp Bezeichnungen indem Sie auf den Bearbeiten-Knopf klicken +message.configure.ldap=Bitte best\u00e4tigen Sie, dass Sie LDAP konfigurieren m\u00f6chten. message.configuring.guest.traffic=Gast-Datenverkehr wird konfiguriert message.configuring.physical.networks=Physikalische Netzwerke werden konfiguriert message.configuring.public.traffic=\u00d6ffentlicher Datenverkehr wird konfiguriert message.configuring.storage.traffic=Speicherungsdatenverkehr wird konfiguriert +message.confirm.action.force.reconnect=Bitte best\u00e4tigen Sie, dass Sie f\u00fcr diesen Host das Wiederverbinden erzwingen m\u00f6chten. +message.confirm.add.vnmc.provider=Bitte best\u00e4tigen Sie, dass Sie den VNMC-Provider hinzuf\u00fcgen m\u00f6chten. +message.confirm.archive.alert=Bitte best\u00e4tigen Sie, dass Sie diesen Alarm archivieren m\u00f6chten. +message.confirm.archive.event=Bitte best\u00e4tigen Sie, dass Sie dieses Ereignis archivieren m\u00f6chten. +message.confirm.archive.selected.alerts=Bitte best\u00e4tigen Sie, dass Sie die ausgew\u00e4hlten Alarme archivieren m\u00f6chten +message.confirm.archive.selected.events=Bitte best\u00e4tigen Sie, dass Sie die ausgew\u00e4hlten Vorg\u00e4nge archivieren m\u00f6chten +message.confirm.attach.disk=Sind Sie sicher, dass Sie eine Platte hinzuf\u00fcgen m\u00f6chten? message.confirm.create.volume=Sind Sie sicher, dass Sie ein Volumen erstellen m\u00f6chten? +message.confirm.current.guest.CIDR.unchanged=M\u00f6chten Sie den aktuellen Gastnetzwerk CIDR unver\u00e4ndert lassen? +message.confirm.dedicate.cluster.domain.account=M\u00f6chten Sie diesen Cluster wirklich f\u00fcr diese Domain / dieses Benutzerkonto dedizieren? +message.confirm.dedicate.host.domain.account=M\u00f6chten Sie diesen Host wirklich f\u00fcr diese Domain / dieses Benutzerkonto dedizieren? +message.confirm.dedicate.pod.domain.account=M\u00f6chten Sie diesen Pod wirklich f\u00fcr diese Domain / dieses Benutzerkonto dedizieren? +message.confirm.dedicate.zone=M\u00f6chten Sie diese Zone wirklich f\u00fcr diese Domain / dieses Benutzerkonto dedizieren? +message.confirm.delete.acl.list=Sind Sie sicher, dass Sie diese ACL-Liste l\u00f6schen m\u00f6chten? +message.confirm.delete.alert=Sind Sie sicher, dass Sie diesen Alarm l\u00f6schen m\u00f6chten? +message.confirm.delete.BrocadeVcs=Bitte best\u00e4tigen Sie, dass Sie Brocade Vcs Switch l\u00f6schen m\u00f6chten +message.confirm.delete.ciscoASA1000v=Bitte best\u00e4tigen Sie, dass Sie CiscoASA1000v l\u00f6schen m\u00f6chten +message.confirm.delete.ciscovnmc.resource=Bitte best\u00e4tigen Sie, dass Sie die CiscoVNMC Ressource l\u00f6schen m\u00f6chten +message.confirm.delete.F5=Bitte best\u00e4tigen Sie, dass Sie F5 l\u00f6schen m\u00f6chten +message.confirm.delete.internal.lb=Bitte best\u00e4tigen Sie, dass Sie den internen Loadbalancer l\u00f6schen m\u00f6chten +message.confirm.delete.NetScaler=Bitte best\u00e4tigen Sie, dass Sie NetScaler l\u00f6schen m\u00f6chten +message.confirm.delete.NuageVsp=Bitte best\u00e4tigen Sie, dass Sie das Nuage Virtulazierte Dienste Verzeichnis l\u00f6schen m\u00f6chten +message.confirm.delete.PA=Bitte best\u00e4tigen Sie, dass Sie Palo Alto l\u00f6schen m\u00f6chten +message.confirm.delete.secondary.staging.store=Bitte best\u00e4tigen Sie, dass Sie diesen Sekund\u00e4r-Staging-Store l\u00f6schen m\u00f6chten. +message.confirm.delete.SRX=Bitte best\u00e4tigen Sie, dass Sie SRX l\u00f6schen m\u00f6chten +message.confirm.delete.ucs.manager=Bitte best\u00e4tigen Sie, dass Sie UCS-Manager l\u00f6schen m\u00f6chten +message.confirm.destroy.router=Bitte best\u00e4tigen Sie, dass Sie diesen Router zerst\u00f6ren m\u00f6chten +message.confirm.disable.host=Bitte best\u00e4tigen Sie, dass Sie den Host deaktivieren m\u00f6chten +message.confirm.disable.network.offering=Sind Sie sicher, dass Sie dieses Netzwerkangebot deaktivieren m\u00f6chten? +message.confirm.disable.provider=Bitte best\u00e4tigen Sie, dass Sie diesen Anbieter l\u00f6schen m\u00f6chten +message.confirm.disable.vnmc.provider=Bitte best\u00e4tigen Sie, dass Sie den VNMC-Provider deaktivieren m\u00f6chten. +message.confirm.disable.vpc.offering=Sind Sie sicher, dass Sie dieses VPC-Angebot deaktivieren m\u00f6chten? +message.confirm.enable.host=Bitte best\u00e4tigen Sie, dass Sie den Host aktivieren m\u00f6chten +message.confirm.enable.network.offering=Sind Sie sicher, dass Sie dieses Netzwerkangebot aktivieren m\u00f6chten? +message.confirm.enable.provider=Bitte best\u00e4tigen Sie, dass Sie diesen Anbieter hinzuf\u00fcgen m\u00f6chten +message.confirm.enable.vnmc.provider=Bitte best\u00e4tigen Sie, dass Sie den VNMC-Provider aktivieren m\u00f6chten. +message.confirm.enable.vpc.offering=Sind Sie sicher, dass Sie dieses VPC-Angebot aktivieren m\u00f6chten? +message.confirm.join.project=Bitte best\u00e4tigen Sie, dass Sie diesem Projekt beitreten m\u00f6chten message.confirm.migrate.volume=M\u00f6chten Sie dieses Volumen migrieren? +message.confirm.refresh.blades=Bitte best\u00e4tigen Sie, dass Sie die Blades aktuallisieren m\u00f6chten. +message.confirm.release.dedicated.cluster=M\u00f6chten Sie diesen dedizierten Cluster freigeben? +message.confirm.release.dedicated.host=M\u00f6chten Sie diesen dedizierten Host freigeben? +message.confirm.release.dedicated.pod=M\u00f6chten Sie diesen dedizierten Pod freigeben? +message.confirm.release.dedicated.zone=M\u00f6chten Sie diese dedizierte Zone freigeben? +message.confirm.release.dedicate.vlan.range=Bitte best\u00e4tigen Sie, dass Sie ein dedizierten VLAN Bereich freigeben m\u00f6chten +message.confirm.remove.event=Sind Sie sicher, dass Sie dieses Ereignis entfernen m\u00f6chten? +message.confirm.remove.IP.range=Bitte best\u00e4tigen Sie, dass sie diesen IP Adressbereich l\u00f6schen m\u00f6chten +message.confirm.remove.load.balancer=Bitte best\u00e4tigen Sie, dass Sie die VM vom Lastverteiler zur\u00fcckziehen m\u00f6chten +message.confirm.remove.network.offering=Sind Sie sicher, dass Sie dieses Netzwerkangebot entfernen m\u00f6chten? +message.confirm.remove.selected.alerts=Bitte best\u00e4tigen Sie, dass Sie die ausgew\u00e4hlten Alarme entfernen m\u00f6chten +message.confirm.remove.selected.events=Bitte best\u00e4tigen Sie, dass Sie die ausgew\u00e4hlten Ereignisse entfernen m\u00f6chten +message.confirm.remove.vmware.datacenter=Bitte best\u00e4tigen Sie, dass Sie das VMware Rechenzentrum entfernen m\u00f6chten +message.confirm.remove.vpc.offering=Sind Sie sicher, dass Sie dieses VPC-Angebot entfernen m\u00f6chten? +message.confirm.replace.acl.new.one=M\u00f6chten Sie die ACL durch die neue ersetzen? +message.confirm.scale.up.router.vm=M\u00f6chten Sie die Router-VM wirklich hochskalieren? +message.confirm.scale.up.system.vm=M\u00f6chten Sie die System-VM wirklich hochskalieren? +message.confirm.shutdown.provider=Bitte best\u00e4tigen Sie, dass sie diesen Anbieter herunterfahren m\u00f6chten. +message.confirm.start.lb.vm=Bitte best\u00e4tigen Sie, dass Sie die LB VM starten m\u00f6chten +message.confirm.stop.lb.vm=Bitte best\u00e4tigen Sie, dass Sie die LB VM stoppen m\u00f6chten +message.confirm.upgrade.router.newer.template=Bitte best\u00e4tigen Sie, dass Sie den Router aktuallisieren m\u00f6chten, so dass er die neue Vorlage verwendet. +message.confirm.upgrade.routers.account.newtemplate=Bitte best\u00e4tigen Sie, dass Sie alle Router zu dieser Benutzerkonto aktuallisieren m\u00f6chten, so dass sie die neue Vorlage verwenden. +message.confirm.upgrade.routers.cluster.newtemplate=Bitte best\u00e4tigen Sie, dass Sie alle Router in diesem Cluster aktuallisieren m\u00f6chten, so dass sie die neue Vorlage verwenden. +message.confirm.upgrade.routers.newtemplate=Bitte best\u00e4tigen Sie, dass Sie alle Router in dieser Zone aktuallisieren m\u00f6chten, so dass sie die neue Vorlage verwenden. +message.confirm.upgrade.routers.pod.newtemplate=Bitte best\u00e4tigen Sie, dass Sie alle Router in diesem Pod aktuallisieren m\u00f6chten, so dass sie die neue Vorlage verwenden. message.copy.iso.confirm=Bitte best\u00e4tigen Sie, dass Sie Ihre ISO kopieren m\u00f6chten und zwar nach +message.copy.template.confirm=Sind Sie sicher, dass Sie die Vorlage kopieren m\u00f6chten? +message.copy.template=Kopiere Vorlage XXX von Zone nach message.create.template=Sind Sie sicher, dass Sie eine Vorlage erstellen m\u00f6chten? message.create.template.vm=VM aus Vorlage erstellen +message.create.template.volume=Bitte definieren Sie die folgenden Informationen bevor Sie eine Vorlage f\u00fcr Ihr Festplattenvolumen erstellen\: . Das Erstellen der Vorlage kann einige Minuten oder abh\u00e4ngig von der Volumengr\u00f6\u00dfe auch l\u00e4nger dauern. message.creating.cluster=Cluster wird erstellt message.creating.guest.network=Gastnetzwerk wird erstellt message.creating.physical.networks=Physikalische Netzwerke werden erstellt +message.creating.pod=Erstelle einen Pod message.creating.primary.storage=Hauptspeicher wird erstellt message.creating.secondary.storage=Sekund\u00e4rspeicher wird erstellt +message.creating.systemVM=Erstellung von System VMs (das kann eine Weile dauern) message.creating.zone=Zone wird erstellt +message.decline.invitation=Sind Sie sicher, dass Sie diese Einladung zu dem Projekt ablehnen m\u00f6chten? +message.dedicated.zone.released=Zonen-Dedizierung freigegeben +message.dedicate.zone=Dediziere Zone message.delete.account=Bitte best\u00e4tigen Sie, dass Sie dieses Benutzerkonto l\u00f6schen m\u00f6chten. +message.delete.affinity.group=Bitte best\u00e4tigen Sie, dass Sie diese Affinit\u00e4tsgruppe l\u00f6schen m\u00f6chten. +message.delete.gateway=Bitte best\u00e4tigen Sie, dass Sie dieses Gateway l\u00f6schen m\u00f6chten +message.delete.project=Sind Sie sicher, dass Sie dieses Projekt l\u00f6schen m\u00f6chten? +message.delete.user=Bitte best\u00e4tigen Sie, dass Sie diesen Benutzer l\u00f6schen m\u00f6chten. +message.delete.VPN.connection=Bitte best\u00e4tigen Sie, dass Sie die VPN-Verbindung l\u00f6schen m\u00f6chten +message.delete.VPN.customer.gateway=Bitte best\u00e4tigen Sie, dass Sie dieses Kunden VPN Gateway l\u00f6schen m\u00f6chten +message.delete.VPN.gateway=Bitte best\u00e4tigen Sie, dass Sie dieses VPN Gateway l\u00f6schen m\u00f6chten +message.desc.advanced.zone=F\u00fcr anspruchvollere Netzwerk-Topologien. Dieses Netzwerkmodell bietet die h\u00f6chste Flexibilit\u00e4t beim Definieren der Gast-Netzwerke und beim Anbieten von ma\u00dfgeschneiderten Nerzwerk-Angeboten wie Firewall-, VPN- oder Lastverteilungsunterst\u00fctzung. +message.desc.basic.zone=Biete ein einzelnes Netzwerk an, in dem alle VM-Instanzen direkt mit IP vom Netzwerk verbunden sind. G\u00e4steisolation kann durch Layer-3 wie Sicherheitsgruppen angeboten werden (IP-Adressen Source Filtering) +message.desc.cluster=Jeder Pod muss einen oder mehrere Clusters enthalten, und wir werden jetzt den ersten Cluster hinzuf\u00fcgen. Ein Cluster bietet die M\u00f6glichkeit Hosts zu gruppieren. Die Hosts in einem Cluster haben alle identische Hardware, betreiben den selben Hypervisor, sind im selben Subnetz und greifen auf den selben geteilten Speicher zu. Jeder Cluster besteht aus einem oder mehreren Hosts und einem oder mehreren Hauptspeicher-Servern. +message.desc.host=Jeder Cluster muss mindestens ein Host (Computer) beinhalten damit Gast-VMs darauf laufen k\u00f6nnen und wir werden nun den ersten Host erstellen. Damit ein Host in CloudStack funktioniert, muss eine Hypervisor-Software darauf installiert, eine IP-Adressse zugewiesen sowie sichergestellt sein, dass sich der Host mit dem CloudStack Verwaltungs-Server verbinden kann .

Geben Sie bitte den DNS-Namen oder IP-Adresse, den Benutzernamen (f\u00fcr gew\u00f6hnlich root) und das Passwort sowie jegliche Labels ein, mit denen Sie den Host kategorisieren m\u00f6chten. +message.desc.primary.storage=Jeder Cluster muss einen oder mehrere Hauptspeicher-Server enthalten, und wir werden nun den ersten erfassen. Hauptspeicher enth\u00e4lt die Festplatten-Volumen aller VMs, welche auf den Hosts in dem Cluster befinden. Benutzen Sie irgend ein standardkonformes Protokoll, welches vom darunterliegenden Hypervisor unterst\u00fctzt wird. +message.desc.secondary.storage=Jede Zone muss mindestens ein NFS oder Sekund\u00e4rspeicher-Server haben und wir werden nun den ersten hinzuf\u00fcgen. Sekund\u00e4rspeicher speichert VM-Vorlagen, ISO-Abbilder und VM-Festplatten-Schnappsch\u00fcsse. Dieser Server muss f\u00fcr alle Host in der Zone erreichbar sein.

Geben Sie die IP und den exportierten Pfad an. +message.desc.zone=Eine Zone ist die gr\u00f6\u00dfte organisatorische Einheit in CloudStack und entspricht typischerweise eines einzelnen Rechenzentrum. Zonen bieten physikalische Isolation und Redundanz. Eine Zone beinhaltet einen oder mehrere Pods (jeder von Ihnen beinhaltet Hosts und Hauptspeicher-Server) und ein Sekund\u00e4rspeicher-Server, welcher von allen Pods in der Zone geteilt wird. +message.detach.disk=Sind Sie sicher, dass Sie diese Festplatte aush\u00e4ngen m\u00f6chten? message.detach.iso.confirm=Bitte best\u00e4tigen Sie, dass Sie die ISO von der virtuellen Instanz trennen m\u00f6chten. message.disable.account=Bitte best\u00e4tigen Sie, dass Sie Ihr Benutzerkonto deaktivieren m\u00f6chten. Kein Nutzer dieses Kontos wird mehr Zugriff auf die Cloud Ressourcen haben. Alle laufenden virtuellen Maschinen werden sofort abgestellt. message.disable.snapshot.policy=Sie haben Ihre derzeitige Schnappschuss Richtlinie erfolgreich deaktiviert. +message.disable.user=Bitte best\u00e4tigen Sie, dass Sie diesen Benutzer deaktivieren m\u00f6chten. message.disable.vpn.access=Bitte best\u00e4tigen Sie, dass Sie den VPN Zugriff deaktivieren m\u00f6chten. +message.disable.vpn=Sind Sie sicher, dass Sie das VPN deaktivieren m\u00f6chten? message.disabling.network.offering=Netzwerkangebot wird deaktiviert message.disabling.vpc.offering=VPC-Angebot wird deaktiviert message.disallowed.characters=Nicht erlaubte Zeichen\: \\<\\,\\> message.download.ISO=Bitte klicken Sie auf 00000, um das ISO herunterzuladen message.download.template=Bitte klicken Sie auf 00000, um die Vorlage herunterzuladen message.download.volume=Bitte klicken Sie auf 00000, um das Volumen herunterzuladen +message.download.volume.confirm=Bitte best\u00e4tigen Sie, dass Sie dieses Volumen herunterladen m\u00f6chten. +message.edit.account=Bearbeiten ("-1" bedeutet keine Begrenzung der Anzahl Ressourcen) +message.edit.confirm=Bitte best\u00e4tigen Sie Ihre \u00c4nderungen, bevor Sie auf "Speichern" klicken. +message.edit.limits=Bitte definieren Sie Begrenzungen f\u00fcr die folgenden Ressourcen. Ein "-1" bedeutet keine Begrenzung f\u00fcr die Ressourcen-Erstellung. +message.edit.traffic.type=Bitte definieren Sie die Datenverkehrs-Bezeichnung, welche Sie mit diesem Datenverkehrs-Typ verbunden haben m\u00f6chten. message.enable.account=Bitte best\u00e4tigen Sie, dass Sie dieses Konto aktivieren m\u00f6chten. message.enabled.vpn=Ihr VPN Zugriff ist zurzeit aktiv und via IP k\u00f6nnen Sie darauf zugreifen +message.enabled.vpn.ip.sec=Ihr IPSec Preshared-Schl\u00fcssel ist +message.enable.user=Bitte best\u00e4tigen Sie, dass sie diesen Benutzer aktivieren m\u00f6chten. message.enable.vpn.access=VPN ist zurzeit nicht f\u00fcr diese IP Addresse aktiviert. M\u00f6chten Sie den VPN Zugriff aktivieren? +message.enable.vpn=Bitte best\u00e4tigen Sie, dass Sie f\u00fcr diese IP-Adresse das Remote Access VPN aktivieren m\u00f6chten. message.enabling.network.offering=Netzwerkangebot wird aktiviert message.enabling.security.group.provider=Sicherheitsgruppenanbieter wird aktiviert message.enabling.vpc.offering=VPC-Angebot wird aktiviert message.enabling.zone.dots=Zone wird aktiviert... message.enabling.zone=Zone wird aktiviert +message.enter.seperated.list.multiple.cidrs=Bitte geben Sie eine Komma separierte Liste von CIDRs ein, sofern es mehrere sind. +message.enter.token=Bitte geben Sie dasjenige Merkmal ein, welches Ihnen in Ihrem Einladungsemail mitgeteilt wurde. +message.generate.keys=Bitte best\u00e4tigen Sie, dass Sie f\u00fcr diesen Benutzer neue Schl\u00fcssel generieren m\u00f6chten. +message.gslb.delete.confirm=Bitte best\u00e4tigen Sie, dass Sie diesen GSLB l\u00f6schen m\u00f6chten. +message.gslb.lb.remove.confirm=Bitte best\u00e4tigen Sie, dass Sie die Lastverteilung vom GSLB entfernen m\u00f6chten +message.guest.traffic.in.advanced.zone=Gastnetzwerk-Datenverkehr ist die kommunikation zwischen virtuellen Maschinen des Endbenutzers. Definieren Sie einen Bereich von VLAN IDs um den Gast-Datenverkehr jedes physikalischen Netzwerks zuzustellen. +message.guest.traffic.in.basic.zone=Gastnetzwerk-Datenverkehr ist die kommunikation zwischen virtuellen Maschinen des Endbenutzers. Definieren Sie einen Bereich von IP-Adressen welche CloudStack Gast-VMs zuweisen kann. Stellen Sie sicher, dass dieser Bereich sich nicht mit dem reservierten IP-Bereich des Systems \u00fcberlappt. +message.host.dedicated=Host dediziert +message.host.dedication.released=Host-Dedizierung aufgehoben message.installWizard.click.retry=Bitte den Start Button f\u00fcr einen neuen Versuch dr\u00fccken +message.installWizard.copy.whatIsACluster=Ein Cluster bietet die M\u00f6glichkeit Hosts zu gruppieren. Die Hosts in einem Cluster haben alle identische Hardware, laufen mit dem selben Hypervisor, sind im selben Subnetz und greifen auf den selben Speicher zu. Instanzen von virtuellen Maschinen (VMs) k\u00f6nnen von einem Host zum anderen innerhalb des Clusters live-migriert werden, ohne Unterbrechung des Dienstes f\u00fcr den Endbenutzer. Ein Cluster ist die drittgr\u00f6\u00dfte organisatorische Einheit innerhalb einer CloudStack&\#8482; Installation. Cluster sind geschlossen innerhalb Pods und Pods sind geschlossen innerhalb Zonen.

CloudStack&\#8482; erlaubt mehrere Cluster in einer Cloudinstallation, aber f\u00fcr eine Basisinstallation ben\u00f6tigen wir nur ein Cluster. +message.installWizard.copy.whatIsAHost=Ein Host ist ein einzelner Computer. Hosts bieten Rechnungsressourcen f\u00fcr virtuelle Maschinen. Jeder Host hat Hypervisorsoftware installiert, welche die G\u00e4ste-VMs verwaltet (ausgenommen davon sind Bare-Metal-Hosts, welche im erweiterten Installationsanleitung als Spezialfall behandelt werden). Beispiele f\u00fcr Hosts sind ein KVM Linuxserver, ein Citrix XenServer-Server oder auch ein ESXi-Server. In der Basisinstallation verwenden wir einen einzelnen Host mit XenServer oder KVM.

Der Host ist die kleinste, organisatorische Einheit innerhalb einer CloudStack&\#8482; Installation. Hosts befinden sind innerhalb von Clustern, Cluster innerhalb Pods und Pods innerhalb von Zonen. +message.installWizard.copy.whatIsAPod=Ein Pod steht h\u00e4ufig f\u00fcr ein einzelnes Rack. Host im selben Pod sind im selben Subnetz.

Ein Pod ist die zweitgr\u00f6\u00dfte Einheit innerhalb einer CloudStack&\#8482; Installation. Pods sind geschlossen innerhalb der Zonen. Jede Zone kann eine oder mehrere Pods enthalten; in der Basisinstallation werden Sie nur ein Pod in Ihrer Zone haben. +message.installWizard.copy.whatIsAZone=Eine Zone ist die gr\u00f6\u00dfte organisatorische Einheit innerhalb einer CloudStack&\#8482; Installation. Eine Zone steht typischerweise f\u00fcr ein einzelnes Rechenzentrum, obwohl es nat\u00fcrlich erlaubt ist, mehrere Zonen in einem Rechenzentrum zu haben. Der Vorteil einer Unterteilung der Infrastruktur in Zonen besteht im Anbieten einer physikalischen Isolierung und Redundanz. Zum Beispiel kann jede Zone ihre eigene Stromversorgung und ihr eigener Netzwerk-Uplink haben und geographisch weit auseinanderliegen (obschon dies nicht zwingend ist). +message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482; ist eine Software-Plattform welche Rechenressourcen zusammenfasst, um \u00f6ffentliche, private oder hybride "Infrastructure as a Service" (IaaS) Clouds zu bauen. CloudStack&\#8482; verwaltet das Netzwerk-, Speicher- und Computingknoten was eine Cloud-Infrastruktur ausmacht. Benutzen Sie CloudStack&\#8482; um Computing-Umgebungen zu erstellen, verwalten und zu konfigurieren.

Neben dem Erweitern von individuellen virtuellen Maschinenabbilder auf auf Standardhardware bietet CloudStack&\#8482; einen schl\u00fcsselfertigen Cloud Infrastruktur-Software-Stack f\u00fcr die Bereitstellung von virtueller Rechenzentren as a Service \u2013 Liefert alle wesentlichen Komponenten f\u00fcr das Bauen, Bereitstellen und Verwalten von multi-tier- und mandantenf\u00e4higen Cloud-Anwendungen. Open-Source sowie Premium-Versionen sind verf\u00fcgbar, mit nahezu identischen Features. +message.installWizard.copy.whatIsPrimaryStorage=Eine CloudStack&\#8482; Cloud-Infrastruktur verwendet zwei Arten von Speicher\: Hauptspeicher und Sekund\u00e4rspeicher. Beide k\u00f6nnen iSCSI- oder NFS-Server, aber auch lokale Festplatten sein.

Hauptspeicher ist mit einem Cluster verbunden und speichert Festplattenvolumen aller diejenigen G\u00e4ste-VMs, welche auf Hosts in diesem Cluster laufen. Der Hauptspeicher-Server ist typischerweise nahe am Host gelegen. +message.installWizard.copy.whatIsSecondaryStorage=Sekund\u00e4rspeicher wird mit einer Zone verbunden und speichert alles Folgende\:
  • Vorlagen - Betriebssystemabbilder, welche f\u00fcr das Booten der VMs verwendet werden und zus\u00e4tzliche Konfigurationsinformationen wie installierte Applikationen beinhalten k\u00f6nnen
  • ISO-Abbilder - Betriebssystemabbilder, welche bootbar oder nicht bootbar sein k\u00f6nnen
  • Festplattenvolumen-Schnappsch\u00fcsse - gesicherte Kopien von VM-Daten, welche f\u00fcr die Datenwiederherstellung oder f\u00fcr neue Vorlagen verwenden werden k\u00f6nnen
+message.installWizard.now.building=Ihre Cloud wird erstellt... message.installWizard.tooltip.addCluster.name=Der Name des Clusters. Der Name kann frei gew\u00e4hlt werden und wird von Cloudstack nicht genutzt. message.installWizard.tooltip.addHost.hostname=Der DNS-Name oder die IP-Adresse des hosts message.installWizard.tooltip.addHost.password=Dies ist das Passwort des o.a. Users (von der XenServer Installation) message.installWizard.tooltip.addHost.username=\u00fcberlicherweise root message.installWizard.tooltip.addPod.name=Der Name f\u00fcr den pod +message.installWizard.tooltip.addPod.reservedSystemEndIp=Dies ist der IP-Bereich im privaten Netzwerk, welches CloudStack verwendet um Sekund\u00e4rspeicher-VMs und Konsolen-Proxies zu verwalten. Diese IP-Adressen werden vom selben Subnetz genommen wie Computing-Server. message.installWizard.tooltip.addPod.reservedSystemGateway=Das Gateways f\u00fcr die Hosts des pod message.installWizard.tooltip.addPod.reservedSystemNetmask=Die Subnetzmaske des Gast-Netzwerks +message.installWizard.tooltip.addPod.reservedSystemStartIp=Dies ist der IP-Bereich im privaten Netzwerk, welches CloudStack verwendet um Sekund\u00e4rspeicher-VMs und Konsolen-Proxies zu verwalten. Diese IP-Adressen werden vom selben Subnetz genommen wie Computing-Server. message.installWizard.tooltip.addPrimaryStorage.name=Der Name der Storage Devices message.installWizard.tooltip.addPrimaryStorage.path=(f\u00fcr NFS) Bei NFS wird hier der exportierte Pfad (Shared Mount Point) angegeben. F\u00fcr KVM wird hier der Pfad angegeben, wo auf jedem Host das primary storage gemountet wurde. Z.B. "/mnt/primary" message.installWizard.tooltip.addPrimaryStorage.server=(f\u00fcr NFS, iSCSI oder PreSetup) Die IP-Adresse oder der DNS-Name des storage devices. message.installWizard.tooltip.addSecondaryStorage.nfsServer=Die IP-Adresse des NFS-Servers, der den Secondary Storage bereitstellt. message.installWizard.tooltip.addSecondaryStorage.path=Der exportierte Pfad, der auf dem o.a. Server liegt. +message.installWizard.tooltip.addZone.dns1=Dies sind die DNS Server f\u00fcr die G\u00e4ste VMs in dieser Zone. Diese DNS Server werden \u00fcber das Interface f\u00fcr das private Netzwerk der System VMs erreicht. Die private IP Adresse, die Sie angeben muss eine Route zu dem hier benannten DNS Server haben. +message.installWizard.tooltip.addZone.dns2=Dies sind die DNS Server f\u00fcr die G\u00e4ste VMs in dieser Zone. Diese DNS Server werden \u00fcber das Interface f\u00fcr das private Netzwerk der System VMs erreicht. Die private IP Adresse, die Sie angeben muss eine Route zu dem hier benannten DNS Server haben. +message.installWizard.tooltip.addZone.internaldns1=Dies sind die DNS Server f\u00fcr die System VMs in dieser Zone. Diese DNS Server werden \u00fcber das Interface f\u00fcr das private Netzwerk der System VMs erreicht. Die private IP Adresse, die Sie angeben muss eine Route zu dem hier benannten DNS Server haben. +message.installWizard.tooltip.addZone.internaldns2=Dies sind die DNS Server f\u00fcr die System VMs in dieser Zone. Diese DNS Server werden \u00fcber das Interface f\u00fcr das private Netzwerk der System VMs erreicht. Die private IP Adresse, die Sie angeben muss eine Route zu dem hier benannten DNS Server haben. message.installWizard.tooltip.addZone.name=Der Name f\u00fcr die zone message.installWizard.tooltip.configureGuestTraffic.description=Eine Beschreibung des Netzwerkes. +message.installWizard.tooltip.configureGuestTraffic.guestEndIp=Der Bereich der IP Adressen die f\u00fcr die Verwendung durch G\u00e4ster in dieser Zone verf\u00fcgbar sind. Wenn nur ein NIC verwendet wird, sollten die IP Adressen in demselben CIDR seind wie der CIDR des Pods. message.installWizard.tooltip.configureGuestTraffic.guestGateway=Das gateway, welches der Gast benutzen soll. message.installWizard.tooltip.configureGuestTraffic.guestNetmask=Die Subnetzmaske des Gast-Netzwerks +message.installWizard.tooltip.configureGuestTraffic.guestStartIp=Der Bereich der IP Adressen die f\u00fcr die Verwendung durch G\u00e4ster in dieser Zone verf\u00fcgbar sind. Wenn nur ein NIC verwendet wird, sollten die IP Adressen in demselben CIDR seind wie der CIDR des Pods. message.installWizard.tooltip.configureGuestTraffic.name=Der Name f\u00fcr das Netzwerk +message.instance.scaled.up.confirm=M\u00f6chten Sie Ihre Instanz wirklich hochskalieren? +message.instanceWizard.noTemplates=Sie haben keine Vorlagen verf\u00fcgbar; bitte f\u00fcgen Sie kompatible Vorlagen hinzu, und starten Sie den Instanz-Installationsassistent neu. +message.ip.address.changed=Ihre IP Adresse kann sich ge\u00e4ndert haben; m\u00f6chten Sie die Liste aktualisieren lassen? Bitte beachten Sie, dass sich in diesem Fall die Ansicht der Details schlie\u00dfen wird. +message.iso.desc=Dieses Disk Image enth\u00e4lt Daten oder ein bootf\u00e4higes Medium f\u00fcr das Betriebssystem. +message.join.project=Sie sind jetzt einem Projekt beigetreten. Bitte wechseln Sie in die Ansicht \u00fcber die Projekte um das Projekt zu sehen. +message.launch.vm.on.private.network=W\u00fcnschen Sie Ihre Instanze in Ihren eigenen privaten dedizierten Netzwerk zu starten? +message.launch.zone=Die Zone kann gestartet werden; bitte fahren sie mit dem n\u00e4chsten Schritt fort. message.listView.subselect.multi=(Strg/Cmd-Klick) +message.lock.account=Bitte best\u00e4tigen Sie, dass Sie dieses Benutzerkonto sperren m\u00f6chten. Nach dem Sperren ist es Benutzer dieses Benutzerkontos nicht mehr m\u00f6glich, ihre Cloud Ressourcen zu verwalten. Auf bestehende Ressourcen kann aber weiterhin zugegriffen werden. +message.migrate.instance.confirm=Bitte best\u00e4tigen Sie den Host auf den Sie die virtuelle Instanz migrieren wollen. message.migrate.instance.to.host=Bitte best\u00e4tigen sie, dass die Instanz auf einen anderen Host migriert werden soll message.migrate.instance.to.ps=Bitte best\u00e4tigen sie, dass sie die Instanz auf einen anderen prim\u00e4ren Speicher migrieren wollen. +message.migrate.router.confirm=Bitte best\u00e4tigen Sie den Host, auf welchen Sie den Router migrieren m\u00f6chten\: +message.migrate.systemvm.confirm=Bitte best\u00e4tigen Sie den Host, auf welchen Sie die System-VM migrieren m\u00f6chten\: +message.migrate.volume=Bitte best\u00e4tigen sie, dass sie dieses Volume auf einen anderen prim\u00e4ren Speicher migrieren wollen. +message.network.addVM.desc=Bitte definieren Sie das Netzwerk, zu welchen Sie die VM hinzuf\u00fcgen m\u00f6chten. Eine neue NIC wird zu diesem Netzwerk hinzugef\u00fcgt. +message.network.addVMNIC=Bitte best\u00e4tigen Sie, dass sie eine neue VM NIC zu dieses Netzwerk hinzuf\u00fcgen m\u00f6chten. message.new.user=Spezifieren Sie das folgende um einen neuen Nutzer dem Benutzerkonto hinzuzuf\u00fcgen +message.no.affinity.groups=Sie haben keine Affinity Groups. Bitte fahren Sie fort zum n\u00e4chsten Schritt. +message.no.host.available=Es ist kein Host f\u00fcr eine Migration verf\u00fcgbar +message.no.network.support.configuration.not.true=Sie haben keine Zone die eine aktivierte Sicherheitsgruppe hat. Deswegen gibt es keine zus\u00e4tzlichen Netzwerk Merkmale. Bitte fahren Sie mit Schritt 5 fort. +message.no.network.support=Ihr ausgew\u00e4hlter Hypervisor vSphere hat keine zus\u00e4tzlichen Netzwerk Merkmale. Bitte fahren Sie mit Schritt 5 fort. +message.no.projects.adminOnly=Sie haben keine Projekt.
Bitte fragen Sie Ihren Administrator damit er ein neues Projekt anlegt. +message.no.projects=Sie haben keine Projekte.
Bitte erzeugen Sie ein neues aus dem Projekt Bereich. message.number.clusters=

\# of Cluster

message.number.hosts=

\# of Hosts

+message.number.pods=

Anzahl derPods

message.number.storage=

\# von Hauptspeichervolumina

message.number.zones=

\# of Zonen

message.pending.projects.1=Sie haben ausstehende Projekteinladungen\: +message.pending.projects.2=F\u00fcr die Ansicht wechseln Sie bitte in den Projekt Bereich und w\u00e4hlen die Einladungen aus dem Drop-down-Men\u00fc +message.please.add.at.lease.one.traffic.range=Bitte f\u00fcgen Sie mindestens einen Verkehrsbereich hinzu. +message.please.proceed=Bitte fahren Sie mit dem n\u00e4chsten Schritt fort. message.please.select.a.configuration.for.your.zone=Bitte w\u00e4hlen Sie eine Konfiguration f\u00fcr Ihre Zone aus. +message.please.select.a.different.public.and.management.network.before.removing=Bitte w\u00e4hlen Sie ein anderes \u00f6ffentliches und Management Netzwerk bevor Sie es l\u00f6schen message.please.select.networks=Bitte w\u00e4hlen Sie Netzwerke f\u00fcr Ihre virtuelle Maschine aus. +message.please.wait.while.zone.is.being.created=Bitte warten Sie solange Ihre Zone erstellt wird; dies kann einige Zeit in Anspruch nehmen... +message.pod.dedication.released=Pod-Dedizierung freigegeben +message.portable.ip.delete.confirm=Bitte best\u00e4tigen Sie, dass Sie ein portablen IP-Bereich l\u00f6schen m\u00f6chten +message.project.invite.sent=Einladung an Benutzer verschickt; sie werden zum Projekt hinzugef\u00fcgt sobald sie Einladung akzeptiert haben +message.public.traffic.in.advanced.zone=\u00d6ffentlicher Datenverkehr wird verursacht, wenn VMs in der Cloud auf das Internet zugreifen. \u00d6ffentlich zugreifbare IPs m\u00fcssen f\u00fcr diesen Zweck bezogen werden. Endbenutzer k\u00f6nnen das CloudStack UI verwenden um NAT zwischen dem Gast-Netzwerk und Ihrem \u00f6ffentlichen Netzwerk einzurichten.

Bitte geben Sie mindestens einen Bereich von IP-Adressen f\u00fcr den Internet-Datenverkehr an. +message.public.traffic.in.basic.zone=\u00d6ffentlicher Datenverkehr wird generiert, sobald VMs in der Cloud auf das Internet zugreifen oder Dienste an Kunden \u00fcber das Internet anbieten. Hierf\u00fcr m\u00fcssen \u00f6ffentliche IPs zugewiesen werden. Wenn eine Instanz erstellt wird, wird eine \u00f6ffentliche IP von diesem Satz zus\u00e4tzlich zu der G\u00e4ste- IP-Adresse zugewiesen. Statisches 1-1-Nat wird automatisch zwischen der \u00f6ffentlichen IP und der G\u00e4ste-IP einrichtet. Endbenutzer k\u00f6nnen zudem das CloudStack UI verwenden um zus\u00e4tzliche IPs zu beziehen um statisches NAT zwischen ihren Instanzen und der \u00f6ffentlichen IP zu implementieren. +message.read.admin.guide.scaling.up=Bitte lesen Sie den Abschnitt \u00fcber das dynamische Skalieren in dem Administrations-Leitfaden bevor Sie hochskalieren. message.recover.vm=Bitte best\u00e4tigen Sie, dass Sie diese VM wiederherstellen m\u00f6chten. message.redirecting.region=Weiterleitung zu Region... +message.reinstall.vm=Hinweis\: Mit Vorsicht verwenden. Dies wird dazu f\u00fchren, dass die VM von der Vorlage neu installiert wird; Daten auf der Root-Ferstplatte werden dadruch gel\u00f6scht. Extra Daten-Volumen, falls vorhanden, bleiben jedoch unber\u00fchrt. +message.remove.ldap=Sind Sie sicher, dass Sie die LDAP-Konfiguration l\u00f6schen m\u00f6chten? +message.remove.region=Sind Sie sicher, dass Sie diese Region vom Verwaltungsserver entfernen m\u00f6chten? +message.remove.vpc=Bitte best\u00e4tigen Sie, dass Sie das VPC l\u00f6schen m\u00f6chten message.remove.vpn.access=Bitte best\u00e4tigen Sie, dass Sie den VPN-Zugriff vom folgenden Benutzer entfernen m\u00f6chten. +message.reset.password.warning.notPasswordEnabled=Die Vorlage dieser Instanz wurde ohne Passwortunterst\u00fctzung erstellt. +message.reset.password.warning.notStopped=Ihre Instanz muss gestoppt werden bevor Sie versuchen k\u00f6nnen das Passwort zu \u00e4ndern message.reset.VPN.connection=Bitte best\u00e4tigen Sie, dass Sie die VPN-Verbindung zur\u00fccksetzen m\u00f6chten +message.restart.mgmt.server=Bitte starten Sie Ihre(n) Management Server durch, damit Ihre neuen Einstellungen aktiviert werden. +message.restart.mgmt.usage.server=Bitte starten Sie Ihre(n) Management- und Usage Server durch, damit Ihre neuen Einstellungen aktiviert werden. +message.restart.network=Alle angebotenen Dienste in diesem Netzwerk werden unterbrochen. Bitte best\u00e4tigen Sie, dass Sie dieses Netzwerk neu starten m\u00f6chten. message.restart.vpc=Bitte best\u00e4tigen Sie, dass Sie den VPC neu starten m\u00f6chten message.restoreVM=M\u00f6chten Sie die VM wiederherstellen? +message.security.group.usage=(Verwenden Sie Ctrl-click um alle passenden Sicherheits Gruppen auszuw\u00e4hlen) +message.select.affinity.groups=Bitte w\u00e4hlen Sie beliebige Affinit\u00e4tsgruppen, zu denen diese VM geh\u00f6ren soll\: +message.select.a.zone=Eine Zone steht typischerweise f\u00fcr ein einzelnes Rechenzentrum. Mehrere Zonen helfen dabei, die Cloud zuverl\u00e4ssiger zu machen durch physikalische Isolation und Redundanz. message.select.instance=Bitte w\u00e4hlen Sie eine Instanz aus. message.select.iso=Bitte w\u00e4hlen Sie ein ISO f\u00fcr Ihre neue virtuelle Instanz aus. message.select.item=Bitte w\u00e4hlen Sie ein Element aus. message.select.security.groups=Bitte w\u00e4hlen Sie (eine) Sicherheitsgruppe(n) f\u00fcr Ihre neue VM aus message.select.template=Bitte w\u00e4hlen Sie eine Vorlage f\u00fcr Ihre neue virtuelle Instanz aus. +message.select.tier=Bitte Ebene ausw\u00e4hlen +message.set.default.NIC=Bitte best\u00e4tigen Sie, dass Sie f\u00fcr die VM diese NIC zur Standard-NIC m\u00f6chten. +message.set.default.NIC.manual=Bitte aktuallisieren Sie die Standard-NIC auf der VM jetzt manuell. +message.setup.physical.network.during.zone.creation.basic=Wenn Sie eine Basiszone hinzuf\u00fcgen, k\u00f6nnen Sie ein einzelnes physikalisches Netzwerk einrichten, welches einer NIC auf dem Hypervisor entspricht. Das Netzwerk behandelt mehrere Arten von Datenverkehr.

Sie k\u00f6nnen auch andere Datenverkehrs-Arten zum pysikalische Netzwerk hinzuf\u00fcgen, durch Ziehen und Loslassen. +message.setup.physical.network.during.zone.creation=Wenn Sie eine erweiterte Zone hinzuf\u00fcgen, m\u00fcssen Sie ein oder mehrere physikalische Netzweke einrichten. Jedes Netzwerk entspricht einer NIC auf dem Hypervisor. Jedes physikalische Netzwerk kann eine oder mehere Arten von Datenverkehr behandeln, mit gewissen Beschr\u00e4nkungen wie diese kombiniert werden k\u00f6nnen.

Durch Ziehen und Loslassen eines oder mehreren Datenverkehrsarten auf jedes einzelne physikalische Netzwerk. message.setup.successful=Cloud setup erfolgreich +message.snapshot.schedule=Sie k\u00f6nnen wiederkehrende Schnapschuss-Zeitpl\u00e4ne einrichten in dem Sie die untenstehenden verf\u00fcgbaren Optionen ausw\u00e4hlen und Ihren Regeleinstellungen anwenden +message.specifiy.tag.key.value=Bitte geben Sie einen Ettikettnamen und -wert an message.specify.url=Bitte geben Sie eine URL an message.step.1.continue=Bitte w\u00e4hlen Sie eine Vorlage oder ISO, um fortzufahren +message.step.1.desc=Bitte w\u00e4hlen Sie eine Vorlage f\u00fcr Ihre neue virtuelle Instanz aus. Sie k\u00f6nnen auch ein leeres Template ausw\u00e4hlen, von welchen aus dann ein ISO-Abbild instaliert werden kann. message.step.2.continue=Bitte w\u00e4hlen Sie ein Service-Angebot, um fortzufahren message.step.2.desc= message.step.3.continue=Bitte w\u00e4hlen Sie ein Festplatten-Angebot, um fortzufahren message.step.3.desc= message.step.4.continue=Bitte w\u00e4hlen Sie mindestens ein Netzwerk, um fortzufahren message.step.4.desc=Bitte w\u00e4hlen Sie Ihr Hauptnetzwerk zu dem Ihre virtuelle Instanz verbunden sein wird. +message.storage.traffic=Datenverkehr zwischen den CloudStack internen Ressourcen, inklusive aller Komponenten, die mit dem Verwaltugns-Server kommunizieren, wie Hosts und CloudStack System VMs. Bitte konfigurieren Sie Speicherdatenverkehr hier. +message.suspend.project=Sind Sie sicher, dass sie die Ausf\u00fchrung dieses Projektes unterbrechen m\u00f6chten? message.systems.vms.ready=System-VMs bereit. message.template.copying=Vorlage wird kopiert. +message.template.desc=Betriebssystem Abbild das zum starten von VMs verwendet werden kann +message.tier.required=Ebene ist zwingend +message.tooltip.dns.1=Name eines DNS Servers zur Verwendung von VMs in der Zone. Die \u00f6ffentlichen IP Adressen m\u00fcssen eine Route zu diesem Server haben. +message.tooltip.dns.2=Ein zweiter Name eines DNS Servers zur Verwendung von VMs in der Zone. Die \u00f6ffentlichen IP Adressen m\u00fcssen eine Route zu diesem Server haben. +message.tooltip.internal.dns.1=Ein Name eines DNS Servers zur Verwendung von CloudStack internen System VMs in der Zone. Die \u00f6ffentlichen IP Adressen m\u00fcssen eine Route zu diesem Server haben. +message.tooltip.internal.dns.2=Ein Name eines DNS Servers zur Verwendung von CloudStack internen System VMs in der Zone. Die \u00f6ffentlichen IP Adressen m\u00fcssen eine Route zu diesem Server haben. +message.tooltip.network.domain=Ein DNS Suffix zur Erstellung eines Kunden Domain Namens f\u00fcr das Netzwerk das von Gast VMs verwendet wird. +message.tooltip.pod.name=Ein Name f\u00fcr diesen Pod. +message.tooltip.reserved.system.gateway=Das Gateway f\u00fcr die Hosts des pods. +message.tooltip.reserved.system.netmask=Das Netzwerk Prefix welches das Pod Subnetz definiert. Es verwendet CIDR Notation. message.tooltip.zone.name=Einen Namen f\u00fcr die Zone. +message.update.os.preference=Bitte geben Sie eine Betriebssystem-Pr\u00e4ferenz f\u00fcr diesen Host an, Alle virtuellen Instanzen mit gleichen Pr\u00e4ferenzen werden zuerst zu diesem Host zugewiesen bevor andere gew\u00e4hlt werden. +message.update.resource.count=Bitte best\u00e4tigen Sie, dass Sie die Anzahl der Ressourcen f\u00fcr dieses Benutzerkonto aktualisieren m\u00f6chten. +message.update.ssl=Bitte eine neue X.509 kompatible SSL Zertifikatskette einreichen, diese wird auf jedem Konsolenproxy und der Sekund\u00e4rspeicher-VM aktuallisiert\: message.update.ssl.failed=Fehler beim Aktualisieren des SSL-Zertifikats. +message.update.ssl.succeeded=Aktualisierung der SSL Zertifikate erfolgreich durchgef\u00fchrt message.validate.accept=Bitte geben Sie einen Wert mit einer g\u00fcltigen Erweiterung ein. message.validate.creditcard=Bitte geben Sie eine g\u00fcltige Kreditkartennummer ein. message.validate.date=Bitte geben Sie ein g\u00fcltiges Datum ein. @@ -1403,37 +2001,55 @@ message.validate.email.address=Bitte geben Sie eine g\u00fcltige E-Mail-Adresse message.validate.equalto=Bitte geben Sie den gleichen Wert erneut ein. message.validate.fieldrequired=Dieses Feld wird ben\u00f6tigt message.validate.fixfield=Bitte korrigieren Sie dieses Feld. +message.validate.instance.name=Der Name der Instanz kann nicht l\u00e4nger als 63 Zeichen sein. Nur ASCII Zeichen wie a~z, A~Z, Zahlen 0~9 und Bindestriche sind erlaubt. Er mu\u00df mit einem Buchstaben starten und mit einem Buchstaben oder einer Zahl enden. message.validate.invalid.characters=Ung\u00fcltige Zeichen gefunden; bitte korrigieren. +message.validate.max=Bitte geben sie einen Wert kleiner oder gleich {0} ein. message.validate.maxlength=Bitte geben Sie nicht mehr als {0} Zeichen ein. message.validate.minlength=Bitte geben Sie mindestens {0} Zeichen ein. message.validate.number=Bitte geben Sie eine g\u00fcltige Nummer ein. message.validate.range=Bitte geben Sie einen Wert zwischen {0} und {1} ein. +message.validate.range.length=Bitte geben Sie einen Wert zwischen {0} und {1} Zeichen land ein. message.validate.URL=Bitte geben Sie eine g\u00fcltige URL ein. +message.virtual.network.desc=Ein dediziert virtualisiertes Netzwerk f\u00fcr Ihr Benutzerkonto. Die Broadcast-Domain ist innerhalb eines VLANs und jeglicher \u00f6ffentliche Netzwerkzugriff wird von einem virtuellen Router geroutet. message.vm.create.template.confirm=Das Erstellen einer Vorlage f\u00fchrt automatisch zu einem Neustart der VM. +message.vm.review.launch=Bitte \u00fcberpr\u00fcfen Sie die folgenden Informationen und best\u00e4tigen Sie, dass Ihre virtuelle Instanz korrekt ist, bevor Sie sie starten. +message.vnmc.available.list=VNMC ist nicht verf\u00fcgbar aus der Providerliste. +message.vnmc.not.available.list=VNMC ist nicht verf\u00fcgbar aus der Providerliste. +message.volume.create.template.confirm=Bitte best\u00e4tigen Sie, dass Sie eine Vorlage aus diesem Festplatten-Volumen erstellen m\u00f6chten. Das Erstellen der Vorlage kann wenige Minuten oder auch l\u00e4nger dauern abh\u00e4ngig von der Gr\u00f6\u00dfe des Volumen. +message.waiting.for.builtin.templates.to.load=Warten bis die mitgelieferten Vorlagen geladen sind... +message.XSTools61plus.update.failed=Die Aktuallisierung des Original XS Version ist 6.1\\+ Feldes ist fehlgeschlagen. Fehlermeldung\: message.you.must.have.at.least.one.physical.network=Sie m\u00fcssen mindestens ein physikalisches Netzwerk haben message.your.cloudstack.is.ready=Ihr CloudStack ist bereit\! +message.zone.creation.complete.would.you.like.to.enable.this.zone=Die Erstellung der Zone ist komplett. M\u00f6chten Sie diese Zone aktivieren? message.Zone.creation.complete=Zonenerstellung abgeschlossen +message.zone.no.network.selection=Die von Ihnen gew\u00e4hlte Zone bietet keine Alternativen f\u00fcr die Auswahl eines Netzwerks. message.zone.step.1.desc=Bitte w\u00e4hlen Sie ein Netzwerk-Modell f\u00fcr Ihre Zone. message.zone.step.2.desc=Bitte geben Sie die folgende Information ein, um eine neue Zone hinzuzuf\u00fcgen message.zone.step.3.desc=Bitte geben Sie die folgende Information ein, um einen neuen pod hinzuzuf\u00fcgen +message.zoneWizard.enable.local.storage=WARNUNG\: Wenn Sie den lokalen Speicher f\u00fcr diese Zone aktivieren m\u00f6chten, m\u00fcssen Sie, abh\u00e4ngig davon wo Sie Ihre System-VMs starten m\u00f6chten, wie folgt vorgehen\:

1. Wenn die System-VMs im geteilten Hauptspeicher gestartet werden sollen, muss der geteilte Hauptspeicher nach dem Erstellen zur Zone hinzugef\u00fcgt werden. Zudem muss die Zone im deaktivierten Zustand gestartet werden.

2. Wenn die System-VMs im lokalen Hauptspeicher gestartet werden sollen, muss, "system.vm.use.local.storage" auf "true" gesetzt werden bevor Sie die Zone aktivieren.


M\u00f6chten Sie weiterfahren? +messgae.validate.min=Bitte geben sie einen Wert gr\u00f6\u00dfer oder gleich {0} ein. mode=Modus network.rate=Netzwerk-Rate notification.reboot.instance=Instanz neu starten notification.start.instance=Instanz starten notification.stop.instance=Instanz stoppen side.by.side=Nebeneinander +state.Accepted=Angenommen state.Active=Aktiv state.Allocated=Zugeteilt +state.Allocating=Zugeteilt state.BackedUp=Daten gesichert state.BackingUp=Daten werden gesichert state.Completed=Fertiggestellt state.Creating=Erstellung state.Declined=Abgelehnt state.Destroyed=Zerst\u00f6rt +state.detached=Losgel\u00f6st state.Disabled=Deaktiviert state.enabled=Aktiviert state.Enabled=Aktiviert state.Error=Fehler +state.Expunging=Unwiederbringlich gel\u00f6scht state.Migrating=Migration state.Pending=Ausstehend state.ready=Bereit @@ -1442,4 +2058,6 @@ state.Running=L\u00e4uft state.Starting=Startet state.Stopped=Gestoppt state.Stopping=Stoppt +state.Suspended=Suspendiert ui.listView.filters.all=Alle +ui.listView.filters.mine=Meine diff --git a/client/WEB-INF/classes/resources/messages_es.properties b/client/WEB-INF/classes/resources/messages_es.properties index 3e4ad0f06e..d4e3f33982 100644 --- a/client/WEB-INF/classes/resources/messages_es.properties +++ b/client/WEB-INF/classes/resources/messages_es.properties @@ -32,6 +32,7 @@ ICMP.code=C\u00f3digo ICMP ICMP.type=Tipo ICMP image.directory=Directorio de im\u00e1genes inline=alineado +instances.actions.reboot.label=Reiniciar Instancia label.about=Acerca de label.about.app=Acerca de CloudStack label.accept.project.invitation=Aceptar invitaci\u00f3n al proyecto @@ -404,6 +405,7 @@ label.disk.size.gb=tama\u00c3\u00b1o de disco (en GB) label.disk.size=tama\u00c3\u00b1o de disco label.disk.total=disco Total label.disk.volume=volumen de disco +label.display.name=Nombre para mostrar label.display.text=visualizaci\u00c3\u00b3n de texto label.dns.1=DNS 1 label.dns.2=DNS 2 @@ -445,6 +447,7 @@ label.extractable=extra\u00c3\u00adble label.f5=F5 label.failed=Error label.featured=destacados +label.filterBy=Filtrar por label.firewall=Servidor de seguridad label.first.name=Nombre label.format=Formato @@ -491,6 +494,8 @@ label.IKE.policy=Pol\u00edtica IKE label.info=Informaci\u00c3\u00b3n label.ingress.rule=ingreso Regla label.initiated.by=Iniciado por +label.installWizard.addPodIntro.subtitle=\u00bfQu\u00e9 es un Pod? +label.installWizard.addPodIntro.title=Agreguemos un Pod label.installWizard.addSecondaryStorageIntro.subtitle=Que es almacenamiento secundario? label.installWizard.addSecondaryStorageIntro.title=A\u00f1adir almacenamiento secundario label.installWizard.addZone.title=Agregar zona @@ -524,6 +529,7 @@ label.iscsi=iSCSI label.is.default=Es por defecto label.iso.boot=ISO de arranque label.iso=ISO +label.isolated.networks=Redes Aisladas label.isolation.method=M\u00e9todo de aislamiento label.isolation.mode=modo de aislamiento label.is.redundant.router=redundante @@ -535,8 +541,16 @@ label.keyboard.type=Tipo de teclado label.key=Llave label.label=Etiqueta label.lang.chinese=Chino (simplificado) +label.lang.dutch=Holand\u00e9s label.lang.english=Ingl\u00c3\u00a9s +label.lang.french=Franc\u00e9s +label.lang.german=Alem\u00e1n +label.lang.italian=Italiano label.lang.japanese=japon\u00c3\u00a9s +label.lang.korean=Coreano +label.lang.norwegian=Noruego +label.lang.polish=Polaco +label.lang.russian=Ruso label.lang.spanish=Espa\u00c3\u00b1ol label.last.disconnected=\u00c3\u009altima Desconectado label.last.name=Apellido @@ -670,6 +684,7 @@ label.no=No label.no.security.groups=No hay grupos disponibles de Seguridad label.not.found=No se ha encontrado label.no.thanks=No, gracias +label.notifications=Notificaciones label.number.of.clusters=N\u00famero de Clusters label.number.of.hosts=N\u00famero de Hosts label.number.of.pods=N\u00famero de Pods @@ -680,6 +695,7 @@ label.num.cpu.cores=n\u00c3\u00bamero de n\u00c3\u00bacleos de CPU label.numretries=N\u00c3\u00bamero de reintentos label.ocfs2=OCFS2 label.offer.ha=Oferta HA +label.ok=Aceptar label.optional=Opcional label.order=Ordenar label.os.preference=OS Preferencia @@ -695,6 +711,7 @@ label.PING.CIFS.username=PING CIFS nombre de usuario label.PING.dir=PING Directorio label.PING.storage.IP=PING almacenamiento IP label.please.wait=Por favor espere +label.pod.name=Nombre del Pod label.pod=Pod label.pods=Pod label.port.forwarding.policies=Pol\u00edticas de Port forwarding @@ -963,6 +980,7 @@ label.yes=S\u00c3\u00ad label.zone.details=Detalles de Zona label.zone.id=Zona de identificaci\u00c3\u00b3n label.zone.lower=Zona +label.zone.name=Nombre de Zona label.zone.step.1.title=Paso 1\: Seleccione una red label.zone.step.2.title=Paso 2\: A\u00c3\u00b1adir una zona label.zone.step.3.title=Paso 3\: A\u00c3\u00b1adir una vaina @@ -1097,10 +1115,10 @@ message.installWizard.tooltip.addHost.hostname=El nombre DNS o direcci\u00f3n IP message.installWizard.tooltip.addHost.password=Este es el password para el nombre de usuario mencionado anteriormente (Desde su Instalaci\u00f3n XenServer) message.installWizard.tooltip.addHost.username=Generalmente root message.installWizard.tooltip.addPod.name=Nombre del POD -message.installWizard.tooltip.addPod.reservedSystemEndIp=Este es el rango de direcciones IP en la red privada que la CloudStack utiliza para administrar las VMs del Almacenamiento Secundario y consola Proxy.\nEstas direcciones IP se han tomado de la misma subred que los servidores inform\u00e1ticos. +message.installWizard.tooltip.addPod.reservedSystemEndIp=Este es el rango de direcciones IP en la red privada que la CloudStack utiliza para administrar las VMs del Almacenamiento Secundario y consola Proxy. Estas direcciones IP se han tomado de la misma subred que los servidores inform\u00e1ticos. message.installWizard.tooltip.addPod.reservedSystemGateway=El gateway ,puerta de enlace, para los host en ese pod. message.installWizard.tooltip.addPod.reservedSystemNetmask=La m\u00e1scara de red en uso en la subred de los hu\u00e9spedes ser\u00e1. -message.installWizard.tooltip.addPod.reservedSystemStartIp=Este es el rango de direcciones IP en la red privada que la CloudStack utiliza para administrar las VMs del Almacenamiento Secundario y consola Proxy.\nEstas direcciones IP se han tomado de la misma subred que los servidores inform\u00e1ticos. +message.installWizard.tooltip.addPod.reservedSystemStartIp=Este es el rango de direcciones IP en la red privada que la CloudStack utiliza para administrar las VMs del Almacenamiento Secundario y consola Proxy. Estas direcciones IP se han tomado de la misma subred que los servidores inform\u00e1ticos. message.installWizard.tooltip.addPrimaryStorage.name=\ Nombre para el storage message.installWizard.tooltip.addPrimaryStorage.path=(para NFS) En NFS este es el directorio exportado desde el servidor. Directorio (por SharedMountPoint). Con KVM este es el directorio de cada host en donde se monta el almacenamiento primario. Por ejemplo, "/mnt/primary". message.installWizard.tooltip.addPrimaryStorage.server=(para NFS, iSCSI, o PreSetup) La direcci\u00f3n IP o el nombre DNS del dispositivo de almacenamiento. @@ -1160,6 +1178,9 @@ message.volume.create.template.confirm=Por favor, confirme que desea crear una p message.zone.step.1.desc=Por favor seleccione un modelo de red para su zona. mode=modo network.rate=Tasa de Red +notification.reboot.instance=Reiniciar Instancia +notification.start.instance=Iniciar Instancia +notification.stop.instance=Detener Instancia side.by.side=Juntos state.Accepted=Aceptado state.Active=Activo @@ -1169,6 +1190,7 @@ state.BackingUp=Realizando Backup state.Completed=Completado state.Creating=Creando state.Declined=Declinado +state.Destroyed=Destruidas state.Disabled=personas de movilidad reducida state.enabled=Habilitado state.Enabled=Habilitado @@ -1177,6 +1199,10 @@ state.Migrating=Migrando state.Pending=pendiente state.ready=Listo state.Ready=Listo +state.Running=Ejecutando state.Starting=Iniciando +state.Stopped=Detenidas state.Stopping=Parando state.Suspended=Suspendido +ui.listView.filters.all=Todas +ui.listView.filters.mine=Mias diff --git a/client/WEB-INF/classes/resources/messages_fr_FR.properties b/client/WEB-INF/classes/resources/messages_fr_FR.properties index eddc664751..04c19d4672 100644 --- a/client/WEB-INF/classes/resources/messages_fr_FR.properties +++ b/client/WEB-INF/classes/resources/messages_fr_FR.properties @@ -68,6 +68,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 @@ -293,6 +294,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.list.name=Nom Liste ACL label.add.load.balancer=Ajouter un r\u00e9partiteur de charge label.add.more=Ajouter plus @@ -876,7 +878,8 @@ label.load.balancing.policies=R\u00e8gles de r\u00e9partition de charge label.load.balancing=R\u00e9partition de charge label.loading=Chargement en cours label.local=Local -label.local.storage.enabled=Stockage local activ\u00e9 +label.local.storage.enabled=Activer le stockage local pour les VMs Utilisateurs +label.local.storage.enabled.system.vms=Activer le stockage local pour les VMs Syst\u00e8mes label.local.storage=Stockage local label.login=Connexion label.logout=D\u00e9connexion @@ -1249,7 +1252,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.login=Identifiant SAML +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 @@ -1445,8 +1449,8 @@ label.update.ssl= Certificat SSL label.updating=Mise \u00e0 jour label.upgrade.required=Une mise \u00e0 jour est n\u00e9cessaire label.upgrade.router.newer.template=Mette \u00e0 jour le routeur pour utiliser le mod\u00e8le le plus r\u00e9cent -label.upload=Charger -label.upload.volume=Charger un volume +label.upload=T\u00e9l\u00e9verser +label.upload.volume=T\u00e9l\u00e9verser un volume label.url=URL label.usage.interface=Interface Utilisation label.usage.sanity.result=R\u00e9sultat de sant\u00e9 Usage diff --git a/client/WEB-INF/classes/resources/messages_hu.properties b/client/WEB-INF/classes/resources/messages_hu.properties index 9ae73e8fe1..153d4fedfc 100644 --- a/client/WEB-INF/classes/resources/messages_hu.properties +++ b/client/WEB-INF/classes/resources/messages_hu.properties @@ -293,6 +293,7 @@ label.add.ip.range=IP c\u00edmtartom\u00e1ny felv\u00e9tele label.add.isolated.guest.network=Izol\u00e1lt vend\u00e9g h\u00e1l\u00f3zat felv\u00e9tele label.add.isolated.network=Izol\u00e1lt h\u00e1l\u00f3zat felv\u00e9tele label.additional.networks=Tov\u00e1bbi h\u00e1l\u00f3zatok +label.add.LDAP.account=LDAP sz\u00e1mla felv\u00e9tele label.add.list.name=ACL lista n\u00e9v label.add.load.balancer=Terhel\u00e9seloszt\u00f3 felv\u00e9tele label.add.more=Tov\u00e1bbi felv\u00e9tele @@ -414,7 +415,7 @@ 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.address=Vcs Switch c\u00edm label.brocade.vcs.details=Brocade Vcs Switch r\u00e9szletek label.by.account=Sz\u00e1mla alapj\u00e1n label.by.alert.type=Riaszt\u00e1s t\u00edpus szerint @@ -481,7 +482,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 @@ -876,7 +877,6 @@ 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 bekapcsolva label.local.storage=Helyi t\u00e1r label.login=Bel\u00e9p\u00e9s label.logout=Kijelentkez\u00e9s @@ -988,7 +988,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 @@ -1114,7 +1114,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 @@ -1181,7 +1181,7 @@ label.release.dedicated.zone=Dedik\u00e1lt z\u00f3na elenged\u00e9se label.remind.later=Eml\u00e9keztess k\u00e9s\u0151bb\! label.remove.ACL=ACL elt\u00e1vol\u00edt\u00e1sa label.remove.egress.rule=Egress szab\u00e1ly t\u00f6rl\u00e9se -label.remove.from.load.balancer=Removing instance from load balancer +label.remove.from.load.balancer=P\u00e9ld\u00e1ny elt\u00e1vol\u00edt\u00e1sa a terhel\u00e9seloszt\u00f3b\u00f3l label.remove.ingress.rule=Ingress szab\u00e1ly t\u00f6rl\u00e9se label.remove.ip.range=IP tartom\u00e1ny elt\u00e1vol\u00edt\u00e1sa label.remove.ldap=LDAP elt\u00e1vol\u00edt\u00e1sa @@ -1206,7 +1206,7 @@ label.replace.acl.list=ACL lista cser\u00e9je label.required=Sz\u00fcks\u00e9ges label.requires.upgrade=Friss\u00edt\u00e9st ig\u00e9nyel label.reserved.ip.range=Elk\u00fcl\u00f6n\u00edtett IP c\u00edmtartom\u00e1ny -label.reserved.system.gateway=Reserved system gateway +label.reserved.system.gateway=Elk\u00fcl\u00f6n\u00edtett rendszer \u00e1tj\u00e1r\u00f3 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=VM \u00fajraind\u00edt\u00e1sa @@ -1233,7 +1233,7 @@ label.root.certificate=F\u0151tan\u00fas\u00edtv\u00e1ny 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.router.vm.scaled.up=Router VM felm\u00e9retezve label.routing.host=Routing Host label.routing=\u00datvonalv\u00e1laszt\u00e1s label.rule.number=Szab\u00e1ly sz\u00e1m @@ -1249,7 +1249,6 @@ label.s3.nfs.server=S3 NFS kiszolg\u00e1l\u00f3 label.s3.secret_key=Titkos kulcs label.s3.socket_timeout=Kapcsolat id\u0151t\u00fall\u00e9p\u00e9s label.s3.use_https=HTTPS haszn\u00e1lata -label.saml.login=SAML bel\u00e9p\u00e9s label.saturday=Szombat label.save.and.continue=Ment\u00e9s \u00e9s folytat\u00e1s label.save=Ment\u00e9s @@ -1264,7 +1263,7 @@ label.secondary.storage.count=Secondary Storage Pools label.secondary.storage.details=M\u00e1sodlagos t\u00e1r r\u00e9szletek label.secondary.storage.limits=M\u00e1sodlagos t\u00e1r korl\u00e1tok (GiB) label.secondary.storage=M\u00e1sodlagos t\u00e1r -label.secondary.storage.vm=Secondary storage VM +label.secondary.storage.vm=M\u00e1sodlagos t\u00e1r VM label.secondary.used=Haszn\u00e1lt m\u00e1sodlagos t\u00e1r label.secret.key=Titkos kulcs label.security.group=Biztons\u00e1gi csoport @@ -1444,7 +1443,7 @@ label.update.ssl.cert= SSL tan\u00fas\u00edtv\u00e1ny label.update.ssl= SSL tan\u00fas\u00edtv\u00e1ny label.updating=Updating label.upgrade.required=Frissit\u00e9sre van sz\u00fcks\u00e9g -label.upgrade.router.newer.template=Upgrade Router to Use Newer Template +label.upgrade.router.newer.template=Router friss\u00edt\u00e9se \u00faj sablonnal label.upload=Felt\u00f6lt\u00e9s label.upload.volume=K\u00f6tet felt\u00f6lt\u00e9se label.url=URL @@ -1483,7 +1482,7 @@ label.viewing=Megtekint\u00e9s label.view.more=Tov\u00e1bbiak megtekint\u00e9se label.view=N\u00e9zet label.view.secondary.ips=M\u00e1sodlagos IP c\u00edmek megtekint\u00e9se -label.virtual.appliance.details=Virtual applicance details +label.virtual.appliance.details=Virtu\u00e1lis k\u00e9sz\u00fcl\u00e9k r\u00e9szletei label.virtual.appliances=Virtu\u00e1lis k\u00e9sz\u00fcl\u00e9kek label.virtual.appliance=Virtu\u00e1lis k\u00e9sz\u00fcl\u00e9k label.virtual.machines=Virtu\u00e1lis g\u00e9pek @@ -1586,7 +1585,7 @@ 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.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 @@ -1662,14 +1661,14 @@ 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? message.add.cluster=Add a hypervisor managed cluster for zone , pod message.add.cluster.zone=Add a hypervisor managed cluster for zone message.add.disk.offering=Add meg a k\u00f6vetkez\u0151 param\u00e9tereket az \u00faj merevlemez aj\u00e1nlat felv\u00e9tel\u00e9hez -message.add.domain=Please specify the subdomain you want to create under this domain +message.add.domain=Adj meg egy aldom\u00e9nt, amit ez alatt a dom\u00e9n alatt l\u00e9tre akarsz hozni\! message.add.firewall=T\u0171zfal felv\u00e9tele a z\u00f3n\u00e1ba 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 @@ -1678,18 +1677,18 @@ message.adding.Netscaler.device=Netscaler eszk\u00f6z felv\u00e9tele message.adding.Netscaler.provider=Netscaler szolg\u00e1ltat\u00f3 felv\u00e9tele message.add.ip.range.direct.network=Add an IP range to direct network in zone message.add.ip.range=IP tartom\u00e1ny felv\u00e9tele a z\u00f3na publikus h\u00e1l\u00f3zat\u00e1hoz -message.add.ip.range.to.pod=

Add an IP range to pod\:

+message.add.ip.range.to.pod=

IP tartom\u00e1ny felv\u00e9tele a pod-hoz

message.additional.networks.desc=V\u00e1lassz ki tov\u00e1bbi h\u00e1l\u00f3zatokat, amelyekhez a virtu\u00e1lis p\u00e9ld\u00e1nyod csatlakozik majd\! 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.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.load.balancer.under.ip=A terhel\u00e9seloszt\u00f3 szab\u00e1ly felv\u00e9telre ker\u00fclt a k\u00f6vetkez\u0151 IP-hez\: +message.add.network=H\u00e1l\u00f3zat felv\u00e9tele a z\u00f3n\u00e1ban +message.add.new.gateway.to.vpc=Add meg az inform\u00e1ci\u00f3kat az \u00faj \u00e1tj\u00e1r\u00f3 felv\u00e9tel\u00e9hez a VPC-ben\! 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.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.pod=\u00daj pod felv\u00e9tele a z\u00f3n\u00e1ban +message.add.primary=Add meg a k\u00f6vetkez\u0151 adatokat az \u00faj els\u0151dleges t\u00e1r felv\u00e9tel\u00e9hez +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 a sz\u00e1m\u00edt\u00e1si aj\u00e1nlat l\u00e9trehoz\u00e1s\u00e1hoz\! message.add.system.service.offering=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat a \u00faj rendszer szolg\u00e1ltat\u00e1s aj\u00e1nlat l\u00e9trehoz\u00e1s\u00e1hoz\! message.add.template=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj sablon felv\u00e9tel\u00e9hez\! @@ -1698,8 +1697,8 @@ message.add.VPN.gateway=Er\u0151s\u00edtsd meg, hogy VPN \u00e1tj\u00e1r\u00f3t 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.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.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 @@ -1776,7 +1775,7 @@ 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 @@ -1818,7 +1817,7 @@ message.detach.iso.confirm=Er\u0151s\u00edtsd meg, hogy le akarod v\u00e1lasztan message.disable.account=Er\u0151s\u00edtsd meg, hogy ki szeretn\u00e9d kapcsolni ezt a sz\u00e1ml\u00e1t. A sz\u00e1mla kikapcsol\u00e1s\u00e1val a sz\u00e1mla felhaszn\u00e1l\u00f3inak hozz\u00e1f\u00e9r\u00e9se az er\u0151forr\u00e1sokhoz megsz\u00fcnik. Minden fut\u00f3 virtu\u00e1lis g\u00e9p azonnal le lesz \u00e1ll\u00edtva. message.disable.snapshot.policy=Sikeresen kikapcsoltad a jelenlegi pillanatfelv\u00e9tel szab\u00e1lyt. message.disable.user=Er\u0151s\u00edtsd meg, hogy ki akarod kapcsolni a felhaszn\u00e1l\u00f3t\! -message.disable.vpn.access=Please confirm that you want to disable Remote Access VPN. +message.disable.vpn.access=Er\u0151s\u00edtsd meg, hogy ki akarod kapcsolni a t\u00e1voli VPN hozz\u00e1f\u00e9r\u00e9st\! message.disable.vpn=Biztosan ki akarod kapcsolni a VPN-t? message.disabling.network.offering=H\u00e1l\u00f3zat aj\u00e1nlat kikapcsol\u00e1sa message.disabling.vpc.offering=VPC aj\u00e1nlat kikapcsol\u00e1sa @@ -1827,15 +1826,15 @@ message.download.ISO=Az ISO let\u00f6lt\u00e9s\u00e9hez kattints 0 message.download.template=A sablon let\u00f6lt\u00e9s\u00e9hez kattints 00000 message.download.volume=A k\u00f6tet let\u00f6lt\u00e9s\u00e9hez kattints href\="\#">00000 message.download.volume.confirm=Er\u0151s\u00edtsd meg, hogy le akarod t\u00f6lteni ezt a k\u00f6tetet\! -message.edit.account=Edit ("-1" indicates no limit to the amount of resources create) +message.edit.account=Szerkeszt\u00e9s ("-1" jelzi az er\u0151forr\u00e1s haszn\u00e1lat\u00e1nak korl\u00e1tlans\u00e1g\u00e1t) message.edit.confirm=Er\u0151s\u00edtsd meg a v\u00e1ltoztat\u00e1sokat miel\u00f6tt a ment\u00e9sre kattintassz\! message.edit.limits=Hat\u00e1rozz meg korl\u00e1tokat a k\u00f6vetkez\u0151 er\u0151forr\u00e1sokhoz\! A "-1" jelzi a korl\u00e1tlanan felhaszn\u00e1l\u00e1st. -message.edit.traffic.type=Please specify the traffic label you want associated with this traffic type. +message.edit.traffic.type=Add meg a forgalom c\u00edmk\u00e9t, amit ezzel a forgalom t\u00edpussal akarsz \u00f6sszek\u00f6tni\! message.enable.account=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni ezt a sz\u00e1ml\u00e1t\! 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.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 @@ -1927,7 +1926,7 @@ message.portable.ip.delete.confirm=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6ln 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=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=Please read the dynamic scaling section in the admin guide before scaling up. +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=\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. @@ -1968,7 +1967,7 @@ message.step.3.continue=V\u00e1lassz egy merevlemez aj\u00e1nlatot a folytat\u00 message.step.3.desc= message.step.4.continue=V\u00e1lassz legal\u00e1bb egy h\u00e1l\u00f3zatot a folytat\u00e1shoz\! message.step.4.desc=V\u00e1laszd ki az els\u0151dleges h\u00e1l\u00f3zatot, amelyhez a virtu\u00e1lis p\u00e9ld\u00e1nyod csatlakozni fog\! -message.storage.traffic=Traffic between CloudStack\\'s internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs. Please configure storage traffic here. +message.storage.traffic=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. \u00c1ll\u00edtsd be a t\u00e1r forgalmat itt\! 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. @@ -2018,7 +2017,7 @@ 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.no.network.selection=A kiv\u00e1lasztott z\u00f3n\u00e1ban nincsen kiv\u00e1laszthat\u00f3 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 diff --git a/client/WEB-INF/classes/resources/messages_it_IT.properties b/client/WEB-INF/classes/resources/messages_it_IT.properties index d445b9b328..1af518d02e 100644 --- a/client/WEB-INF/classes/resources/messages_it_IT.properties +++ b/client/WEB-INF/classes/resources/messages_it_IT.properties @@ -18,6 +18,7 @@ changed.item.properties=Elementi delle propriet\u00e0 modificati confirm.enable.s3=Si prega di inserire i valori richiesti per abilitare il supporto per il Secondary Storage di tipo S3 confirm.enable.swift=Si prega di inserire i valori richiesti per abilitare il supporto per Swift +error.could.not.change.your.password.because.ldap.is.enabled=Errore non \u00e8 possibile cambiare la tua password perch\u00e8 LDAP \u00e8 abilitato. error.could.not.enable.zone=Impossibile abilitare la zona error.installWizard.message=E\\' stato rilevato un errore\: tornare agli step precedenti e correggere gli errori error.invalid.username.password=Username o Password non valida @@ -31,12 +32,18 @@ error.something.went.wrong.please.correct.the.following=E\\' stato rilevato un e error.unable.to.reach.management.server=Impossibile raggiungere il Management Server error.unresolved.internet.name=Il tuo nome internet non pu\u00f2 essere risolto. force.delete.domain.warning=Attenzione\: La scelta di questa opzione provocher\u00e0 la rimozione di tutti i sotto domini e agli account associati e alle loro risorse. +force.delete=Forza la cancellazione +force.remove=Forza la rimozione force.remove.host.warning=Attenzione\: La scelta di questa opzione provocher\u00e0 l\\'arresto forzato di tutte le virtual machine da parte di CloudStack prima di rimuovere questo host dal cluster. +force.stop=Forza l\\'Arresto force.stop.instance.warning=Attenzione\: Forzare un arresto su questa instanza dovrebbe essere l\\'ultima opzione. C\\'\u00e8 il rischio di perdita di dati e di un comportamento inconsistente dello stato della virtual machine. ICMP.code=Codice ICMP ICMP.type=Tipo ICMP image.directory=Directory Immagine +inline=Inline instances.actions.reboot.label=Riavviare una instanza +label.about=About +label.about.app=About CloudStack label.accept.project.invitation=Accettare un invito ad un progetto label.account=Account label.account.and.security.group=Account, Security group @@ -45,6 +52,7 @@ label.account.name=Nome Account label.account.specific=Specifico dell\\'Account label.accounts=Utenti label.acquire.new.ip=Acquisizione nuovo indirizzo IP +label.acquire.new.secondary.ip=Acquisizione nuovo IP secondario label.action.attach.disk=Collegamento di un Disco label.action.attach.disk.processing=Collegamento Disco in corso... label.action.attach.iso=Collegamento di una immagine ISO @@ -55,7 +63,9 @@ label.action.change.password=Modifica della Password label.action.change.service=Modificare Servizio label.action.change.service.processing=Modifica del Servizio in corso... label.action.copy.ISO=Copia della immagine ISO +label.action.copy.ISO.processing=Copia immagine ISO in corso... label.action.copy.template=Copia di un Template +label.action.copy.template.processing=Copia di un Template in corso... label.action.create.template=Creazione Template label.action.create.template.from.vm=Creazione Template da una VM label.action.create.template.from.volume=Creazione Template da un Volume @@ -74,6 +84,8 @@ label.action.delete.domain=Cancellazione Dominio label.action.delete.domain.processing=Cancellazione Dominio in corso.... label.action.delete.firewall=Cancellazione regola firewall label.action.delete.firewall.processing=Cancellazione Firewall in corso.... +label.action.delete.ingress.rule=Cancellazione della Regola in Ingresso +label.action.delete.ingress.rule.processing=Cancellazione della Regola in Ingresso in corso... label.action.delete.IP.range=Cancellazione intervallo indirizzi IP label.action.delete.IP.range.processing=Cancellazione intervallo indirizzi IP in corso.... label.action.delete.ISO=Cancellazione immagine ISO @@ -83,6 +95,7 @@ label.action.delete.load.balancer.processing=Cancellazione Load Balancer in cors label.action.delete.network=Cancellazione Rete label.action.delete.network.processing=Cancellazione Rete in corso.... label.action.delete.nexusVswitch=Cancellare Nexus 1000v +label.action.delete.nic=Rimuovi NIC label.action.delete.physical.network=Cancellazione di una rete fisica label.action.delete.pod=Cancellazione Pod label.action.delete.pod.processing=Cancellazione Pod in corso.... @@ -164,6 +177,9 @@ label.action.enable.user=Abilitazione Utente label.action.enable.user.processing=Abilitazione Utente in corso.... label.action.enable.zone=Abilitazione Zona label.action.enable.zone.processing=Abilitazione Zona in corso.... +label.action.expunge.instance=Cancellare l\\'Istanza +label.action.expunge.instance.processing=Cancellazione dell\\'Istanza in corso... +label.action.force.reconnect=Forza la Riconnessione label.action.force.reconnect.processing=Riconnessione in corso.... label.action.generate.keys=Generazione Chiavi label.action.generate.keys.processing=Generazione Chiavi in corso.... @@ -184,6 +200,7 @@ label.action.reboot.router.processing=Riavvio Router in corso.... label.action.reboot.router=Riavvio Router label.action.reboot.systemvm.processing=Riavvio VM di Sistema in corso.... label.action.reboot.systemvm=Riavvio VM di Sistema +label.action.recurring.snapshot=Snapshot Ricorrenti label.action.register.iso=Registrare una ISO label.action.register.template=Registrare un template label.action.release.ip.processing=Rilascio indirizzo IP in corso.... @@ -194,8 +211,11 @@ label.action.reset.password.processing=Reset della Password in corso.... label.action.reset.password=Reset Password label.action.resize.volume.processing=Ridimensionamento Volume in corso.... label.action.resize.volume=Ridimensionamento Volume +label.action.resource.limits=Limiti delle Risorse label.action.restore.instance.processing=Restore dell\\'Instanza in corso.... label.action.restore.instance=Restore Instanza +label.action.revert.snapshot.processing=Ripristino dello Snapshot in corso... +label.action.revert.snapshot=Ripristinare lo Snapshot label.actions=Azioni label.action.start.instance=Avvio Instanza label.action.start.instance.processing=Avvio Instanza in corso.... @@ -209,70 +229,139 @@ label.action.stop.router=Arresto Router label.action.stop.router.processing=Arresto Router in corso.... label.action.stop.systemvm=Arresto VM di Sistema label.action.stop.systemvm.processing=Arresto VM di Sistema in corso.... +label.action.take.snapshot=Cattura uno Snapshot label.action.take.snapshot.processing=Esecuzione di Snapshot in corso.... label.action.update.OS.preference=Aggiornamento Preferenze OS label.action.update.OS.preference.processing=Aggiornamento preferenze OS in corso.... +label.action.update.resource.count=Aggiornare il conteggio delle Risorse +label.action.update.resource.count.processing=Aggiornamento del conteggio delle Risorse in corso... +label.action.vmsnapshot.create=Cattura uno Snapshot della VM +label.action.vmsnapshot.delete=Cancella lo Snapshot della VM +label.action.vmsnapshot.revert=Ripristinare lo snapshot della VM label.activate.project=Attivare il Progetto label.active.sessions=Sessioni Attive +label.add.account=Aggiungi un Account label.add.accounts=Aggiungere utenti label.add.accounts.to=Aggiungere utenti a label.add.account.to.project=Aggiungere account al progetto label.add.ACL=Aggiungere ACL +label.add.affinity.group=Aggiungere un nuovo gruppo di affinit\u00e0 +label.add.BrocadeVcs.device=Aggiungere Switch Brocade Vcs +label.add.by.cidr=Aggiungere da CIDR label.add.cluster=Aggiunta Cluster label.add.compute.offering=Aggiungere una offerta computazionale +label.add.disk.offering=Aggiungere Offerta Disco label.add.domain=Aggiunta Dominio label.add.egress.rule=Aggiungere una regola d\\'uscita label.add.F5.device=Aggiungere device F5 label.add.firewall=Aggiunta regola firewall label.add.guest.network=Aggiungere una rete guest label.add.host=Aggiunta Host +label.adding=Aggiunta +label.adding.cluster=Aggiungere un Cluster +label.adding.failed=Aggiunta Fallita +label.adding.pod=Aggiungere un Pod +label.adding.processing=Aggiunta in corso... +label.adding.succeeded=Aggiunta avvenuta +label.adding.user=Aggiungere un Utente +label.adding.zone=Aggiunta della Zona +label.add.intermediate.certificate=Aggiungere un certificato intermedio +label.add.ip.range=Aggiungere un IP Range label.additional.networks=Network Aggiuntivi +label.add.load.balancer=Aggiungere un Load Balancer label.add.netScaler.device=Aggiungere device Netscaler label.add.network.ACL=Aggiungere le ACL di rete +label.add.network=Aggiungere una Rete +label.add.network.device=Aggiungere un Dispositivo di Rete label.add.network.offering=Aggiungere offerta di rete label.add.new.F5=Aggiungere nuovo F5 label.add.new.gateway=Aggiungere un nuovo gateway label.add.new.NetScaler=Aggiungere nuovo NetScaler +label.add.new.PA=Aggiungere un nuovo Palo Alto label.add.new.SRX=Aggiungere nuovo SRX label.add.new.tier=Aggiungere un nuovo livello +label.add.NiciraNvp.device=Aggiungere Controller Nvp +label.add.PA.device=Aggiungere un device Palo Alto label.add.physical.network=Aggiungere rete fisica +label.add.pod=Aggiungere un Pod label.add.port.forwarding.rule=Aggiungere una regola di port forwarding +label.add.primary.storage=Aggiungere uno Storage Primario +label.add.region=Aggiungere una Regione label.add.resources=Aggiungere Risorse label.add.route=Aggiungere una rotta label.add.rule=Aggiungere regola +label.add.secondary.storage=Aggiungere uno Storage Secondario +label.add.security.group=Aggiungere un Gruppo di Sicurezza +label.add.service.offering=Aggiungere un\\'Offerta di Servizio label.add.SRX.device=Aggiungere device SRX label.add.static.nat.rule=Aggiungere regola di NAT statico label.add.static.route=Aggiungere una rotta statica label.add.system.service.offering=Aggiungere Offerte di Servizio di Sistema +label.add.template=Aggiungere un Template label.add.to.group=Aggiungere al gruppo +label.add.user=Aggiungere un Utente +label.add.vlan=Aggiungere una VLAN label.add.vm=Aggiungere VM label.add.vms=Aggiunvere VM label.add.vms.to.lb=Aggiungere VM a regola di bilanciamento di carico label.add.VM.to.tier=Aggiungere una VM al livello +label.add.volume=Aggiungere un Volume label.add.vpc=Aggiungere VPC label.add.vpn.customer.gateway=Aggiungere Gateway VPN del Cliente label.add.VPN.gateway=Aggiungere un Gateway VPN label.add.vpn.user=Aggiungere utente VPN +label.add.vxlan=Aggiungere una VXLAN +label.add.zone=Aggiungere una Zona +label.admin.accounts=Account Amministrativi +label.admin=Amministratore label.advanced=Avanzato +label.advanced.mode=Avanzato label.advanced.search=Ricerca Avanzata +label.affinity=Affinit\u00e0 +label.affinity.group=Gruppo di Affinit\u00e0 +label.affinity.groups=Gruppi di Affinit\u00e0 label.agent.password=Password per l\\'Agent label.agent.username=Username per l\\'Agent +label.alert=Allarme +label.algorithm=Algoritmo label.allocated=Allocato +label.anti.affinity=Anti-affinit\u00e0 +label.api.key=Chiave API +label.api.version=Versione API label.apply=Applicare +label.app.name=CloudStack +label.archive.alerts=Archivia allarmi +label.archive.events=Archivia eventi label.associated.network=Rete Associata +label.attached.iso=ISO Collegata +label.available=Disponibile label.available.public.ips=Indirizzi IP Pubblici Disponibili +label.back=Indietro label.bandwidth=Capacit\u00e0 della banda (Bandwidth) label.basic=Basic +label.basic.mode=Modalit\u00e0 Base +label.bootable=Avviabile label.broadcast.uri=URI di Broadcast label.broadcat.uri=URI di Broadcast +label.by.alert.type=Per tipo di allarme +label.by.date.end=Per data (fino a) +label.by.date.start=Per data (da) +label.by.event.type=Per tipo di evento +label.bytes.received=Byte Ricevuti +label.bytes.sent=Byte Inviati label.cancel=Annulla +label.capacity.bytes=Capacit\u00e0 Byte +label.capacity=Capacit\u00e0 +label.capacity.iops=Capacit\u00e0 IOPS label.certificate=Certificato label.change.service.offering=Modificare offerta di servizio +label.change.value=Cambia il valore label.character=Carattere label.cidr=CIDR label.CIDR.list=Lista CIDR label.CIDR.of.destination.network=Valore CIDR della rete di destinazione label.clear.list=Pulizia dell\\'elenco +label.close=Chiudi label.cloud.console=Console di Gestione Cloud label.cluster=Cluster label.cluster.name=Nome del Cluster @@ -286,61 +375,107 @@ label.compute=Compute label.compute.offering=Offerta computazionale label.configuration=Configurazione label.configure=Configurare +label.configure.ldap=Configura LDAP label.configure.network.ACLs=Configurare le ACL di rete label.configure.vpc=Configurare VPC +label.confirmation=Conferma label.confirm.password=Confermare la password label.congratulations=Congratulazioni\! label.console.proxy=Proxy di Console label.continue.basic.install=Proseguire con l\\'installazione di base label.continue=Continuare label.corrections.saved=Salvataggio correzioni effettuato +label.cpu.allocated=CPU Allocate +label.cpu.allocated.for.VMs=CPU Allocate per VM +label.CPU.cap=Limite CPU label.cpu=CPU +label.cpu.limits=Limiti CPU label.cpu.mhz=CPU (in MHz) +label.cpu.utilized=CPU Utilizzata label.created.by.system=Creato dal sistema +label.created=Creato label.create.project=Creare un progetto label.create.template=Creare un template label.create.VPN.connection=Creare una Connessione VPN +label.custom.disk.size=Dimensione Disco Personalizzata +label.daily=Quotidiano +label.date=Data +label.day.of.month=Giorno del Mese +label.day.of.week=Giorno della Settimana label.decline.invitation=Declinare un invito label.dedicated=Dedicato label.default=Default label.default.view=Vista di default +label.delete.affinity.group=Cancella Gruppo di Affinit\u00e0 +label.delete.alerts=Cancella allarmi +label.delete=Cancellare +label.delete.events=Cancella eventi label.delete.F5=Rimozione F5 label.delete.gateway=rimuovere il gateway label.delete.NetScaler=Rimozione NetScaler +label.delete.NiciraNvp=Rimuovere Controller Nvp +label.delete.PA=Cancellare Palo Alto label.delete.project=Cancellare progetto label.delete.SRX=Rimozione SRX label.delete.VPN.connection=cancellare la connessione VPN label.delete.VPN.customer.gateway=cancellare il Gateway VPN del Cliente label.delete.VPN.gateway=cancellare un Gateway VPN label.delete.vpn.user=Cancellare utente VPN +label.deleting.failed=Cancellazione Fallita +label.deleting.processing=Cancellazione in corso... +label.description=Descrizione label.destination.physical.network.id=ID della rete fisica di destinazione label.destination.zone=Zona di destinazione label.destroy=Destroy +label.destroy.router=Distruggere il router +label.detaching.disk=Scollegamento Disco +label.details=Dettagli +label.device.id=ID Dispositivo label.devices=Device label.dhcp=DHCP +label.DHCP.server.type=Tipo di DHCP Server label.direct.ips=Indirizzi IP di Rete condivisi label.disabled=Disabilitato label.disable.provider=Disabilitare il provider label.disable.vpn=Disabilitare VPN +label.disabling.vpn.access=Disabilitare VPN +label.disk.iops.max=Max IOPS +label.disk.iops.min=Min IOPS +label.disk.iops.total=IOPS Totali +label.disk.offering=Offerta Disco +label.disk.provisioningtype=Tipo di Provisioning label.display.name=Nome visualizzato +label.dns.1=DNS 1 +label.dns.2=DNS 2 label.dns=DNS label.DNS.domain.for.guest.networks=Dominio DNS per Reti Guest +label.domain.admin=Amministratore di Dominio label.domain=Dominio +label.domain.id=ID del Dominio +label.domain.name=Nome del Dominio label.domain.router=Router di Dominio +label.domain.suffix=Suffisso DNS (es. xyz.com) label.done=Fatto +label.double.quotes.are.not.allowed=Doppi apici non consentiti +label.download.progress=Avanzamento del Download label.drag.new.position=Trascina nella nuova posizione label.edit.lb.rule=Modifica regola LB +label.edit=Modifica label.edit.network.details=Modificare le impostazioni di rete label.edit.project.details=Modificare i dettagli del progetto label.edit.tags=Modifica dei tag label.edit.traffic.type=Modifica del tipo di traffico label.edit.vpc=Modificare VPC +label.egress.default.policy=Egress Default Policy label.egress.rule=Regola d\\'uscita label.egress.rules=Regole d\\'uscita +label.email=Email label.enable.provider=Abilitare il provider label.enable.s3=Abilitare il Secondary Storage di tipo S3 label.enable.swift=Abilitare Swift label.enable.vpn=Abilitare VPN +label.enabling.vpn=Abilitazione della VPN +label.enabling.vpn.access=Abilitazione dell\\'accesso VPN label.end.IP=Indirizzo IP finale label.endpoint=Dispositivo label.end.reserved.system.IP=Indirizzo IP finale riservato di sistema @@ -349,9 +484,16 @@ label.error=Errore label.ESP.encryption=Encryption di ESP label.ESP.hash=Hash di ESP label.ESP.policy=Policy di ESP +label.example=Esempio +label.external.link=Link Esterno label.extractable=Estraibile label.f5=F5 label.failed=Errore +label.firewall=Firewall +label.first.name=Nome +label.format=Formato +label.friday=Venerd\u00ec +label.full=Completo label.full.path=Path completo label.gpu=CPU label.guest.end.ip=Indirizzo IP guest finale @@ -361,10 +503,14 @@ label.guest.start.ip=Indirizzo IP guest iniziale label.guest.traffic=Traffico della rete Guest label.guest.type=Tipo di Guest label.hints=Suggerimenti +label.home=Home label.host.MAC=MAC del sistema host +label.hvm=HVM label.hypervisor.capabilities=Funzionalit\u00e0 del Hypervisor label.hypervisor=Hypervisor +label.hypervisors=Hypervisor label.hypervisor.version=Versione hypervisor +label.id=ID label.IKE.DH=DH di IKE label.IKE.encryption=Encryption di IKE label.IKE.hash=Hash di IKE @@ -385,6 +531,12 @@ label.installWizard.addZone.title=Aggiungere una zona label.installWizard.click.launch=Fare click sul pulsante di avvio. label.installWizard.subtitle=Questa guida fornisce supporto nelle attivit\u00e0 di configurazione di una installazione CloudStack&\#8482 label.installWizard.title=Ciao e Benvenuti nel mondo di CloudStack&\#8482 +label.instance=Istanza +label.instance.limits=Limiti dell\\'Istanza +label.instance.name=Nome dell\\'Istanza +label.instances=Istanze +label.internal.dns.1=DNS 1 Interno +label.internal.dns.2=DNS2 Interno label.internal.name=Nome Interno label.introduction.to.cloudstack=Introduzione a CloudStack&\#8482 label.invitations=Inviti @@ -393,24 +545,34 @@ label.invite=Invito label.invite.to=Invito a label.ip.address=Indirizzo IP label.ipaddress=Indirizzo IP +label.ip=Indirizzo IP +label.ip.or.fqdn=IP o FQDN label.ip.ranges=Intervalli di indirizzi IP label.IPsec.preshared.key=Preshared-Key di IPsec +label.ips=Indirizzi IP +label.is.default=E\\' Default label.isolated.networks=Reti isolate label.isolation.method=Metodo di isolamento +label.isolation.mode=Modalit\u00e0 di Isolamento label.isolation.uri=URI di isolamento +label.is.shared=E\\' Condiviso label.keyboard.type=Tipo di tastiera label.key=Key label.kvm.traffic.label=Etichetta del traffico via KVM label.label=Label +label.lang.arabic=Arabo +label.lang.english=Inglese label.latest.events=Ultimi eventi label.launch=Avvio label.launch.vm=Avviare una VM label.lb.algorithm.roundrobin=Round-robin label.lb.algorithm.source=Sorgente label.LB.isolation=Isolamento di LB +label.ldap.configuration=Configurazione LDAP +label.ldap.port=Porta LDAP +label.level=Livello label.load.balancing=Bilanciamento di Carico label.load.balancing.policies=Politiche di Bilanciamento di Carico -label.local.storage.enabled=Local storage abilitato label.local.storage=Storage locale label.LUN.number=LUN \# label.management=Gestione @@ -430,6 +592,7 @@ label.memory.mb=Memoria (in MB) label.menu.accounts=Utenti label.menu.configuration=Configurazione label.menu.infrastructure=Infrastruttura +label.menu.instances=Istanze label.menu.system.service.offerings=Offerte di Sistema label.menu.templates=Template label.migrate.instance.to.host=Migrare instance verso un altro host @@ -478,6 +641,7 @@ label.please.specify.netscaler.info=Si prega di specificare le informazioni per label.pod.name=Nome del Pod label.pods=Pod label.port.forwarding.policies=Politiche di Port Forwarding +label.port=Porta label.previous=Precedente label.primary.storage.count=Pool del Primary Storage label.primary.storage=Storage Primario @@ -494,12 +658,18 @@ label.providers=Fornitori label.public.network=Rete pubblica label.purpose=Scopo label.quickview=Panoramica rapida +label.rbd.monitor=Ceph monitor +label.rbd.pool=Ceph pool +label.rbd=RBD label.reboot=Reboot +label.recover.vm=Recupera la VM label.redundant.router.capability=Capacit\u00e0 di ridondanza del router +label.reinstall.vm=Reinstalla la VM label.remind.later=Ricordami in seguito label.remove.ACL=Rimuovere ACL label.remove.egress.rule=Rimuovere una regola d\\'uscita label.remove.ip.range=Rimuovere intervallo di indirizzi IP +label.remove.ldap=Rimuovi LDAP label.remove.pf=Rimuovere regola di port forwarding label.remove.rule=Rimuovere regola label.remove.static.nat.rule=Rimuovere regola di NAT statico @@ -519,11 +689,15 @@ label.restore=Restore label.review=Riesaminare label.revoke.project.invite=Revocare un invit label.root.disk.controller=Controller del disco root +label.root.disk.size=Dimensione disco Root +label.routing=Routing label.rules=Regole label.s3.access_key=Access Key label.s3.connection_timeout=Tempo di scadenza connessione label.s3.endpoint=Dispositivo label.s3.max_error_retry=Numero massimo di tentativi a seguito di errore +label.s3.nfs.path=Percorso S3 NFS +label.s3.nfs.server=S3 NFS Server label.s3.secret_key=Secret Key label.s3.socket_timeout=Tempo di scadenza del Socket label.s3.use_https=Utilizzare HTTPS @@ -544,6 +718,7 @@ label.select.tier=Selezionare il Livello label.select-view=Selezionare la vista label.select.vm.for.static.nat=Selezionare una VM per il NAT statico label.service.capabilities=Capacit\u00e0 di Servizio +label.service.state=Stato del Servizio label.setup=Installazione label.setup.network=Configurazione Rete label.setup.zone=Configurazione Zona @@ -551,6 +726,10 @@ label.set.up.zone.type=Configurazione del tipo di Zona label.shutdown.provider=Arresto del provider label.site.to.site.VPN=Site-to-site VPN label.skip.guide=Se si ha familiarit\u00e0 con CloudStack per utilizzi precedenti, si pu\u00f2 saltare questa guida +label.smb.domain=Dominio SMB +label.smb.password=Password SMB +label.smb.username=Username SMB +label.sockets=CPU Socket label.specify.IP.ranges=Specificare intervallo di indirizzi IP label.srx=SRX label.start.IP=Indirizzo IP iniziale @@ -588,9 +767,11 @@ label.traffic.types=Tipi di Traffico label.update.project.resources=Aggiornare le risorse di progetto label.upload=Upload label.upload.volume=Volume di upload +label.use.vm.ips=Usa Indirizzo IP della VM label.vcdcname=Nome DC del vCenter label.vcipaddress=Indirizzo IP del vCenter label.viewing=Visualizzazione +label.view.secondary.ips=Vedi IP Secondari label.view=Vista label.virtual.machines=Virtual machine label.virtual.routers=Router Virtuali @@ -599,6 +780,7 @@ label.vlan.only=VLAN label.vlan=VLAN label.vm.destroy=Destroy label.vm.display.name=Nome visualizzato della VM +label.vm.ip=Indirizzo IP della VM label.vm.name=Nome VM label.vm.reboot=Reboot label.VMs.in.tier=VM nei livelli @@ -628,9 +810,11 @@ label.zoneWizard.trafficType.guest=Guest\: Traffico di rete tra le virtual machi label.zoneWizard.trafficType.management=Management\: Traffico di rete tra le risorse interne di CloudStack, incluso qualsiasi componente che comunichi con il Management Server, come ad esempio gli host e le VM di Sistema di CloudStack label.zoneWizard.trafficType.public=Public\: Traffico di rete tra la rete internet e le virtual machine nell\\'infrastruttura cloud. label.zoneWizard.trafficType.storage=Storage\: Traffico di rete tra i server di primary e secondary storage, come ad esempio i template delle VM e le operazioni di snapshot +message.acquire.ip.nic=Prego confermare che si vuole acquisire un nuovo IP secondario per questa NIC.
NOTA\: Deve essere configurato manualmente il nuovo IP secondario acquisito all\\'interno della virtual machine. message.acquire.new.ip=Si prega di confermare di voler acquisire un nuovo indirizzo IP per questa rete. message.acquire.new.ip.vpc=Si prega di confermare di voler acquisire un nuovo indirizzo IP per questo VPC. message.action.delete.nexusVswitch=Si prega di confermare di voler cancellare questo nexus 1000v +message.action.delete.nic=Prego conferma che si vuole rimuovere questa NIC, questo rimuover\u00e0 anche le reti associate dalla VM. message.action.delete.physical.network=Si prega di confermare di voler cancellare questa rete fisica message.action.delete.system.service.offering=Si prega di confermare di voler cancellare questa offerta di servizio di sistema. message.action.disable.nexusVswitch=Si prega di confermare di voler disabilitare questo nexus 1000v @@ -733,10 +917,12 @@ message.ip.address.changed=Il tuo indirizzo IP potrebbe essere cambiato; si desi message.iso.desc=Immagine disco contenente dati o supporto avviabile di boot per il SO message.join.project=Ora appartieni al progetto. Si prega di passare alla vista Progetto per accedere. message.launch.zone=La Zona \u00e8 pronta per l\\'avvio; si prega di procedere al passo successivo. +message.listView.subselect.multi=(Ctrl/Cmd-click) message.migrate.instance.to.host=Si prega di confermare di voler migrare instance verso un altro host. message.migrate.instance.to.ps=Si prega di confermare di voler migrare instance verso un altro primary storage. message.migrate.router.confirm=Si prega di confermare l\\'host a cui si intende migrare il router\: message.migrate.volume=Si prega di confermare di voler migrare il volume verso un altro primary storage. +message.no.affinity.groups=Non \u00e8 presente alcun gruppo di affinit\u00e0. Prego proseguire al prossimo passaggio. message.no.projects.adminOnly=Non si dispone di alcun progetto.
Si prega di chiedere la creazione di un nuovo progetto al proprio amministratore. message.no.projects=Non si possiedono progetti.
Si prega di creare un nuovo progetto dalla sezione progetti. message.pending.projects.1=Ci sono inviti a progetti in attesa di risposta\: @@ -747,12 +933,15 @@ message.please.select.a.different.public.and.management.network.before.removing= message.please.select.networks=Si prega di selezionare le reti per la virtual machine. message.please.wait.while.zone.is.being.created=Si prega di attendere la creazione della zona; pu\u00f2 richiedere tempo... message.project.invite.sent=L\\'invito \u00e8 stato spedito all\\'utente; l\\'utente sar\u00e0 aggiunto al progetto solo dopo aver accettato l\\'invito +message.recover.vm=Prego confermare che si vuole recuperare questa VM. +message.reinstall.vm=NOTA\: Attenzione. Questo causer\u00e0 la reinstallazione della VM partendo dal template; i dati nel disco principale verranno persi. I dati nei volumi aggiuntivi, se esistenti, non verranno toccati. message.remove.vpc=Si prega di confermare di voler rimuovere VPC message.reset.password.warning.notPasswordEnabled=L\\'immagine template di questa instanza \u00e8 stata creata senza l\\'abilitazione della password message.reset.password.warning.notStopped=L\\'instanza deve essere arrestata prima di poter modificare la password message.reset.VPN.connection=Si prega di confermare di voler effettuare il reset della connessione VPN message.restart.network=Tutti i servizi forniti da questa rete saranno interrotti. Si prega di confermare di voler riavviare questa rete. message.restart.vpc=Si prega di confermare di voler riavviare VPC +message.select.affinity.groups=Prego selezionare un gruppo di affinit\u00e0 a cui si vuole far appartenere questa VM\: message.select.a.zone=Una zona corrisponde tipicamente ad un singolo datacenter. Zone multiple consentono di aumentare l\\'affidabilit\u00e0 creando isolamento fisico e ridondanza. message.select.instance=Si prega di selezionare una instanza. message.select.iso=Si prega di selezionare una immagine ISO per la nuova instanza virtuale. @@ -777,6 +966,7 @@ message.tooltip.reserved.system.netmask=Il prefisso di rete che definisce la sub message.tooltip.zone.name=Un nome per la zona. message.update.resource.count=Si prega di confermare di voler aggiornare il valore delle risorse per questo account. message.validate.instance.name=Il nome dell\\'instanza non pu\u00f2 avere lunghezza superiore a 63 caratteri. Sono consentite solo lettere ASCII a-z, A-Z, numeri 0-9, segni \\'-\\'. Il primo carattere deve essere una lettera, e l\\'ultimo una lettera o un numero. +message.validate.invalid.characters=RIlevati caratteri non validi; prego correggere message.vm.review.launch=Si prega di riesaminare le informazioni e confermare l\\'instance virtuale scelta sia corretta prima di avviarla. message.you.must.have.at.least.one.physical.network=E\\' necessario disporre di almeno una rete fisica message.Zone.creation.complete=Creazione zona completata diff --git a/client/WEB-INF/classes/resources/messages_ja_JP.properties b/client/WEB-INF/classes/resources/messages_ja_JP.properties index d662ea468f..cacdc21910 100644 --- a/client/WEB-INF/classes/resources/messages_ja_JP.properties +++ b/client/WEB-INF/classes/resources/messages_ja_JP.properties @@ -67,6 +67,7 @@ label.action.cancel.maintenance.mode=\u4fdd\u5b88\u30e2\u30fc\u30c9\u306e\u30ad\ 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.configure.samlauthorization=SAML SSO \u8a8d\u8a3c\u3092\u8a2d\u5b9a\u3059\u308b label.action.copy.ISO=ISO \u306e\u30b3\u30d4\u30fc 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.... @@ -292,6 +293,7 @@ label.add.ip.range=IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u306e\u8ffd\u52 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 @@ -846,6 +848,7 @@ label.lang.dutch=\u30aa\u30e9\u30f3\u30c0\u8a9e (\u30aa\u30e9\u30f3\u30c0) label.lang.english=\u82f1\u8a9e label.lang.french=\u30d5\u30e9\u30f3\u30b9\u8a9e label.lang.german=\u30c9\u30a4\u30c4\u8a9e +label.lang.hungarian=\u30cf\u30f3\u30ac\u30ea\u30fc\u8a9e label.lang.italian=\u30a4\u30bf\u30ea\u30a2\u8a9e label.lang.japanese=\u65e5\u672c\u8a9e label.lang.korean=\u97d3\u56fd\u8a9e @@ -874,7 +877,8 @@ 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=\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 \u306b\u5bfe\u3057\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u5316\u3059\u308b +label.local.storage.enabled=\u30e6\u30fc\u30b6\u30fc VM \u306b\u5bfe\u3057\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u5316\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 @@ -1248,7 +1252,8 @@ 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 -label.saml.login=SAML \u30ed\u30b0\u30a4\u30f3 +label.saml.enable=SAML SSO \u8a8d\u8a3c +label.saml.entity=\u8a8d\u8a3c\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc label.saturday=\u571f\u66dc\u65e5 label.save.and.continue=\u4fdd\u5b58\u3057\u3066\u7d9a\u884c label.save=\u4fdd\u5b58 @@ -1694,7 +1699,7 @@ message.add.system.service.offering=\u65b0\u3057\u3044\u30b7\u30b9\u30c6\u30e0 \ 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.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.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 diff --git a/client/WEB-INF/classes/resources/messages_ko_KR.properties b/client/WEB-INF/classes/resources/messages_ko_KR.properties index d96a217bbc..539ec42b60 100644 --- a/client/WEB-INF/classes/resources/messages_ko_KR.properties +++ b/client/WEB-INF/classes/resources/messages_ko_KR.properties @@ -642,7 +642,6 @@ label.load.balancer=\ub124\ud2b8\uc6cc\ud06c \ub85c\ub4dc \uacf5\uc720 \uc7a5\uc label.load.balancing.policies=\ub124\ud2b8\uc6cc\ud06c \ub85c\ub4dc \uacf5\uc720 \uc815\ucc45 label.load.balancing=\ub124\ud2b8\uc6cc\ud06c \ub85c\ub4dc \uacf5\uc720 label.loading=\ub85c\ub4dc \ud558\ub294 \uc911 -label.local.storage.enabled=\ub85c\uceec \uc2a4\ud1a0\ub9ac\uc9c0\ub294 \uc720\ud6a8 label.local.storage=\ub85c\uceec \uc2a4\ud1a0\ub9ac\uc9c0 label.local=\ub85c\uceec label.login=\ub85c\uadf8\uc778 diff --git a/client/WEB-INF/classes/resources/messages_nb_NO.properties b/client/WEB-INF/classes/resources/messages_nb_NO.properties index 3bbf789647..397baf5b3f 100644 --- a/client/WEB-INF/classes/resources/messages_nb_NO.properties +++ b/client/WEB-INF/classes/resources/messages_nb_NO.properties @@ -16,22 +16,31 @@ # under the License. changed.item.properties=Endrede egenskaper +confirm.enable.s3=Vennligst fyll inn f\u00f8lgende informasjon for \u00e5 aktivere st\u00f8tte for S3-st\u00f8ttet sekund\u00e6rlagring confirm.enable.swift=Vennligst fyll inn f\u00f8lgende informasjon for \u00e5 aktivere st\u00f8tte for Swift error.could.not.change.your.password.because.ldap.is.enabled=Feil kunne ikke bytte ditt passord fordi LDAP er aktivert. 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.menu.select=Kan ikke utf\u00f8re handlingen grunnet ingen valgte elementer. error.mgmt.server.inaccessible=Administrasjonsserver er utilgjengelig. Vennligst pr\u00f8v igjen senere. error.password.not.match=Passordfeltene sammensvarer ikke +error.please.specify.physical.network.tags=Nettverkstilbud er ikke tilgjengelig f\u00f8r du spesifiserer knagger for dette fysiske nettverket. 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.domain.warning=Advarsel\: dette alternativet vil medf\u00f8re at alle underdomener og alle assosierte kontoer og dere resurser blir slettet. force.delete=Tving sletting +force.remove.host.warning=Advarsel\: ved valg av dette alternativet vil CloudStack stoppe alle kj\u00f8rende virtuelle maskiner, f\u00f8r hypervisoren blir fjernet fra klyngen. force.remove=Tving fjerning +force.stop.instance.warning=Advarsel\: \u00c5 tvinge en stopp av denne instansen b\u00f8r v\u00e6re siste utvei. Det kan f\u00f8re til tap av data og ukonsistent oppf\u00f8rsel av virtuell maskinstatus. force.stop=Tving stopp ICMP.code=ICMP-kode ICMP.type=ICMP-type image.directory=Bilde-katalog +inline=I Rekke instances.actions.reboot.label=Omstart av instans label.about.app=Om CloudStack label.about=Om @@ -42,15 +51,23 @@ label.account=Konto label.account.lower=konto label.account.name=Kontonavn label.accounts=Kontoer +label.account.specific=Kontospesifikk 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.acquire.new.secondary.ip=Tilegne ny sekund\u00e6r 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.... +label.action.configure.samlauthorization=Konfigurer SAML SSO-autorisering label.action.copy.ISO=Kopier ISO label.action.copy.ISO.processing=Kopierer ISO.... label.action.copy.template=Kopier mal @@ -111,6 +128,10 @@ 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.disk.processing=Kobler fra 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,9 +158,11 @@ 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 +label.action.edit.resource.limits=Rediger ressursbegrensninger label.action.edit.service.offering=Editer tjenestetilbud label.action.edit.template=Editer mal label.action.edit.user=Rediger bruker @@ -148,6 +171,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 @@ -158,8 +183,13 @@ label.action.enable.user=Aktiver Bruker label.action.enable.user.processing=Aktiverer Bruker.... label.action.enable.zone=Aktiver sone label.action.enable.zone.processing=Aktiverer sone... +label.action.expunge.instance.processing=Sletter instans.... +label.action.expunge.instance=Slett instans +label.action.force.reconnect.processing=Kobler til p\u00e5 nytt.... +label.action.force.reconnect=Tving ny tilkobling 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.... @@ -177,8 +207,11 @@ label.action.reboot.router=Omstart Ruter label.action.reboot.router.processing=Omstaer Instans.... label.action.reboot.systemvm=Omstart System VM label.action.reboot.systemvm.processing=Omstarter System VM +label.action.recurring.snapshot=Gjentagende \u00f8yeblikksbilder label.action.register.iso=Registrer ISO label.action.register.template=Registrer mal +label.action.release.ip=Frigj\u00f8r IP +label.action.release.ip.processing=Frigj\u00f8r IP-adresse.... label.action.remove.host=Fjern Vert label.action.remove.host.processing=Fjerner Vest.... label.action.reset.password.processing=Tilbakestiller passord.... @@ -188,6 +221,8 @@ label.action.resize.volume.processing=Endrer st\u00f8rrelse p\u00e5 volum.... label.action.resource.limits=Ressursbegrensninger label.action.restore.instance=Gjenopprett Instans label.action.restore.instance.processing=Gjenoppretter Instans.... +label.action.revert.snapshot.processing=Tilbakestiller til \u00f8yeblikksbilde.... +label.action.revert.snapshot=Tilbakestill til \u00f8yeblikksbilde label.actions=Handlinger label.action.start.instance.processing=Starter instans.... label.action.start.instance=Start instans @@ -203,9 +238,15 @@ label.action.stop.systemvm.processing=Stopper System VM.... label.action.stop.systemvm=Stopp System VM label.action.take.snapshot.processing=Tar \u00f8yeblikksbilde.... label.action.take.snapshot=Ta \u00f8yeblikksbilde +label.action.unmanage.cluster=Fjern administrasjon av klynge label.action.unmanage.cluster.processing=Fjerner administrasjon av klynge... +label.action.update.OS.preference=Oppdater OS-preferanser +label.action.update.OS.preference.processing=Oppdaterer OS-preferanser..... +label.action.update.resource.count=Oppdater resurs oversikt +label.action.update.resource.count.processing=Oppdaterer resurs oversikt label.action.vmsnapshot.create=Ta VM \u00f8yeblikksbilde label.action.vmsnapshot.delete=Slett VM \u00f8yeblikksbilde +label.action.vmsnapshot.revert=Tilbakestill til maskin\u00f8yeblikksbilde label.activate.project=Aktiver prosjekt label.active.sessions=Aktive sesjoner label.add.account=Legg til konto @@ -213,28 +254,53 @@ 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.affinity.group=Legg til affinitetsgruppe +label.add.baremetal.dhcp.device=Legg Til Barmetall DHCP Enhet +label.add.BigSwitchVns.device=Legg til BigSwitch Vnc kontroller +label.add.BrocadeVcs.device=Legg til Brocade VCS Svitsj +label.add.by.cidr=Legg til med CIDR +label.add.by.group=Legg til med gruppe label.add.by=Legg til ved +label.add.ciscoASA1000v=Legg til CiscoASA1000v Resurs label.add.cluster=Legg til klynge label.add.compute.offering=Legg til systemtilbud +label.add.direct.iprange=Legg til direkte IP-rekke +label.add.disk.offering=Legg til disktilbud label.add.domain=Legg til domene +label.added.brocade.vcs.switch=Ny Brocade Vcs switch lagt til +label.added.new.bigswitch.vns.controller=Legg til ny BigSwitch VNS kontroller +label.added.nicira.nvp.controller=La til ny Nicira NVP-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.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.isolated.guest.network=Legg til Isolert gjestenettverk +label.add.isolated.network=Legg Til Isolert Nettverk +label.additional.networks=Ekstra nettverk +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,9 +309,15 @@ 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.new.tier=Legg til ny gren +label.add.nfs.secondary.staging.store=Legg Til NFS sekund\u00e6rmellomlagringsomr\u00e5de +label.add.NiciraNvp.device=Legg til Nvp kontroller +label.add.NuageVsp.device=Legg til Nuage Virtualized Services Directory (VSD) +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.portable.ip.range=Legg til portabel IP-rekke label.add.port.forwarding.rule=Legg til portvideresendingsregel label.add.primary.storage=Legg til prim\u00e6rlagring label.add.region=Legg til region @@ -261,13 +333,20 @@ 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.ucs.manager=Legg Til UCS Manager 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.VM.to.tier=Legg VM til VPC-gren +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.customer.gateway=Legg til VPN Kundegateway label.add.VPN.gateway=Legg til VPN Gateway label.add.vpn.user=Legg til VPN-bruker label.add.vxlan=Legg til VXLAN @@ -277,11 +356,24 @@ label.admin=Admin label.advanced=Avansert label.advanced.mode=Avansermodus label.advanced.search=Avansert s\u00f8k +label.affinity=Affinitet +label.affinity.group=Affinitetsgruppe +label.affinity.groups=Affinitetsgrupper label.agent.password=Agentpassord +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.anti.affinity=Anti-affinitet +label.anti.affinity.group=Anti-affinitetsgruppe +label.anti.affinity.groups=Anti-affinitetsgrupper label.api.key=API-n\u00f8kkel label.api.version=API Versjon label.apply=Bruk @@ -289,57 +381,94 @@ label.app.name=CloudStack label.archive.alerts=Arkiver varsler label.archive=Arkiv label.archive.events=Arkiver hendelser +label.assigned.vms=Tildelte VMer +label.assign.instance.another=Tildel instans til en annen konto label.assign=Tildel +label.assign.to.load.balancer=Legg instans til lastbalanserer +label.associated.network=Assosiert nettverk +label.associated.network.id=Assosiert nettverksid +label.associated.profile=Assosiert Profil +label.associate.public.ip=Assosiert Offentlig IP-adresse 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 label.available=Tilgjengelig label.back=Tilbake label.bandwidth=B\u00e5ndbredde +label.baremetal.dhcp.devices=Barmetall DHCP Enheter +label.baremetal.dhcp.provider=Barmetall DHCP Tilbyder +label.baremetal.pxe.device=Legg Til Barmetall PXE Enhet +label.baremetal.pxe.devices=Barmetall PXE Enheter +label.baremetal.pxe.provider=Barmetall PXE Tilbyder label.basic=Basis label.basic.mode=Basismodus +label.bigswitch.controller.address=BigSwitch Vns kontroller-adresse +label.bigswitch.vns.details=BigSwitch VNC detaljer +label.blade.id=Blad-ID +label.blades=Blad +label.bootable=Botbar +label.broadcast.domain.range=Kringkastings domene rekke +label.broadcast.domain.type=Kringkastings Domene Type +label.broadcast.uri=Kringkastings URI +label.broadcasturi=kringkastinguri +label.broadcat.uri=Kringkastings URI +label.brocade.vcs.address=Vcs Switch Addresse +label.brocade.vcs.details=Brocade Vcs svitsj detaljer label.by.account=Etter Konto label.by.alert.type=Etter varseltype label.by.availability=Etter Tilgjengelighet label.by.date.end=Etter dato (slutt) label.by.date.start=Etter dato (start) label.by.domain=Etter Domene +label.by.end.date=Etter sluttdato label.by.event.type=Etter hendelsestype +label.by.level=Etter niv\u00e5 label.by.pod=Etter Pod label.by.role=Etter Rolle label.by.start.date=Etter Startdato +label.by.state=Etter tilstand 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 label.by.zone=Etter Sone +label.cache.mode=Write-cache Type label.cancel=Avbryt label.capacity.bytes=Kapasitet Bytes label.capacity.iops=Kapasitet IOPS label.capacity=Kapasitet label.certificate=Sertifikat +label.change.affinity=Endre affinitet label.change.service.offering=Endre tjenestetilbud label.change.value=Endre verdi label.character=Karakter +label.chassis=Kasse +label.cidr.account=CIDR eller konto/sikkerhetsgruppe label.cidr=CIDR label.CIDR.list=CIDR liste label.cidr.list=Kilde-CIDR +label.CIDR.of.destination.network=CIDR for destinasjonsnettverk 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 label.cloud.console=Cloud +label.cloud.managed=Forvaltet Av Cloud.com label.cluster=Klynge label.cluster.name=Klyngenavn 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 @@ -347,16 +476,19 @@ 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 label.corrections.saved=Endringer lagret +label.counter=Teller label.cpu.allocated=CPU allokert label.cpu.allocated.for.VMs=CPU Allokert for VMer label.CPU.cap=CPU begrensning @@ -366,53 +498,101 @@ label.cpu.mhz=CPU (i MHz) label.cpu.utilized=CPU-utnyttelse label.created.by.system=Opprettet av systemet label.created=Opprettet +label.create.nfs.secondary.staging.storage=Legg Til NFS sekund\u00e6rmellomlagringsomr\u00e5de +label.create.nfs.secondary.staging.store=Opprett NFS sekund\u00e6rmellomlagringsomr\u00e5de label.create.project=Opprett prosjekt label.create.template=Opprett mal label.create.VPN.connection=Opprett VPN-tilkobling +label.cross.zones=Kryssoner +label.custom.disk.iops=Tilpasset IOPS label.custom.disk.size=Tilpasset Diskst\u00f8rrelse +label.custom=Tilpasset label.daily=Daglig label.data.disk.offering=Datadisktilbud label.date=Dato +label.day.of.month=Dag i m\u00e5ned +label.day.of.week=Dag i uke +label.dc.name=Datasenter Navn +label.dead.peer.detection=D\u00f8d ende-deteksjon label.decline.invitation=Avvis invitasjon +label.dedicate.cluster=Dediker kluster label.dedicated=Dedikert +label.dedicate=Dediker +label.dedicated.vlan.vni.ranges=Dedikerte VLAN/VNI Rekker +label.dedicate.host=Dediker host +label.dedicate.pod=Dedikert pod +label.dedicate.vlan.vni.range=Dedikert VLAN/VNI Rekke +label.dedicate.zone=Dediker sone +label.default.egress.policy=Egress standard policy label.default=Standardverdi label.default.use=Standard bruk label.default.view=Standardvisning +label.delete.acl.list=Slett ACL liste +label.delete.affinity.group=Slett affinitetsgruppe label.delete.alerts=Slette varsler +label.delete.BigSwitchVns=Fjern BigSwitch Vns kontroller +label.delete.BrocadeVcs=Fjern Brocade VCS-svitsj 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.NiciraNvp=Fjern Nvp-kontroller +label.delete.NuageVsp=Fjern Nuage VSD +label.delete.OpenDaylight.device=Fjern OpenDaylight kontroller label.delete.PA=Slett Palo Alto +label.delete.portable.ip.range=Slett portabel IP-rekke label.delete.profile=Slett Profil label.delete.project=Slett prosjekt +label.delete.secondary.staging.store=Slett NFS sekund\u00e6rmellomlagringsomr\u00e5de label.delete=Slett label.delete.SRX=Slett SRX +label.delete.ucs.manager=Slett UCS Manager label.delete.VPN.connection=Slett VPN-tilkobling +label.delete.VPN.customer.gateway=Slett VPN-kundegateway 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.deployment.planner=utbyggings planlegger label.description=Beskrivelse label.destination.physical.network.id=Fysisk nettverksid-destinasjon label.destination.zone=Destinasjonssone label.destroy=Destruer label.destroy.router=Slett ruter +label.destroy.vm.graceperiod=\u00d8delegge VM ventetid +label.detaching.disk=Kobler fra disk label.details=Detaljer label.device.id=Enhets ID label.devices=Enheter label.dhcp=DHCP label.DHCP.server.type=DHCP servertype +label.direct.attached.public.ip=Direkte Tilknyttet Offentlig IP-adresse +label.direct.ips=Deltnettverk-IPadresser +label.disable.autoscale=Deaktiver autoskalering label.disabled=Inaktiv +label.disable.host=Deaktiver host +label.disable.network.offering=Deaktiver nettverkstilbud label.disable.provider=Deaktiver tilbyder +label.disable.vnmc.provider=Deatkiver VNMC tilbyder +label.disable.vpc.offering=Deaktivert VPC tilbud label.disable.vpn=Dekativer VPN label.disabling.vpn.access=Deaktiverer VPN Tilgang +label.disassociate.profile.blade=Deassosier profil fra Blade +label.disbale.vnmc.device=Deaktiver VNMC enhet label.disk.allocated=Disk allokert +label.disk.bytes.read.rate=Disklesehastighet(BPS) +label.disk.bytes.write.rate=Diskskrivehastighet (BPS) label.disk.iops.max=Maks IOPS label.disk.iops.min=Min IOPS +label.disk.iops.read.rate=Disklesehastighet (IOPS) label.disk.iops.total=IOPS Totalt +label.disk.iops.write.rate=Diskskrivehastighet (IOPS) 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,6 +603,7 @@ 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 @@ -433,35 +614,69 @@ label.domain.id=Domene ID label.domain.lower=domene label.domain.name=Domenenavn label.domain.router=Domeneruter +label.domain.suffix=DNS domenesuffiks (f.eks, xyz.com) label.done=Utf\u00f8rt +label.double.quotes.are.not.allowed=Doble anf\u00f8rselstegn er ikke tillatt +label.download.progress=Nedlastningsprogresjon 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.affinity.group=Rediger affinitetsgruppe 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.tags=Rediger tagger 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=Aktiver autoskalering +label.enable.host=Aktiver host +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=Aktiver VNMC enhet +label.enable.vnmc.provider=Aktiver 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.endpoint=Endepunkt +label.endpoint.or.operation=Endepunkt eller operasjon label.end.port=Sluttport +label.end.reserved.system.IP=Siste reserverte system IP +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.ESP.encryption=ESP kryptering +label.ESP.hash=ESP hash +label.ESP.lifetime=ESP levetid +label.ESP.policy=ESP policy label.esx.host=ESX/ESXi vert +label.event.archived=Hendelser Arkivert +label.event.deleted=Hendelse slettet label.example=Eksempel +label.expunge=Slett +label.external.link=Ekstern kobling label.extractable=Utpakkbar label.f5.details=F5 detaljer label.f5=F5 label.failed=Feilet +label.featured=Fremhevet label.fetch.latest=Hent siste label.filterBy=Filtrer etter label.firewall=Brannmur @@ -471,39 +686,82 @@ label.format=Format label.friday=Fredag label.full=Full label.full.path=Full sti +label.gateway=Gateway label.general.alerts=Generelle varsler +label.generating.url=Genererer URL 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.gslb.service.private.ip=GSLB tjeneste privat IP-adresse +label.gslb.service.public.ip=GSLB tjeneste offentlig IP-adresse +label.gslb.servicetype=Tjeneste Type label.guest.cidr=Gjest CIDR label.guest.end.ip=Gjest slutt-IP +label.guest.gateway=Gjestegateway label.guest=Gjest label.guest.ip=Gjest IP-adresse label.guest.ip.range=Gjest IP-rekke label.guest.netmask=Gjest nettmaske +label.guest.network.details=Gjestenettverksdetaljer label.guest.networks=Gjestenettverk label.guest.start.ip=Gjest start-IP label.guest.traffic=Gjestetrafikk +label.guest.traffic.vswitch.name=Gjestetrafikk vSwitch Navn +label.guest.traffic.vswitch.type=Gjestetrafikk vSwitch Type label.guest.type=Gjestetype label.ha.enabled=HA Aktivert +label.health.check=Helsesjekk +label.health.check.interval.in.sec=Helsesjekk Intervall (i sekunder) +label.healthy.threshold=Sunn Terskel 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.capabilities=Hypervisor evner +label.hypervisor=Hypervisor +label.hypervisors=Hypervisors +label.hypervisor.snapshot.reserve=Hypervisor \u00d8yeblikks Kapasitet +label.hypervisor.type=Hypervisor type +label.hypervisor.version=Hypervisor versjon +label.hyperv.traffic.label=HyperV Trafikk Etikett label.id=ID +label.IKE.DH=IKE DH +label.IKE.encryption=IKE kryptering +label.IKE.hash=IKE Hash +label.IKE.lifetime=IKE livstid (sekunder) +label.IKE.policy=IKE policy label.info=Info label.info.upper=INFO +label.ingress.rule=Ingressregel +label.initiated.by=Initiert av +label.inside.port.profile=Intern Port Profil 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? @@ -523,11 +781,20 @@ 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.instance.scaled.up=Instans skalert opp label.instances=Instanser +label.instanciate.template.associate.profile.blade=Instansier mal og assosier malen med Blade +label.intermediate.certificate=Intermediate sertifikat {0} label.internal.dns.1=Intern DNS 1 label.internal.dns.2=Intern DNS 2 +label.internal.lb.details=Intern LB detaljer +label.internallbvm=InternalLbVm label.internal.name=Internt navn +label.interval.type=Intervalltype label.introduction.to.cloudstack=Introduksjon til CloudStack&\#8482 +label.invalid.integer=Ugyldig integer +label.invalid.number=Ugyldig tall label.invitations=Invitasjoner label.invited.accounts=Inviterte kontoer label.invite=Inviter @@ -536,49 +803,66 @@ label.ip.address=IP-adresse label.ipaddress=IP-adresse label.ip.allocations=IP Allokeringer label.ip=IP +label.ip.limits=Offentlig IP-addresse Grenser label.ip.or.fqdn=IP eller FQDN label.ip.range=IP-rekke label.ip.ranges=IP-rekker +label.IPsec.preshared.key=IPSec Delt N\u00f8kkel label.ips=IPer label.ipv4.cidr=IPv4 CIDR label.ipv4.dns1=IPv4 DNS1 label.ipv4.dns2=IPv4 DNS2 label.ipv4.end.ip=IPv4 Slutt IP +label.ipv4.gateway=IPv4 Gateway +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 label.isolation.mode=Isolasjonsmetode +label.isolation.uri=Isolasjons URI label.is.redundant.router=Redundant label.is.shared=Er delt label.is.system=Er system label.item.listing=Elementlisting label.keep=Behold +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.disconnected=Siste Frakobling label.last.name=Etternavn label.lastname.lower=etternavn label.latest.events=Siste hendelser label.launch=Start label.launch.vm=Start VM +label.launch.zone=Start sone label.lb.algorithm.leastconn=F\u00e6rrest tilkoblinger label.lb.algorithm.roundrobin=Ringdistribusjon label.lb.algorithm.source=Kilde @@ -586,30 +870,47 @@ label.LB.isolation=LB-isolering label.ldap.configuration=LDAP Konfigurering label.ldap.group.name=LDAP Gruppe label.ldap.port=LDAP port +label.level=Niv\u00e5 +label.linklocal.ip=Link-lokal IP-adresse 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=Aktiver lokal lagring for bruker VMer +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.lxc.traffic.label=LXC trafikk etikett label.make.project.owner=Gj\u00f8r konto prosjekteier label.manage=Administrer +label.managed=Administrert label.management=Administrasjon label.management.ips=Administrasjons IP-adresser +label.management.server=Administrasjonsserver label.manage.resources=Behandle ressurser +label.max.cpus=Maks CPU kjerner +label.max.guest.limit=Maks antall gjester 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 @@ -618,9 +919,17 @@ label.menu.accounts=Kontoer label.menu.alerts=Varsler label.menu.all.accounts=Alle kontoer label.menu.all.instances=Alle instanser +label.menu.community.isos=Fellesskap ISO medier +label.menu.community.templates=Felleskap Maler label.menu.configuration=Konfigurering +label.menu.dashboard=Dashbord +label.menu.destroyed.instances=\u00d8delagte instanser +label.menu.disk.offerings=Disktilbud label.menu.domains=Domener label.menu.events=Hendelser +label.menu.featured.isos=Fremhevede ISOer +label.menu.featured.templates=Fremhevde maler +label.menu.global.settings=Globale innstillinger label.menu.infrastructure=Infrastruktur label.menu.instances=Instanser label.menu.ipaddresses=IP-adresser @@ -643,18 +952,24 @@ label.menu.system.service.offerings=Systemtilbud label.menu.system=System label.menu.system.vms=System VMer label.menu.templates=Maler +label.menu.virtual.appliances=Virtuelle Apparater 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.minute.past.hour=minutter etter hel time +label.mode=Modus label.monday=Mandag label.monthly=M\u00e5nedlig label.more.templates=Flere maler @@ -668,12 +983,16 @@ 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.ACL.total=Nettverk ACL Total +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 @@ -682,10 +1001,20 @@ 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.display.text=Nettverkstilbud Forklaring +label.network.offering.id=Nettverkstilbud ID +label.network.offering.name=Nettverkstilbud Navn label.network.offering=Nettverkstilbud +label.network.rate.megabytes=Nettverks fart (MB/s) +label.network.rate=Nettverks fart (MB/s) +label.network.read=Nettverk les +label.network.service.providers=Nettverktjenestetilbydere label.networks=Nettverk +label.network.type=Nettverkstype +label.network.write=Nettverk skriveoperasjoner label.new=Ny label.new.password=Nytt passord label.new.project=Nytt prosjekt @@ -695,56 +1024,107 @@ 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.controller.address=Kontrolleradresse +label.nicira.l3gatewayserviceuuid=L3 Gateway Tjeneste Uuid label.nicira.nvp.details=Nicira NVP detaljer +label.nicira.transportzoneuuid=Transport sone Uuid label.nics=NICer +label.no.actions=Ingen tilgjengelige handlinger +label.no.alerts=Ingen nylige alarmer label.no.data=Ingen data \u00e5 vise +label.no.errors=Ingen nylige feil +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.numretries=Antall fors\u00f8k +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.operator=Operat\u00f8r label.optional=Valgfritt label.order=Rekkef\u00f8lge +label.os.preference=OS-preferanse label.os.type=OS-type +label.other=Andre +label.override.guest.traffic=Overstyr Gjeste Trafikk +label.override.public.traffic=Overstyr Offentlig Trafikk +label.ovm.traffic.label=OVM trafikk etikett label.ovs=OVS +label.owned.public.ips=Offentlige IP-addresser i bruk +label.owner.account=Eierkonto +label.owner.domain=Eierdomene label.palo.alto.details=Palo Alto detaljer +label.PA.log.profile=Palo Alto logg profil label.PA=Palo Alto +label.parent.domain=Foreldre domene label.passive=Passiv +label.password.enabled=Passord Aktivert label.password.lower=passord label.password=Passord label.password.reset.confirm=Passordet har blitt resatt til +label.PA.threat.profile=Palo Alto trussel profil label.path=Sti +label.perfect.forward.secrecy=Perfect Forward Secrecy +label.persistent=Vedvarende label.physical.network=Fysisk nettverk label.physical.network.ID=Fysisk nettverksid label.PING.CIFS.password=PING CIFS passord label.PING.CIFS.username=PING CIFS brukernavn label.PING.dir=PING-mappe +label.ping.path=Ping Sti label.PING.storage.IP=PING lagrings-IP +label.planner.mode=Planleggingsmodus label.please.specify.netscaler.info=Vennligst spesifiser NetScaler-info label.please.wait=Vennligst vent +label.plugin.details=Plugin detaljer +label.plugins=Plugins +label.pod.dedicated=Pod Dedikert label.pod.name=Pod navn label.pod=Pod label.pods=Pods +label.polling.interval.sec=Sjekkintervall (i sekunder) +label.portable.ip=Flyttbar IP +label.portable.ip.range.details=Portabel IP-rekke detaljer +label.portable.ip.ranges=Transportable IP-rekker +label.portable.ips=Portabel IP-rekke label.port.forwarding.policies=Regler for portvideresending label.port.forwarding=Portvideresending label.port=Port label.port.range=Portrekke +label.PreSetup=Forberedt Konfigurasjon label.prev=Forrige label.previous=Forrige label.primary.allocated=Prim\u00e6rlagring allokert label.primary.network=Prim\u00e6rnettverk +label.primary.storage.count=Prim\u00e6rlagrings Pool +label.primary.storage.limits=Prim\u00e6rlagring Maxgrense (GiB) label.primary.storage=Prim\u00e6rlagring label.primary.used=Prim\u00e6rlagring brukt label.private.Gateway=Privat Gateway +label.private.interface=Privat Grensesnitt label.private.ip=Privat IP-adresse label.private.ip.range=Privat IP-rekke label.private.ips=Private IP-adresser +label.privatekey=PKCS\#8 Privat N\u00f8kkel label.private.network=Privat nettverk label.private.port=Privat port label.private.zone=Privat sone @@ -756,71 +1136,143 @@ label.project.name=Prosjektnavn label.project=Prosjekt label.projects=Prosjekter label.project.view=Prosjektvisning +label.protocol.number=Protokollnummer label.protocol=Protokoll label.providers=Tilbydere label.provider=Tilbyder +label.public.interface=Offentlig Grensesnitt label.public.ip=Offentlig IP-adresse label.public.ips=Offentlig IP-adresser +label.public.load.balancer.provider=Offentlig Lastbalanserer Tilbyder label.public.network=Offentlig nettverk label.public=Offentlig label.public.port=Offentlig port label.public.traffic=Offentlig trafikk +label.public.traffic.vswitch.name=Offentlig Trafikk vSwitch Navn +label.public.traffic.vswitch.type=Offentlig Trafikk vSwitch Type label.public.zone=Offentlig sone label.purpose=Form\u00e5l label.Pxe.server.type=PXE Servertype label.qos.type=QoS Type +label.quickview=Hurtigvisning +label.quiesce.vm=Quiesce VM +label.quiet.time.sec=Quiet Tid (sekunder) label.rbd.id=Cephx user label.rbd.monitor=Ceph monitor label.rbd.pool=Ceph pool label.rbd=RBD +label.rbd.secret=Cephx hemmelig label.reboot=Restart +label.recent.errors=Nylige feil +label.recover.vm=Gjenopprett VM label.redundant.router.capability=Redundant ruter label.redundant.router=Redundant ruter label.redundant.state=Redundant tilstand +label.refresh.blades=Oppdater blad(er) label.refresh=Oppfrisk +label.regionlevelvpc=Region Niv\u00e5 VPC label.region=Region label.reinstall.vm=Reinstaller VM label.related=Relaterte +label.release.account=Frigi fra Konto +label.release.account.lowercase=Frigi fra konto +label.release.dedicated.cluster=Frigj\u00f8r dedikert kluster +label.release.dedicated.host=Frigj\u00f8r dedikert host +label.release.dedicated.pod=Frigj\u00f8r Dedikert Pod +label.release.dedicated.vlan.range=Frigj\u00f8r dedikerte VLAN rekke +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.tier=Fjern gren +label.remove.vm.from.lb=Fjern VM fra lastbalanseringsregel +label.remove.vm.load.balancer=Fjern VM fra lastbalanserer +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.replace.acl.list=Erstatt ACL Liste label.required=P\u00e5krevd +label.requires.upgrade=Krever oppgradering +label.reserved.ip.range=Reservert IP-rekke +label.reserved.system.gateway=Reservert System Gateway label.reserved.system.ip=Reservert System IP +label.reserved.system.netmask=Reservert system nettmaske +label.resetVM=Resett VM 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.limit.exceeded=Ressursbegrensning Overskridet +label.resource.limits=Ressursbegrensninger +label.resource.name=Ressursnavn label.resource=Ressurs label.resources=Ressurser +label.resource.state=Ressurs Status +label.response.timeout.in.sec=Respons Tidsavbrudd (sekunder) label.restart.network=Nettverksomstart label.restart.required=Omstart p\u00e5krevd label.restart.vpc=Omstart VPC label.restore=Gjenopprett +label.retry.interval=Nyfors\u00f8k Intervall 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.host=Ruter Vert label.routing=Ruting +label.rule.number=Regelnummer label.rules=Regler label.running.vms=Kj\u00f8rende VMer +label.s3.access_key=Aksessn\u00f8kkel +label.s3.bucket=B\u00f8tte +label.s3.connection_timeout=Tilkoblingsavbrudd +label.s3.endpoint=Endepunkt +label.s3.max_error_retry=Max Feil Nyfors\u00f8k label.s3.nfs.path=S3 NFS Sti label.s3.nfs.server=S3 NFS Server +label.s3.secret_key=Hemmelig n\u00f8kkel +label.s3.socket_timeout=Socket Timeout label.s3.use_https=Bruk HTTPS +label.saml.enable=Autoriser SAML SSO +label.saml.entity=Identitets Tilbydere label.saturday=L\u00f8rdag label.save.and.continue=Lagre og fortsett label.save=Lagre label.saving.processing=Lagrer.... +label.scale.up.policy=Oppskalerings policy +label.scope=Omfang label.search=S\u00f8k +label.secondary.isolated.vlan.id=Sekund\u00e6r Isolert VLAN ID +label.secondary.staging.store.details=Sekund\u00e6rmellomlagringsomr\u00e5de detaljer +label.secondary.staging.store=Sekund\u00e6rmellomlagringsomr\u00e5de +label.secondary.storage.count=Sekund\u00e6rlagrings Pool +label.secondary.storage.details=Sekund\u00e6rlagringsdetaljer +label.secondary.storage.limits=Sekund\u00e6rlagringsbregrensninger (GiB) label.secondary.storage=Sekund\u00e6rlagring label.secondary.storage.vm=Sekund\u00e6rlagring VM +label.secondary.used=Sekund\u00e6rlagringsplass brukt +label.secret.key=Hemmelig n\u00f8kkel label.security.group.name=Sikkerhetsgruppenavn +label.security.groups.enabled=Sikkerhetsgrupper Aktivert label.security.group=Sikkerhetsgruppe label.security.groups=Sikkerhetsgrupper label.select.a.template=Velg en mal @@ -832,32 +1284,47 @@ label.select.offering=Velg tilbud label.select.project=Velg prosjekt label.select.region=Velg region label.select.template=Velg Mal +label.select.tier=Velg gren label.select=Velg label.select-view=Velg visning label.select.vm.for.static.nat=Velg instans for statisk NAT label.sent=Sendt label.server=Tjener +label.service.capabilities=Tjeneste Evner 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.SharedMountPoint=SharedMountPoint +label.show.advanced.settings=VIs avanserte instillinger +label.show.ingress.rule=Vis ingressregel label.shutdown.provider=Steng tilbyder +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.limits=\u00d8yeblikksbildebegrensning +label.snapshot.name=\u00d8yeblikksbildenavn +label.snapshot.schedule=Sett Opp Gjentagende \u00f8yeblikksbilder +label.snapshot.s=\u00d8yeblikksbilde(r) label.snapshots=\u00d8yeblikksbilder label.snapshot=\u00d8yeblikksbilde +label.SNMP.community=SNMP Community 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 @@ -865,10 +1332,15 @@ label.SR.name=SR navnelapp label.srx.details=SRX detaljer label.srx=SRX label.start.IP=Start-IP +label.start.lb.vm=Start LB VM label.start.port=Start port +label.start.reserved.system.IP=F\u00f8rste reserverte system IP +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 +label.static.nat.to=Statisk NAT til label.static.nat.vm.details=Statisk NAT VM Detaljer label.statistics=Statistikk label.status=Status @@ -883,32 +1355,67 @@ label.step.4.title=Steg 4\: Nettverk label.step.5=Steg 5 label.step.5.title=Steg 5\: Repetere label.stickiness=Klebrighet +label.stickiness.method=Klebrighetmetode +label.sticky.cookie-name=Cookie navn label.sticky.domain=Domene label.sticky.expire=Utl\u00f8per +label.sticky.holdtime=Oppholds tid +label.sticky.indirect=Indirekte label.sticky.length=Lengde +label.sticky.mode=Modus +label.sticky.name=Sticky navn +label.sticky.nocache=Ingen cache +label.sticky.postonly=Send bare +label.sticky.prefix=Prefiks +label.sticky.request-learn=L\u00e6r Foresp\u00f8rsel +label.sticky.tablesize=Tabellst\u00f8rrelse +label.stop.lb.vm=Stop LB VM label.stopped.vms=Stoppede VMer label.stop=Stopp label.storage=Lagring +label.storage.pool=Lagringspool label.storage.tags=Merkelapper for lagring label.storage.traffic=Lagringstrafikk label.storage.type=Lagringstype label.subdomain.access=Tilgang for underdomene +label.submit=Send +label.submitted.by=[Innsendt av\: ] label.succeeded=Vellykket label.sunday=S\u00f8ndag +label.super.cidr.for.guest.networks=Super CIDR for gjestenettverk label.supported.services=St\u00f8ttede Tjenester label.supported.source.NAT.type=Supporterte kilde-NAT typer +label.supportsstrechedl2subnet=St\u00f8tter strekket L2 subnet label.suspend.project=Suspender prosjekt label.switch.type=Svitsjtype label.system.capacity=Systemkapasistet +label.system.offering.for.router=Systemtilbud for Rutere label.system.offering=Systemtilbud +label.system.service.offering=Systemtjenestetilbud +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.system.vm.type=SystemVM-type +label.system.wide.capacity=Systemomfattende kapasistet label.tagged=Tagget +label.tag.key=Merkelapp Key label.tags=Tagger +label.tag.value=Tag Verdi +label.target.iqn=M\u00e5l IQN label.task.completed=Oppgave utf\u00f8rt +label.template.limits=Malbegrensninger label.template=Mal label.TFTP.dir=TFTP-mappe +label.tftp.root.directory=TFTP rot-mappe +label.theme.default=Standardtema +label.theme.grey=Tilpasset - Gr\u00e5 +label.theme.lightblue=Tilpasset - Lys Gr\u00e5 +label.threshold=Terskel label.thursday=Torsdag +label.tier.details=VPC-gren detaljer +label.tier=Gren +label.timeout.in.second = Tidsavrbudd (sekunder) label.timeout=Tidsavbrudd label.time=Tid label.time.zone=Tidssone @@ -918,7 +1425,12 @@ label.total.cpu=Totalt CPU label.total.CPU=Totalt CPU label.total.hosts=Totalt Verter label.total.memory=Totalt minne +label.total.of.ip=Totalt IP-adresser +label.total.of.vm=Totalt av VM label.total.storage=Totalt lagring +label.total.virtual.routers=Total antall virtuelle rutere +label.total.virtual.routers.upgrade=Totalt antall virtuelle routere som trenger oppgradering +label.total.vms=Totalt VMs label.traffic.label=Trafikketikett label.traffic.types=Trafikktyper label.traffic.type=Trafikktype @@ -926,71 +1438,131 @@ label.tuesday=Tirsdag label.type.id=Type ID label.type.lower=type label.type=Type +label.ucs=UCS +label.unavailable=Utilgjengelig +label.unhealthy.threshold=Usunn Terskel label.unlimited=Ubegrenset +label.untagged=Utagget 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.usage.interface=Bruker Grensesnitt +label.usage.sanity.result=Forbruks Tilregnelighet Resultat +label.usage.server=Forbruks Tjener label.used=Brukt label.user=Bruker +label.user.data=Brukerdata label.username=Brukernavn label.username.lower=brukernavn label.users=Brukere +label.user.vm=Bruker VM label.use.vm.ip=Bruk VM IP\: 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.remaining.capacity=Gjenst\u00e5ende kapasitet +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 label.view.more=Vis mer label.view.secondary.ips=Se sekund\u00e6re IPer label.view=Vis +label.virtual.appliance.details=Virtuelt apparat detaljer +label.virtual.appliances=Virtuelle Apparater +label.virtual.appliance=Virtuellt Apparat label.virtual.machines=Virtuelle maskiner +label.virtual.networking=Virtuelt Nettverk 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 label.vlan.only=VLAN +label.vlan.range.details=VLAN-rekke detaljer +label.vlan.ranges=VLAN-rekke(r) +label.vlan.range=VLAN/VNI Rekke label.vlan=VLAN/VNI +label.vlan.vni.ranges=VLAN/VNI Rekke(r) +label.vlan.vni.range=VLAN/VNI Rekke label.vm.add=Legg til Instans 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.VMs.in.tier=VMer i VPC-gren +label.vmsnapshot.current=isCurrent +label.vmsnapshot.memory=\u00d8yeblikksbilde av minne +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.volatile=volatil 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.supportsregionlevelvpc=St\u00f8tter Region Niv\u00e5 VPC +label.vpc.virtual.router=VPC virtuell ruter label.vpc=VPC label.VPN.connection=VPN-tilkobling +label.vpn.customer.gateway=VPN Kundegateway +label.VPN.customer.gateway=VPN Kundegateway label.VPN.gateway=VPN Gateway label.vpn=VPN +label.vsmctrlvlanid=Kontroll VLAN ID +label.vsmpktvlanid=Pakke VLAN ID +label.vsmstoragevlanid=Lagrings VLAN ID +label.vsphere.managed=Administrert Av vSphere +label.vswitch.name=vSwitch navn +label.vSwitch.type=vSwitch type label.vxlan.id=VXLAN ID label.vxlan.range=VXLAN-rekke label.vxlan=VXLAN @@ -1002,8 +1574,11 @@ 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 @@ -1015,102 +1590,289 @@ label.zone.step.2.title=Steg 2\: Legg til en sone label.zone.step.3.title=Steg 3\: Legg til en pod label.zone.step.4.title=Steg 4\: Legg til en IP-rekke label.zone.type=Sonetype +label.zone.wide=Sone omfattende +label.zoneWizard.trafficType.guest=Gjest\: Trafikk mellom brukeres virtuelle maskiner +label.zoneWizard.trafficType.management=Administrasjon\: Trafikk mellom CloudStacks interne ressurser, inkludert eventuelle komponenter som kommuniserer med administrasjonsservere, som verter og CloudStack systemVMer +label.zoneWizard.trafficType.public=Offentlig\: nettverkstrafikk mellom internet og VMs i CloudStack. +label.zoneWizard.trafficType.storage=Lagring\: Trafikk mellom prim\u00e6r og sekund\u00e6rlagringsservere, slik som VM-maler og \u00f8yeblikksbilder. +managed.state=Administrert Status message.acquire.ip.nic=Vennligst bekreft at du vil allokere en ny sekund\u00e6r IP for dette nettverkskortet.
NB\: Du m\u00e5 manuelt konfigurere den nye sekund\u00e6r-IPen i den virtuelle maskinen. message.acquire.new.ip=Vennligst bekreft at du \u00f8nsker \u00e5 anskaffe en ny IP for dette nettverket +message.acquire.new.ip.vpc=Vennligst bekreft at du \u00f8nsker \u00e5 hente en ny IP for denne VPC. +message.acquire.public.ip=Vennligst velg en sone som du vil hente ny IP fra. +message.action.cancel.maintenance=Din vert har vellykket blitt kansellert for vedlikehold. Denne prosessen kan ta opptil flere minutter. +message.action.cancel.maintenance.mode=Vennligst bekreft at du \u00f8nsker \u00e5 kansellere dette vedlikeholdet. +message.action.change.service.warning.for.instance=Din instans m\u00e5 v\u00e6re stopped f\u00f8r du fors\u00f8ker \u00e5 endret n\u00e5v\u00e6rende tjenestetilbud. message.action.change.service.warning.for.router=Din ruter m\u00e5 v\u00e6re stoppet f\u00f8r du kan fors\u00f8ke \u00e5 endre n\u00e5v\u00e6rende servicetilbud. message.action.delete.cluster=Vennligst bekreft at du vil slette denne klyngen. message.action.delete.disk.offering=Vennligst bekreft at du \u00f8nsker \u00e5 slette dette disktilbudet. message.action.delete.domain=Vennligst bekreft at du vil slette dette domenet. +message.action.delete.external.firewall=Vennligst bekreft at du vil fjerne denne eksterne brannmuren. Advarsel\: hvis du planlegger \u00e5 legge tilbake den samme eksterne brannmuren, m\u00e5 du resette bruksdataene p\u00e5 enheten. +message.action.delete.external.load.balancer=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne denne eksterne lastbalansereren. Advarsel\: hvis du planlegger \u00e5 legge til den samme eksterne lastbalansereren senere, m\u00e5 du resette bruksdataene p\u00e5 enheten. message.action.delete.ingress.rule=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne inng\u00e5ende regel. message.action.delete.ISO.for.all.zones=Denne ISO er brukt av alle soner. Vennligst bekreft at du \u00f8nsker \u00e5 slette den fra alle soner. message.action.delete.ISO=Vennligst bekreft at du vil slette denne ISO. message.action.delete.network=Vennligst bekreft at du vil slette dette nettverket. message.action.delete.nexusVswitch=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne nexus 1000v +message.action.delete.nic=Vennligst bekreft at du vil fjerne dette NIC, noe som ogs\u00e5 vil fjerne det assosierte nettverket fra VMen. message.action.delete.physical.network=Vennligst bekreft at du \u00f8nsker \u00e5 slette dette fysiske nettverk message.action.delete.pod=Vennligst bekreft at du vil slette denne pod. message.action.delete.primary.storage=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne prim\u00e6rlagring. message.action.delete.secondary.storage=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne sekund\u00e6rlagring. message.action.delete.security.group=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne sikkerhetsgruppe. message.action.delete.service.offering=Vennligst bekreft at du \u00f8nsker \u00e5 slette dette servicetilbud. +message.action.delete.snapshot=Vennligst bekreft at du \u00f8nsker \u00e5 slette dette \u00f8yeblikksbildet. message.action.delete.system.service.offering=Vennligst bekreft at du \u00f8nsker \u00e5 slette dette system-servicetilbud. message.action.delete.template.for.all.zones=Denne mal er brukt av alle soner. Vennligst bekreft at du \u00f8nsker \u00e5 slette den fra alle soner. message.action.delete.template=Vennligst bekreft at du vil slette denne mal. message.action.delete.volume=Vennligst bekreft at du vil slette dette volumet. message.action.delete.zone=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne sone. message.action.destroy.instance=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne denne instansen. +message.action.destroy.systemvm=Vennligst bekreft at du \u00f8nsker \u00e5 \u00f8delegge denne System VM. +message.action.disable.cluster=Vennligst bekreft at du \u00f8nsker \u00e5 detaktivere denne klyngen. message.action.disable.nexusVswitch=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne nexus 1000v 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.static.NAT=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere statisk NAT. 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. +message.action.enable.maintenance=Din vert har vellykket blitt forberedt for vedlikehold. Denne prosessen kan ta opptil flere minutter. message.action.enable.nexusVswitch=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne nexus 1000v message.action.enable.physical.network=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere dette fysiske nettverket. message.action.enable.pod=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne poden. message.action.enable.zone=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne sonen. +message.action.expunge.instance=Vennligst bekreft at du vil permanent slette denne instansen. +message.action.force.reconnect=Din vert har vellykket blitt tvunget til \u00e5 koble til p\u00e5 nytt. Denne prosessen kan ta noen minutter. +message.action.host.enable.maintenance.mode=Aktivering av vedlikeholdsmodus vil for\u00e5rsake migrering av alle kj\u00f8rende instanser p\u00e5 denne vert til hvilken som helst annen tilgjengelig vert. +message.action.instance.reset.password=Vennligst bekreft ay du \u00f8nsker \u00e5 endre ROOT-passordet for denne virtuelle maskin. +message.action.manage.cluster=Vennligst bekreft at du \u00f8nsker \u00e5 administrere denne klyngen. +message.action.primarystorage.enable.maintenance.mode=Advarsel\: setting av prim\u00e6rlagring i vedlikeholdsmodus vil for\u00e5rsake at alle VMer som benytter volum fra det vil bli stoppet. \u00d8nsker du \u00e5 fortsette? message.action.reboot.instance=Vennligst bekreft at du vill restarte denne instansen. +message.action.reboot.router=Alle tjenester levert fra denne virtuelle ruter vil bli avbrutt. Vennligst bekreft at du \u00f8nsker \u00e5 restarte denne ruteren. message.action.reboot.systemvm=Vennligst bekreft at du vil restarte denne system VM +message.action.release.ip=Vennligst bekreft at du \u00f8nsker \u00e5 frigi denne IP. message.action.remove.host=Vennligst bekreft at du vil gjerne denne tjeneren. +message.action.reset.password.off=Din instans st\u00f8tter forel\u00f8pig ikke denne funksjonen. +message.action.reset.password.warning=Din instans m\u00e5 v\u00e6re stoppet f\u00f8r man fors\u00f8ker \u00e5 bytte n\u00e5v\u00e6rende passord. +message.action.restore.instance=Vennligst bekreft at du \u00f8nsker \u00e5 gjenopprette denne instansen. +message.action.revert.snapshot=Vennligst bekreft at du \u00f8nsker \u00e5 gjenopprette volumet til dette \u00f8yeblikksbildet. message.action.start.instance=Vennligst bekreft at du \u00f8nsker \u00e5 starte denne instansen. message.action.start.router=Vennligst bekreft at du vil starte denne ruter. message.action.start.systemvm=Vennligst bekreft at du vil starte denne system VM. message.action.stop.instance=Vennligst bekreft at du vil stoppe denne instansen. +message.action.stop.router=Alle tjenester levert fra denne virtuelle ruter vil bli avbrutt. Vennligst bekreft at du \u00f8nsker \u00e5 stoppe denne ruteren. message.action.stop.systemvm=Vennligst bekreft at du vil stoppe denne system VM. message.action.take.snapshot=Vennligst bekreft at du vil ta et \u00f8yeblikksbilde av dette volumet. +message.action.unmanage.cluster=Vennligst bekreft at du ikke \u00f8nsker \u00e5 administere klyngen. +message.action.vmsnapshot.delete=Vennligst bekreft at du \u00f8nsker \u00e5 slette dette VM \u00f8yeblikksbilde. +message.action.vmsnapshot.revert=Tilbakestill VM \u00f8yeblikksbilde message.activate.project=Er du sikker p\u00e5 du \u00f8nsker \u00e5 aktivere dette prosjektet? +message.add.cluster=Legg til en hypervisor-administrert klynge for sone , pod +message.add.cluster.zone=Legg til en hypervisor-administrert klynge for sone +message.add.disk.offering=Vennligst spesifiser f\u00f8lgende parametere for \u00e5 legge til et nytt disktjenestetilbud message.add.domain=Vennligst bekreft underdomenet du \u00f8nsker \u00e5 opprette under dette domenet message.add.firewall=Legg en brannmur til sonen message.add.guest.network=Vennligst bekreft at du \u00f8nsker \u00e5 legge til gjestenettverk +message.add.host=Vennligst spesifiser f\u00f8lgende parametere for \u00e5 legge til en ny vert message.adding.host=Legger til vert message.adding.Netscaler.device=Legg til NetScaler-enhet +message.adding.Netscaler.provider=Legger til Netscaler leverand\u00f8r +message.add.ip.range.direct.network=Legg til en IP-rekke til et direkte-nettverk i sone +message.add.ip.range=Legg til en IP-rekke til offentlige nettverk i sonen +message.add.ip.range.to.pod=

Legg til IP-addresser til pod\:

+message.additional.networks.desc=Vennligst velg tilleggsnettverk som din virtuelle instans vil v\u00e6re tilkoblet. +message.add.load.balancer=Legg til lastbalanserer i sone message.add.load.balancer.under.ip=Lastbalanseringsregelen har blitt lagt til under IP\: +message.add.network=Legg til nytt nettverk for sone\: +message.add.new.gateway.to.vpc=Vennligst spesifiser f\u00f8lgende p\u00e5krevd informasjon for \u00e5 legge til en ny gateway i dette VPC nettverket. +message.add.pod.during.zone.creation=Hver sone m\u00e5 inneholde en eller flere pods, og vi legger til den f\u00f8rste poden n\u00e5. En pod inneholder verter og prim\u00e6rlagring, som du legger til i et senere steg. F\u00f8rst, konfigurer en rekke med reserverte IP-adresser for CloudStacks interne administrasjonstrafikk. Den reserverte IP-rekken m\u00e5 v\u00e6re unik for hver sone i en sky. +message.add.pod=Legg til ny pod for sone +message.add.primary.storage=Legg til ny prim\u00e6rlagring for sone , pod +message.add.primary=Vennligst spesifiser f\u00f8lgende paramtere for \u00e5 legge til ny hovedlagring. +message.add.region=Vennligst spesifiser f\u00f8lgende p\u00e5krevd informasjon for \u00e5 legge til en ny region. +message.add.secondary.storage=Legg til ny lagring for sone +message.add.service.offering=Vennligst skriv inn f\u00f8lgende data for \u00e5 legge til et nytt datakraftstilbud. +message.add.system.service.offering=Vennligst skriv inn f\u00f8lgende data for \u00e5 legge til et nytt systemtjenestetilbud. +message.add.template=Vennligst skriv inn f\u00f8lgende data for \u00e5 opprette din nye mal +message.add.volume=Vennligst skriv inn f\u00f8lgende data for \u00e5 legge til et nytt volum. message.add.VPN.gateway=Vennligst bekreft at du \u00f8nsker \u00e5 legge til en VPN Gateway +message.admin.guide.read=For VMware-baserte VMer, vennligst les avsnittet om dynamisk skalering i administrasjonsdokumentasjonen f\u00f8r skalering. \u00d8nsker du \u00e5 fortsette?\\, +message.advanced.mode.desc=Velg denne nettverksmodellen hvis du \u00f8nsker \u00e5 aktivere VLAN-st\u00f8tte. Denne nettverksmodellen gir den st\u00f8rste fleksibiliteten ved \u00e5 tillate administatorer \u00e5 lage egne nettverkstilbud som \u00e5 tilby brannmur, vpn og lastbalanserings-st\u00f8tte s\u00e5 vel som \u00e5 tillate direkte mot virtuelt nettverk. +message.advanced.security.group=Velg dette hvis du \u00f8nsker \u00e5 bruke sikkerhetsgrupper for \u00e5 tilby gjeste-VM isolering. +message.advanced.virtual=Velg dette hvis du \u00f8nsker \u00e5 bruke soneomfattende VLAN for \u00e5 tilby gjeste-VM isolering. +message.after.enable.s3=S3-st\u00f8ttet sekund\u00e6rlagring konfigurert. Merk\: N\u00e5r du forlater denne siden s\u00e5 vil det ikke v\u00e6re mulig \u00e5 konfigurere S3 p\u00e5 nytt. +message.after.enable.swift=Swift konfigurert. Merk\: N\u00e5r du forlater denne siden s\u00e5 vil det ikke v\u00e6re mulig konfigurere Swift p\u00e5 nytt. message.alert.state.detected=Alarm oppdaget +message.allow.vpn.access=Vennligst skriv inn et brukernavn og passord for brukeren du til gi VPN-tilgang. +message.apply.snapshot.policy=Du har oppdatert den n\u00e5v\u00e6rende \u00f8yeblikksbilde policyen. +message.attach.iso.confirm=Vennligst bekreft at du vil tildele ISOen til denne virtuelle instans. +message.attach.volume=Vennligst fyll inn f\u00f8lgende data for \u00e5 tilknytte et nytt volum. Hvis du tilknytter et diskvolum til en Windows-basert virtuell maskin s\u00e5 er du n\u00f8dt til \u00e5 restarte instansen for \u00e5 se den tilknyttede disken. +message.basic.mode.desc=Velg denne nettverksmodellen hvis du *ikke* vil aktivere VLAN st\u00f8tte. Alle virtuelle instnanser opprettet under denne nettverksmodellen vil bli tildelt en IP direkte fra nettverket og sikkerhetsgrupper blir benyttet for \u00e5 tilby sikkerhet og segregering. +message.change.offering.confirm=Vennligst bekreft at du vil forandre servicetilbudet for denne virtuelle maskinen. message.change.password=Vennligst endre ditt passord +message.cluster.dedicated=Dedikert Til Klynge +message.cluster.dedication.released=Klynge dedikering frigjort +message.configure.all.traffic.types=Du har flere fysiske nett; vennligst konfigurer etiketter for hver trafikktype ved \u00e5 klikke p\u00e5 Rediger-knappen. +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 message.configuring.storage.traffic=Konfigurerer lagringstrafikk +message.confirm.action.force.reconnect=Vennligst bekreft at du \u00f8nsker \u00e5 tvinge et nytt tilkoblingsfors\u00f8k for denne vert. +message.confirm.add.vnmc.provider=Vennligst bekreft at du \u00f8nsker \u00e5 installere denne VNMC tilbyderen. +message.confirm.archive.alert=Vennlgist bekreft at du vil arkivere denne varslingen. +message.confirm.archive.event=Vennligst bekreft at du \u00f8nsker \u00e5 arkivere denne hendelsen. +message.confirm.archive.selected.alerts=Vennligst bekreft at du \u00f8nsker \u00e5 arkivere valgte varsler +message.confirm.archive.selected.events=Er du sikker p\u00e5 at du vil arkivere valgte hendelser +message.confirm.attach.disk=Er du sikker p\u00e5 at du vil tildele disk? +message.confirm.create.volume=Er du sikker p\u00e5 at du vil opprette volum? +message.confirm.current.guest.CIDR.unchanged=\u00d8nsker du \u00e5 beholde n\u00e5v\u00e6rende gjestenettverks CIDR uendret? +message.confirm.dedicate.cluster.domain.account=Bekreft at du vil dedikere denne klyngen til et domene / en konto? +message.confirm.dedicate.host.domain.account=\u00d8nsker du virkelig \u00e5 dedikere denne verten til et domene/konto? +message.confirm.dedicate.pod.domain.account=\u00d8nsker du virkelig \u00e5 dedikere denne pod til et domene/konto? +message.confirm.dedicate.zone=\u00d8nsker du virkelig \u00e5 dedikere denne sonen til et domene/konto? +message.confirm.delete.acl.list=Er du sikker p\u00e5 at du \u00f8nsker \u00e5 slette denne ACL listen? +message.confirm.delete.alert=Er du sikker p\u00e5 at du vil slette denne varslingen ? +message.confirm.delete.BrocadeVcs=Vennligst bekreft at du vil slette denne Brocade Vcs svitsjen message.confirm.delete.ciscoASA1000v=Vennligst bekreft at du vil slette CiscoASA1000v +message.confirm.delete.ciscovnmc.resource=Vennligst bekreft at du vil slette CiscoVNMC message.confirm.delete.F5=Vennligst bekreft at du \u00f8nsker \u00e5 slette F5 +message.confirm.delete.internal.lb=Vennligst bekreft at du \u00f8nsker \u00e5 slette Intern LB message.confirm.delete.NetScaler=Vennligst bekreft at du \u00f8nsker \u00e5 slette Netscaler +message.confirm.delete.NuageVsp=Vennligst bekreft at du \u00f8nsker \u00e5 slette Nuage Virtualized Service Directory message.confirm.delete.PA=Vennligst bekreft at du vil slette Palo Alto +message.confirm.delete.secondary.staging.store=Vennligst bekreft at du vil slette dette sekund\u00e6rmellomlagringsomr\u00e5de. message.confirm.delete.SRX=Vennligst bekreft at du \u00f8nsker \u00e5 slette SRX +message.confirm.delete.ucs.manager=Vennligst bekreft at du \u00f8nsker \u00e5 slette UCS Manager message.confirm.destroy.router=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne denne ruteren +message.confirm.disable.host=Vennligst bekreft at du vil detaktivere denne vert +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.vnmc.provider=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne VNMC tilbyderen. +message.confirm.disable.vpc.offering=Er du sikker p\u00e5 at du vil deaktivere dette VPC tilbudet? +message.confirm.enable.host=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere verten +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.enable.vnmc.provider=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere denne VNMC tilbyderen. +message.confirm.enable.vpc.offering=Er du sikker p\u00e5 at du vil aktivere dette VPC nettverkstilbudet? message.confirm.join.project=Vennligst bekreft at du \u00f8nsker \u00e5 delta i dette prosjektet. +message.confirm.migrate.volume=\u00d8nsker du \u00e5 migrere dette volumet? +message.confirm.refresh.blades=Vennligst bekreft at du vil oppdatere blade status. +message.confirm.release.dedicated.cluster=Vil du aktivere denne dedikerte klyngen? +message.confirm.release.dedicated.host=\u00d8nsker du \u00e5 frigi denne dedikerte verten ? +message.confirm.release.dedicated.pod=\u00d8nsker du \u00e5 frigi denne dedikerte poden ? +message.confirm.release.dedicated.zone=\u00d8nsker du \u00e5 frigi denne dedikerte sonen ? +message.confirm.release.dedicate.vlan.range=Vennligst bekreft at du vil frigi denne dedierte VLAN-rekken +message.confirm.remove.event=Er du sikker p\u00e5 at du vil fjerne denne hendelsen? +message.confirm.remove.IP.range=Vennligst bekreft du til fjerne denne IP-rangen. +message.confirm.remove.load.balancer=Vennligst bekreft at du vil fjerne VM fra lastbalanserer +message.confirm.remove.network.offering=Er du sikker p\u00e5 at du vil fjerne dette nettverkstilbudet? +message.confirm.remove.selected.alerts=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne valgte alarmer +message.confirm.remove.selected.events=Vennligst bekreft at du vil fjerne valgte hendelser +message.confirm.remove.vmware.datacenter=Vennligst bekreft at du vil fjerne dette VMWare data senteret +message.confirm.remove.vpc.offering=Er du sikker p\u00e5 at du vil fjerne dette VPC tilbudet? +message.confirm.replace.acl.new.one=Vil du erstatte ACL med en ny? +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.confirm.upgrade.router.newer.template=Vennligst bekreft at du vil oppgradere ruter til \u00e5 bruke nyere mal +message.confirm.upgrade.routers.account.newtemplate=Vennligst bekreft at du vil oppgradere alle rutere i denne kontoen til \u00e5 bruke en nyere mal +message.confirm.upgrade.routers.cluster.newtemplate=Vennligst bekreft at du vil oppgradere alle rutere i denne klyngen til \u00e5 bruke en nyere mal +message.confirm.upgrade.routers.newtemplate=Vennligst bekreft at du vil oppgradere alle rutere i denne sonen til \u00e5 bruke en nyere mal +message.confirm.upgrade.routers.pod.newtemplate=Vennligst bekreft at du vil oppgradere alle rutere i denne pod til \u00e5 bruke en nyere mal +message.copy.iso.confirm=Vennligst bekreft at du vil kopiere din ISO til +message.copy.template.confirm=\u00d8nsker du \u00e5 kopiere malen? +message.copy.template=Kopier template XXX fra sone til message.create.template=Er du sikker p\u00e5 at du \u00f8nsker \u00e5 lage malen? +message.create.template.vm=Lage VM fra template +message.create.template.volume=Vennligst spesifiser f\u00f8lgende informasjon f\u00f8r opprettelse av en mal for ditt diskvolum\: . Opprettelse av malen kan ta flere minutter og lenger avhengig av st\u00f8rrelsen p\u00e5 volumet. message.creating.cluster=Oppretter klynge message.creating.guest.network=Oppretter gjestenettverk 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.dedicated.zone.released=Sone dedikering frigitt +message.dedicate.zone=Dedikerer sone +message.delete.account=Vennligst bekreft at du vil slette denne kontoen. +message.delete.affinity.group=Vennligst bekreft du til fjerne denne affinitetsgruppen. message.delete.gateway=Vennligst bekreft at du \u00f8nsker \u00e5 slette gateway message.delete.project=Er du sikker p\u00e5 du \u00f8nsker \u00e5 slette dette prosjektet? message.delete.user=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne bruker. message.delete.VPN.connection=Vennligst bekreft at du \u00f8nsker \u00e5 slette VPN-tilkobling +message.delete.VPN.customer.gateway=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne VPN gatewayen +message.delete.VPN.gateway=Vennligst bekreft at du \u00f8nsker \u00e5 slette denne VPN gatewayen +message.desc.advanced.zone=For mer avanserte nettverks topologier. Denne nettverks modellen gir flest egenskaper rundt definisjon av gjestenettverk og gir alternativer for tilpassede netverkstilbud, slik for brannmurer, VPN og lastbalanserere. +message.desc.basic.zone=Gir et enkelt nettverk hvor alle virtuelle instanser blir tildelt en IP-adresse direkte fra nettverket. Isolering av gjester kan tilbys p\u00e5 lag-3 ved hjelp av sikkerhetsgrupper (IP-adresse kilde-filtrering). +message.desc.cluster=Hver pod m\u00e5 inneholde en eller flere pods, og vi vil installere den f\u00f8rste klyngen n\u00e5. En klynge har til form\u00e5l \u00e5 samle en gruppe hypervisor verter. All vertene i en klynge m\u00e5 ha identisk marskinvare, kj\u00f8re samme hypervisor, v\u00e6re p\u00e5 samme nettverk, og ha tilgang til den samme prim\u00e6rlagringsenheten. Hver klynge best\u00e5r av en eller flere verter og en eller flere prim\u00e6rlagrings verter. +message.desc.host=Hver klynge m\u00e5 inneholde minst en vert (datamaskin) for gjester \u00e5 kj\u00f8re p\u00e5, og vi legger til den f\u00f8rste n\u00e5. For at en vert skal fungere i CloudStack m\u00e5 du installere hypervisor-programvare p\u00e5 den, tildele en IP-adresse og s\u00f8rge for at den er tilkoblet CloudStacks administrasjonsserver.

Oppgi vertens DNS- eller IP-adresse, brukernavnet (vanligvis root) og passord, og eventuelle etiketter du \u00f8nsker \u00e5 kategorisere den med. +message.desc.primary.storage=Hver klynge m\u00e5 inneholde en eller flere prim\u00e6rlagringer, og vi skal legge til den f\u00f8rste n\u00e5. Prim\u00e6rlagring inneholder diskvolumer for alle maskiner som kj\u00f8rer p\u00e5 verter i klyngen. Bruk hvilken som helst standard-protokoll den underliggende hypervisoren st\u00f8tter. +message.desc.secondary.storage=Hver sone m\u00e5 ha minst en NFS eller sekund\u00e6rlagringsserver og vi vil legge til den f\u00f8rste n\u00e5. Sekund\u00e6rlingsserveren lagrer VM-maler, ISO-bilder og VM-disk \u00f8yeblikksbilder. Denne serveren m\u00e5 v\u00e6re tilgjengelig for alle verter i denne sonen.

Oppgi IP-adresseng og eksportert sti. +message.desc.zone=En sone er den st\u00f8rste gruppe enheten i en CloudStack installasjon. En sone er typisk sett p\u00e5 som et datasenter. En sone best\u00e5r av en eller flere pods (hver pod inneholder hypervisor verter og prim\u00e6rlagringsenheter) og en sekund\u00e6rlagringsenhet som er delt mellom alle pods i sonen. message.detach.disk=Er du sikker p\u00e5 at du \u00f8nsker \u00e5 frakoble denne disken? +message.detach.iso.confirm=Vennligst bekreft at du \u00f8nsker \u00e5 frakoble ISOen fra denne virtuelle instansen. +message.disable.account=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne kontoen. Ved \u00e5 deaktivere kontoen s\u00e5 vil alle brukere av denne kontoen ikke lenger ha tilgang til sine skyressurser. Alle virtuelle maskiner vil bli skrudd av umiddelbart. +message.disable.snapshot.policy=Du har deaktivert den n\u00e5v\u00e6rende \u00f8yeblikksbilde policyen. message.disable.user=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere denne bruker. +message.disable.vpn.access=Vennligst bekreft at du \u00f8nsker \u00e5 deaktivere VPN-tilgang. 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.download.ISO=Vennligst klikk 00000 for \u00e5 laste ned ISO +message.download.template=Vennligst klikk 00000 for \u00e5 laste ned mal +message.download.volume.confirm=Vennligst bekreft at du \u00f8nsker \u00e5 laste ned dette volumet. +message.download.volume=Vennligst klikk 00000 for \u00e5 laste ned volumet +message.edit.account=Oppdater ("-1" indikerer at det ikke er satt \u00f8vre grense for resursbruk) +message.edit.confirm=Vennligst bekreft dine endringer f\u00f8r du klikker "Lagre". +message.edit.limits=Oppdater \u00f8vre grense for resursbruk. "-1" indikerer at det ikke er satt \u00f8vre grense. +message.edit.traffic.type=Vennligst oppgi trafikk-etiketten du \u00f8nsker knyttet til denne trafikktypen. +message.enable.account=Bekreft at du \u00f8nsker \u00e5 aktivere denne kontoen. +message.enabled.vpn=Din fjerntilkoblings-VPN er aktivert og kan n\u00e5s via IPen +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.access=VPN er deaktivert for denne IP-adressen. \u00d8nsker du \u00e5 aktivere VPN-tilgang? message.enable.vpn=Vennligst bekreft at du \u00f8nsker \u00e5 aktivere VPN-tilgang for denne IP-adressen +message.enabling.network.offering=Aktiver nettverkstilbud +message.enabling.security.group.provider=Aktiverer sikkerhetsgruppetilbyder +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.gslb.lb.remove.confirm=Vennligst bekreft at du vil slette lastbalansering fra GSLB +message.guest.traffic.in.advanced.zone=Gjestetrafikk er kommunikasjon mellom sluttbrukers virtuelle maskiner. Spesifiser en rekke med VLAN-ider som kan inneholde gjestetrafikk for hvert fysiske nettverk. +message.guest.traffic.in.basic.zone=Gjestetrafikk er kommunikasjon mellom sluttbrukers virtuelle gjester. Spesifiser en rekke med IP-adresser som CloudStack kan tildele virtuelle gjester. S\u00f8rg for at denne rekken ikke overlapper IP-rekken(e) som er reservert systemmaskiner. +message.host.dedicated=Dedikert Vert +message.host.dedication.released=Vert dedikering frigitt message.installWizard.click.retry=Klikk p\u00e5 knappen for \u00e5 pr\u00f8ve oppstart p\u00e5 nytt. +message.installWizard.copy.whatIsACluster=En klynge har til form\u00e5l \u00e5 samle en gruppe hypervisor verter. All vertene i en klynge m\u00e5 ha identisk marskinvare, kj\u00f8re samme hypervisor, v\u00e6re p\u00e5 samme subnett, og ha tilgang til den samme prim\u00e6rlagringsenheten. Kj\u00f8rende virtuelle maskiner (VM) kan migreres fra en vert i klyngen til en annen uten avbrudd for brukeren. En klynge er den tredje st\u00f8rste enheten i CloudStack. En pod inneholder en eller flere klynger, og en sone inneholder en eller flere pods.

CloudStack can inneholde en eller flere klynger, men for en basic installasjon trengs bare en. +message.installWizard.copy.whatIsAHost=En vert er en enkelt datamaskin. Verter tilbyr ressurser som kan gj\u00f8re virtuelle gjester. Hver vert har hypervisor-programvare installert for \u00e5 administrere gjestene (bortsett fra r\u00e5jern-verter, som er et spesialtilfelle diskutert i den avanserte installasjonsguiden). For eksempel, en Linux KVM-aktivert server, en Citrix XenServer server og en ESXi server er verter. I en enkel installasjon bruker vi en enkelt vert som kj\u00f8rer XenServer eller KVM.

Verten er den minste organisasjonsenheten i en CloudStack-installasjon. Verter er del av klynger, klynger er del av poder og poder er del av soner. +message.installWizard.copy.whatIsAPod=En pod representerer ofte et enkelt rack. Verter i samme pod er i samme subnett.

En pod er den nest st\u00f8rste enheten i en CloudStack-installasjon. Poder er en del av soner. Hver sone kan inneholde en eller flere poder; i en enkel installasjon vil du kun ha en pod i sonen. +message.installWizard.copy.whatIsAZone=En sone er den st\u00f8rste gruppe enheten i en CloudStack installasjon. En sone er typisk sett p\u00e5 som et datasenter, selv om man kan ha flere datasenter i en sone. CloudStack infrastrukturen kan deles inn i soner for \u00e5 isolere og \u00e5 gi redundans. Hver sone kan for eksempel ha sin egen data senter str\u00f8mtilf\u00f8rsel og nettverkslink, og soner kan v\u00e6re spredd over st\u00f8rre distanser. +message.installWizard.copy.whatIsCloudStack=CloudStack&\#8482 er en programvare-plattform som grupperer dataressurser for \u00e5 bygge offentlige, private og hybride infrastruktur som en tjeneste (IaaS) skyer. CloudStack&\#8482 administrerer nettverk, lagring og regnekraft-verter som til sammen blir en sky-infrastruktur. Bruk CloudStack&\#8482 til \u00e5 distribuere, administrerre og konfigurere dine skyressurser og milj\u00f8er.

Utvid forbi individuelle virtuelle gjester som kj\u00f8rer p\u00e5 typisk maskinvare, CloudStack&\#8482 gir en skybasert infrastruktur-programvare for levering av virtuelle datasentre som en tjeneste - lever alle de essensielle komponenente for \u00e5 bygge, distribuere og administrere multi-tier og multi-tenant sky-applikasjoner. B\u00e5de fri kildekode- og premium-versjoner er tilgjengelig, hvor den fri kildekode-basert gir tiln\u00e6rmet samme funksjonalitet. +message.installWizard.copy.whatIsPrimaryStorage=En CloudStack&\#8482 sky-infrastruktur tar i bruk to typer lagring\: prim\u00e6rlagring og sekund\u00e6rlagring.

Prim\u00e6rlagring er assosiert med en klynge, og lagrer datadisker for hver gjest som kj\u00f8rer i den klyngen. Prim\u00e6rlagring er typisk plassert n\u00e6rt den faktiske verten. +message.installWizard.copy.whatIsSecondaryStorage=Sekund\u00e6rlagring er assosiert med en sone, og lagrer f\u00f8lgende\:
  • Maler - OS-bilder som kan brukes til \u00e5 starte opp virtuelle gjester og kan inkludere ekstra konfigurasjon, som installerte applikasjoner
  • ISO-bilder - Bilder som kan v\u00e6re bootbare eller ikke-bootbare.
  • Diskvolum \u00f8yeblikksbilder - Lagrede kopier av virtuelle gjester som kan benyttes til rekonstruksjon eller for \u00e5 lage nye maler
+message.installWizard.now.building=Bygger n\u00e5 din nettsky... 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. message.installWizard.tooltip.addHost.password=Dette er passordet for brukeren gjengitt ovenfor (fra din XenServer-installasjon). message.installWizard.tooltip.addHost.username=Vanligvis root. message.installWizard.tooltip.addPod.name=Et navn for poden +message.installWizard.tooltip.addPod.reservedSystemEndIp=Dette er IP-rekken i det private nettverket som CloudStack bruker for \u00e5 administrere Sekund\u00e6rlagrins-servere og Konsollproxy-servere. Disse IP-adressene tas fra samme subnett som regnekraft-serverne. message.installWizard.tooltip.addPod.reservedSystemGateway=Gatewayen til vertene i poden. message.installWizard.tooltip.addPod.reservedSystemNetmask=Nettmasken benyttet p\u00e5 subnettet gjestene vil bruke. +message.installWizard.tooltip.addPod.reservedSystemStartIp=Dette er IP-rekken i det private nettverket som CloudStack bruker for \u00e5 administrere Sekund\u00e6rlagrins-servere og Konsollproxy-servere. Disse IP-adressene tas fra samme subnett som regnekraft-serverne. message.installWizard.tooltip.addPrimaryStorage.name=Navnet p\u00e5 lagringsenheten. message.installWizard.tooltip.addPrimaryStorage.path=(for NFS) I NFS er dette den eksporterte filbanen fra serveren. Banen (for SharedMountPoint). Med KVM er dette banen p\u00e5 hver vert hvor denne prim\u00e6re lagringen er tilkoblet. For eksempel\: "mnt/primary". message.installWizard.tooltip.addPrimaryStorage.server=(for NFS, iSCSI eller PreSetup) IP-adressen eller DNS-navnet til lagringsenheten. @@ -1118,23 +1880,44 @@ message.installWizard.tooltip.addSecondaryStorage.nfsServer=IP-adressen til NFS- message.installWizard.tooltip.addSecondaryStorage.path=Den eksporterte filbanen, fra serveren du spesifiserte ovenfor message.installWizard.tooltip.addZone.dns1=Dette er DNS-serveren som benyttes av gjeste-VMer i sonen. Disse DNS-serverene vil bli aksessert via det offentlige nettverket du vil legge til senere. De offentlige IP-adressene for en sone m\u00e5 ha en rute til DNS-serveren navngitt her. message.installWizard.tooltip.addZone.dns2=Dette er DNS-serveren som benyttes av gjeste-VMer i sonen. Disse DNS-serverene vil bli aksessert via det offentlige nettverket du vil legge til senere. De offentlige IP-adressene for en sone m\u00e5 ha en rute til DNS-serveren navngitt her. +message.installWizard.tooltip.addZone.internaldns1=Dette er DNS-servere som benyttes av systemmaskiner i sonen. Disse DNS-serverne vil bli aksessert via det private nettverksgrensesnittet til systemmaskinene. De private IP-adressene du oppgir for podene m\u00e5 ha en rute til DNS-serverne nevnt her. +message.installWizard.tooltip.addZone.internaldns2=Dette er DNS-servere som benyttes av systemmaskiner i sonen. Disse DNS-serverne vil bli aksessert via det private nettverksgrensesnittet til systemmaskinene. De private IP-adressene du oppgir for podene m\u00e5 ha en rute til DNS-serverne nevnt her. message.installWizard.tooltip.addZone.name=Et navn for sonen message.installWizard.tooltip.configureGuestTraffic.description=En beskrivelse av nettverket +message.installWizard.tooltip.configureGuestTraffic.guestEndIp=Rekken av IP-adresser som vil v\u00e6re tilgjengelig for allokering til gjester i denne sonen. Hvis ett grensesnitt er brukt, b\u00f8r disse IPene v\u00e6re i samme CIDR som podens CIDR. 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.guestStartIp=Rekken av IP-adresser som vil v\u00e6re tilgjengelig for allokering til gjester i denne sonen. Hvis ett grensesnitt er brukt, b\u00f8r disse IPene v\u00e6re i samme CIDR som podens CIDR. 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 message.join.project=Du har n\u00e5 deltatt i et prosjekt. Vennligst bytt til prosjektvisning for \u00e5 se prosjektet. +message.launch.vm.on.private.network=\u00d8nsker du \u00e5 starte instancen din p\u00e5 ditt dedikerte nettverk? +message.launch.zone=Sonen er klar for aktivering; vennligst fortsett til neste steg. message.listView.subselect.multi=(Ctrl/Cmd-klikk) +message.lock.account=Vennligst bekreft at du \u00f8nsker \u00e5 l\u00e5se denne kontoen. Ved \u00e5 l\u00e5se kontoen s\u00e5 vil ingen brukere av denne kontoen kunne administere sine skyressurser. Eksisterende ressurser kan fortsatt bli aksessert. +message.migrate.instance.confirm=Vennligst bekreft verten du \u00f8nsker \u00e5 migrere den virtuelle instansen til. message.migrate.instance.to.host=Vennligst bekreft at du \u00f8nsker \u00e5 migrere instansen til en annen vert. message.migrate.instance.to.ps=Vennligst bekreft at du \u00f8nsker \u00e5 migrere instansen til en annen sekund\u00e6r lagring. 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.new.user=Spesifiser f\u00f8lgende informasjon for \u00e5 legge til en ny bruker til denne kontoen +message.no.affinity.groups=Du har ingen affinitetsgrupper. Fortsett til neste steg. +message.no.host.available=Ingen hoster tilgjengelig for migrering +message.no.network.support.configuration.not.true=Du har ingen soner med sikkerhetsgrupper aktivert. Derfor ingen ekstra nettverksfunksjoner. Fortsett til steg 5. +message.no.network.support=Din valgte hypervisor, vSphere, har ikke flere nettverks evner. Forsett til punkt 5. 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.number.clusters=

\# av Klynger

+message.number.hosts=

\# av Verter

+message.number.pods=

\# av Pods

+message.number.storage=

\# av Prim\u00e6rlagringsvolumer

+message.number.zones=

\# av Soner

message.pending.projects.1=Du har f\u00f8lgende prosjektinvitasjoner\: message.pending.projects.2=For \u00e5 se, vennligst g\u00e5 til prosjektseksjonen og velg invitasjoner fra nedtrekksmenyen. message.please.add.at.lease.one.traffic.range=Vennligst legg til minst \u00e9tt trafikkniv\u00e5 @@ -1143,37 +1926,114 @@ message.please.select.a.configuration.for.your.zone=Vennligst velg en konfiguras message.please.select.a.different.public.and.management.network.before.removing=Vennligst velg et annet offentlig- og administrasjonsnettverk f\u00f8r du fjerner 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.pod.dedication.released=Pod dedikering frigitt +message.portable.ip.delete.confirm=Vennligst bekreft at du vil slette denne portable IP-rekken message.project.invite.sent=Invitasjon sendt til bruker. De vil bli lagt til prosjektet s\u00e5 snart de har akseptert invitasjonen +message.public.traffic.in.advanced.zone=Offentlig trafikk blir generert av verter i skyen som aksesserer internett. Offentlige IP-adresser m\u00e5 allokerers for dette form\u00e5et. Sluttbrukere kan bruke CloudStack brukergrensesnittet til \u00e5 foresp\u00f8rre om disse IP-adressene til \u00e5 implentere NAT mellom deres gjestenettverk og det offentlige nettverket.

Oppgi minst en rekke med IP-adresser for internettrafikk. +message.public.traffic.in.basic.zone=Offentlig trafikk blir generert n\u00e5r virtuelle gjester i skyen aksesserer internett eller kan tilby tjenester til klienter over internett. Offentlig tilgjengelige IP-adresser m\u00e5 allokerers for dette form\u00e5let. N\u00e5r en instans opprettes vil en IP fra dette settet med Offentlige IP-adresser bli tildelt i tillegg til en gjeste-IP-adresse. Statisk 1-1 NAT vil ogs\u00e5 bli satt opp automatisk mellom the offentlige og den private IP-adressen. Sluttbrukere kan ogs\u00e5 bruke CloudStack brukergrensesnittet til \u00e5 tilegne ekstra IP-adresser for \u00e5 implementere statisk NAT mellom deres instans og den offentlige IP-adressen. +message.read.admin.guide.scaling.up=Vennligst les avsnittet om dynamisk skalering i administrasjondokumentasjonen f\u00f8r du oppskalerer. +message.recover.vm=Vennligst bekreft at du \u00f8nsker \u00e5 gjenopprette denne VMen. +message.redirecting.region=Omdirigerer til region... +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.remove.vpn.access=Vennligst bekreft at du \u00f8nsker \u00e5 fjerne VPN-tillgang fra f\u00f8lgende bruker. message.reset.password.warning.notPasswordEnabled=Denne malen vil bli opprettet uten passord message.reset.password.warning.notStopped=Din instans m\u00e5 stoppes f\u00f8r man fors\u00f8ker \u00e5 bytte n\u00e5v\u00e6rende passord 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.mgmt.usage.server=Vennligst restart administrasjonsserveren(e) din(e) og bruksserver(e) for at de nye innstillingene skal tr\u00e5 i kraft +message.restart.network=Alle tjenester fra dette nettverket vil bli avbrutt. Vennligst bekreft at du \u00f8nsker \u00e5 restarte dette nettverket. message.restart.vpc=Vennligst bekreft at du \u00f8nsker \u00e5 restarte VPC +message.restoreVM=Vil du gjenopprette denne VMen? +message.security.group.usage=(Bruk Ctrl-klikk for \u00e5 velge alle aktuelle sikkerhetsgrupper) +message.select.affinity.groups=Vennligst velg en affinitetsgruppe denne VMen skal tilh\u00f8re\: +message.select.a.zone=En sone er typisk sett p\u00e5 som et datasenter. Multiple soner gir CloudStack bedre p\u00e5litelighet gjennom isolasjon og redundans. 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.select.tier=Vennligst velg en VPC-gren +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.physical.network.during.zone.creation.basic=N\u00e5r du legger til en enkel sone s\u00e5 kan du sette opp ett fysisk nettverk som korrensponderer til et NIC p\u00e5 hypervisor. Nettverket transporterer flere typer trafikk.

Du kan ogs\u00e5 drag og slippe andre trafikktyper over til det fysiske nettverket. +message.setup.physical.network.during.zone.creation=N\u00e5r du legger til en avansert sone, m\u00e5 du konfigurere en eller flere fysiske nettverk. Hvert nettverk representerer et NIC p\u00e5 verten. Hvert fysiske nettverk kan inneholde en eller flere typer trafikk, med noen restriksjoner for hvordan de kan kombineres.

Dra og slipp en eller flere nettverkstyper til hvert fysiske nettverk. message.setup.successful=Oppsettet av nettskyen er vellykket\! +message.snapshot.schedule=Du kan sette opp gjentakende \u00f8yeblikksbilder ved \u00e5 velge fra tilgjengelige opsjoner nedenfor og aktivere dine preferanser. +message.specifiy.tag.key.value=Vennligst bekreft tag n\u00f8kkel og verdi message.specify.url=Vennligst spesifiser URL +message.step.1.continue=Vennligst velg en mal eller ISO for \u00e5 fortsette. +message.step.1.desc=Vennligst velg en mal for din nye virtuelle instans. Du kan ogs\u00e5 velge en blank mal som du kan installere fra en ISO p\u00e5. +message.step.2.continue=Velg et resurstilbud for \u00e5 fortsette message.step.2.desc= +message.step.3.continue=Vennligst velg et disktilbud for \u00e5 fortsette message.step.3.desc= +message.step.4.continue=Vennligst velg minst ett nettverk for \u00e5 fortsette +message.step.4.desc=Vennligst velg prim\u00e6rnettverket som din virtuelle instans vil bli tilkoblet til. +message.storage.traffic=Trafikk mellom CloudStacks interne ressurser, inkludert alle komponenter som kommuniserer med administrassjonsserver, som verter og CloudStack systemmaskiner. Vennligst konfigurer lagringstrafikk her. 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.tier.required=VPC-gren er p\u00e5krevd. +message.tooltip.dns.1=Oppgi en DNS server for bruk av VMer i denne sonen. De offentlige IP-adressene for denne sonen m\u00e5 ha en rute til denne serveren. +message.tooltip.dns.2=En sekund\u00e6r DNS server for bruk av VMer i denne sonen. De offentlige IP-adressene for denne sonen m\u00e5 ha en rute til denne serveren. +message.tooltip.internal.dns.1=Navn p\u00e5 en DNS-server for bruk av CloudStack interne systemVMer i sonen. Den private IP-adressen i podden m\u00e5 ha en rute til serveren. +message.tooltip.internal.dns.2=Navn p\u00e5 en DNS-server for bruk av CloudStack interne systemVMer i sonen. Den private IP-adressen i podden m\u00e5 ha en rute til serveren. +message.tooltip.network.domain=Et DNS suffiks som vil opprette et tilpasset domenenavn for nettverket som aksesseres av gjeste VMer. message.tooltip.pod.name=Et navn for denne pod. +message.tooltip.reserved.system.gateway=Gatewayen til vertene i poden. +message.tooltip.reserved.system.netmask=Nettverksprefiks som definerer podens subnett. Bruker CIDR-notasjon. message.tooltip.zone.name=Et navn for denne sonen. +message.update.os.preference=Vennligst velg preferert OS for denne verten. Alle virtuelle instanser med lignende OS vil f\u00f8rst bli allokert til denne verten f\u00f8r andre velges. +message.update.resource.count=Vennligst bekreft at du \u00f8nsker \u00e5 oppdatere ressurstellere for denne kontoen. +message.update.ssl.failed=Oppdatering av SSL-sertifikat feilet. +message.update.ssl.succeeded=Oppdatering av SSL-sertifikat vellykket +message.update.ssl=Vennligst send inn en ny X.509 kompatibel SSL-sertifikatkjede for \u00e5 oppdatere hver konsollproxy og virtuell instans for sekund\u00e6rlagring\: +message.validate.accept=Vennligst skriv inn en verdi med et gyldig prefiks. +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.instance.name=Instansnavn kan ikke v\u00e6re lenger enn 63 tegn. Kun ACSCII bokstaver a~z, A~Z, tall 0~9, bindestrek er tillatt. M\u00e5 starte med en bokstav og slutte med en bokstav eller et tall. 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.virtual.network.desc=Et dedikert virtualisert nettverk for din konto. Kringkastingsdomenet er isolert inne i et VLAN og offentlig nettverkstrafikk er rutet ut av en virtuell ruter. 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.vnmc.available.list=VNMC er ikke tilgjengelig fra tilbyder listen. +message.vnmc.not.available.list=VNMC er ikke tilgjengelig fra tilbyder listen. +message.volume.create.template.confirm=Vennligst bekreft at du \u00f8nsker \u00e5 lage en mal for dette diskvolumet. Opprettelse av male kan ta opptil flere minutter eller lenger, avhengig av st\u00f8rrelsen p\u00e5 volumet. +message.waiting.for.builtin.templates.to.load=Venter p\u00e5 at innebygde maler skal lastes... +message.XSTools61plus.update.failed=Feilet \u00e5 oppdatere original XS versjon er 6.1\\+ feltet. Feil\: 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 +message.zone.step.3.desc=Vennligst skriv inn f\u00f8lgende informasjon for \u00e5 legge til en ny pod +message.zoneWizard.enable.local.storage=ADVARSEL\: Hvis du aktiverer lokal lagring for denne sonen m\u00e5 du gj\u00f8re f\u00f8lgende, avhengig av hvor du \u00f8nsker at systemmaskiner skal starte\:

1. Hvis systemmaskiner trenger \u00e5 starte fra delt lagring, m\u00e5 det legges til delt lagring etter at sonen er opprettet. Sonen m\u00e5 ogs\u00e5 startes som deaktivert.

2. Hvis systemmaskiner trenger \u00e5 starte fra lokal lagring, m\u00e5 system.vm.use.local.storage settes til true f\u00f8r du aktiverer sonen.


Vil du fortsette? +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 @@ -1184,6 +2044,7 @@ state.Completed=Utf\u00f8rt state.Creating=Oppretter state.Declined=Avvist state.Destroyed=Destruert +state.detached=Frakoblet state.Disabled=Inaktiv state.enabled=Aktivert state.Enabled=Aktivert diff --git a/client/WEB-INF/classes/resources/messages_nl_NL.properties b/client/WEB-INF/classes/resources/messages_nl_NL.properties index 58ee3b1277..1df4a627a1 100644 --- a/client/WEB-INF/classes/resources/messages_nl_NL.properties +++ b/client/WEB-INF/classes/resources/messages_nl_NL.properties @@ -53,6 +53,9 @@ label.account.name=Account Naam label.accounts=Accounts label.account.specific=Account-specifiek label.acl=ACL +label.acl.id=ACL ID +label.acl.name=ACL naam +label.acl.replaced=ACL vervangen label.acquire.new.ip=Bemachtig nieuw IP label.acquire.new.secondary.ip=Verkrijg nieuw secundair IP label.action=Actie @@ -65,8 +68,11 @@ label.action.cancel.maintenance.mode.processing=Onderhoudsmodus wordt geannuleer label.action.change.password=Wijzig Wachtwoord label.action.change.service.processing=Service wordt gewijzigd.... label.action.change.service=Wijzig Service +label.action.configure.samlauthorization=configureer SAML SSO authorisatie label.action.copy.ISO=Kopieer ISO +label.action.copy.ISO.processing=Bezig een ISO te kopi\u00ebren... label.action.copy.template=Kopieer Template +label.action.copy.template.processing=Bezig een template te kopi\u00ebren... label.action.create.template=Cre\u00eber Template label.action.create.template.from.vm=Cre\u00eber Template vanaf VM label.action.create.template.from.volume=Cre\u00eber Template van Volume @@ -247,18 +253,22 @@ label.add.accounts.to=Voeg accounts toe aan label.add.accounts=Voeg accounts toe label.add.account.to.project=Voeg account aan project toe label.add.account=Voeg Account toe +label.add.acl.list=voeg een ACL lijst toe label.add.ACL=Voeg ACL toe label.add.affinity.group=Nieuwe affinity groep toevoegen label.add.baremetal.dhcp.device=Voeg Baremetal DHCP Apparaat toe label.add.BigSwitchVns.device=Voeg BigSwitch Vns Controller toe +label.add.BrocadeVcs.device=Voeg een Brocade Vcs switch toe label.add.by.cidr=Voeg toe door middel van CIDR label.add.by.group=Voeg toe door middel van Groep label.add.by=Voeg toe door middel van +label.add.ciscoASA1000v=voeg CiscoASA1000v toe label.add.cluster=Voeg Cluster toe label.add.compute.offering=Voeg Compute aanbieding toe label.add.direct.iprange=Voeg Direct IP Range toe label.add.disk.offering=Voeg Schijf Aanbieding toe label.add.domain=Voeg Domein toe +label.added.brocade.vcs.switch=een nieuwe Brocade Vcs switch is toegevoegd label.added.new.bigswitch.vns.controller=Nieuwe BigSwitch VNS Controller toegevoegd label.added.nicira.nvp.controller=Nieuwe Nicira NVP Controller toegevoegd label.add.egress.rule=Voeg uitgaande regel toe @@ -277,12 +287,18 @@ label.adding.succeeded=Toevoegen geslaagd label.adding=Toevoegen label.adding.user=Bezig met toevoegen van Gebruiker label.adding.zone=Bezig met toevoegen van Zone +label.add.intermediate.certificate=Voeg een intermediair certificaat toe +label.add.internal.lb=voeg interne LB toe label.add.ip.range=Voeg IP range toe +label.add.isolated.guest.network=Voeg een ge\u00efsoleerd netwerk toe label.add.isolated.network=Geisoleerd Netwerk Toevoegen label.additional.networks=Additioneele Netwerken +label.add.LDAP.account=voeg LDAP rekening toe +label.add.list.name=ACL lijst naam label.add.load.balancer=Voeg Load Balancer toe label.add.more=Voeg meer toe label.add.netScaler.device=Voeg Netscaler apparaat toe +label.add.network.acl.list=voeg netwerk ACL lijst toe label.add.network.ACL=Voeg netwerk ACL toe label.add.network.device=Voeg Netwerk Apparaat toe label.add.network.offering=Voeg netwerk aanbieding toe @@ -295,6 +311,7 @@ label.add.new.SRX=Voeg nieuwe SRX toe label.add.new.tier=Voeg nieuwe Tier toe label.add.nfs.secondary.staging.store=Secundaire Staging Opslag toevoegen label.add.NiciraNvp.device=Voeg NVP Controller toe +label.add.NuageVsp.device=Voeg Nuage Virtualized Services Directory (VSD) toe label.add.OpenDaylight.device=OpenDaylight Controller toevoegen label.add.PA.device=Nieuw Palo Alto apparaat toevoegen label.add.physical.network=Voeg fysiek netwerk toe @@ -343,9 +360,13 @@ label.affinity=Affinity label.affinity.group=Affinity Groep label.affinity.groups=Affinity Groepen label.agent.password=Agent wachtwoord +label.agent.state=agent status label.agent.username=Agent Gebruikersnaam label.agree=Accepteren label.alert=Alarm +label.alert.archived=waarschuwing gearchiveerd +label.alert.deleted=waarschuwing verwijderd +label.alert.details=waarschuwing gegevens label.algorithm=Algoritme label.allocated=Gebruikt label.allocation.state=Verbruik Staat @@ -354,10 +375,13 @@ label.anti.affinity=Anti-affinity label.anti.affinity.group=Anti-affinity Groep label.anti.affinity.groups=Anti-affinity Groepen label.api.key=API Sleutel +label.api.version=API versie label.apply=Uitvoeren label.app.name=CloudStack label.archive.alerts=Archiveer waarschuwingen +label.archive=archief label.archive.events=Archiveer evenementen +label.assigned.vms=toegewezen VMs label.assign.instance.another=Wijs instantie toe aan een andere Account label.assign=Toevoegen label.assign.to.load.balancer=Voeg instantie toe aan load balancer @@ -392,6 +416,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 adres +label.brocade.vcs.details=Brocade Vcs switch gegevens label.by.account=Op Account label.by.alert.type=Op alarm type label.by.availability=Op Beschikbaarheid @@ -413,7 +439,9 @@ label.by.type=Op Type label.by.zone=Op Zone label.cache.mode=Schrijf cache Type label.cancel=Annuleer +label.capacity.bytes=Capaciteit in bytes label.capacity=Capaciteit +label.capacity.iops=Capaciteit in IOPS label.certificate=Certificaat label.change.affinity=Wijzig Affinity label.change.service.offering=Wijzig service aanbieding @@ -447,7 +475,7 @@ label.compute.offering=Compute aanbieding label.compute.offerings=Compute aanbiedingen label.configuration=Configuratie label.configure=Configureer -label.configure.ldap=Configureer LDAP +label.configure.ldap=configureer LDAP label.configure.network.ACLs=Configureer Netwerk ACLs label.configure.vpc=Configureer VPC label.confirmation=Bevestiging @@ -458,7 +486,9 @@ label.console.proxy=Console proxy label.console.proxy.vm=Console Proxy VM label.continue.basic.install=Ga door met basis installatie label.continue=Ga door +label.copying.iso=bezig ISO te kopi\u00ebren label.corrections.saved=Correcties opgeslagen +label.counter=teller label.cpu.allocated=CPU gebruik label.cpu.allocated.for.VMs=CPU gebruikt voor VMs label.CPU.cap=CPU Cap @@ -497,15 +527,20 @@ label.default.egress.policy=Standaard Uitgaande policy label.default=Standaard label.default.use=Standaard Gebruik label.default.view=Standaard Weergave +label.delete.acl.list=verwijder ACL list label.delete.affinity.group=Verwijder Affinity Groep label.delete.alerts=Verwijder waarschuwingen label.delete.BigSwitchVns=Verwijder BigSwitch Vns Controller +label.delete.BrocadeVcs=Verwijder Brocade Vcs Switch +label.delete.ciscoASA1000v=verwijder CiscoASA1000v label.delete.ciscovnmc.resource=CiscoVNMC resource verwijderen label.delete.events=Verwijder gebeurtenissen label.delete.F5=Verwijder F5 label.delete.gateway=Verwijder gateway +label.delete.internal.lb=verwijder interne LB label.delete.NetScaler=Verwijder NetScaler label.delete.NiciraNvp=Verwijder Nvp Controller +label.delete.NuageVsp=Verwijder Nuage VSD label.delete.OpenDaylight.device=OpenDaylight Controller verwijderen label.delete.PA=Verwijder Palo Alto label.delete.portable.ip.range=Porteerbare IP Range verwijderen @@ -535,9 +570,11 @@ label.device.id=Apparaat ID label.devices=Apparaten label.dhcp=DHCP label.DHCP.server.type=DHCP Server Type +label.direct.attached.public.ip=direct verbonden publieke IP label.direct.ips=Shared Netwerk IPs label.disable.autoscale=Autoscale uitschakelen label.disabled=Uitgeschakeld +label.disable.host=schakel host uit label.disable.network.offering=Netwerk Aanbieding Uitschakelen label.disable.provider=Provider uitschakelen label.disable.vnmc.provider=VNMC provider uitschakelen @@ -555,6 +592,7 @@ label.disk.iops.read.rate=Lees Snelheid Schijf (IOPS) label.disk.iops.total=IOPS Totaal label.disk.iops.write.rate=Schrijf snelheid Schijf (IOPS) label.disk.offering=Schijf Aanbieding +label.disk.provisioningtype=Provisioning type label.disk.read.bytes=Schijf lezen (Bytes) label.disk.read.io=Schijf Lezen (IO) label.disk.size.gb=Schijf Grootte (in GB) @@ -565,6 +603,7 @@ label.disk.write.bytes=Schijf Schrijven (Bytes) label.disk.write.io=Schijf Schrijven (IO) label.display.name=Weergavenaam label.display.text=Weergavetekst +label.distributedrouter=gedistribueerde router label.dns.1=DNS 1 label.dns.2=DNS 2 label.dns=DNS @@ -580,7 +619,9 @@ label.done=Klaar label.double.quotes.are.not.allowed=Aanhalingstekens zijn hier niet toegestaan label.download.progress=Download Voortgang label.drag.new.position=Sleep naar nieuwe positie +label.duration.in.sec=duur (in sec) label.dynamically.scalable=Dynamisch Schaalbaar +label.edit.acl.rule=wijzig ACL regel label.edit.affinity.group=Wijzig Affinity Groep label.edit.lb.rule=Wijzig LB regel label.edit.network.details=Wijzig netwerk details @@ -599,6 +640,7 @@ label.elastic.LB=Elastisch LB label.email=Email label.email.lower=email label.enable.autoscale=Autoscale inschakelen +label.enable.host=schakel host in label.enable.network.offering=Netwerk Aanbieding Inschakelen label.enable.provider=Provider inschakelen label.enable.s3=S3-gebaseerde Secondary Storage inschakelen @@ -614,14 +656,19 @@ label.endpoint=Endpoint label.endpoint.or.operation=Endpoint or Operation label.end.port=Eind Poort label.end.reserved.system.IP=Einde gereserveerde systeem IP +label.end.vlan=Laatste VLAN +label.end.vxlan=Laatste VXLAN label.enter.token=Voer token in label.error.code=Fout code label.error=Fout +label.error.upper=FOUT label.ESP.encryption=ESP Encryptie label.ESP.hash=ESP Hash label.ESP.lifetime=ESP Lifetime (secondes) label.ESP.policy=ESP policy label.esx.host=ESX/ESXi Host +label.event.archived=gebeurtenis gearchiveerd +label.event.deleted=Event verwijderd label.example=Voorbeeld label.expunge=Ruim op label.external.link=Externe link @@ -659,6 +706,7 @@ label.gslb.assigned.lb=toegewezen load balancing label.gslb.delete=GSLB verwijderen label.gslb.details=GSLB details label.gslb.domain.name=GSLB Domein Naam +label.gslb=GSLB label.gslb.lb.details=load balancing details label.gslb.lb.remove=verwijder load balancing van deze GSLB label.gslb.lb.rule=load balancing regel @@ -682,6 +730,8 @@ label.guest.traffic.vswitch.type=vSwitch Gast Verkeer Type label.guest.type=Gast Type label.ha.enabled=HA ingeschakeld label.health.check=Health Check +label.health.check.interval.in.sec=gezondheid check interval (in sec) +label.healthy.threshold=gezonde marge label.help=Help label.hide.ingress.rule=Verberg Inkomende Regel label.hints=Tips @@ -693,6 +743,7 @@ label.host.name=Hostnaam label.hosts=Hosts label.host.tags=Host Tags label.hourly=Uurlijks +label.hvm=HVM label.hypervisor.capabilities=Hypervisor mogelijkheden label.hypervisor=Hypervisor label.hypervisors=Hypervisors @@ -707,8 +758,10 @@ label.IKE.hash=IKE Hash label.IKE.lifetime=IKE lifetime (secondes) label.IKE.policy=IKE policy label.info=Info +label.info.upper=INFO label.ingress.rule=Inkomende Regel label.initiated.by=Ge\u00efnitieerd door +label.inside.port.profile=binnen poort profiel label.installWizard.addClusterIntro.subtitle=Wat is een cluster? label.installWizard.addClusterIntro.title=Nu\: Cluster toevoegen label.installWizard.addHostIntro.subtitle=Wat is een host? @@ -728,11 +781,15 @@ label.installWizard.title=Hallo en welkom bij CloudStack&\#8482 label.instance=Instantie label.instance.limits=Instantie Limieten label.instance.name=Instantie Naam +label.instance.port=instantie poort label.instance.scaled.up=Instantie Omhoog Geschaald label.instances=Instanties label.instanciate.template.associate.profile.blade=Initieer Template en verbind Profiel met Blade +label.intermediate.certificate=Intermediair certificaat {0} label.internal.dns.1=Interne DNS 1 label.internal.dns.2=Interne DNS 2 +label.internal.lb.details=interne LB gegevens +label.internallbvm=interne LBVM label.internal.name=Interne naam label.interval.type=Interval Type label.introduction.to.cloudstack=CloudStack&\#8482 Introductie @@ -753,6 +810,8 @@ label.ip.ranges=IP Ranges label.IPsec.preshared.key=IPsec Preshared-Key label.ips=IPs label.ipv4.cidr=IPv4 CIDR +label.ipv4.dns1=IPv4 DNS1 +label.ipv4.dns2=IPv4 DNS2 label.ipv4.end.ip=IPv4 Eind IP label.ipv4.gateway=IPv4 Gateway label.ipv4.netmask=IPv4 Netmask @@ -789,6 +848,7 @@ label.lang.dutch=Nederlands (Nederlands) label.lang.english=Engels label.lang.french=Frans label.lang.german=Duits +label.lang.hungarian=Hongaars label.lang.italian=Italiaans label.lang.japanese=Japans label.lang.korean=Koreans @@ -807,17 +867,19 @@ label.lb.algorithm.leastconn=Minste connecties label.lb.algorithm.roundrobin=Round-robin label.lb.algorithm.source=Bron label.LB.isolation=LB isolatie -label.ldap.configuration=LDAP Configuratie +label.ldap.configuration=LDAP configuratie label.ldap.group.name=LDAP Groep label.ldap.port=LDAP poort label.level=Level label.linklocal.ip=Link Local IP Adres label.load.balancer=Load Balancer +label.load.balancer.type=loadbalancer type label.load.balancing=Load Balancing label.load.balancing.policies=Load balancing policies label.loading=Laden label.local=Lokaal -label.local.storage.enabled=Lokale opslag ingeschakeld +label.local.storage.enabled=Schakel locale opslag voor gebruiker VMs in +label.local.storage.enabled.system.vms=zet lokale opslag voor systeem VMs aan label.local.storage=Lokale Opslag label.login=Login label.logout=Log uit @@ -826,8 +888,10 @@ label.LUN.number=LUN \# label.lxc.traffic.label=LXC verkeerslabel label.make.project.owner=Maak account project eigenaar label.manage=Beheer +label.managed=beheerd(e) label.management=Beheer label.management.ips=Beheers IP Adressen +label.management.server=Beheers Machine label.manage.resources=Beheer Resources label.max.cpus=Max. CPU cores label.max.guest.limit=Max. Instanties @@ -900,9 +964,11 @@ label.migrate.router.to=Migreer Router naar label.migrate.systemvm.to=Migreer Systeem VM naar label.migrate.to.host=Migreer naar host label.migrate.to.storage=Migreer naar opslag +label.migrate.volume=Migreer volume label.migrate.volume.to.primary.storage=Migreer volume naar andere primaire opslag label.minimum=Minimum label.min.instances=Min Instances +label.minute.past.hour=Minuten na het uur label.mode=Modus label.monday=Maandag label.monthly=Maandelijks @@ -917,6 +983,7 @@ label.my.templates=Mijn templates label.name.lower=naam label.name=Naam label.name.optional=Naam (Optioneel) +label.na=N/A label.nat.port.range=NAT Poort Range label.netmask=Netmask label.netscaler.details=NetScaler details @@ -992,10 +1059,12 @@ label.opendaylight.controllerdetail=OpenDaylight Controller Details label.opendaylight.controller=OpenDaylight Controller label.opendaylight.controllers=OpenDaylight Controllers label.openDaylight=OpenDaylight +label.operator=operator label.optional=Optioneel label.order=Volgorde label.os.preference=OS Voorkeur label.os.type=OS Type +label.other=anders label.override.guest.traffic=Overschrijf Gast Verkeer label.override.public.traffic=Overschrijf Publiek Verkeer label.ovm.traffic.label=OVM verkeerslabel @@ -1007,6 +1076,7 @@ label.palo.alto.details=Palo Alto details label.PA.log.profile=Palo Alto Log Profiel label.PA=Palo Alto label.parent.domain=Bovenliggend Domein +label.passive=passief label.password.enabled=Wachtwoord Ingeschakeld label.password.lower=wachtwoord label.password.reset.confirm=Het wachtwoord is gereset naar @@ -1020,6 +1090,7 @@ label.physical.network.ID=Fysiek netwerk ID label.PING.CIFS.password=PING CIFS wachtwoord label.PING.CIFS.username=PING CIFS gebruikersnaam label.PING.dir=PING Directory +label.ping.path=ping pad label.PING.storage.IP=PING opslag IP label.planner.mode=Planner modus label.please.specify.netscaler.info=Geef hier informatie van de Netscaler op @@ -1034,9 +1105,10 @@ label.polling.interval.sec=Polling Interval (in sec) label.portable.ip.range.details=Porteerbare IP Range details label.portable.ip.ranges=Porteerbare IP Ranges label.portable.ips=Porteerbare IPs +label.portable.ip=verplaatsbaar IP label.port.forwarding.policies=Port forwarding policies label.port.forwarding=Port Forwarding -label.port=Poort +label.port=poort label.port.range=Port Range label.PreSetup=PreSetup label.previous=Vorige @@ -1064,6 +1136,7 @@ label.project.name=Project naam label.project=Project label.projects=Projecten label.project.view=Project Weergave +label.protocol.number=protocol nummer label.protocol=Protocol label.provider=Provider label.providers=Providers @@ -1091,7 +1164,7 @@ label.rbd=RBD label.rbd.secret=Cephx secret label.reboot=Reboot label.recent.errors=Recente Fouten -label.recover.vm=Herstel VM +label.recover.vm=herstel VM label.redundant.router.capability=Redundante router mogelijkheden label.redundant.router=Redundante Router label.redundant.state=Redundante staat @@ -1099,7 +1172,7 @@ label.refresh.blades=Ververs Blades label.refresh=Ververs label.regionlevelvpc=Region Level VPC label.region=Regio -label.reinstall.vm=Herinstalleer VM +label.reinstall.vm=herinstalleer VM label.related=Samenhangend label.release.account.lowercase=ontkoppel van account label.release.account=Ontkoppel van Account @@ -1114,7 +1187,7 @@ label.remove.egress.rule=Verwijder uitgaande regel label.remove.from.load.balancer=Verwijder Instantie van load balancer label.remove.ingress.rule=Verwijder inkomende regel label.remove.ip.range=Verwijder IP range -label.remove.ldap=Verwijder LDAP +label.remove.ldap=verwijder LDAP label.remove.network.offering=Netwerk Aanbieding Verwijderen label.remove.pf=Verwijder port forwarding regel label.remove.project.account=Verwijder account van project @@ -1124,12 +1197,15 @@ label.remove.static.nat.rule=Verwijder static NAT regel label.remove.static.route=Verwijder statische route label.remove.tier=Verwijder tier label.remove.vm.from.lb=Verwijder VM van load balancer regel +label.remove.vm.load.balancer=verwijder VM uit de load balancer label.remove.vmware.datacenter=VMware datacenter verwijderen label.remove.vpc.offering=VPC aanbieding verwijderen label.remove.vpc=verwijder VPC label.removing.user=Verwijderen Gebruiker label.removing=Verwijderen label.reource.id=Verbruik ID +label.replace.acl.list=vervang ACL lijst +label.replace.acl=vervang ACL label.required=Vereist label.requires.upgrade=Upgrade Benodigd label.reserved.ip.range=Gereserveerde IP Range @@ -1139,23 +1215,29 @@ label.reserved.system.netmask=Gereserveerd systeem netmask label.resetVM=Reset VM label.reset.VPN.connection=Reset VPN verbinding label.resize.new.offering.id=Nieuwe Aanbieding +label.resize.new.size=Nieuwe grootte (GB) label.resize.shrink.ok=Verklein OK +label.resource.limit.exceeded=resource limiet overschreden label.resource.limits=Verbruikslimieten label.resource.name=Verbruik Naam label.resource.state=Verbruik staat label.resources=Verbruiken label.resource=Verbruik +label.response.timeout.in.sec=antwoord wachttijd (in sec) label.restart.network=Herstart netwerk label.restart.required=Herstart benodigd label.restart.vpc=herstart VPC label.restore=Herstel +label.retry.interval=Wachttijd voor nieuwe poging label.review=Beoordeel label.revoke.project.invite=Trek uitnodiging in label.role=Rol +label.root.certificate=root certificaat label.root.disk.controller=Root schijf controller label.root.disk.offering=Root Schijf Aanbieding label.root.disk.size=Grootte root volume label.router.vm.scaled.up=Router VM Omhoog Geschaald +label.routing.host=routeer machine label.routing=Routing label.rule.number=Regel Nummer label.rules=Regels @@ -1170,10 +1252,13 @@ label.s3.nfs.server=S3 NFS Server label.s3.secret_key=Geheime sleutel label.s3.socket_timeout=Socket Timeout label.s3.use_https=Gebruik HTTPS +label.saml.enable=authoriseer SAML SSO +label.saml.entity=identificeer leverancier label.saturday=Zaterdag label.save.and.continue=Opslaan en verder gaan label.save=Opslaan label.saving.processing=Opslaan.... +label.scale.up.policy=schaal op beleid label.scope=Scope label.search=Zoeken label.secondary.isolated.vlan.id=Secundair Geisoleerd VLAN ID @@ -1197,6 +1282,7 @@ label.select.instance.to.attach.volume.to=Selecteer een instance om het volume a label.select.iso.or.template=Selecteer een ISO of template label.select.offering=Selecteer Aanbieding label.select.project=Selecteer Project +label.select.region=Select regio label.select=Selecteer label.select.template=Selecteer Template label.select.tier=Selecteer Tier @@ -1229,12 +1315,16 @@ label.smb.username=SMB Gebruikersnaam label.snapshot.limits=Snapshot Limieten label.snapshot.name=Snapshot Naam label.snapshot.schedule=Stel herhalende Snapshot in +label.snapshot.s=momentopname(s) label.snapshot=Snapshot label.snapshots=Snapshots label.SNMP.community=SNMP Community label.SNMP.port=SNMP Poort label.sockets=CPU Sockets +label.source.ip.address=bron IP adres label.source.nat=Source NAT +label.source.nat.supported=SourceNAT ondersteund +label.source.port=bron poort label.specify.IP.ranges=Specificeer IP ranges label.specify.vlan=Specificeer VLAN label.specify.vxlan=Specificeer VXLAN @@ -1245,6 +1335,8 @@ label.start.IP=Start IP label.start.lb.vm=Start LB VM label.start.port=Start Poort label.start.reserved.system.IP=Start gereseveerd systeem IP +label.start.vlan=start VLAN +label.start.vxlan=start VXLAN label.state=Staat label.static.nat.enabled=Static NAT Ingeschakeld label.static.nat=Static NAT @@ -1262,6 +1354,7 @@ label.step.4=Stap 4 label.step.4.title=Stap 4\: Netwerk label.step.5=Stap 5 label.step.5.title=Stap 5\: Beoordeel +label.stickiness.method=kleef methode label.stickiness=Stickiness label.sticky.cookie-name=Cookie naam label.sticky.domain=Domein @@ -1270,6 +1363,7 @@ label.sticky.holdtime=Wacht tijd label.sticky.indirect=Indirect label.sticky.length=Lengte label.sticky.mode=Modus +label.sticky.name=klevende naam label.sticky.nocache=Geen cache label.sticky.postonly=Alleen Post label.sticky.prefix=Prefix @@ -1279,6 +1373,7 @@ label.stop.lb.vm=Stop LB VM label.stopped.vms=Uitgeschakelde VMs label.stop=Stop label.storage=Opslag +label.storage.pool=opslag poel label.storage.tags=Opslag Tags label.storage.traffic=Opslag Verkeer label.storage.type=Opslag Type @@ -1316,9 +1411,11 @@ label.tftp.root.directory=TFTP root directory label.theme.default=Standaard Thema label.theme.grey=Aangepast - Grijs label.theme.lightblue=Aangepast - Licht Blauw +label.threshold=marge label.thursday=Donderdag label.tier.details=Tier details label.tier=Tier +label.timeout.in.second = timeout (seconden) label.timeout=Timeout label.time=Tijd label.time.zone=Tijdzone @@ -1328,6 +1425,7 @@ label.total.cpu=Totaal CPU label.total.CPU=Totaal CPU label.total.hosts=Totaal Hosts label.total.memory=Totaal Geheugen +label.total.of.ip=totaal aantal IP adressen label.total.of.vm=Totaal VMs label.total.storage=Totaal Opslag label.total.virtual.routers=Totaal Virtual Routers @@ -1342,6 +1440,7 @@ label.type.lower=type label.type=Type label.ucs=UCS label.unavailable=Niet beschikbaar +label.unhealthy.threshold=ongezonde marge label.unlimited=Ongelimiteerd label.untagged=Untagged label.update.project.resources=Update project verbruik @@ -1354,14 +1453,17 @@ label.upload=Upload label.upload.volume=Upload Volume label.url=URL label.usage.interface=Verbruik Interface +label.usage.sanity.result=gebruiks zingevings resultaat +label.usage.server=gebruik server label.used=Gebruikt label.user.data=Gebruiker Data label.user=Gebruiker label.username=Gebruikersnaam label.username.lower=gebruikersnaam label.users=Gebruikers +label.user.vm=gebruiker VM label.use.vm.ip=Gebruik VM IP\: -label.use.vm.ips=Gebruik VM IPs +label.use.vm.ips=gebruik VM IPs label.value=Waarde label.vcdcname=vCenter DC naam label.vcenter.cluster=vCenter Cluster @@ -1377,6 +1479,7 @@ label.vgpu.max.resolution=Maximale resolutie label.vgpu.max.vgpu.per.gpu=vGPUs per GPU label.vgpu.remaining.capacity=Overgebleven capaciteit label.vgpu.type=vCPU type +label.vgpu=VGPU label.vgpu.video.ram=Video RAM label.view.all=Toon alle label.view.console=Toon console @@ -1409,6 +1512,8 @@ label.vm.destroy=Verwijder label.vm.display.name=VM weergave naam label.VMFS.datastore=VMFS datastore label.vmfs=VMFS +label.vm.id=VM ID +label.vm.ip=VM IP adres label.vm.name=VM naam label.vm.password=Het wachtwoord van de VM is label.vm.reboot=Reboot @@ -1429,9 +1534,12 @@ label.vmware.traffic.label=VMware verkeerslabel label.vnet.id=VLAN/VNI ID label.vnet=VLAN/VNI label.vnmc.devices=VNMC apparaten +label.vnmc=VNMC label.volatile=Volatile label.volgroup=Volume Groep +label.volume.details=volume gegevens label.volume.limits=Volume Limieten +label.volume.migrated=volume gemigreerd label.volume.name=Volume Naam label.volumes=Volumes label.volume=Volume @@ -1453,10 +1561,13 @@ label.vsmctrlvlanid=Controle VLAN ID label.vsmpktvlanid=Pakket VLAN ID label.vsmstoragevlanid=Opslag VLAN ID label.vsphere.managed=vSphere beheerd +label.vswitch.name=vSwitch naam +label.vSwitch.type=vSwitch type label.vxlan.id=VXLAN ID label.vxlan.range=VXLAN Reeks label.vxlan=VXLAN label.waiting=Wachten +label.warn.upper=WARN label.warn=Waarschuwing label.wednesday=Woensdag label.weekly=Wekelijks @@ -1588,7 +1699,7 @@ message.add.system.service.offering=Specificeer de volgende gegevens om een nieu message.add.template=Specificeer de volgende gegevens om een nieuwe template aan te maken message.add.volume=Specificeer de volgende gegevens om een nieuw volume toe te voegen. message.add.VPN.gateway=Bevestig dat u een VPN Gateway wilt toevoegen -message.admin.guide.read=Voor VMware-gebaseerde VMs, lees eerst de dynamic scaling sectie in de admin guide voordat u gaat schalen. Weet u zeker dat u verder wilt gaan? +message.admin.guide.read=Voor VMware-gebaseerde VMs, lees eerst de dynamic scaling sectie in de admin guide voordat u gaat schalen. Weet u zeker dat u verder wilt gaan?\\, message.advanced.mode.desc=Kies dit netwerk model als u VLAN ondersteuning wilt inschakelen. Dit netwerk model geeft u de meeste flexibiliteit en stelt beheerders in staat om aangepaste netwerk aanbiedingen aan te maken met firewall, vpn, of load balancer ondersteuning. Ook kunt u kiezen tussen direct en virtual networking. message.advanced.security.group=Kies dit netwerk model als u security groups wilt gebruiken om virtueele machines te isoleren. message.advanced.virtual=Kies deze optie als u zone breede VLANs wilt gebruiken om virtueele machines te isoleren. @@ -1612,37 +1723,58 @@ message.configuring.public.traffic=Bezig met configureren publiek verkeer message.configuring.storage.traffic=Bezig met configureren opslag verkeer message.confirm.action.force.reconnect=Bevestig dat u deze host geforceerd opnieuw wilt laten verbinden. message.confirm.add.vnmc.provider=Bevestig dat u de VNMC provider wilt toevoegen. +message.confirm.archive.alert=Bevestig dat u deze melding wilt archiveren, alstublieft. +message.confirm.archive.event=bevestig dat u deze gebeurtenis wilt archiveren, alstublieft +message.confirm.archive.selected.alerts=bevestig dat u de geselecteerde meldingen wilt archiveren, alstublieft +message.confirm.archive.selected.events=bevestig dat u de geselecteerde gebeurtenissen wilt archiveren, alstublieft +message.confirm.attach.disk=Weet u zeker dat u een disk wilt koppelen? +message.confirm.create.volume=Weet u zeker dat u een volume wilt cre\u00ebren? +message.confirm.current.guest.CIDR.unchanged=Wilt u het huidige gastnetwerk-CIDR ongewijzigd laten? message.confirm.dedicate.cluster.domain.account=Weet u zeker dat u dit cluster wilt toewijden aan een domein/account? message.confirm.dedicate.host.domain.account=Weet u zeker dat u deze host wilt toewijden aan een domein/account? message.confirm.dedicate.pod.domain.account=Weet u zeker dat u deze pod wilt toewijden aan een domein/account? message.confirm.dedicate.zone=Weet u zeker dat u deze zone wilt toewijden aan een domein/account? +message.confirm.delete.acl.list=Weet U zeker dat U dit ACL wilt verwijderen? +message.confirm.delete.alert=Weet u zeker dat u deze melding wilt verwijderen? +message.confirm.delete.BrocadeVcs=bevestigd dat Brocade Vcs Switch wilt verwijderen, alstublieft +message.confirm.delete.ciscoASA1000v=bevestig dat u CiscoASA1000v wilt verwijderen, alstublieft message.confirm.delete.ciscovnmc.resource=Bevestig dat u de CiscoVNMC resource wilt verwijderen. message.confirm.delete.F5=Bevestig dat u deze F5 wilt verwijderen +message.confirm.delete.internal.lb=bevestigd dat u interne LB wilt verwijderen, alstublieft message.confirm.delete.NetScaler=Bevestig dat u deze NetScaler wilt verwijderen +message.confirm.delete.NuageVsp=bevestig dat u Nuage Virtualized Services Directory wilt verwijderen, alstublieft message.confirm.delete.PA=Bevestig dat u Palo Alto wilt verwijderen message.confirm.delete.secondary.staging.store=Bevestig dat u de secudaire staging opslag wilt verwijderen. message.confirm.delete.SRX=Bevestig dat u deze SRX wilt verwijderen message.confirm.delete.ucs.manager=Bevestig dat u de UCS Manager wilt verwijderen message.confirm.destroy.router=Bevestig dat u deze router wilt verwijderen +message.confirm.disable.host=bevestigd dat de machine wilt afkoppelen, alstublieft message.confirm.disable.network.offering=Weet u zeker dat u deze netwerk aanbieding wilt uitschakelen? message.confirm.disable.provider=Bevestig dat u deze provider wilt uitschakelen message.confirm.disable.vnmc.provider=Bevestig dat u de VNMC provider wilt uitschakelen. message.confirm.disable.vpc.offering=Weet u zeker dat u deze VPC aanbieding wilt uitschakelen? +message.confirm.enable.host=bevestigd dat u de machine wilt aankoppelen, alsublieft message.confirm.enable.network.offering=Weet u het zeker dat u deze netwerk aanbieding wilt inschakelen? message.confirm.enable.provider=Bevestig dat u deze provider wilt inschakelen message.confirm.enable.vnmc.provider=Bevestig dat u de VNMC provider wilt inschakelen. message.confirm.enable.vpc.offering=Weet u zeker dat u deze VPC aanbieding wilt inschakelen? message.confirm.join.project=Bevestig dat u aan dit project wilt bijdragen +message.confirm.migrate.volume=Wilt u dit volume migreren? message.confirm.refresh.blades=Bevestig dat u de blades wilt verversen. message.confirm.release.dedicated.cluster=Weet u zeker dat u dit toegewijde cluster wilt loskoppelen? message.confirm.release.dedicated.host=Weet u zeker dat u deze toegewijde host wilt loskoppelen? message.confirm.release.dedicated.pod=Weet u zeker dat u deze toegewijde pod wilt loskoppelen? message.confirm.release.dedicated.zone=Weet u zeker dat u deze toegewijde zone wilt loskoppelen? message.confirm.release.dedicate.vlan.range=Bevestig dat u de toegewijde VLAN range wilt loskoppelen +message.confirm.remove.event=Weet u zeker dat u deze gebeurtenis wilt verwijderen? message.confirm.remove.IP.range=Bevestig dat u deze IP range wilt verwijderen. +message.confirm.remove.load.balancer=bevestigd dat U deze VM uit de load balancer wilt halen, alstublieft message.confirm.remove.network.offering=Weet u zeker dat u deze netwerk aanbieding wilt verwijderen? +message.confirm.remove.selected.alerts=bevestig dat u de geselecteerde meldingen wilt verwijderen, alstublieft +message.confirm.remove.selected.events=bevestig dat u de geselcteerde gebeurtenissen wilt verwijderen, alstublieft message.confirm.remove.vmware.datacenter=Bevestig dat u VM datacenter wilt verwijderen message.confirm.remove.vpc.offering=Weet u zeker dat u deze VPC aanbieding wilt verwijderen? +message.confirm.replace.acl.new.one=Wilt U de ACL vervangen door een nieuwe? message.confirm.scale.up.router.vm=Weet u zeker dat u de Router VM wilt opschalen? message.confirm.scale.up.system.vm=Weet u zeker dat u de Systeem VM wilt opschalen? message.confirm.shutdown.provider=Bevestig dat u deze provider wilt afsluiten @@ -1697,6 +1829,7 @@ message.disabling.vpc.offering=VPC offering uitschakelen message.disallowed.characters=Niet toegestane karakters\: \\<\\,\\> message.download.ISO=Klik op 00000 om de ISO te downloaden message.download.template=Klik op 00000 om de template te downloaden +message.download.volume.confirm=bevestigd at U dit volume wilt ophalen, alstublieft message.download.volume=Klik op 00000 om het volume te downloaden message.edit.account=Wijzig ("-1" geeft aan dat er geen limiet is ingesteld) message.edit.confirm=Controleer uw wijzigen voordat u op "Opslaan" klikt. @@ -1763,7 +1896,7 @@ message.iso.desc=Image bestand met data of bootable media voor besturingsysteem message.join.project=U neemt nu deel aan een project. Klik op het project overzicht om het project te zien. message.launch.vm.on.private.network=Wilt u de instantie starten op uw eigen private dedicated netwerk? message.launch.zone=De zone is klaar om geactiveerd te worden, ga door naar de volgende stap. -message.listView.subselect.multi=(Ctrl/Cmd-click) +message.listView.subselect.multi=(Ctrl/Cmd-klik) message.lock.account=Bevestig dat u deze account wilt vergrendelen. Wanneer u de account vergrendeld zullen alle gebruikers van deze account hun cloud resources niet meer kunnen beheren. Toegang tot bestaande producten blijft bestaan. message.migrate.instance.confirm=Bevestig de host naar waar u de instantie toe wilt migreren. message.migrate.instance.to.host=Bevestig dat u de instantie naar een andere host toe wilt migreren. @@ -1799,9 +1932,9 @@ message.project.invite.sent=Uitnodiging is verstuurd aan gebruiker. De gebruiker message.public.traffic.in.advanced.zone=Publiek verkeer wordt gegenereerd wanneer VMs in de cloud het internet bezoeken. Publiek toegankelijke IPs moeten om deze reden toegevoegd worden. Eindgebruikers kunnen deze IP adressen via de Cloudstack UI aanvragen om zo verkeer tussen het gast netwerk en publieke netwerk te realiseren.

Geef minimaal \u00e9\u00e9n IP range op voor internet verkeer. message.public.traffic.in.basic.zone=Publiek verkeer wordt gegenereerd wanneer VMs in de cloud het internet bezoeken of diensten serveren aan het internet. Publiek toegankelijke IPs moeten om deze reden toegevoegd worden. Wanneer een instantie wordt aangemaakt, krijgt deze automatisch een van deze IP adressen toegewezen naast het gast IP adres. Static 1-1 NAT wordt automatisch geconfigureerd tussen het publieke IP en gast IP adres. Eindgebruikers kunnen via de CloudStack UI meerdere IP adressen aanvragen om static NAT tussen hun instanties en het publieke IP te realiseren. message.read.admin.guide.scaling.up=Gelieve de dynamic scaling sectie te lezen in admin guide voordat u gaat opschalen. -message.recover.vm=Bevestig dat u deze VM wilt herstellen. +message.recover.vm=bevestig dat u deze VM wilt herstellen, alstublieft. message.redirecting.region=U wordt doorverbonden met de regio... -message.reinstall.vm=LET OP\: Als u doorgaat zal de VM opnieuw geinstalleerd worden vanaf de template. Alle data op de root disk zal verwijderd worden. Eventuele data volumes blijven onaangeraakt. +message.reinstall.vm=LET OP\: Als u doorgaat zal de VM opnieuw ge\u00efnstalleerd worden vanaf de template. Alle data op de root disk zal verwijderd worden. Eventuele data volumes blijven in tact. message.remove.ldap=Weet u zeker dat u de LDAP configuratie wilt verwijderen? message.remove.region=Weet u zeker dat u deze regio wilt verwijderen van deze management server? message.remove.vpc=Bevestigd dat u de VPC wilt verwijderen @@ -1856,7 +1989,9 @@ message.tooltip.reserved.system.netmask=De netwerk prefix dat het pod subnet def message.tooltip.zone.name=Een naam voor de zone. message.update.os.preference=Selecteer een OS voorkeur voor deze host. Alle virtueel instanties van gelijke voorkeur zullen eerst op deze machine gealloceerd worden voordat er gekeken wordt naar andere hosts. message.update.resource.count=Bevestig dat u de verbruiksstatistieken voor deze account wilt bijwerken. +message.update.ssl.failed=update SSL certificaat is mislukt message.update.ssl=Geef een nieuw X.509 compliant SSL certificaat in waarmee elke console proxy en secundaire opslag instantie mee geupdate kunnen worden\: +message.update.ssl.succeeded=update SSL certificaat is geslaagd message.validate.accept=Gelieve een waarde in te geven met een geldidge extensie. message.validate.creditcard=Gelieve een geldig credit card nummer in te geven. message.validate.date=Gelieve een geldige datum in te geven. @@ -1909,6 +2044,7 @@ state.Completed=Uitgevoerd state.Creating=Aanmaken state.Declined=Geweigerd state.Destroyed=Verwijderd +state.detached=ontkoppeld state.Disabled=Uitgeschakeld state.enabled=Geactiveerd state.Enabled=Geactiveerd diff --git a/client/WEB-INF/classes/resources/messages_pl.properties b/client/WEB-INF/classes/resources/messages_pl.properties index ecfaad4f63..186fb8a8f3 100644 --- a/client/WEB-INF/classes/resources/messages_pl.properties +++ b/client/WEB-INF/classes/resources/messages_pl.properties @@ -286,7 +286,6 @@ label.lb.algorithm.leastconn=Ostatnie po\u0142\u0105czenie label.level=Poziom label.loading=Wczytywanie label.local=Lokalne -label.local.storage.enabled=Pami\u0119\u0107 lokalna w\u0142\u0105czona label.local.storage=Pami\u0119\u0107 lokalna label.login=Zaloguj label.logout=Wyloguj diff --git a/client/WEB-INF/classes/resources/messages_pt_BR.properties b/client/WEB-INF/classes/resources/messages_pt_BR.properties index 5da7e396f3..d1110509b0 100644 --- a/client/WEB-INF/classes/resources/messages_pt_BR.properties +++ b/client/WEB-INF/classes/resources/messages_pt_BR.properties @@ -18,52 +18,61 @@ changed.item.properties=Propriedades do item alteradas confirm.enable.s3=Por favor, preencha as informa\u00e7\u00f5es abaixo para habilitar suporte o Storage Secund\u00e1rio fornecido por S3 confirm.enable.swift=Por favor, preencha as informa\u00e7\u00f5es abaixo para habilitar suporte ao Swift -error.could.not.change.your.password.because.ldap.is.enabled=Erro\: a nuvem n\u00e3o alterou sua senha porque o LDAP est\u00e1 ativo. +error.could.not.change.your.password.because.ldap.is.enabled=Erro\: a senha n\u00e3o foi alterada porque o LDAP est\u00e1 ativo. error.could.not.enable.zone=N\u00e3o foi poss\u00edvel habilitar a zona error.installWizard.message=Alguma coisa est\u00e1 errada; voc\u00ea pode voltar e corrigir quaisquer erros error.invalid.username.password=Usu\u00e1rio ou senha inv\u00e1lidos -error.login=O seu usu\u00e1rio/senha n\u00e3o coincidem com nossos registros. +error.login=O seu usu\u00e1rio/senha n\u00e3o coincidem com os registros. error.menu.select=N\u00e3o foi poss\u00edvel realizar a a\u00e7\u00e3o pois nenhum item foi selecionado. error.mgmt.server.inaccessible=O Servidor de Gerenciamento est\u00e1 inacess\u00edvel. Tente novamente mais tarde. error.password.not.match=Os campos de senha n\u00e3o combinam -error.please.specify.physical.network.tags=As Ofertas de Rede n\u00e3o estar\u00e3o dispon\u00edveis enquanto voc\u00ea n\u00e3o especificar tags para esta interface f\u00edsica. +error.please.specify.physical.network.tags=As Ofertas de Rede n\u00e3o estar\u00e3o dispon\u00edveis enquanto n\u00e3o for especificado tags para esta interface f\u00edsica. error.session.expired=Sua sess\u00e3o expirou. error.something.went.wrong.please.correct.the.following=Alguma coisa est\u00e1 errada; por favor corrija abaixo error.unable.to.reach.management.server=N\u00e3o foi poss\u00edvel acessar o Servidor de Gerenciamento error.unresolved.internet.name=Imposs\u00edvel resolver DNS -force.delete.domain.warning=Aten\u00e7\u00e3o\: Esta op\u00e7\u00e3o remover\u00e1 todos os dom\u00ednios, contas e recursos associados. +force.delete.domain.warning=Aten\u00e7\u00e3o\: Esta op\u00e7\u00e3o remover\u00e1 todos os dom\u00ednios filhos, contas e recursos associados. force.delete=For\u00e7ar Exclus\u00e3o force.remove=For\u00e7ar Remo\u00e7\u00e3o force.remove.host.warning=Aten\u00e7\u00e3o\: O CloudStack desligar\u00e1 de maneira for\u00e7ada todas as VMs antes de remover o host do cluster. force.stop=For\u00e7ar Parada -force.stop.instance.warning=Aviso\: For\u00e7ar o desligamento desta inst\u00e2ncia deve ser sua \u00faltima op\u00e7\u00e3o. Isto pode levar a perda de dados, bem como comportamento inconsist\u00eante do estado da m\u00e1quina virtual. +force.stop.instance.warning=Aviso\: For\u00e7ar o desligamento desta inst\u00e2ncia deve ser sua \u00faltima op\u00e7\u00e3o. Isto pode levar a perda de dados, bem como comportamento inconsist\u00eante do estado da m\u00e1quina virtual. ICMP.code=C\u00f3digo ICMP -ICMP.type=Tipo ICMP +ICMP.type=Tipo de ICMP image.directory=Diret\u00f3rio da Imagem inline=Inline instances.actions.reboot.label=Reiniciar inst\u00e2ncia label.about.app=Sobre o CloudStack label.about=Sobre label.accept.project.invitation=Aceitar convite de projeto. -label.account.and.security.group=Contas, grupos de Seguran\u00e7a +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.account.specific=Conta-Spec\u00edfica +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.change.service.processing=Trocando de Servi\u00e7o.... +label.action.change.service=Trocar Servi\u00e7o +label.action.configure.samlauthorization=Configurar Autoriza\u00e7\u00e3o SAML SSO 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 @@ -84,27 +93,27 @@ label.action.delete.firewall.processing=Removendo Firewall.... label.action.delete.firewall=Remover regra de firewall label.action.delete.ingress.rule.processing=Removendo Regra de Entrada.... label.action.delete.ingress.rule=Remover Regra de Entrada -label.action.delete.IP.range.processing=Removendo Range de IP.... -label.action.delete.IP.range=Remover Range IP +label.action.delete.IP.range.processing=Removendo Range de IPs.... +label.action.delete.IP.range=Remover Range de IPs label.action.delete.ISO.processing=Removendo ISO.... label.action.delete.ISO=Removendo ISO -label.action.delete.load.balancer.processing=Removendo Load Balancer.... -label.action.delete.load.balancer=Remover regra de balanceador de carga +label.action.delete.load.balancer.processing=Removendo Balanceador de Carga... +label.action.delete.load.balancer=Remover regra de balanceamento de carga label.action.delete.network.processing=Removendo Rede.... label.action.delete.network=Remover Rede -label.action.delete.nexusVswitch=Remover NexusVswitch +label.action.delete.nexusVswitch=Remover Nexus 1000v label.action.delete.nic=Remover Interface de Rede label.action.delete.physical.network=Deletar rede f\u00edsica -label.action.delete.pod.processing=Removendo POD.... -label.action.delete.pod=Remover POD +label.action.delete.pod.processing=Removendo Pod.... +label.action.delete.pod=Remover Pod label.action.delete.primary.storage.processing=Removendo Storage Prim\u00e1rio.... label.action.delete.primary.storage=Remover Storage Prim\u00e1rio label.action.delete.secondary.storage.processing=Removendo Storage Secund\u00e1rio.... label.action.delete.secondary.storage=Remover Storage Secund\u00e1rio -label.action.delete.security.group.processing=Removendo Security Group.... -label.action.delete.security.group=Remover Security Group -label.action.delete.service.offering.processing=Removendo Plano.... -label.action.delete.service.offering=Remover Plano +label.action.delete.security.group.processing=Removendo Grupo de Seguran\u00e7a.... +label.action.delete.security.group=Remover Grupo de Seguran\u00e7a +label.action.delete.service.offering.processing=Removendo Oferta de Servi\u00e7o.... +label.action.delete.service.offering=Remover Oferta de Servi\u00e7o label.action.delete.snapshot.processing=Removendo Snapshot.... label.action.delete.snapshot=Remover Snapshot label.action.delete.system.service.offering=Deletar Oferta de Servi\u00e7o de Sistema @@ -117,7 +126,7 @@ label.action.delete.volume=Remover Disco label.action.delete.zone.processing=Removendo Zona.... label.action.delete.zone=Remover Zona label.action.destroy.instance=Apagar Inst\u00e2ncia -label.action.destroy.instance.processing=Apagando Inst\u00e2ncia.... +label.action.destroy.instance.processing=Destruindo Inst\u00e2ncia.... label.action.destroy.systemvm=Apagar VM de Sistema label.action.destroy.systemvm.processing=Apagando VM de Sistema.... label.action.detach.disk=Desplugar Disco @@ -128,10 +137,10 @@ label.action.disable.account=Desativar conta label.action.disable.account.processing=Desativando conta.... label.action.disable.cluster=Desativar Cluster label.action.disable.cluster.processing=Desativando Cluster.... -label.action.disable.nexusVswitch=Desabilitar NexusVswitch +label.action.disable.nexusVswitch=Desabilitar Nexus 1000v label.action.disable.physical.network=Desabilitar rede f\u00edsica -label.action.disable.pod=Desativar POD -label.action.disable.pod.processing=Desativando POD.... +label.action.disable.pod=Desativar Pod +label.action.disable.pod.processing=Desativando Pod.... label.action.disable.static.NAT=Desativar NAT Est\u00e1tico label.action.disable.static.NAT.processing=Desativando NAT Est\u00e1tico.... label.action.disable.user=Desativar Usu\u00e1rio @@ -155,7 +164,7 @@ label.action.edit.network.processing=Editarando Rede.... label.action.edit.pod=Editar Pod label.action.edit.primary.storage=Editar Storage Prim\u00e1rio label.action.edit.resource.limits=Editar Limite de Recursos -label.action.edit.service.offering=Editar Plano +label.action.edit.service.offering=Editar Oferta de Servi\u00e7o label.action.edit.template=Editar Template label.action.edit.user=Editar Usu\u00e1rio label.action.edit.zone=Editar Zona @@ -163,29 +172,29 @@ label.action.enable.account=Ativar conta label.action.enable.account.processing=Ativando conta.... label.action.enable.cluster=Ativar Cluster label.action.enable.cluster.processing=Ativando Cluster.... -label.action.enable.maintenance.mode=Ativar Modo de Manuten\u00e7\u00e3o +label.action.enable.maintenance.mode=Habilitar Modo de Manuten\u00e7\u00e3o label.action.enable.maintenance.mode.processing=Ativando Modo de Manuten\u00e7\u00e3o.... -label.action.enable.nexusVswitch=Habilitar NexusVswitch -label.action.enable.physical.network=Habilitar rede f\u00edsica -label.action.enable.pod=Ativar POD -label.action.enable.pod.processing=Ativando POD.... +label.action.enable.nexusVswitch=Ativar Nexus 1000v +label.action.enable.physical.network=Ativar rede f\u00edsica +label.action.enable.pod=Ativar Pod +label.action.enable.pod.processing=Ativando Pod.... label.action.enable.static.NAT=Ativar NAT Est\u00e1tico label.action.enable.static.NAT.processing=Ativando NAT Est\u00e1tico.... -label.action.enable.user=Habilitar usu\u00e1rio -label.action.enable.user.processing=Habilitando Usu\u00e1rio... +label.action.enable.user=Ativar usu\u00e1rio +label.action.enable.user.processing=Ativando Usu\u00e1rio... label.action.enable.zone=Ativar Zona label.action.enable.zone.processing=Ativando Zona.... label.action.expunge.instance=Eliminar Inst\u00e2ncia -label.action.expunge.instance.processing=Expurgando Inst\u00e2ncia.... -label.action.force.reconnect=Force Reconnect +label.action.expunge.instance.processing=Eliminando Inst\u00e2ncia.... +label.action.force.reconnect=For\u00e7ar Reconex\u00e3o label.action.force.reconnect.processing=Reconectando.... label.action.generate.keys=Gerar Chaves label.action.generate.keys.processing=Gerando Chaves.... -label.action.list.nexusVswitch=Listar NexusVswitch +label.action.list.nexusVswitch=Listar Nexus 1000v label.action.lock.account=Bloquear conta label.action.lock.account.processing=Bloqueando conta.... -label.action.manage.cluster.processing=Vinculando o Cluster.... -label.action.manage.cluster=Vincular Cluster +label.action.manage.cluster=Gerenciar Cluster +label.action.manage.cluster.processing=Gerenciando o Cluster.... label.action.migrate.instance=Migrar Inst\u00e2ncia label.action.migrate.instance.processing=Migrando Inst\u00e2ncia.... label.action.migrate.router=Migrar Roteador @@ -207,8 +216,8 @@ label.action.remove.host.processing=Removendo Host.... label.action.remove.host=Remover Host label.action.reset.password.processing=Recuperando a Senha.... label.action.reset.password=Recuperar Senha -label.action.resize.volume.processing=Resizing Volume.... -label.action.resize.volume=Resize Volume +label.action.resize.volume.processing=Redimencionando Disco.... +label.action.resize.volume=Redimencionar Disco label.action.resource.limits=Limite de Recursos label.action.restore.instance.processing=Restaurando Inst\u00e2ncia... label.action.restore.instance=Restaurar Inst\u00e2ncia @@ -245,52 +254,70 @@ 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.affinity.group=Adicionar novo grupo de afinidade +label.add.baremetal.dhcp.device=Adiciona Dispositivo DHCP Baremetal label.add.BigSwitchVns.device=Adicionar BigSwitch Vns Controller +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 CiscoASA1000v 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.direct.iprange=Adicionar Range de IPs label.add.disk.offering=Adicionar Oferta de Disco label.add.domain=Adicionar Dom\u00ednio -label.add.egress.rule=Adicionar regra egress +label.added.brocade.vcs.switch=Adicionado novo Brocade Vcs Switch +label.added.new.bigswitch.vns.controller=Adicionado BigSwitch VNS Controller +label.added.nicira.nvp.controller=Adicionado nova Controladora Nicira NVP +label.add.egress.rule=Adicionar regra de sa\u00edda +label.addes.new.f5=Adicionado novo F5 label.add.F5.device=Adicionar dispositivo F5 -label.add.firewall=Adicionar regra de Firewall +label.add.firewall=Adicionar regra de firewall label.add.gslb=Adicionar GSLB label.add.guest.network=Adicionar rede guest label.add.host=Adicionar Host label.adding=Adicionando label.adding.cluster=Adicionando Cluster label.adding.failed=Falha ao Adicionar -label.adding.pod=Adicionando POD +label.adding.pod=Adicionando Pod label.adding.processing=Adicionando.... 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.ip.range=Adicionar Range de IP +label.add.intermediate.certificate=Adicionar certificado intermedi\u00e1rio +label.add.internal.lb=Adiciona LB Interno +label.add.ip.range=Adicionar Range de IPs +label.add.isolated.guest.network=Adiciona Rede Guest Isolada +label.add.isolated.network=Adiciona Rede Isolada label.additional.networks=Redes Adicionais -label.add.load.balancer=Adicionar Load Balance -label.add.more=Adicionar Mais +label.add.LDAP.account=Adicionar Conta LDAP +label.add.list.name=Nome de Lista ACL +label.add.load.balancer=Adicionar Balanceador de Carga +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 -label.add.new.F5=Adicionar um novo F5 +label.add.new.F5=Adicionar novo F5 label.add.new.gateway=Adicionar novo gateway -label.add.new.NetScaler=Adicionar um novo NetScaler +label.add.new.NetScaler=Adicionar novo NetScaler label.add.new.PA=Adicionar novo Palo Alto -label.add.new.SRX=Adicionar um novo SRX +label.add.new.SRX=Adicionar 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 -label.add.portable.ip.range=Adicionar Faixa de Endere\u00e7os IPs Port\u00e1veis +label.add.pod=Adicionar Pod +label.add.portable.ip.range=Adicionar Faixa de Endere\u00e7os IPs Port\u00e1veis label.add.port.forwarding.rule=Adicionar regra de encaminhamento de porta label.add.primary.storage=Adicionar Storage Prim\u00e1rio label.add.region=Adicionar Regi\u00e3o @@ -298,22 +325,27 @@ label.add.resources=Adicionar Recursos label.add.route=Adicionar rota label.add.rule=Adicionar regra label.add.secondary.storage=Adicionar Storage Secund\u00e1rio -label.add.security.group=Adicionar Security Group -label.add.service.offering=Adicionar Plano +label.add.security.group=Adicionar Grupo de Seguran\u00e7a +label.add.service.offering=Adicionar Oferta de Servi\u00e7o label.add.SRX.device=Adicionar dispositivo SRX label.add.static.nat.rule=Adicionar regra de NAT est\u00e1tico label.add.static.route=Adicionar rota est\u00e1tica -label.add.system.service.offering=Adicionar Plano para VM de Sistema +label.add.system.service.offering=Adicionar Oferta de Servi\u00e7o 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.vlan=Adicionar VLAN 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.vms.to.lb=Adicionar VM(s) na regra de balanceamento de carga +label.add.VM.to.tier=Adicionar VM \u00e0 camada +label.add.vmware.datacenter=Adicionar Datacenter VMware +label.add.vnmc.device=Adiciona dispositivo VNMC +label.add.vnmc.provider=Adiciona 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 @@ -328,77 +360,107 @@ 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=Vers\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.availability=Availability -label.availability.zone=Datacenter +label.autoscale=Escalonamento Autom\u00e1tico +label.availability=Disponibilidade +label.availability.zone=Zona de disponibilidade 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.bigswitch.controller.address=Endere\u00e7o do Controlador BigSwitch Vns +label.bigswitch.vns.details=Detalhes do +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.by.account=por Conta +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 +label.by.availability=By Disponibilidade label.by.date.end=Por data (final) label.by.date.start=Por data (in\u00edcio) -label.by.domain=por Dom\u00ednio -label.by.end.date=por Data Final +label.by.domain=Por Dom\u00ednio +label.by.end.date=Por Data Final label.by.event.type=Por tipo de evento -label.by.level=por N\u00edvel -label.by.pod=por Pod -label.by.role=por Fun\u00e7\u00e3o -label.by.start.date=por Data Inicial -label.by.state=por estado +label.by.level=Por N\u00edvel +label.by.pod=Por Pod +label.by.role=Por Fun\u00e7\u00e3o +label.by.start.date=Por Data Inicial +label.by.state=Por Estado label.bytes.received=Bytes Recebidos label.bytes.sent=Bytes Enviados -label.by.traffic.type=por Tipo de Tr\u00e1fego -label.by.type.id=por Tipo de ID +label.by.traffic.type=Por Tipo de Tr\u00e1fego +label.by.type.id=Por Tipo de ID label.by.type=Por Tipo -label.by.zone=por Zona +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.cidr.account=CIDR ou Conta/Security Group +label.chassis=Chassis +label.cidr.account=CIDR ou Conta/Grupo de Seguran\u00e7a 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=Nome do 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 -label.cloud.console=Console de Gerenciamento da Nuvem +label.cloud.console=Console de Gerenciamento label.cloud.managed=Cloud.com Managed label.cluster=Cluster label.cluster.name=Nome do Cluster @@ -410,20 +472,23 @@ label.community=Comunidade label.compute.and.storage=Processamento e Armazenamento label.compute=Computa\u00e7\u00e3o label.compute.offering=Oferta de Computa\u00e7\u00e3o -label.compute.offerings=Oferta de Computa\u00e7\u00e3o +label.compute.offerings=Ofertas de Computa\u00e7\u00e3o label.configuration=Configura\u00e7\u00e3o label.configure=Configurar label.configure.ldap=Configurar LDAP -label.configure.network.ACLs=Configure ACLs de rede +label.configure.network.ACLs=Configurar ACLs de rede label.configure.vpc=Configurar VPC label.confirmation=Confirma\u00e7\u00e3o 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 @@ -433,60 +498,91 @@ 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.store=Criar storage staging secund\u00e1rio NFS -label.create.project=Criar um projeto +label.create.nfs.secondary.staging.storage=Cria Armazenamento NFS de Est\u00e1gio Secund\u00e1rio +label.create.nfs.secondary.staging.store=Criar staging para storage secund\u00e1rio NFS +label.create.project=Criar 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.custom.disk.size=Tamanho de Disco Customizado label.daily=Di\u00e1rio -label.data.disk.offering=Oferta de Disco Adicional +label.data.disk.offering=Oferta para Disco de Dados label.date=Data label.day.of.month=Dia do M\u00eas label.day.of.week=Dia da Semana -label.dead.peer.detection=Detec\u00e7\u00e3o de correspondente morto +label.dc.name=Nome do DC +label.dead.peer.detection=Detec\u00e7\u00e3o de falha no Peer label.decline.invitation=Rejeitar convite +label.dedicate.cluster=Dedica Cluster label.dedicated=Dedicado +label.dedicate=Dedicado +label.dedicated.vlan.vni.ranges=Ranges de VLAN/VNI Dedicados +label.dedicate.host=Dedica Host +label.dedicate.pod=Dedique Pod +label.dedicate.vlan.vni.range=Range de VLAN/VNI Dedicado +label.dedicate.zone=Dedicar Zona +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.BigSwitchVns=Remover Controlador BigSwitch Vns +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.gateway=Remover 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.project=Deletar projeto +label.delete.profile=Apaga Perfil +label.delete.project=Remover projeto label.delete=Remover +label.delete.secondary.staging.store=Apaga Armazenamento de Est\u00e1gio Secund\u00e1rio label.delete.SRX=Remover SRX -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.delete.ucs.manager=Apaga Gerenciador UCS +label.delete.VPN.connection=Remover conex\u00e3o VPN +label.delete.VPN.customer.gateway=Remover gateway de VPN de usu\u00e1rio +label.delete.VPN.gateway=Remover gateway de VPN +label.delete.vpn.user=Remover usu\u00e1rio VPN label.deleting.failed=Falha ao remover label.deleting.processing=Removendo.... -label.deployment.planner=Deployment planejado +label.deny=Negar +label.deployment.planner=Modo do deploy 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.ips=IPs Diretos +label.direct.attached.public.ip=IP P\u00fablico Conectado Diretamente +label.direct.ips=IPs Compartilhados +label.disable.autoscale=Desabilita Auto-escala label.disabled=Desativado -label.disable.provider=Desabilitar Provider -label.disable.vpn=Desabilitar VPN +label.disable.host=Desabilita Host +label.disable.network.offering=Desabilita oferta de rede +label.disable.provider=Desabilitar Provedor +label.disable.vnmc.provider=Habilita provedor VNMC +label.disable.vpc.offering=Desabilitar oferta VPC +label.disable.vpn=Desabilitar VPN de Acesso Remoto 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) @@ -496,9 +592,10 @@ 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) +label.disk.size.gb=Tamanho do Disco (em GB) label.disk.size=Tamanho do Disco label.disk.total=Disco Total label.disk.volume=Disco @@ -506,21 +603,25 @@ label.disk.write.bytes=Escrita no Disco (Bytes) label.disk.write.io=Escrita no Disco (I/O) label.display.name=Nome de exibi\u00e7\u00e3o label.display.text=Descri\u00e7\u00e3o +label.distributedrouter=Roteador Distribuido label.dns.1=DNS 1 label.dns.2=DNS 2 label.dns=DNS -label.DNS.domain.for.guest.networks=Dom\u00ednio DNS para redes h\u00f3spedes +label.DNS.domain.for.guest.networks=Dom\u00ednio DNS para redes Guests 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) -label.done=Pronto +label.done=Conclu\u00eddo 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 @@ -530,90 +631,126 @@ label.edit.region=Editar Regi\u00e3o label.edit.tags=Edite etiquetas label.edit.traffic.type=Editar tipo de tr\u00e1fego label.edit.vpc=Editar VPC -label.egress.default.policy=Pol\u00edtica de Entrada Padr\u00e3o -label.egress.rule=Regra Egress +label.egress.default.policy=Pol\u00edtica de de Sa\u00edda Padr\u00e3o +label.egress.rule=Regra de sa\u00edda label.egress.rules=Regras de sa\u00edda label.elastic=El\u00e1stico label.elastic.IP=IP El\u00e1stico label.elastic.LB=LB El\u00e1stico label.email=Email -label.enable.provider=Habilitar provider -label.enable.s3=Habilita storage secund\u00e1ria fornecida por S3 -label.enable.swift=Habilitar Swift -label.enable.vpn=Habilitar VPN +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=Ativar provedor +label.enable.s3=Ativar Storage Secund\u00e1rio fornecido via S3 +label.enable.swift=Ativar 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=Ativar VPN de Acesso Remoto label.enabling.vpn.access=Ativando Acesso VPN label.enabling.vpn=Ativando VPN -label.end.IP=IP do fim -label.endpoint.or.operation=Endpoint or Operation -label.endpoint=Ponto de acesso -label.end.port=Porta Final +label.end.IP=IP final +label.endpoint=Endpoint +label.endpoint.or.operation=Endpoint ou Opera\u00e7\u00e3o +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.example=Examplo +label.event.archived=Evento Arquivado +label.event.deleted=Evento Detectado +label.example=Exemplo 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.featured=Destaque 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 -label.full=Full -label.full.path=Path completo +label.full=Cheio +label.full.path=Caminho completo label.gateway=Gateway label.general.alerts=Alertas Gerais label.generating.url=Criando URL label.gluster.volume=Disco -label.go.step.2=V\u00e1 para passo 2 -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.go.step.2=V\u00e1 para o passo 2 +label.go.step.3=V\u00e1 para o passo 3 +label.go.step.4=V\u00e1 para o passo 4 +label.go.step.5=V\u00e1 para o passo 5 label.gpu=CPU +label.group.by.account=Agrupamento por conta +label.group.by.cluster=Agrupamento por cluster +label.group.by.pod=Agrupamento por pod +label.group.by.zone=Agrupamento 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=Servi\u00e7o GSLB - 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 -label.guest.gateway=Gateway de rede Convidado +label.guest.cidr=CIDR de rede Guest +label.guest.end.ip=IP final do Guest +label.guest.gateway=Gateway de rede Guest label.guest=Guest label.guest.ip=Endere\u00e7o IP Convidado -label.guest.ip.range=Intervalo de rede convidado +label.guest.ip.range=Intervalo de IPs para Guest 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.start.ip=IP inicial do Guest +label.guest.traffic=Tr\u00e1fego de Guests +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 Salubridade label.help=Ajuda label.hide.ingress.rule=Ocultar Regra de Entrada label.hints=Dicas -label.home=Home +label.home=In\u00edcio label.host.alerts=Alertas de Host label.host=Host label.host.MAC=Host MAC label.host.name=Host Name label.hosts=Hosts -label.host.tags=Tags de Host +label.host.tags=Etiquetas de Host label.hourly=A cada hora -label.hypervisor.capabilities=Recursos de Virtualizador -label.hypervisor=Hipervisor +label.hvm=HVM +label.hypervisor.capabilities=Recursos de Hypervisor +label.hypervisor=Hypervisor 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.hypervisor.version=Vers\u00e3o de Hypervisor +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 @@ -621,17 +758,19 @@ 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 ? +label.installWizard.addHostIntro.subtitle=O que \u00e9 um Host? label.installWizard.addHostIntro.title=Vamos adicionar um host -label.installWizard.addPodIntro.subtitle=O que \u00e9 um pod ? +label.installWizard.addPodIntro.subtitle=O que \u00e9 um pod? label.installWizard.addPodIntro.title=Vamos adicionar um pod -label.installWizard.addPrimaryStorageIntro.subtitle=Qual \u00e9 o storage prim\u00e1rio ? +label.installWizard.addPrimaryStorageIntro.subtitle=Qual \u00e9 o storage prim\u00e1rio? label.installWizard.addPrimaryStorageIntro.title=Vamos adicionar o storage prim\u00e1rio -label.installWizard.addSecondaryStorageIntro.subtitle=Qual \u00e9 o storage secund\u00e1rio ? +label.installWizard.addSecondaryStorageIntro.subtitle=Qual \u00e9 o storage secund\u00e1rio? label.installWizard.addSecondaryStorageIntro.title=Vamos adicionar o storage secund\u00e1rio label.installWizard.addZoneIntro.subtitle=O que \u00e9 uma zona? label.installWizard.addZoneIntro.title=Vamos adicionar uma zona @@ -642,14 +781,19 @@ 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.instance.scaled.up=Inst\u00e2ncia Escalada 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 -label.invalid.integer=Invalid Integer +label.invalid.integer=Inteiro inv\u00e1lido label.invalid.number=N\u00famero inv\u00e1lido label.invitations=Convites label.invite=Convidar @@ -661,13 +805,24 @@ label.ip.allocations=Aloca\u00e7\u00f5es de IP label.ip=IP label.ip.limits=Limites de IP P\u00fablico label.ip.or.fqdn=IP ou FQDN -label.ip.range=Range de IP -label.ip.ranges=Ranges de IP +label.ip.range=Intervalo de IP +label.ip.ranges=Intervalos de IPs 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 @@ -678,7 +833,7 @@ label.isolation.mode=Modo Isolado label.isolation.uri=URI de isolamento label.is.redundant.router=Redundante label.is.shared=\u00c9 Compartilhado -label.is.system=\u00e9 um sistema +label.is.system=\u00c9 um Sistema label.item.listing=Listar items label.keep=Manter label.keyboard.type=Tipo de Teclado @@ -686,21 +841,23 @@ label.key=Chave label.kvm.traffic.label=Etiqueta de tr\u00e1fego KVM label.label=Etiqueta label.lang.arabic=Arabe -label.lang.brportugese=Portugu\u00eas brasileiro +label.lang.brportugese=Portugu\u00eas Brasileiro label.lang.catalan=Catal\u00e3o -label.lang.chinese=Chinese (Simplified) +label.lang.chinese=Chinese (Simplificado) label.lang.dutch=Holand\u00eas (Holanda) -label.lang.english=English +label.lang.english=Ingl\u00eas 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.japanese=Japones label.lang.korean=Coreano label.lang.norwegian=Noruegu\u00eas label.lang.polish=Polon\u00eas label.lang.russian=Russo -label.lang.spanish=Spanish -label.last.disconnected=Last Disconnected +label.lang.spanish=Espanhol +label.last.disconnected=\u00daltima desconex\u00e3o +label.lastname.lower=\u00faltimo nome label.last.name=\u00daltimo Nome label.latest.events=\u00daltimos eventos label.launch=Executar @@ -715,34 +872,40 @@ label.ldap.group.name=Grupo LDAP 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=Balanceador de Carga +label.load.balancer.type=Tipo de Balanceador de Carga label.load.balancing=Balanceamento de Carga label.load.balancing.policies=Pol\u00edticas de balanceamento de carga label.loading=Carregando label.local=Local -label.local.storage.enabled=Storage local habilitada +label.local.storage.enabled=Ativar storage local para VMs de usu\u00e1rios +label.local.storage.enabled.system.vms=Habilitar storage local para VMs de Sistema label.local.storage=Storage Local label.login=Entrar label.logout=Sair label.lun=LUN label.LUN.number=LUN \# -label.make.project.owner=Criar propriet\u00e1rio de conta de projeto +label.lxc.traffic.label=R\u00f3tulo de tr\u00e1fego LXC +label.make.project.owner=Definir conta propriet\u00e1ria 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.max.cpus=M\u00e1ximo de CPU cores +label.max.guest.limit=Limite m\u00e1x. de guests 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) +label.max.primary.storage=M\u00e1x. storage prim\u00e1rio (GiB) label.max.public.ips=M\u00e1x. IPs p\u00fablicos -label.max.secondary.storage=Max. Secund\u00e1rio (GiB) +label.max.secondary.storage=Max. storage secund\u00e1rio (GiB) label.max.snapshots=Max. snapshots label.max.templates=M\u00e1x. templates label.max.vms=M\u00e1x. VMs de usu\u00e1rio -label.max.volumes=M\u00e1x. volumes +label.max.volumes=M\u00e1x. discos label.max.vpcs=M\u00e1x. VPCs label.may.continue=Voc\u00ea pode continuar agora label.md5.checksum=MD5 checksum @@ -764,10 +927,10 @@ label.menu.destroyed.instances=Inst\u00e2ncias Apagadas label.menu.disk.offerings=Oferta de Discos label.menu.domains=Dom\u00ednios label.menu.events=Eventos -label.menu.featured.isos=ISOs Customizada -label.menu.featured.templates=Templates Customizados +label.menu.featured.isos=ISOs em Destaque +label.menu.featured.templates=Templates em Destaque label.menu.global.settings=Configura\u00e7\u00f5es Globais -label.menu.infrastructure=Infra-estrutura +label.menu.infrastructure=Infraestrutura label.menu.instances=Inst\u00e2ncias label.menu.ipaddresses=Endere\u00e7os IP label.menu.isos=ISOs @@ -777,10 +940,10 @@ label.menu.my.isos=Minhas ISOs label.menu.my.templates=Meus Templates label.menu.network.offerings=Oferta de Rede label.menu.network=Rede -label.menu.physical.resources=Recursos B\u00e1\u00adsicos +label.menu.physical.resources=Recursos F\u00edsicos label.menu.regions=Regi\u00f5es -label.menu.running.instances=Inst\u00e2ncias Rodando -label.menu.security.groups=Grupos de seguran\u00e7a +label.menu.running.instances=Inst\u00e2ncias em Execu\u00e7\u00e3o +label.menu.security.groups=Grupos de Seguran\u00e7a label.menu.service.offerings=Oferta de Servi\u00e7os label.menu.snapshots=Snapshots label.menu.stopped.instances=Inst\u00e2ncias Paradas @@ -792,15 +955,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 @@ -815,13 +983,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 @@ -856,12 +1027,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 @@ -871,6 +1044,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 @@ -885,37 +1059,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=Anula 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.planner.mode=Modo do plano 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 @@ -938,6 +1128,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 @@ -945,22 +1136,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 @@ -973,9 +1169,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 @@ -983,6 +1188,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 @@ -990,33 +1196,50 @@ label.remove.rule=Remover regra 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.from.lb=Remover VM da regra de balanceador 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 @@ -1024,18 +1247,25 @@ label.s3.bucket=Balde label.s3.connection_timeout=Tempo limite de conex\u00e3o label.s3.endpoint=Ponto de acesso label.s3.max_error_retry=Limite de tentativas de recupera\u00e7\u00e3o de erro -label.s3.nfs.path=Caminho NFS S3 -label.s3.nfs.server=Servidor NFS S3 +label.s3.nfs.path=Caminho S3 NFS +label.s3.nfs.server=Servidor S3 NFS label.s3.secret_key=Chave Secreta label.s3.socket_timeout=Tempo limite no socket label.s3.use_https=Use HTTPS +label.saml.enable=Autorizar SAML SSO +label.saml.entity=Provedor de Identidade 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 do 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 @@ -1052,7 +1282,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 @@ -1060,15 +1292,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 @@ -1081,18 +1316,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.sockets=Sockets +label.SNMP.community=Comunidade SNMP +label.SNMP.port=Porta SNMP +label.sockets=CPU 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 @@ -1111,6 +1355,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 Ader\u00eancia label.sticky.cookie-name=Nome do Cookie label.sticky.domain=Dom\u00ednio label.sticky.expire=Expires @@ -1118,13 +1363,16 @@ label.sticky.holdtime=Tempo de espera label.sticky.indirect=Indireto label.sticky.length=Tamanho label.sticky.mode=Modo +label.sticky.name=Nome Permanente 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 @@ -1137,11 +1385,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 @@ -1155,12 +1407,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 @@ -1170,30 +1425,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 @@ -1203,31 +1472,50 @@ 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 label.view.more=Ver mais -label.view.secondary.ips=Visualizar os IPs secund\u00e1rios +label.view.secondary.ips=Visualizar 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.machines=M\u00e1quinas virtuais +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 @@ -1239,18 +1527,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 @@ -1261,18 +1561,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 @@ -1290,7 +1596,7 @@ label.zoneWizard.trafficType.public=P\u00fablico\: tr\u00e1fego entre a internet label.zoneWizard.trafficType.storage=Storage\: tr\u00e1fego entre servidores de storage prim\u00e1ria e secund\u00e1ria, tais como templates de m\u00e1quinas virtuais e snapshots label.zone=Zona managed.state=Status do Gerenciamento -message.acquire.ip.nic=Por favor, confirme que voc\u00ea deseja adquirir um novo IP secund\u00e1rio para esta Interface de Rede.
NOTA\: Voc\u00ea precisa configurar manualmente o novo IP secund\u00e1rio dentro da maquinas virtual. +message.acquire.ip.nic=Por favor, confirme que voc\u00ea deseja adquirir um novo IP secund\u00e1rio para esta Interface de Rede.
NOTA\: Voc\u00ea precisa configurar manualmente o novo IP secund\u00e1rio dentro da maquina virtual. message.acquire.new.ip=Por favor confirme que voc\u00ea gostaria de adquirir um novo IP para esta rede. message.acquire.new.ip.vpc=Por favor confirme que voc\u00ea gostaria de adquirir um novo IP para esta VPC. message.acquire.public.ip=Selecione a zona de onde voc\u00ea deseja adquirir o novo IP @@ -1329,6 +1635,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. @@ -1392,6 +1699,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. @@ -1405,6 +1713,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 @@ -1412,17 +1722,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 Nuage Virtualized Services Directory 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 desabilitar 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 novo. +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 ? @@ -1433,8 +1797,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 liberada 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 @@ -1458,9 +1824,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. @@ -1471,12 +1841,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. @@ -1511,12 +1889,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. @@ -1524,8 +1904,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. @@ -1543,12 +1926,15 @@ 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. +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 dados do disco ROOT ser\u00e3o perdidos. Volumes de Dados adicionais, se houver, n\u00e3o ser\u00e3o alterados. message.remove.ldap=Voc\u00ea tem certeza que deseja deletar a configura\u00e7\u00e3o LDAP? message.remove.region=Voc\u00ea tem certeza que deseja remover esta regi\u00e3o deste servidor de gerenciamento? message.remove.vpc=Favor confirmar que voc\u00ea deseja remover a VPC @@ -1560,6 +1946,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. @@ -1568,10 +1955,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. @@ -1583,7 +1974,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. @@ -1596,19 +1990,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=AVISO\: 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 @@ -1625,6 +2044,7 @@ state.Completed=Completo state.Creating=Criando state.Declined=Recusado state.Destroyed=Destru\u00eddo +state.detached=Desanexado state.Disabled=Desativado state.enabled=Habilitado state.Enabled=Habilitado diff --git a/client/WEB-INF/classes/resources/messages_ru_RU.properties b/client/WEB-INF/classes/resources/messages_ru_RU.properties index 3cde4ef71e..0aadea0e0b 100644 --- a/client/WEB-INF/classes/resources/messages_ru_RU.properties +++ b/client/WEB-INF/classes/resources/messages_ru_RU.properties @@ -21,47 +21,50 @@ 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\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.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.please.specify.physical.network.tags=\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0442\u0435\u0433\u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\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, \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\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 CloudStack \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0445\u043e\u0441\u0442 \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 \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 +instances.actions.reboot.label=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0412\u041c +label.about.app=CloudStack +label.about=\u0412\u0435\u0440\u0441\u0438\u044f \u041f\u041e 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.processing=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430... label.action.copy.template=\u041a\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 @@ -69,8 +72,8 @@ label.action.create.template.processing=\u0421\u043e\u0437\u0434\u0430\u043d\u04 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.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... @@ -81,13 +84,13 @@ label.action.delete.domain.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438 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=\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.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... label.action.delete.IP.range=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP 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 @@ -98,12 +101,12 @@ label.action.delete.pod.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0 label.action.delete.pod=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0435\u043d\u0434 label.action.delete.primary.storage.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430... 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.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.secondary.storage.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439.... +label.action.delete.secondary.storage=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 +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\u0431\u044b.... +label.action.delete.service.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0441\u043b\u0443\u0433\u0443 \u0441\u043b\u0443\u0436\u0431 label.action.delete.snapshot.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u0430... label.action.delete.snapshot=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a label.action.delete.system.service.offering=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 @@ -111,79 +114,79 @@ label.action.delete.template.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u04 label.action.delete.template=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d label.action.delete.user.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f... label.action.delete.user=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -label.action.delete.volume.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u043c\u0430... -label.action.delete.volume=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u043c +label.action.delete.volume.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0430.... +label.action.delete.volume=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0438\u0441\u043a label.action.delete.zone.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u043e\u043d\u044b... 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=\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.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 NexusVswitch 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 \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 +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.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.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.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=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0437\u0435\u043b +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=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0435\u043d\u0434 +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=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 +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.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 NexusVswitch 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=\u0412\u043a\u043b\u044e\u0447\u0438\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 +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.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.force.reconnect=\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 +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=\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.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 @@ -204,9 +207,9 @@ label.action.remove.host.processing=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u 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... @@ -226,10 +229,11 @@ 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.OS.preference.processing=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a O\u0421.... +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 \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.vmsnapshot.create=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0412\u041c @@ -238,21 +242,21 @@ label.action.vmsnapshot.revert=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\ 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.BigSwitchVns.device=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c BigSwitch Vns Controller 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.by=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a 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.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 @@ -261,19 +265,21 @@ label.adding.cluster=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u043 label.adding.failed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\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.more=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435 +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 \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 @@ -292,12 +298,12 @@ label.add.resources=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u043 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.security.group=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c Security Group 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.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\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b 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 @@ -307,75 +313,80 @@ label.add.vms.to.lb=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041 label.add.vms=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0412\u041c 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\u0435\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.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.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=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 +label.assign=\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e +label.associated.network.id=\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 ID 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.mode=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c label.basic=\u041f\u0440\u043e\u0441\u0442\u043e\u0439 label.bigswitch.controller.address=\u0410\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 BigSwitch VNC -label.bootable=\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 +label.bootable=\u0417\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\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.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.availability=\u041f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e 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.domain=\u041f\u043e \u0434\u043e\u043c\u0435\u043d\u0430\u043c +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.received=\u0411\u0430\u0439\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e label.bytes.sent=\u0411\u0430\u0439\u0442 \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=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +label.capacity.bytes=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e Bytes +label.capacity.iops=\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e IOPS +label.capacity=\u0415\u043c\u043a\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 @@ -386,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 @@ -397,9 +408,9 @@ 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.configuration=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 label.configure.network.ACLs=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ACL \u0441\u0435\u0442\u0438 label.configure=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c label.configure.vpc=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c VPC @@ -407,9 +418,10 @@ 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 @@ -417,7 +429,7 @@ 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 @@ -425,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.use=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +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.BigSwitchVns=\u0423\u0434\u0430\u043b\u0438\u0442\u044c BigSwitch VNC \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 @@ -446,6 +459,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 @@ -460,18 +474,23 @@ label.destination.physical.network.id=ID \u0446\u0435\u043b\u0435\u0432\u043e\u0 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.disabling.vpn.access=\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f VPN \u0434\u043e\u0441\u0442\u0443\u043f\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 @@ -479,13 +498,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.total=\u0420\u0430\u0437\u043c\u0435\u0440 \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.name=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f @@ -496,35 +515,43 @@ 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.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=\u0412\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 @@ -539,47 +566,51 @@ 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=\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\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 label.full.path=\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c 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.general.alerts=\u041e\u0431\u0449\u0438\u0435 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f +label.generating.url=\u0421\u043e\u0437\u0434\u0430\u0442\u044c URL +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.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 -label.guest.ip.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 -label.guest.ip=\u0413\u043e\u0441\u0442\u0435\u0432\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 +label.guest.ip.range=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 +label.guest.ip=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439 IP \u0430\u0434\u0440\u0435\u0441 label.guest.netmask=\u0413\u043e\u0441\u0442\u0435\u0432\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430 label.guest.networks=\u0413\u043e\u0441\u0442\u0435\u0432\u044b\u0435 \u0441\u0435\u0442\u0438 label.guest.start.ip=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 IP 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.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 @@ -616,14 +647,14 @@ 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 label.internal.dns.1=\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 DNS 1 label.internal.dns.2=\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 DNS 2 label.internal.name=\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0438\u043c\u044f -label.interval.type=\u0422\u0438\u043f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 +label.interval.type=\u0422\u0438\u043f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 label.introduction.to.cloudstack=\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 CloudStack label.invalid.integer=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e label.invalid.number=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e @@ -633,12 +664,12 @@ 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.ip.allocations=\u0410\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e 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.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 @@ -649,11 +680,11 @@ 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=\u0413\u043e\u0440\u044f\u0447\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 +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.keep=\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c label.keyboard.type=\u0422\u0438\u043f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b label.key=\u041a\u043b\u044e\u0447 label.kvm.traffic.label=\u041c\u0435\u0442\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 KVM @@ -664,8 +695,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 @@ -676,24 +708,25 @@ 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=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e 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.cpus=\u041c\u0430\u043a\u0441. \u044f\u0434\u0435\u0440 CPU +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 @@ -703,56 +736,57 @@ 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.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.configuration=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +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.ipaddresses=IP \u0430\u0434\u0440\u0435\u0441\u0430 label.menu.isos=ISO label.menu.my.accounts=\u041c\u043e\u0438 \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 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.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 label.menu.system=\u0421\u0438\u0441\u0442\u0435\u043c\u0430 -label.menu.system.vms=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0412\u041c +label.menu.system.vms=\u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0412\u041c 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.appliances=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\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 @@ -761,11 +795,13 @@ label.migrate.systemvm.to=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 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=\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.monthly=\u0415\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e +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 @@ -774,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.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.text=\u0414\u043e\u043c\u0435\u043d \u0441\u0435\u0442\u0438 label.network.domain=\u0414\u043e\u043c\u0435\u043d \u0441\u0435\u0442\u0438 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 @@ -818,12 +855,12 @@ label.nicira.controller.address=\u0410\u0434\u0440\u0435\u0441 \u043a\u043e\u043 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.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.not.found=\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e @@ -833,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.optional=\u041f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e 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.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.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=\u0425\u043e\u0437\u044f\u0438\u043d \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 +label.owner.domain=\u0425\u043e\u0437\u044f\u0438\u043d \u0434\u043e\u043c\u0435\u043d\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,33 +900,34 @@ label.PING.CIFS.username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e label.PING.dir=\u041a\u0430\u0442\u0430\u043b\u043e\u0433 PING label.PING.storage.IP=IP \u0430\u0434\u0440\u0435\u0441 PING-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 label.please.specify.netscaler.info=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 NetScaler -label.please.wait=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 +label.please.wait=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u043f\u043e\u0436\u043e\u0436\u0434\u0438\u0442\u0435 label.plugin.details=\u0414\u0435\u0442\u0430\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 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.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 @@ -896,33 +937,37 @@ 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.public.interface=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 +label.provider=\u041f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0438 +label.public.interface=\u0412\u043d\u0435\u0448\u043d\u0438\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 label.public.network=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0441\u0435\u0442\u044c label.public.port=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 label.public.traffic=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a label.public=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 -label.public.zone=\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u0437\u043e\u043d\u0430 +label.public.zone=\u0412\u043d\u0435\u0448\u043d\u044f\u044f \u0437\u043e\u043d\u0430 label.purpose=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 label.Pxe.server.type=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 PXE 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.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.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.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 \u0438\u0437 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 +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 @@ -930,17 +975,23 @@ label.remove.static.nat.rule=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u 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 @@ -951,12 +1002,13 @@ 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.running.vms=\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0412\u041c label.s3.access_key=\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 label.s3.bucket=Bucket label.s3.connection_timeout=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f @@ -965,18 +1017,18 @@ label.s3.nfs.path=S3 NFS \u043f\u0443\u0442\u044c label.s3.nfs.server=S3 NFS \u0421\u0435\u0440\u0432\u0435\u0440 label.s3.secret_key=\u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 label.s3.socket_timeout=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u043a\u0435\u0442\u0430 -label.s3.use_https=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 HTTPS +label.s3.use_https=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HTTPS label.saturday=\u0421\u0443\u0431\u0431\u043e\u0442\u0430 label.save.and.continue=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c 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.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.secondary.used=\u0417\u0430\u043d\u044f\u0442\u043e \u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 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 label.security.groups.enabled=\u0413\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b @@ -984,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=\u0412\u044b\u0431\u0438\u0440\u0438\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 +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\u0435\u0440\u0438\u0442\u0435 \u043c\u0430\u0448\u0438\u043d\u0443 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.offering=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0441\u043b\u0443\u0433\u0443 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 @@ -999,19 +1053,24 @@ label.service.capabilities=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u044 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.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.SharedMountPoint=SharedMountPoint 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 @@ -1041,27 +1100,28 @@ 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 +label.sticky.holdtime=\u0412\u0440\u0435\u043c\u044f \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f 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 label.storage=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 label.subdomain.access=\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0443 label.submitted.by=[\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e\: ] -label.submit=\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c +label.submit=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c label.succeeded=\u0423\u0441\u043f\u0435\u0448\u043d\u043e label.sunday=\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435 label.super.cidr.for.guest.networks=Super CIDR \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0441\u0435\u0442\u0438 @@ -1069,18 +1129,19 @@ label.supported.services=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\ label.supported.source.NAT.type=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b NAT-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 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.capacity=\u0415\u043c\u043a\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b +label.system.offering=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b label.system.service.offering=\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 -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 -label.system.wide.capacity=\u041e\u0431\u0449\u0435\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u0430 -label.tagged=\u0421 \u043c\u0435\u0442\u043a\u043e\u0439 +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\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0412\u041c +label.system.vm.type=\u0422\u0438\u043f \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 \u0412\u041c +label.system.vm=\u0421\u043b\u0443\u0436\u0435\u0431\u043d\u0430\u044f \u0412\u041c +label.system.wide.capacity=\u041e\u0431\u0449\u0435\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0435\u043c\u043a\u043e\u0441\u0442\u044c +label.tagged=\u0422\u044d\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 label.tags=\u041c\u0435\u0442\u043a\u0438 label.target.iqn=\u0426\u0435\u043b\u0435\u0432\u043e\u0439 IQN label.task.completed=\u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 -label.template.limits=\u041f\u0440\u0435\u0434\u0435\u043b\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 +label.template.limits=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 label.template=\u0428\u0430\u0431\u043b\u043e\u043d label.TFTP.dir=\u041a\u0430\u0442\u0430\u043b\u043e\u0433 TFTP label.theme.default=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0442\u0435\u043c\u0430 @@ -1093,18 +1154,21 @@ 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.total.cpu=\u0412\u0441\u0435\u0433\u043e CPU -label.total.CPU=\u0412\u0441\u0435\u0433\u043e CPU +label.total.cpu=\u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 +label.total.CPU=\u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 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 @@ -1114,46 +1178,52 @@ 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.interface=\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 +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 -label.vcenter.cluster=\u041a\u043b\u0430\u0441\u0442\u0435\u0440 vCenter -label.vcenter.datacenter=\u0426\u041e\u0414 vCenter -label.vcenter.datastore=\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 vCenter -label.vcenter.host=\u0423\u0437\u0435\u043b vCenter -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.vcdcname=vCenter DC name +label.vcenter.cluster=vCenter Cluster +label.vcenter.datacenter=vCenter Datacenter +label.vcenter.datastore=vCenter Datastore +label.vcenter.host=vCenter Host +label.vcenter.password=vCenter Password +label.vcenter.username=vCenter Username +label.vcipaddress=vCenter IP Address 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 label.view.more=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 -label.view.secondary.ips=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 -label.view=\u0412\u0438\u0434 +label.view.secondary.ips=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 +label.view=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 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.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.routers=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u044b label.virtual.router=\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 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.vm.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u044b +label.vm.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 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 @@ -1169,12 +1239,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=\u041b\u0438\u043c\u0438\u0442\u044b \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.volumes=\u0414\u0438\u0441\u043a\u0438 +label.volume=\u0414\u0438\u0441\u043a 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 @@ -1187,15 +1262,15 @@ 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.vxlan.id=VXLAN ID -label.vxlan.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d Range +label.vxlan.range=VXLAN Range label.vxlan=VXLAN label.waiting=\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 -label.warn=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435 +label.warn=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\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 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 @@ -1209,101 +1284,101 @@ label.zone.step.4.title=Step 4\: \u0414\u043e\u0431\u0430\u0432\u044c\u0 label.zones=\u0417\u043e\u043d\u044b label.zone.type=\u0422\u0438\u043f \u0437\u043e\u043d\u044b label.zone=\u0417\u043e\u043d\u0430 -label.zone.wide=\u0412\u0441\u0435\u0439 \u0437\u043e\u043d\u044b +label.zone.wide=Zone-Wide label.zoneWizard.trafficType.guest=\u0413\u043e\u0441\u0442\u0435\u0432\u043e\u0439\: \u0422\u0440\u0430\u0444\u0438\u043a \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 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 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. +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 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u043b\u0438\u0449\u0430\u043c\u0438, \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=Managed State +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.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 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c IP \u0430\u0434\u0440\u0435\u0441 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.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.cancel.maintenance=\u0412\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c \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. +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\u043a \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\u0442 nexusVswitch. +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 \u0412\u041c \u0441\u0435\u0442\u0438 . +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 \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.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 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439. +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 \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.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\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.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.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.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 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 nexusVswitch. 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.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.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.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\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\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\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\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443. +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.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.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 -message.add.host=\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 \u0443\u0437\u043b\u0430. +message.add.host=\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 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. message.adding.host=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 message.adding.Netscaler.device=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 NetScaler message.adding.Netscaler.provider=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c Netscaler -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.direct.network=\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 \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.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.ip.range=\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 \u0432 \u0437\u043e\u043d\u0443 +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\u0449\u0438\u043a \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\: +message.add.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0432 \u0437\u043e\u043d\u0443\: message.add.new.gateway.to.vpc=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\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 \u0448\u043b\u044e\u0437\u0430 \u0432 VPC 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 @@ -1311,25 +1386,25 @@ message.add.primary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0 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.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.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=\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.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.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, \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.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.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\u0439\u0442\u0435 \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 message.configuring.physical.networks=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u0442\u0435\u0439 message.configuring.public.traffic=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 @@ -1345,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=\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? +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 @@ -1375,33 +1450,34 @@ message.desc.primary.storage=\u041a\u0430\u0436\u0434\u0430\u044f \u0433\u0440\u 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.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.ISO=\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 ISO +message.download.template=\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 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 +message.download.volume.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 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u0438\u0441\u043a +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.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.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\u0445 \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 \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\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 \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. @@ -1430,26 +1506,27 @@ 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 \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439 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.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.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\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.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.listView.subselect.multi=(Ctrl/Cmd-click) +message.lock.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 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u043a\u044e \u0437\u0430\u043f\u0438\u0441\u044c. \u041f\u043e\u0441\u043b\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0441\u0435 \u0435\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \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. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438. +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.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.new.user=\u0423\u043a\u0430\u0436\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 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0443\u0447\u0435\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,7 +1536,7 @@ message.number.pods=

\# of \u0421\u0442\u0435\u043d\u0434\u044 message.number.storage=

\# of \u0422\u043e\u043c\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430

message.number.zones=

\# of \u0417\u043e\u043d\u044b

message.pending.projects.1=\u0412 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f\: -message.pending.projects.2=\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0435\u043d\u044e. +message.pending.projects.2=\u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0435\u043d\u044e. message.please.add.at.lease.one.traffic.range=\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u043b\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 message.please.proceed=\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443 message.please.select.a.configuration.for.your.zone=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432\u0430\u0448\u0435\u0439 \u0437\u043e\u043d\u044b @@ -1467,40 +1544,42 @@ 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.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.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 \u043c\u0430\u0448\u0438\u043d\u0443. 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.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.basic=\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.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.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.2.desc= -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.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.3.desc= -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.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 @@ -1513,38 +1592,39 @@ 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.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.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 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\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 +network.rate=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \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 notification.start.instance=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 notification.stop.instance=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0443 side.by.side=\u0411\u043e\u043a-\u043e-\u0411\u043e\u043a state.Accepted=\u041f\u0440\u0438\u043d\u044f\u0442\u043e state.Active=\u0412\u043a\u043b\u044e\u0447\u0435\u043d -state.Allocated=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e +state.Allocated=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043e state.Allocating=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 -state.BackedUp=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e +state.BackedUp=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f state.BackingUp=\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 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.Enabled=\u0412\u043a\u043b\u044e\u0447\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 a4af8f70ec..9e48ce744a 100644 --- a/client/WEB-INF/classes/resources/messages_zh_CN.properties +++ b/client/WEB-INF/classes/resources/messages_zh_CN.properties @@ -67,7 +67,10 @@ 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.configure.samlauthorization=\u914d\u7f6e SAML SSO \u8ba4\u8bc1 +label.action.copy.ISO.processing=\u590d\u5236\u955c\u50cf 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 @@ -287,8 +290,10 @@ 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.guest.network=\u6dfb\u52a0\u9694\u79bb\u7684\u6765\u5bbe\u7f51\u7edc label.add.isolated.network=\u6dfb\u52a0\u9694\u79bb\u7f51\u7edc label.additional.networks=\u5176\u4ed6\u7f51\u7edc +label.add.LDAP.account=\u6dfb\u52a0LDAP\u8d26\u6237 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 @@ -598,6 +603,7 @@ label.disk.write.bytes=\u78c1\u76d8\u5199\u5165(\u5b57\u8282) label.disk.write.io=\u78c1\u76d8\u5199\u5165(IO) label.display.name=\u663e\u793a\u540d\u79f0 label.display.text=\u663e\u793a\u6587\u672c +label.distributedrouter=\u5206\u5e03\u5f0f\u8def\u7531\u5668 label.dns.1=DNS 1 label.dns.2=DNS 2 label.dns=DNS @@ -613,6 +619,7 @@ 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.duration.in.sec=\u6301\u7eed\u65f6\u95f4 (\u79d2) 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 @@ -649,6 +656,8 @@ 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.end.vlan=\u7ed3\u5c3eXVLAN +label.end.vxlan=\u7ed3\u5c3eVLAN label.enter.token=\u8f93\u5165\u4ee4\u724c label.error.code=\u9519\u8bef\u4ee3\u7801 label.error=\u9519\u8bef @@ -839,6 +848,7 @@ label.lang.dutch=\u8377\u5170\u8bed(\u8377\u5170) label.lang.english=\u82f1\u8bed label.lang.french=\u6cd5\u8bed label.lang.german=\u5fb7\u8bed +label.lang.hungarian=\u5308\u7259\u5229 label.lang.italian=\u610f\u5927\u5229\u8bed label.lang.japanese=\u65e5\u8bed label.lang.korean=\u97e9\u8bed @@ -867,7 +877,8 @@ 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=\u5df2\u542f\u7528\u672c\u5730\u5b58\u50a8 +label.local.storage.enabled.system.vms=\u4e3a\u7cfb\u7edf\u5b9e\u4f8b\u5f00\u542f\u672c\u5730\u5b58\u50a8 +label.local.storage.enabled=\u4e3a\u7528\u6237\u5b9e\u4f8b\u5f00\u542f\u672c\u5730\u5b58\u50a8 label.local.storage=\u672c\u5730\u5b58\u50a8 label.local=\u672c\u5730 label.login=\u767b\u5f55 @@ -954,8 +965,10 @@ 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.min.instances=\u6700\u5c0f\u5b9e\u4f8b\u6570 +label.minute.past.hour=\u5206\u949f\u65f6 label.mode=\u6a21\u5f0f label.monday=\u661f\u671f\u4e00 label.monthly=\u6bcf\u6708 @@ -1202,6 +1215,7 @@ label.reserved.system.netmask=\u9884\u7559\u7684\u7cfb\u7edf\u7f51\u7edc\u63a9\u 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\u5efa\u5927\u5c0f(GB) 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 @@ -1238,6 +1252,8 @@ 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 +label.saml.enable=\u6279\u51c6 SAML SSO +label.saml.entity=\u8ba4\u8bc1\u65b9\u5f0f label.saturday=\u661f\u671f\u516d label.save.and.continue=\u4fdd\u5b58\u5e76\u7ee7\u7eed label.save=\u4fdd\u5b58 @@ -1299,6 +1315,7 @@ label.smb.username=SMB \u7528\u6237\u540d label.snapshot.limits=\u5feb\u7167\u9650\u5236 label.snapshot.name=\u5feb\u7167\u540d\u79f0 label.snapshot.schedule=\u8bbe\u7f6e\u91cd\u73b0\u5feb\u7167 +label.snapshot.s=\u5168\u90e8\u5feb\u7167 label.snapshots=\u5feb\u7167 label.snapshot=\u5feb\u7167 label.SNMP.community=SNMP \u793e\u533a @@ -1318,6 +1335,8 @@ 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=\u8d77\u59cb VLAN +label.start.vxlan=\u8d77\u59cb VXLAN label.state=\u72b6\u6001 label.static.nat.enabled=\u5df2\u542f\u7528\u9759\u6001 NAT label.static.nat.to=\u9759\u6001 NAT \u76ee\u6807 @@ -1396,6 +1415,7 @@ label.threshold=\u9608\u503c label.thursday=\u661f\u671f\u56db label.tier.details=\u5c42\u8be6\u7ec6\u4fe1\u606f label.tier=\u5c42 +label.timeout.in.second = \u8d85\u65f6(\u79d2) label.timeout=\u8d85\u65f6 label.time=\u65f6\u95f4 label.time.zone=\u65f6\u533a @@ -1405,6 +1425,7 @@ label.total.cpu=CPU \u603b\u91cf label.total.CPU=CPU \u603b\u91cf label.total.hosts=\u603b\u4e3b\u673a\u6570 label.total.memory=\u5185\u5b58\u603b\u91cf +label.total.of.ip=IP\u5730\u5740\u603b\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 @@ -1678,7 +1699,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.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.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 @@ -1808,6 +1829,7 @@ 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 diff --git a/client/pom.xml b/client/pom.xml index db9d384107..bcb139109c 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -17,7 +17,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index a87d1677f2..a69605c1ea 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -26,6 +26,10 @@ logout=15 samlSso=15 samlSlo=15 getSPMetadata=15 +listIdps=15 +authorizeSamlSso=7 +listSamlAuthorization=7 +listAndSwitchSamlAccount=15 ### Account commands createAccount=7 diff --git a/core/pom.xml b/core/pom.xml index a212558c58..9aca4192ac 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -25,7 +25,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT diff --git a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java b/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java index ab4edafa48..1455145be0 100644 --- a/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java +++ b/core/src/com/cloud/agent/api/CreateVMSnapshotCommand.java @@ -25,8 +25,14 @@ public class CreateVMSnapshotCommand extends VMSnapshotBaseCommand { + private String vmUuid; - public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { + public CreateVMSnapshotCommand(String vmName, String vmUuid, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { super(vmName, snapshot, volumeTOs, guestOSType); + this.vmUuid = vmUuid; + } + + public String getVmUuid() { + return vmUuid; } } diff --git a/core/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java b/core/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java index 7a7d3d43cb..fc8ba08433 100644 --- a/core/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java +++ b/core/src/com/cloud/agent/api/RevertToVMSnapshotCommand.java @@ -25,16 +25,18 @@ public class RevertToVMSnapshotCommand extends VMSnapshotBaseCommand { - public RevertToVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { + public RevertToVMSnapshotCommand(String vmName, String vmUuid, VMSnapshotTO snapshot, List volumeTOs, String guestOSType) { super(vmName, snapshot, volumeTOs, guestOSType); + this.vmUuid = vmUuid; } - public RevertToVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List volumeTOs, String guestOSType, boolean reloadVm) { - this(vmName, snapshot, volumeTOs, guestOSType); + public RevertToVMSnapshotCommand(String vmName, String vmUuid, VMSnapshotTO snapshot, List volumeTOs, String guestOSType, boolean reloadVm) { + this(vmName, vmUuid, snapshot, volumeTOs, guestOSType); setReloadVm(reloadVm); } private boolean reloadVm = false; + private String vmUuid; public boolean isReloadVm() { return reloadVm; @@ -43,4 +45,8 @@ public boolean isReloadVm() { public void setReloadVm(boolean reloadVm) { this.reloadVm = reloadVm; } + + public String getVmUuid() { + return vmUuid; + } } diff --git a/core/src/com/cloud/agent/api/storage/MigrateVolumeAnswer.java b/core/src/com/cloud/agent/api/storage/MigrateVolumeAnswer.java index 3db3e863c5..43ce4a6ac8 100644 --- a/core/src/com/cloud/agent/api/storage/MigrateVolumeAnswer.java +++ b/core/src/com/cloud/agent/api/storage/MigrateVolumeAnswer.java @@ -24,6 +24,7 @@ public class MigrateVolumeAnswer extends Answer { private String volumePath; + private String volumeChain; public MigrateVolumeAnswer(Command command, boolean success, String details, String volumePath) { super(command, success, details); @@ -38,4 +39,12 @@ public MigrateVolumeAnswer(Command command) { public String getVolumePath() { return volumePath; } + + public String getVolumeChainInfo() { + return volumeChain; + } + + public void setVolumeChainInfo(String volumeChain) { + this.volumeChain = volumeChain; + } } \ No newline at end of file diff --git a/core/src/com/cloud/storage/template/S3TemplateDownloader.java b/core/src/com/cloud/storage/template/S3TemplateDownloader.java index ec44d8d70e..ac47decefc 100644 --- a/core/src/com/cloud/storage/template/S3TemplateDownloader.java +++ b/core/src/com/cloud/storage/template/S3TemplateDownloader.java @@ -27,6 +27,8 @@ import java.io.InputStream; import java.util.Date; +import org.apache.cloudstack.managed.context.ManagedContextRunnable; +import org.apache.cloudstack.storage.command.DownloadCommand.ResourceType; import org.apache.commons.httpclient.ChunkedInputStream; import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.Header; @@ -50,10 +52,6 @@ import com.amazonaws.services.s3.model.ProgressListener; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.model.StorageClass; - -import org.apache.cloudstack.managed.context.ManagedContextRunnable; -import org.apache.cloudstack.storage.command.DownloadCommand.ResourceType; - import com.cloud.agent.api.storage.Proxy; import com.cloud.agent.api.to.S3TO; import com.cloud.utils.Pair; @@ -61,46 +59,48 @@ import com.cloud.utils.UriUtils; /** - * Download a template file using HTTP - * + * Download a template file using HTTP(S) */ public class S3TemplateDownloader extends ManagedContextRunnable implements TemplateDownloader { - public static final Logger s_logger = Logger.getLogger(S3TemplateDownloader.class.getName()); + private static final Logger s_logger = Logger.getLogger(S3TemplateDownloader.class.getName()); private static final MultiThreadedHttpConnectionManager s_httpClientManager = new MultiThreadedHttpConnectionManager(); private String downloadUrl; private String installPath; private String s3Key; private String fileName; - public TemplateDownloader.Status status = TemplateDownloader.Status.NOT_STARTED; - public String errorString = " "; - private long remoteSize = 0; - public long downloadTime = 0; - public long totalBytes; + private String fileExtension; + private String errorString = " "; + + private TemplateDownloader.Status status = TemplateDownloader.Status.NOT_STARTED; + private ResourceType resourceType = ResourceType.TEMPLATE; private final HttpClient client; + private final HttpMethodRetryHandler myretryhandler; private GetMethod request; - private boolean resume = false; private DownloadCompleteCallback completionCallback; - private S3TO s3; - private boolean inited = true; + private S3TO s3to; + private long remoteSize = 0; + private long downloadTime = 0; + private long totalBytes; private long maxTemplateSizeInByte; - private ResourceType resourceType = ResourceType.TEMPLATE; - private final HttpMethodRetryHandler myretryhandler; - public S3TemplateDownloader(S3TO storageLayer, String downloadUrl, String installPath, DownloadCompleteCallback callback, long maxTemplateSizeInBytes, String user, - String password, Proxy proxy, ResourceType resourceType) { - s3 = storageLayer; + private boolean resume = false; + private boolean inited = true; + + public S3TemplateDownloader(S3TO s3to, String downloadUrl, String installPath, DownloadCompleteCallback callback, + long maxTemplateSizeInBytes, String user, String password, Proxy proxy, ResourceType resourceType) { + this.s3to = s3to; this.downloadUrl = downloadUrl; this.installPath = installPath; - status = TemplateDownloader.Status.NOT_STARTED; + this.status = TemplateDownloader.Status.NOT_STARTED; this.resourceType = resourceType; - maxTemplateSizeInByte = maxTemplateSizeInBytes; + this.maxTemplateSizeInByte = maxTemplateSizeInBytes; - totalBytes = 0; - client = new HttpClient(s_httpClientManager); + this.totalBytes = 0; + this.client = new HttpClient(s_httpClientManager); - myretryhandler = new HttpMethodRetryHandler() { + this.myretryhandler = new HttpMethodRetryHandler() { @Override public boolean retryMethod(final HttpMethod method, final IOException exception, int executionCount) { if (executionCount >= 2) { @@ -128,6 +128,7 @@ public boolean retryMethod(final HttpMethod method, final IOException exception, Pair hostAndPort = UriUtils.validateUrl(downloadUrl); fileName = StringUtils.substringAfterLast(downloadUrl, "/"); + fileExtension = StringUtils.substringAfterLast(fileName, "."); if (proxy != null) { client.getHostConfiguration().setProxy(proxy.getHost(), proxy.getPort()); @@ -139,8 +140,10 @@ public boolean retryMethod(final HttpMethod method, final IOException exception, if ((user != null) && (password != null)) { client.getParams().setAuthenticationPreemptive(true); Credentials defaultcreds = new UsernamePasswordCredentials(user, password); - client.getState().setCredentials(new AuthScope(hostAndPort.first(), hostAndPort.second(), AuthScope.ANY_REALM), defaultcreds); - s_logger.info("Added username=" + user + ", password=" + password + "for host " + hostAndPort.first() + ":" + hostAndPort.second()); + client.getState().setCredentials( + new AuthScope(hostAndPort.first(), hostAndPort.second(), AuthScope.ANY_REALM), defaultcreds); + s_logger.info("Added username=" + user + ", password=" + password + "for host " + hostAndPort.first() + + ":" + hostAndPort.second()); } else { s_logger.info("No credentials configured for host=" + hostAndPort.first() + ":" + hostAndPort.second()); } @@ -160,11 +163,11 @@ public boolean retryMethod(final HttpMethod method, final IOException exception, @Override public long download(boolean resume, DownloadCompleteCallback callback) { switch (status) { - case ABORTED: - case UNRECOVERABLE_ERROR: - case DOWNLOAD_FINISHED: - return 0; - default: + case ABORTED: + case UNRECOVERABLE_ERROR: + case DOWNLOAD_FINISHED: + return 0; + default: } @@ -215,10 +218,11 @@ public long download(boolean resume, DownloadCompleteCallback callback) { contentType = contentTypeHeader.getValue(); } - InputStream in = !chunked ? new BufferedInputStream(request.getResponseBodyAsStream()) : new ChunkedInputStream(request.getResponseBodyAsStream()); + InputStream in = !chunked ? new BufferedInputStream(request.getResponseBodyAsStream()) + : new ChunkedInputStream(request.getResponseBodyAsStream()); - s_logger.info("Starting download from " + getDownloadUrl() + " to s3 bucket " + s3.getBucketName() + " remoteSize=" + remoteSize + " , max size=" + - maxTemplateSizeInByte); + s_logger.info("Starting download from " + getDownloadUrl() + " to s3 bucket " + s3to.getBucketName() + + " remoteSize=" + remoteSize + " , max size=" + maxTemplateSizeInByte); Date start = new Date(); // compute s3 key @@ -230,9 +234,9 @@ public long download(boolean resume, DownloadCompleteCallback callback) { if (contentType != null) { metadata.setContentType(contentType); } - PutObjectRequest putObjectRequest = new PutObjectRequest(s3.getBucketName(), s3Key, in, metadata); + PutObjectRequest putObjectRequest = new PutObjectRequest(s3to.getBucketName(), s3Key, in, metadata); // check if RRS is enabled - if (s3.getEnableRRS()) { + if (s3to.getEnableRRS()) { putObjectRequest = putObjectRequest.withStorageClass(StorageClass.ReducedRedundancy); } // register progress listenser @@ -257,14 +261,15 @@ public void progressChanged(ProgressEvent progressEvent) { }); - if (!s3.getSingleUpload(remoteSize)) { + if (!s3to.getSingleUpload(remoteSize)) { // use TransferManager to do multipart upload - S3Utils.mputObject(s3, putObjectRequest); + S3Utils.mputObject(s3to, putObjectRequest); } else { // single part upload, with 5GB limit in Amazon - S3Utils.putObject(s3, putObjectRequest); - while (status != TemplateDownloader.Status.DOWNLOAD_FINISHED && status != TemplateDownloader.Status.UNRECOVERABLE_ERROR && - status != TemplateDownloader.Status.ABORTED) { + S3Utils.putObject(s3to, putObjectRequest); + while (status != TemplateDownloader.Status.DOWNLOAD_FINISHED + && status != TemplateDownloader.Status.UNRECOVERABLE_ERROR + && status != TemplateDownloader.Status.ABORTED) { // wait for completion } } @@ -324,32 +329,59 @@ public long getDownloadedBytes() { return totalBytes; } + /** + * Returns an InputStream only when the status is DOWNLOAD_FINISHED. + * + * The caller of this method must close the InputStream to prevent resource leaks! + * + * @return S3ObjectInputStream of the object. + */ + public InputStream getS3ObjectInputStream() { + // Check if the download is finished + if (status != Status.DOWNLOAD_FINISHED) { + return null; + } + + return S3Utils.getObjectStream(s3to, s3to.getBucketName(), s3Key); + } + + public void cleanupAfterError() { + if (status != Status.UNRECOVERABLE_ERROR) { + s_logger.debug("S3Template downloader does not have state UNRECOVERABLE_ERROR, no cleanup neccesarry."); + return; + } + + s_logger.info("Cleanup after UNRECOVERABLE_ERROR, trying to remove object: " + s3Key); + + S3Utils.deleteObject(s3to, s3to.getBucketName(), s3Key); + } + @Override @SuppressWarnings("fallthrough") public boolean stopDownload() { switch (getStatus()) { - case IN_PROGRESS: - if (request != null) { - request.abort(); - } - status = TemplateDownloader.Status.ABORTED; - return true; - case UNKNOWN: - case NOT_STARTED: - case RECOVERABLE_ERROR: - case UNRECOVERABLE_ERROR: - case ABORTED: - status = TemplateDownloader.Status.ABORTED; - case DOWNLOAD_FINISHED: - try { - S3Utils.deleteObject(s3, s3.getBucketName(), s3Key); - } catch (Exception ex) { - // ignore delete exception if it is not there - } - return true; + case IN_PROGRESS: + if (request != null) { + request.abort(); + } + status = TemplateDownloader.Status.ABORTED; + return true; + case UNKNOWN: + case NOT_STARTED: + case RECOVERABLE_ERROR: + case UNRECOVERABLE_ERROR: + case ABORTED: + status = TemplateDownloader.Status.ABORTED; + case DOWNLOAD_FINISHED: + try { + S3Utils.deleteObject(s3to, s3to.getBucketName(), s3Key); + } catch (Exception ex) { + // ignore delete exception if it is not there + } + return true; - default: - return true; + default: + return true; } } @@ -359,7 +391,7 @@ public int getDownloadPercent() { return 0; } - return (int)(100.0 * totalBytes / remoteSize); + return (int) (100.0 * totalBytes / remoteSize); } @Override @@ -417,4 +449,11 @@ public ResourceType getResourceType() { return resourceType; } -} + public long getTotalBytes() { + return totalBytes; + } + + public String getFileExtension() { + return fileExtension; + } +} \ No newline at end of file diff --git a/core/src/org/apache/cloudstack/storage/command/AttachAnswer.java b/core/src/org/apache/cloudstack/storage/command/AttachAnswer.java index 80736891cb..16452afe63 100644 --- a/core/src/org/apache/cloudstack/storage/command/AttachAnswer.java +++ b/core/src/org/apache/cloudstack/storage/command/AttachAnswer.java @@ -22,8 +22,11 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.to.DiskTO; +import java.util.Map; + public class AttachAnswer extends Answer { private DiskTO disk; + private Map diskDetails; public AttachAnswer() { super(null); @@ -34,6 +37,12 @@ public AttachAnswer(DiskTO disk) { setDisk(disk); } + public AttachAnswer(DiskTO disk, Map diskDetails) { + super(null); + setDisk(disk); + setDiskDetails(diskDetails); + } + public AttachAnswer(String errMsg) { super(null, false, errMsg); } @@ -45,4 +54,12 @@ public DiskTO getDisk() { public void setDisk(DiskTO disk) { this.disk = disk; } + + public Map getDiskDetails() { + return diskDetails; + } + + public void setDiskDetails(Map diskDetails) { + this.diskDetails = diskDetails; + } } diff --git a/core/src/org/apache/cloudstack/storage/command/AttachCommand.java b/core/src/org/apache/cloudstack/storage/command/AttachCommand.java index 795deb2c06..0109d275af 100644 --- a/core/src/org/apache/cloudstack/storage/command/AttachCommand.java +++ b/core/src/org/apache/cloudstack/storage/command/AttachCommand.java @@ -19,6 +19,8 @@ package org.apache.cloudstack.storage.command; +import java.util.Map; + import com.cloud.agent.api.Command; import com.cloud.agent.api.to.DiskTO; @@ -26,12 +28,26 @@ public final class AttachCommand extends Command implements StorageSubSystemComm private DiskTO disk; private String vmName; private boolean inSeq = false; + private Map controllerInfo; public AttachCommand(DiskTO disk, String vmName) { super(); this.disk = disk; this.vmName = vmName; } + public AttachCommand(DiskTO disk, String vmName, Map controllerInfo) { + super(); + this.disk = disk; + this.vmName = vmName; + this.controllerInfo = controllerInfo; + } + + public Map getControllerInfo() { + return controllerInfo; + } + public void setControllerInfo(Map controllerInfo) { + this.controllerInfo = controllerInfo; + } @Override public boolean executeInSequence() { diff --git a/debian/changelog b/debian/changelog index 1f0980da88..898fcabcc9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +cloudstack (4.5.3-snapshot) unstable; urgency=low + + * Update the version to 4.5.3 snapshot + + -- the Apache CloudStack project Mon, 14 Sep 2015 10:01:38 +0530 + +cloudstack (4.5.2) unstable; urgency=low + + * Update the version to 4.5.2 + + -- the Apache CloudStack project Wed, 19 Aug 2015 14:42:53 +0530 + cloudstack (4.5.1) unstable; urgency=low * Update the version to 4.5.1 diff --git a/debian/cloudstack-agent.install b/debian/cloudstack-agent.install index 94dd30d15d..82fce9f78c 100644 --- a/debian/cloudstack-agent.install +++ b/debian/cloudstack-agent.install @@ -19,6 +19,7 @@ /etc/cloudstack/agent/environment.properties /etc/cloudstack/agent/log4j-cloud.xml /etc/profile.d/cloudstack-agent-profile.sh +/etc/logrotate.d/cloudstack-agent /etc/init.d/cloudstack-agent /usr/bin/cloudstack-setup-agent /usr/bin/cloudstack-ssh diff --git a/debian/rules b/debian/rules index 3801ae2421..f66f0f65a5 100755 --- a/debian/rules +++ b/debian/rules @@ -11,7 +11,7 @@ # build-arch and build-indep targets by Bill Allombert 2001 DEBVERS := $(shell dpkg-parsechangelog | sed -n -e 's/^Version: //p') -VERSION := $(shell echo '$(DEBVERS)' | sed -e 's/^[[:digit:]]*://' -e 's/[~-].*//') +VERSION := $(shell cat pom.xml | sed '22!d' | cut -d'>' -f2 | cut -d'<' -f1) MVNADD := $(shell if echo '$(DEBVERS)' | grep -q snapshot; then echo ; fi ) PACKAGE = $(shell dh_listpackages|head -n 1|cut -d '-' -f 1) SYSCONFDIR = "/etc" @@ -74,6 +74,7 @@ install: install -D agent/target/transformed/cloud-setup-agent $(DESTDIR)/usr/bin/cloudstack-setup-agent install -D agent/target/transformed/cloud-ssh $(DESTDIR)/usr/bin/cloudstack-ssh install -D agent/target/transformed/cloudstack-agent-profile.sh $(DESTDIR)/$(SYSCONFDIR)/profile.d/cloudstack-agent-profile.sh + install -D agent/target/transformed/cloudstack-agent.logrotate $(DESTDIR)/$(SYSCONFDIR)/logrotate.d/cloudstack-agent install -D agent/target/transformed/cloudstack-agent-upgrade $(DESTDIR)/usr/bin/cloudstack-agent-upgrade install -D agent/target/transformed/libvirtqemuhook $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/ install -D agent/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/agent diff --git a/developer/developer-prefill.sql b/developer/developer-prefill.sql index 27b36e7858..3097203b41 100644 --- a/developer/developer-prefill.sql +++ b/developer/developer-prefill.sql @@ -83,9 +83,4 @@ INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) VALUES ('Advanced', 'DEFAULT', 'management-server', 'developer', 'true'); --- Enable SAML plugin for developers by default -INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) - VALUES ('Advanced', 'DEFAULT', 'management-server', - 'saml2.enabled', 'true'); - commit; diff --git a/developer/developer-saml.sql b/developer/developer-saml.sql new file mode 100644 index 0000000000..18afb28878 --- /dev/null +++ b/developer/developer-saml.sql @@ -0,0 +1,63 @@ +-- 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. + +-- SAML keystore for testing, allows testing on ssocirlce and other public IdPs +-- with pre-seeded SP metadata +USE cloud; + +-- Enable SAML plugin for developers by default +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'SAML2-PLUGIN', + 'saml2.enabled', 'true') + ON DUPLICATE KEY UPDATE value=VALUES(value); + +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'SAML2-PLUGIN', + 'saml2.default.idpid', 'https://idp.bhaisaab.org/idp/shibboleth') + ON DUPLICATE KEY UPDATE value=VALUES(value); + +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'SAML2-PLUGIN', + 'saml2.idp.metadata.url', 'http://idp.bhaisaab.org/idp/shibboleth') + ON DUPLICATE KEY UPDATE value=VALUES(value); + +-- Enable LDAP source +INSERT INTO `cloud`.`ldap_configuration` (hostname, port) + VALUES ('idp.bhaisaab.org', 389); + +-- Fix ldap configs +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'management-server', + 'ldap.basedn', 'ou=people,dc=idp,dc=bhaisaab,dc=org') + ON DUPLICATE KEY UPDATE value=VALUES(value); + +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'management-server', + 'ldap.bind.principal', 'cn=admin,dc=idp,dc=bhaisaab,dc=org') + ON DUPLICATE KEY UPDATE value=VALUES(value); + +INSERT INTO `cloud`.`configuration` (category, instance, component, name, value) + VALUES ('Advanced', 'DEFAULT', 'management-server', + 'ldap.bind.password', 'password') + ON DUPLICATE KEY UPDATE value=VALUES(value); + +-- Add default set of certificates for testing +LOCK TABLES `keystore` WRITE; +/*!40000 ALTER TABLE `keystore` DISABLE KEYS */; +INSERT INTO `keystore` VALUES (1,'SAMLSP_KEYPAIR','MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDQDirtAajTrScXCUgXrsOBgQ++y+IUcyzXwUGEYBlM9kBCmcdlbt5zuYQ8pOvoOQz6CAVqSjYNbnbg1ph37Zfv/tzGUg2V5cpB5BfEyt2KY0mBFNbwa0LKnCAYlBlarm4XZF+oZ0maH6cdboHdHiEqNRscylnXYA2zHKU3YoEfOR+9acl4z54PAyuPjr9SWUPTAyYf326i0q+h3J4nT6FwBFK+yKSC1PeVG/viYQ0otU1UUDkQ3pX81qfJfN/6Ih7W4v73LgUlZsTBMzlu/kJzMuP5Wc5IkU6Mt+8EHMZeLnN0ZErkMk0DCQE14hG8W7S8/inUJpwJlmb5E634Zq8u0I1zVUmSmAGqvvqKJBGnqY5X/j2bsA8B2qFsrcxasIlkKaWLvY+AvXD5X0OHwIZzRbuuCtguSz671C7Cwok8R3N+e9ATDHmG9gC10NJaB6dUBA9p2UdA82TR73x6nGe8pLJnGyecEQfxz1+ptPVAENj1Rl3Wrwu/dbPd/X6inlYpuwlsnWi3LYrkguT/9W3Z2uuq5PTVT04zcyev+50gVnDPzTrNCZfHpmMNQIqZGFmFKz4m+VUZmzZOdg1Vx51t9+t7iHGHqFk6/vnqqWiyEuTEFAaC9krm1VNzGvno5LyNm5Dk9JGAHFfjgNV++viGTpSPLeEeMnlvPuQJy5OJMwIDAQABAoICABME6Imn+C35izRA5fU8RaUGDlFrw+wIp1XF1d5rBoURkchE1ISCQRWlJOCCVwpwhK4qo4wW4qARtA5Tr7Zu4s/OpZH/mDxWuEmTt1SHEv9+mg6RwCBUPdPVt91nVHYEsg2zYEc9we2z7Qv0uSxkf7WjCypzmQjmP/paqQPKHnGjQDKJhCBmIlXO/WFvNDAr9tZIWGjbfPqndeS/DTocvm5GBuZn4xoOq99Woo0MQC6zfDEz8DOJlX56hPYXU0ZDbjxInfQsoc3MejoLG7n4xkxPn6WAvynFFsAoZFIk60Faz7UZIfuAWafoX9L0KpjkbT5Fob9CFEuQEzO7x9CIWoUr2PYn8HbThHDUOFAuVVpOLqleLPCrxkX/P01WTrLFuT6vSJKW2kxVwiHvZH6pNT01X/nlHDD6Jd9oWse2jIDBVor6fMnNDtgKl9azKgyakxoOGB7BMcb5u0Im8vFBCCRIyN3lrYjjR1F3H1tvY6Q0fEGLkilO334IyjC63he6lZ6NqslE/3QWEyyIiCL52rMzadN2SwVNawCa8YIR6+TpBjKyqY17LCP57v3UyM6J/kcUqXxDRcg1XnsjiWU+u0j9ZdlBgcbNuQeb1jD2QgICcyr/tWyJ2asyVfvARcD/xt5a9AnGjO0LnwMfw/DdBz1XCxz5uf3gOM69+nXk2gWhAoIBAQDr7NhlmVrASpOJHXXvqkpC2P4+hx7bmwKUZPbqm32pqCBypn6Qd2h4wdFzcP41wN6kpYqmmsPBoezctSgromfHeVjTyjhGku8b1HqtyRoX5sqIIPtv5pKKGS/tVWfyqQ8BspcdhZaR7+ZiRsLRwOXCscRq82+vbyq5Jd1bjsDGeLtcYyASv3II1xTBzSgNlvB+WiFXIlGWT9IPXwhv6IxZn7ME/y992d7bhgPxCcdTfKQNPBpcKerjcNxeDMto8vVijBDqujVpTf+3YvOOzWrcLn5UORFzpVho7oml5+5qnkFI/RZoiagUixFeQMv5+72qKJrxJu3VfI3mxlzZm5YjAoIBAQDhwjvzNWCQ2y7wwwnr88snVxAhd7kByvbKmnFVzHFTy2lheyWkiAqXj9juqsCtbkOK8a1ogmFAHz3i0/n+QhcJ20gudryniMt+u+wKxpmEKyqHKX3d4biPOvkKx7tdfwnlRKpSWXuynlDNVaQnJKUqBqDygLaE2s0LK3Fwdl+HN5ZPjRcuHkNpXA8t5lbm3tttMIs3JMneKAq77rodgRg+JcYhUNiybek3cZQcEiIGoh8UU6AhgQIOyMy5lkdG7XwZ2FEMQlqZo+T4HnkdTMU1CbTav1/ZzwDQP4/BJvKXhdRBuYHHAwhV6NIEMk5fzXcOoYmhfOMjvftrSxqUOImxAoIBAQDrhaEuJB8d0hVhD6EZ5kWGYHvHzjp2/1Ne80AwS5Pyl5309tNow1vvGYZQGaAd53Icqgo1clE0b8M3Pj5g+RtjXnfXzovJoIvFm6Pw887xx3uu1EZOmr710FkxNE62SCFsD26ekSsUe4rh10RMA6cbaz3riySW3YKoHO3Tpjo6qHJas7ZkIOzleFoHcximIGXrrWyVQPRz+zF4GOYiWeQq4KvltB8kIylAu5QZwCpV5Rsc/0BNe6c68QN9fIZgOhPQEoYc3lHN04kR+V2t1NH2BxAkYmhSq+ELt/6AOn6fv2brR4VkTPAXuhFXp5Y59B+OzESJs9RAiLxcgvBUaOdDAoIBAQCzlPJjUL5z/Cam1j76NoAP1y25saa1SmJuX9Rvz6UGZvR42qDi9GSYk5CYqbODQgbwa7bpP21kuHVeDgj6vE/fQ1NzwnfnPOXC9nGZUMmlXUEDK3o4GenZ5atda+wbP4b7nVdvEkdXmp/j9pARoxDPEV7OCJ0nqXUZwYEHWOI8iXdD6JPb168ADH72oBfYpsYdYVQclWMPGQMQ46Gg/qPuK9YjglAd/1hZBjwu6C2w4R2f6bWjcR/V6t0Pc/9W6GqjlHNEMTQoqzrkNDlbmUn2GraGm1z/wa5/+U+88eJfrdFeRtZ5HGxxCjalp+64PpTKSq1UjCeSsvlgK+oEpcTBAoIBAQCDDcS69BnjFWNa68FBrA2Uw6acQ6lnpXALohXCRL5qOTMe/FFDEBo0ADGrGpSo+cPaE2buNsYO79CafqTxPoZ38OAtTVmX3uL3z9+2ne2dc486gmAnKdJA8w9uawqMEkVpTA9f4WiBJJVzPwAv19AJCPKfUaB8IdNPV+HL8CdK+Dm+lZBADlB9RyvkJRLVJUAuK8/h9kbS3myKI6FIBeFFJpXRONkBSEkANknMqelvdf0GQsHliRslqIK2QVTIOmkJKecG35OhZ5WtU54oSxljlvmtvEKkEJAhEUyfFQRwQTTsDxkFFsfIVr9gv8K1RVEb4D00GUY7GSyAgPKPNsib','MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0A4q7QGo060nFwlIF67DgYEPvsviFHMs18FBhGAZTPZAQpnHZW7ec7mEPKTr6DkM+ggFako2DW524NaYd+2X7/7cxlINleXKQeQXxMrdimNJgRTW8GtCypwgGJQZWq5uF2RfqGdJmh+nHW6B3R4hKjUbHMpZ12ANsxylN2KBHzkfvWnJeM+eDwMrj46/UllD0wMmH99uotKvodyeJ0+hcARSvsikgtT3lRv74mENKLVNVFA5EN6V/NanyXzf+iIe1uL+9y4FJWbEwTM5bv5CczLj+VnOSJFOjLfvBBzGXi5zdGRK5DJNAwkBNeIRvFu0vP4p1CacCZZm+ROt+GavLtCNc1VJkpgBqr76iiQRp6mOV/49m7APAdqhbK3MWrCJZCmli72PgL1w+V9Dh8CGc0W7rgrYLks+u9QuwsKJPEdzfnvQEwx5hvYAtdDSWgenVAQPadlHQPNk0e98epxnvKSyZxsnnBEH8c9fqbT1QBDY9UZd1q8Lv3Wz3f1+op5WKbsJbJ1oty2K5ILk//Vt2drrquT01U9OM3Mnr/udIFZwz806zQmXx6ZjDUCKmRhZhSs+JvlVGZs2TnYNVcedbffre4hxh6hZOv756qloshLkxBQGgvZK5tVTcxr56OS8jZuQ5PSRgBxX44DVfvr4hk6Ujy3hHjJ5bz7kCcuTiTMCAwEAAQ==','samlsp-keypair',NULL),(2,'SAMLSP_X509CERT','rO0ABXNyAC1qYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGUkQ2VydGlmaWNhdGVSZXCJJ2qdya48DAIAAlsABGRhdGF0AAJbQkwABHR5cGV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHVyAAJbQqzzF/gGCFTgAgAAeHAAAASzMIIErzCCApcCBgFNmkdlAzANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExBBcGFjaGVDbG91ZFN0YWNrMB4XDTE1MDUyNzExMjc1OVoXDTE4MDUyODExMjc1OVowGzEZMBcGA1UEAxMQQXBhY2hlQ2xvdWRTdGFjazCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANAOKu0BqNOtJxcJSBeuw4GBD77L4hRzLNfBQYRgGUz2QEKZx2Vu3nO5hDyk6+g5DPoIBWpKNg1uduDWmHftl+/+3MZSDZXlykHkF8TK3YpjSYEU1vBrQsqcIBiUGVqubhdkX6hnSZofpx1ugd0eISo1GxzKWddgDbMcpTdigR85H71pyXjPng8DK4+Ov1JZQ9MDJh/fbqLSr6HcnidPoXAEUr7IpILU95Ub++JhDSi1TVRQORDelfzWp8l83/oiHtbi/vcuBSVmxMEzOW7+QnMy4/lZzkiRToy37wQcxl4uc3RkSuQyTQMJATXiEbxbtLz+KdQmnAmWZvkTrfhmry7QjXNVSZKYAaq++ookEaepjlf+PZuwDwHaoWytzFqwiWQppYu9j4C9cPlfQ4fAhnNFu64K2C5LPrvULsLCiTxHc3570BMMeYb2ALXQ0loHp1QED2nZR0DzZNHvfHqcZ7yksmcbJ5wRB/HPX6m09UAQ2PVGXdavC791s939fqKeVim7CWydaLctiuSC5P/1bdna66rk9NVPTjNzJ6/7nSBWcM/NOs0Jl8emYw1AipkYWYUrPib5VRmbNk52DVXHnW3363uIcYeoWTr++eqpaLIS5MQUBoL2SubVU3Ma+ejkvI2bkOT0kYAcV+OA1X76+IZOlI8t4R4yeW8+5AnLk4kzAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAHZWSGpypDmQLQWr2FCVQUnulbPuMMJ0sCH0rNLGLe8qNbZ0YeAuWFsg7+0kVGZ4OuDgioIhD0h3Q3huZtF/WF81eyZqPyVfkXG8egjK58AzMDPHZECeoSVGUCZuq3wjmbnT2sLLDvr8RrzMbbCEvkrYHWivQ18Lbd3eWYYnDbXZRy9GuSWrA9cMqXVYjSTxam9Kel33BIF6CAlMQN5o11oiAv+ciNoxHqGh+8xX3kFKP+x+SRt40NOEs537lEpj/6KdLvd/bP6J4K94jAX3lsdg6zDaBiQWl7P3t50AKtP384Qsb/33uXcbTyw/TkzvPcbmsgTbEUTZIOv44CxMstFrUCyT7ptrzLvDk7Iy2cMgWghULgDvKT3esPE9pleyHG8bkjGt9ypDF/Lmp7j/kILYbF7eq1wIbHOSam4p8WyddVsW4nesu6fqLiCGXum9paChIfvL3To/VHFFKduhJd0Y7LMgWO7pXxWh7XfgRmzQaEN1eJmj5315HEYTS2wXWjptwYDrhiobKuCbpADfOQks8xNKJFLMnXp+IvAqz+ZjkNOz60MLuQ3hvKLTo6nQcTYTfZZxo3Aap30/hA2GtxxSXK/xpBDm58jcVoudgCdxML/OqERBfcADBLvIw5h9+DlXjPUg25IefU0oA336YtnzftJ6cfQfatrc0tBqNEeXdAAFWC41MDk=','','samlsp-x509cert',NULL); +/*!40000 ALTER TABLE `keystore` ENABLE KEYS */; +UNLOCK TABLES; diff --git a/developer/pom.xml b/developer/pom.xml index e39820b01a..5294640869 100644 --- a/developer/pom.xml +++ b/developer/pom.xml @@ -18,7 +18,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT @@ -172,6 +172,64 @@
+ + + deploydb-saml + + + deploydb-saml + + + + + + org.codehaus.mojo + exec-maven-plugin + + + mysql + mysql-connector-java + ${cs.mysql.version} + + + 1.2.1 + + + process-resources + create-schema-simulator + + java + + + + + com.cloud.upgrade.DatabaseCreator + true + + + ${basedir}/../utils/conf/db.properties + ${basedir}/../utils/conf/db.properties.override + + ${basedir}/developer-saml.sql + + com.cloud.upgrade.DatabaseUpgradeChecker + --rootpassword=${db.root.password} + + + + catalina.home + ${basedir}/../utils + + + paths.script + ${basedir}/target/db + + + + + + + deploydb-simulator diff --git a/engine/api/pom.xml b/engine/api/pom.xml index effee4e00d..dcf4a16451 100644 --- a/engine/api/pom.xml +++ b/engine/api/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/components-api/pom.xml b/engine/components-api/pom.xml index 6a47a6861d..df15363f63 100644 --- a/engine/components-api/pom.xml +++ b/engine/components-api/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/network/pom.xml b/engine/network/pom.xml index 43cc15659e..f91738b54b 100644 --- a/engine/network/pom.xml +++ b/engine/network/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/orchestration/pom.xml b/engine/orchestration/pom.xml index aa1e137634..23c0d1c587 100755 --- a/engine/orchestration/pom.xml +++ b/engine/orchestration/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java index ba82938fcd..f65d83bab5 100755 --- a/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java +++ b/engine/orchestration/src/com/cloud/agent/manager/ClusteredAgentManagerImpl.java @@ -501,7 +501,7 @@ public SocketChannel connectToPeer(String peerName, SocketChannel prevCh) { SocketChannel ch1 = null; try { ch1 = SocketChannel.open(new InetSocketAddress(addr, Port.value())); - ch1.configureBlocking(true); // make sure we are working at blocking mode + ch1.configureBlocking(false); ch1.socket().setKeepAlive(true); ch1.socket().setSoTimeout(60 * 1000); try { @@ -509,8 +509,11 @@ public SocketChannel connectToPeer(String peerName, SocketChannel prevCh) { sslEngine = sslContext.createSSLEngine(ip, Port.value()); sslEngine.setUseClientMode(true); sslEngine.setEnabledProtocols(SSLUtils.getSupportedProtocols(sslEngine.getEnabledProtocols())); - - Link.doHandshake(ch1, sslEngine, true); + sslEngine.beginHandshake(); + if (!Link.doHandshake(ch1, sslEngine, true)) { + ch1.close(); + throw new IOException("SSL handshake failed!"); + } s_logger.info("SSL: Handshake done"); } catch (Exception e) { ch1.close(); diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java index d3dcdec314..3b9d6f596d 100644 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java @@ -24,13 +24,13 @@ import javax.inject.Inject; import org.apache.log4j.Logger; - import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.framework.messagebus.PublishScope; import com.cloud.agent.api.HostVmStateReportEntry; import com.cloud.utils.DateUtil; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.dao.VMInstanceDao; public class VirtualMachinePowerStateSyncImpl implements VirtualMachinePowerStateSync { @@ -111,7 +111,19 @@ private void processReport(long hostId, Map tra for (VMInstanceVO instance : vmsThatAreMissingReport) { - Date vmStateUpdateTime = instance.getUpdateTime(); + // Make sure powerState is up to date for missing VMs + try { + if (!_instanceDao.isPowerStateUpToDate(instance.getId())) { + s_logger.warn("Detected missing VM but power state is outdated, wait for another process report run for VM id: " + instance.getId()); + _instanceDao.resetVmPowerStateTracking(instance.getId()); + continue; + } + } catch (CloudRuntimeException e) { + s_logger.warn("Checked for missing powerstate of a none existing vm", e); + continue; + } + + Date vmStateUpdateTime = instance.getPowerStateUpdateTime(); if (vmStateUpdateTime == null) { s_logger.warn("VM state was updated but update time is null?! vm id: " + instance.getId()); vmStateUpdateTime = currentTime; diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index 093f113821..f74a688c96 100755 --- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -1944,7 +1944,7 @@ public Network createGuestNetwork(long networkOfferingId, final String name, fin } else { // don't allow to creating shared network with given Vlan ID, if there already exists a isolated network or // shared network with same Vlan ID in the zone - if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0 || _networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Shared) > 0) { + if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0 ) { throw new InvalidParameterValueException("There is a isolated/shared network with vlan id: " + vlanId + " already exists " + "in zone " + zoneId); } } diff --git a/engine/pom.xml b/engine/pom.xml index 727f003cef..d0d4662f4a 100644 --- a/engine/pom.xml +++ b/engine/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/schema/pom.xml b/engine/schema/pom.xml index bc405f0220..42703edc33 100644 --- a/engine/schema/pom.xml +++ b/engine/schema/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDao.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDao.java index ab818538d2..586fcd0f79 100644 --- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDao.java +++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDao.java @@ -16,11 +16,13 @@ // under the License. package com.cloud.service.dao; -import java.util.List; -import java.util.Map; - import com.cloud.service.ServiceOfferingVO; +import com.cloud.storage.Storage; import com.cloud.utils.db.GenericDao; +import com.cloud.vm.VirtualMachine; + +import java.util.List; +import java.util.Map; /* * Data Access Object for service_offering table @@ -28,6 +30,10 @@ public interface ServiceOfferingDao extends GenericDao { ServiceOfferingVO findByName(String name); + List createSystemServiceOfferings(String name, String uniqueName, int cpuCount, int ramSize, int cpuSpeed, + Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText, Storage.ProvisioningType provisioningType, + boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, boolean defaultUse); + ServiceOfferingVO persistSystemServiceOffering(ServiceOfferingVO vo); List findPublicServiceOfferings(); @@ -49,4 +55,6 @@ public interface ServiceOfferingDao extends GenericDao boolean isDynamic(long serviceOfferingId); ServiceOfferingVO getcomputeOffering(ServiceOfferingVO serviceOffering, Map customParameters); + + ServiceOfferingVO findDefaultSystemOffering(String offeringName, Boolean useLocalStorage); } diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java index a3ff45ca3a..280a4ba7c7 100644 --- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java +++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java @@ -25,6 +25,8 @@ import javax.inject.Inject; import javax.persistence.EntityExistsException; +import com.cloud.storage.Storage; +import com.cloud.vm.VirtualMachine; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -110,6 +112,13 @@ public ServiceOfferingVO persistSystemServiceOffering(ServiceOfferingVO offering vo.setSpeed(500); update(vo.getId(), vo); } + if (!vo.getUniqueName().endsWith("-Local")) { + if (vo.getUseLocalStorage()) { + vo.setUniqueName(vo.getUniqueName() + "-Local"); + vo.setName(vo.getName() + " - Local Storage"); + update(vo.getId(), vo); + } + } return vo; } try { @@ -238,4 +247,48 @@ public ServiceOfferingVO getcomputeOffering(ServiceOfferingVO serviceOffering, M return dummyoffering; } + + @Override + public List createSystemServiceOfferings(String name, String uniqueName, int cpuCount, int ramSize, int cpuSpeed, + Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText, Storage.ProvisioningType provisioningType, + boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, boolean defaultUse) { + List list = new ArrayList(); + ServiceOfferingVO offering = new ServiceOfferingVO(name, cpuCount, ramSize, cpuSpeed, rateMbps, multicastRateMbps, offerHA, displayText, + provisioningType, false, recreatable, tags, systemUse, vmType, defaultUse); + offering.setUniqueName(uniqueName); + offering = persistSystemServiceOffering(offering); + if (offering != null) { + list.add(offering); + } + + boolean useLocal = true; + if (offering.getUseLocalStorage()) { // if 1st one is already local then 2nd needs to be shared + useLocal = false; + } + + offering = new ServiceOfferingVO(name + (useLocal ? " - Local Storage" : ""), cpuCount, ramSize, cpuSpeed, rateMbps, multicastRateMbps, offerHA, displayText, + provisioningType, useLocal, recreatable, tags, systemUse, vmType, defaultUse); + offering.setUniqueName(uniqueName + (useLocal ? "-Local" : "")); + offering = persistSystemServiceOffering(offering); + if (offering != null) { + list.add(offering); + } + + return list; + } + + @Override + public ServiceOfferingVO findDefaultSystemOffering(String offeringName, Boolean useLocalStorage) { + String name = offeringName; + if (useLocalStorage != null && useLocalStorage.booleanValue()) { + name += "-Local"; + } + ServiceOfferingVO serviceOffering = findByName(name); + if (serviceOffering == null) { + String message = "System service offering " + name + " not found"; + s_logger.error(message); + throw new CloudRuntimeException(message); + } + return serviceOffering; + } } diff --git a/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java b/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java index 2ad1481995..41ef35a4db 100755 --- a/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java +++ b/engine/schema/src/com/cloud/upgrade/DatabaseUpgradeChecker.java @@ -72,8 +72,10 @@ import com.cloud.upgrade.dao.Upgrade441to442; import com.cloud.upgrade.dao.Upgrade442to450; import com.cloud.upgrade.dao.Upgrade443to450; +import com.cloud.upgrade.dao.Upgrade444to450; import com.cloud.upgrade.dao.Upgrade450to451; import com.cloud.upgrade.dao.Upgrade451to452; +import com.cloud.upgrade.dao.Upgrade452to453; import com.cloud.upgrade.dao.UpgradeSnapshot217to224; import com.cloud.upgrade.dao.UpgradeSnapshot223to224; import com.cloud.upgrade.dao.VersionDao; @@ -104,7 +106,7 @@ public DatabaseUpgradeChecker() { new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.1.8", new DbUpgrade[] {new Upgrade218to22(), new Upgrade221to222(), new UpgradeSnapshot217to224(), new Upgrade222to224(), new Upgrade218to224DomainVlans(), new Upgrade224to225(), new Upgrade225to226(), @@ -113,7 +115,7 @@ public DatabaseUpgradeChecker() { new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.1.9", new DbUpgrade[] {new Upgrade218to22(), new Upgrade221to222(), new UpgradeSnapshot217to224(), new Upgrade222to224(), new Upgrade218to224DomainVlans(), new Upgrade224to225(), new Upgrade225to226(), @@ -121,14 +123,14 @@ public DatabaseUpgradeChecker() { new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.1", new DbUpgrade[] {new Upgrade221to222(), new UpgradeSnapshot223to224(), new Upgrade222to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), - new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.2", new DbUpgrade[] {new Upgrade222to224(), new UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), @@ -136,7 +138,7 @@ public DatabaseUpgradeChecker() { new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.3", new DbUpgrade[] {new Upgrade222to224(), new UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), @@ -144,152 +146,156 @@ public DatabaseUpgradeChecker() { new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.4", new DbUpgrade[] {new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.5", new DbUpgrade[] {new Upgrade225to226(), new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.6", new DbUpgrade[] {new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.7", new DbUpgrade[] {new Upgrade227to228(), new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.8", new DbUpgrade[] {new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30() , new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.9", new DbUpgrade[] {new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.10", new DbUpgrade[] {new Upgrade2210to2211(), new Upgrade2211to2212(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), - new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.12", new DbUpgrade[] {new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.13", new DbUpgrade[] {new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.14", new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), - new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.0", new DbUpgrade[] {new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.1", new DbUpgrade[] {new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), - new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.2", new DbUpgrade[] {new Upgrade302to40(), new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), - new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.0.0", new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), - new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.0.1", new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), - new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.0.2", new DbUpgrade[] {new Upgrade40to41(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), - new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.1.0", new DbUpgrade[] {new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), - new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.1.1", new DbUpgrade[] {new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), - new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.2.0", new DbUpgrade[] {new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), - new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.2.1", new DbUpgrade[] {new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.3.0", new DbUpgrade[] {new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.3.1", new DbUpgrade[] {new Upgrade431to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.3.2", new DbUpgrade[] {new Upgrade432to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), - new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("4.4.0", new DbUpgrade[] {new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), - new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); - _upgradeMap.put("4.4.1", new DbUpgrade[] {new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452() }); + _upgradeMap.put("4.4.1", new DbUpgrade[] {new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453() }); - _upgradeMap.put("4.4.2", new DbUpgrade[] {new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + _upgradeMap.put("4.4.2", new DbUpgrade[] {new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); - _upgradeMap.put("4.4.3", new DbUpgrade[] {new Upgrade443to450(), new Upgrade450to451(), new Upgrade451to452()}); + _upgradeMap.put("4.4.3", new DbUpgrade[] {new Upgrade443to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); - _upgradeMap.put("4.5.0", new DbUpgrade[] {new Upgrade450to451(), new Upgrade451to452()}); + _upgradeMap.put("4.4.4", new DbUpgrade[] {new Upgrade444to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); - _upgradeMap.put("4.5.1", new DbUpgrade[] {new Upgrade451to452()}); + _upgradeMap.put("4.5.0", new DbUpgrade[] {new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); + + _upgradeMap.put("4.5.1", new DbUpgrade[] {new Upgrade451to452(), new Upgrade452to453()}); + + _upgradeMap.put("4.5.2", new DbUpgrade[] {new Upgrade452to453()}); //CP Upgrades _upgradeMap.put("3.0.3", new DbUpgrade[] {new Upgrade303to304(), new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.4", new DbUpgrade[] {new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.5", new DbUpgrade[] {new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), - new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.6", new DbUpgrade[] {new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), - new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("3.0.7", new DbUpgrade[] {new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), - new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.15", new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to303(), new Upgrade303to304(), new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), - new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); _upgradeMap.put("2.2.16", new DbUpgrade[] {new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to303(), new Upgrade303to304(), new Upgrade304to305(), new Upgrade305to306(), new Upgrade306to307(), new Upgrade307to410(), new Upgrade410to420(), new Upgrade420to421(), new Upgrade421to430(), new Upgrade430to440(), new Upgrade440to441(), new Upgrade441to442(), new Upgrade442to450(), - new Upgrade450to451(), new Upgrade451to452()}); + new Upgrade450to451(), new Upgrade451to452(), new Upgrade452to453()}); } protected void runScript(Connection conn, File file) { diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade443to444.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade443to444.java new file mode 100644 index 0000000000..ded67d6495 --- /dev/null +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade443to444.java @@ -0,0 +1,64 @@ +// 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 java.io.File; +import java.sql.Connection; + +import org.apache.log4j.Logger; + +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; + +public class Upgrade443to444 implements DbUpgrade { + final static Logger s_logger = Logger.getLogger(Upgrade443to444.class); + + @Override + public String[] getUpgradableVersionRange() { + return new String[] {"4.4.3", "4.4.4"}; + } + + @Override + public String getUpgradedVersion() { + return "4.4.4"; + } + + @Override + public boolean supportsRollingUpgrade() { + return false; + } + + @Override + public File[] getPrepareScripts() { + String script = Script.findScript("", "db/schema-443to444.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-empty.sql"); + } + + return new File[] {new File(script)}; + } + + @Override + public void performDataMigration(Connection conn) { + } + + @Override + public File[] getCleanupScripts() { + return null; + } +} diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade444to450.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade444to450.java new file mode 100644 index 0000000000..d872e528bf --- /dev/null +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade444to450.java @@ -0,0 +1,30 @@ +// 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 class Upgrade444to450 extends Upgrade442to450 implements DbUpgrade { + + final static Logger s_logger = Logger.getLogger(Upgrade444to450.class); + + @Override + public String[] getUpgradableVersionRange() { + return new String[] {"4.4.4", "4.5.0"}; + } +} diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade451to452.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade451to452.java index 3b7b643fdb..870e534fb7 100644 --- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade451to452.java +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade451to452.java @@ -17,11 +17,13 @@ package com.cloud.upgrade.dao; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; +import org.apache.log4j.Logger; + import java.io.File; import java.sql.Connection; -import org.apache.log4j.Logger; - public class Upgrade451to452 implements DbUpgrade { final static Logger s_logger = Logger.getLogger(Upgrade451to452.class); @@ -42,7 +44,11 @@ public boolean supportsRollingUpgrade() { @Override public File[] getPrepareScripts() { - return new File[] {}; + String script = Script.findScript("", "db/schema-451to452.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-451to452.sql"); + } + return new File[] {new File(script)}; } @Override @@ -51,6 +57,11 @@ public void performDataMigration(Connection conn) { @Override public File[] getCleanupScripts() { - return null; + String script = Script.findScript("", "db/schema-451to452-cleanup.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-451to452-cleanup.sql"); + } + + return new File[] {new File(script)}; } } diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade452to453.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade452to453.java new file mode 100644 index 0000000000..d1c4661607 --- /dev/null +++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade452to453.java @@ -0,0 +1,67 @@ +// 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 com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.script.Script; +import org.apache.log4j.Logger; + +import java.io.File; +import java.sql.Connection; + +public class Upgrade452to453 implements DbUpgrade { + final static Logger s_logger = Logger.getLogger(Upgrade452to453.class); + + @Override + public String[] getUpgradableVersionRange() { + return new String[] {"4.5.2", "4.5.3"}; + } + + @Override + public String getUpgradedVersion() { + return "4.5.3"; + } + + @Override + public boolean supportsRollingUpgrade() { + return false; + } + + @Override + public File[] getPrepareScripts() { + String script = Script.findScript("", "db/schema-452to453.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-452to453.sql"); + } + return new File[] {new File(script)}; + } + + @Override + public void performDataMigration(Connection conn) { + } + + @Override + public File[] getCleanupScripts() { + String script = Script.findScript("", "db/schema-452to453-cleanup.sql"); + if (script == null) { + throw new CloudRuntimeException("Unable to find db/schema-452to453-cleanup.sql"); + } + + return new File[] {new File(script)}; + } +} diff --git a/engine/schema/src/com/cloud/user/UserAccountVO.java b/engine/schema/src/com/cloud/user/UserAccountVO.java index 5f33c47e64..5ce0eb79d6 100644 --- a/engine/schema/src/com/cloud/user/UserAccountVO.java +++ b/engine/schema/src/com/cloud/user/UserAccountVO.java @@ -105,6 +105,9 @@ public class UserAccountVO implements UserAccount, InternalIdentity { @Enumerated(value = EnumType.STRING) private User.Source source; + @Column(name = "external_entity", length = 65535) + private String externalEntity = null; + public UserAccountVO() { } @@ -248,7 +251,7 @@ public String getAccountState() { return accountState; } - public void setAccountDisabled(String accountState) { + public void setAccountState(String accountState) { this.accountState = accountState; } @@ -296,4 +299,12 @@ public User.Source getSource() { public void setSource(User.Source source) { this.source = source; } + + public String getExternalEntity() { + return externalEntity; + } + + public void setExternalEntity(String externalEntity) { + this.externalEntity = externalEntity; + } } diff --git a/engine/schema/src/com/cloud/user/UserVO.java b/engine/schema/src/com/cloud/user/UserVO.java index eb2813bf38..da7811ecc5 100644 --- a/engine/schema/src/com/cloud/user/UserVO.java +++ b/engine/schema/src/com/cloud/user/UserVO.java @@ -101,6 +101,9 @@ public class UserVO implements User, Identity, InternalIdentity { @Enumerated(value = EnumType.STRING) private Source source; + @Column(name = "external_entity", length = 65535) + private String externalEntity; + public UserVO() { this.uuid = UUID.randomUUID().toString(); } @@ -283,4 +286,11 @@ public void setSource(Source source) { this.source = source; } + public String getExternalEntity() { + return externalEntity; + } + + public void setExternalEntity(String externalEntity) { + this.externalEntity = externalEntity; + } } diff --git a/engine/schema/src/com/cloud/user/dao/SSHKeyPairDao.java b/engine/schema/src/com/cloud/user/dao/SSHKeyPairDao.java index 7a4ac40363..e035e9688c 100644 --- a/engine/schema/src/com/cloud/user/dao/SSHKeyPairDao.java +++ b/engine/schema/src/com/cloud/user/dao/SSHKeyPairDao.java @@ -35,4 +35,6 @@ public interface SSHKeyPairDao extends GenericDao { public boolean deleteByName(long accountId, long domainId, String name); + public SSHKeyPairVO findByPublicKey(long accountId, long domainId, String publicKey); + } diff --git a/engine/schema/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java b/engine/schema/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java index cfaa993e60..51e5fbeefd 100644 --- a/engine/schema/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java +++ b/engine/schema/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java @@ -72,6 +72,15 @@ public SSHKeyPairVO findByPublicKey(String publicKey) { return findOneBy(sc); } + @Override + public SSHKeyPairVO findByPublicKey(long accountId, long domainId, String publicKey) { + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId); + sc.addAnd("domainId", SearchCriteria.Op.EQ, domainId); + sc.addAnd("publicKey", SearchCriteria.Op.EQ, publicKey); + return findOneBy(sc); + } + @Override public boolean deleteByName(long accountId, long domainId, String name) { SSHKeyPairVO pair = findByName(accountId, domainId, name); diff --git a/engine/schema/src/com/cloud/user/dao/UserAccountDao.java b/engine/schema/src/com/cloud/user/dao/UserAccountDao.java index a26ff7f85f..1d005b2090 100644 --- a/engine/schema/src/com/cloud/user/dao/UserAccountDao.java +++ b/engine/schema/src/com/cloud/user/dao/UserAccountDao.java @@ -20,7 +20,11 @@ import com.cloud.user.UserAccountVO; import com.cloud.utils.db.GenericDao; +import java.util.List; + public interface UserAccountDao extends GenericDao { + List getAllUsersByNameAndEntity(String username, String entity); + UserAccount getUserAccount(String username, Long domainId); boolean validateUsernameInDomain(String username, Long domainId); diff --git a/engine/schema/src/com/cloud/user/dao/UserAccountDaoImpl.java b/engine/schema/src/com/cloud/user/dao/UserAccountDaoImpl.java index 1449e6b82a..a8d9e39a63 100644 --- a/engine/schema/src/com/cloud/user/dao/UserAccountDaoImpl.java +++ b/engine/schema/src/com/cloud/user/dao/UserAccountDaoImpl.java @@ -16,15 +16,15 @@ // under the License. package com.cloud.user.dao; -import javax.ejb.Local; - -import org.springframework.stereotype.Component; - import com.cloud.user.UserAccount; import com.cloud.user.UserAccountVO; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import org.springframework.stereotype.Component; + +import javax.ejb.Local; +import java.util.List; @Component @Local(value = {UserAccountDao.class}) @@ -38,6 +38,17 @@ public UserAccountDaoImpl() { userAccountSearch.done(); } + @Override + public List getAllUsersByNameAndEntity(String username, String entity) { + if (username == null) { + return null; + } + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("username", SearchCriteria.Op.EQ, username); + sc.addAnd("externalEntity", SearchCriteria.Op.EQ, entity); + return listBy(sc); + } + @Override public UserAccount getUserAccount(String username, Long domainId) { if ((username == null) || (domainId == null)) { diff --git a/engine/schema/src/com/cloud/vm/VMInstanceVO.java b/engine/schema/src/com/cloud/vm/VMInstanceVO.java index d542f33237..3d2c3af677 100644 --- a/engine/schema/src/com/cloud/vm/VMInstanceVO.java +++ b/engine/schema/src/com/cloud/vm/VMInstanceVO.java @@ -206,7 +206,7 @@ public VMInstanceVO(long id, long serviceOfferingId, String name, String instanc SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); byte[] randomBytes = new byte[16]; random.nextBytes(randomBytes); - vncPassword = Base64.encodeBase64String(randomBytes); + vncPassword = Base64.encodeBase64URLSafeString(randomBytes); } catch (NoSuchAlgorithmException e) { s_logger.error("Unexpected exception in SecureRandom Algorithm selection ", e); } diff --git a/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java b/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java index 1d522dc620..8d457fadff 100644 --- a/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java +++ b/engine/schema/src/com/cloud/vm/dao/VMInstanceDao.java @@ -138,4 +138,6 @@ public interface VMInstanceDao extends GenericDao, StateDao< HashMap countVgpuVMs(Long dcId, Long podId, Long clusterId); VMInstanceVO findVMByHostNameInZone(String hostName, long zoneId); + + boolean isPowerStateUpToDate(long instanceId); } diff --git a/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java index be0e3668e7..aa940ce342 100644 --- a/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/VMInstanceDaoImpl.java @@ -803,6 +803,15 @@ public Boolean doInTransaction(TransactionStatus status) { }); } + @Override + public boolean isPowerStateUpToDate(final long instanceId) { + VMInstanceVO instance = findById(instanceId); + if(instance == null) { + throw new CloudRuntimeException("checking power state update count on non existing instance " + instanceId); + } + return instance.getPowerStateUpdateCount() < MAX_CONSECUTIVE_SAME_STATE_UPDATE_COUNT; + } + @Override public void resetVmPowerStateTracking(final long instanceId) { Transaction.execute(new TransactionCallbackNoReturn() { diff --git a/engine/service/pom.xml b/engine/service/pom.xml index f110a32e63..13876a8bbe 100644 --- a/engine/service/pom.xml +++ b/engine/service/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT cloud-engine-service war diff --git a/engine/storage/cache/pom.xml b/engine/storage/cache/pom.xml index b1b60b934e..392bf659af 100644 --- a/engine/storage/cache/pom.xml +++ b/engine/storage/cache/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml 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 3a502d12ae..48e8af6cb0 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.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.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.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,93 @@ public boolean stop() { @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 = null; + 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(); + + /* + * 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 + ")"); + + DataObject existingDataObj = null; + 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(); + existingDataObj = dataObj; + } + } - DataObject 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(); CopyCommandResult result = null; @@ -251,6 +336,13 @@ public DataObject createCacheObject(DataObject data, DataStore store) { 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; } diff --git a/engine/storage/datamotion/pom.xml b/engine/storage/datamotion/pom.xml index 434bca5612..f3a798ac5c 100644 --- a/engine/storage/datamotion/pom.xml +++ b/engine/storage/datamotion/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java index 7e572c3c50..c9c35b45d7 100644 --- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java +++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java @@ -407,6 +407,10 @@ protected Answer migrateVolumeToPool(DataObject srcData, DataObject destData) { VolumeVO volumeVo = volDao.findById(volume.getId()); Long oldPoolId = volume.getPoolId(); volumeVo.setPath(((MigrateVolumeAnswer)answer).getVolumePath()); + String chainInfo = ((MigrateVolumeAnswer) answer).getVolumeChainInfo(); + if (chainInfo != null) { + volumeVo.setChainInfo(chainInfo); + } volumeVo.setPodId(destPool.getPodId()); volumeVo.setPoolId(destPool.getId()); volumeVo.setLastPoolId(oldPoolId); diff --git a/engine/storage/image/pom.xml b/engine/storage/image/pom.xml index 9c0ae50892..4e3436b9e6 100644 --- a/engine/storage/image/pom.xml +++ b/engine/storage/image/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/engine/storage/integration-test/pom.xml b/engine/storage/integration-test/pom.xml index 3890a14ca9..b734852ba9 100644 --- a/engine/storage/integration-test/pom.xml +++ b/engine/storage/integration-test/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/engine/storage/pom.xml b/engine/storage/pom.xml index f78785da33..4479634def 100644 --- a/engine/storage/pom.xml +++ b/engine/storage/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/engine/storage/snapshot/pom.xml b/engine/storage/snapshot/pom.xml index 190db5ded5..483c9ba66b 100644 --- a/engine/storage/snapshot/pom.xml +++ b/engine/storage/snapshot/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java index 5a8afc6893..4c76cda9fd 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java @@ -237,7 +237,10 @@ private DataStore findSnapshotImageStore(SnapshotInfo snapshot) { // Note that DataStore information in parentSnapshot is for primary // data store here, we need to // find the image store where the parent snapshot backup is located - SnapshotDataStoreVO parentSnapshotOnBackupStore = _snapshotStoreDao.findBySnapshot(parentSnapshot.getId(), DataStoreRole.Image); + SnapshotDataStoreVO parentSnapshotOnBackupStore = null; + if (parentSnapshot != null) { + parentSnapshotOnBackupStore = _snapshotStoreDao.findBySnapshot(parentSnapshot.getId(), DataStoreRole.Image); + } if (parentSnapshotOnBackupStore == null) { return dataStoreMgr.getImageStore(snapshot.getDataCenterId()); } diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java index 51f75bd0c3..aefb128d68 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java @@ -111,8 +111,9 @@ public SnapshotInfo backupSnapshot(SnapshotInfo snapshot) { boolean fullBackup = true; SnapshotDataStoreVO parentSnapshotOnBackupStore = snapshotStoreDao.findLatestSnapshotForVolume(snapshot.getVolumeId(), DataStoreRole.Image); + SnapshotDataStoreVO parentSnapshotOnPrimaryStore = snapshotStoreDao.findLatestSnapshotForVolume(snapshot.getVolumeId(), DataStoreRole.Primary); HypervisorType hypervisorType = snapshot.getBaseVolume().getHypervisorType(); - if (parentSnapshotOnBackupStore != null && hypervisorType == Hypervisor.HypervisorType.XenServer) { // CS does incremental backup only for XenServer + if (parentSnapshotOnBackupStore != null && parentSnapshotOnPrimaryStore != null && hypervisorType == Hypervisor.HypervisorType.XenServer) { // CS does incremental backup only for XenServer // In case of volume migration from one pool to other pool, CS should take full snapshot to avoid any issues with delta chain, // to check if this is a migrated volume, compare the current pool id of volume and store_id of oldest snapshot on primary for this volume. diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java index c204d29c29..13fd54cf8f 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/vmsnapshot/DefaultVMSnapshotStrategy.java @@ -137,7 +137,7 @@ public VMSnapshot takeVMSnapshot(VMSnapshot vmSnapshot) { HostVO host = hostDao.findById(hostId); GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion()); - CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), target, volumeTOs, guestOS.getDisplayName()); + CreateVMSnapshotCommand ccmd = new CreateVMSnapshotCommand(userVm.getInstanceName(), userVm.getUuid(), target, volumeTOs, guestOS.getDisplayName()); if (guestOsMapping == null) { ccmd.setPlatformEmulator(null); } else { @@ -350,7 +350,7 @@ public boolean revertVMSnapshot(VMSnapshot vmSnapshot) { snapshot.getCurrent(), parent, true); Long hostId = vmSnapshotHelper.pickRunningHost(vmSnapshot.getVmId()); GuestOSVO guestOS = guestOSDao.findById(userVm.getGuestOSId()); - RevertToVMSnapshotCommand revertToSnapshotCommand = new RevertToVMSnapshotCommand(vmInstanceName, vmSnapshotTO, volumeTOs, guestOS.getDisplayName()); + RevertToVMSnapshotCommand revertToSnapshotCommand = new RevertToVMSnapshotCommand(vmInstanceName, userVm.getUuid(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName()); HostVO host = hostDao.findById(hostId); GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion()); if (guestOsMapping == null) { diff --git a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java index e90770e8e3..9b7007dc4d 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/helper/HypervisorHelperImpl.java @@ -124,7 +124,7 @@ public VMSnapshotTO quiesceVm(VirtualMachine virtualMachine) { GuestOSVO guestOS = guestOSDao.findById(virtualMachine.getGuestOSId()); List volumeTOs = vmSnapshotHelper.getVolumeTOList(virtualMachine.getId()); CreateVMSnapshotCommand ccmd = - new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName()); + new CreateVMSnapshotCommand(virtualMachine.getInstanceName(), virtualMachine.getUuid(), vmSnapshotTO, volumeTOs, guestOS.getDisplayName()); HostVO host = hostDao.findById(hostId); GuestOSHypervisorVO guestOsMapping = guestOsHypervisorDao.findByOsIdAndHypervisor(guestOS.getId(), host.getHypervisorType().toString(), host.getHypervisorVersion()); ccmd.setPlatformEmulator(guestOsMapping.getGuestOsName()); diff --git a/engine/storage/volume/pom.xml b/engine/storage/volume/pom.xml index 21d2375f9f..b78f594c0a 100644 --- a/engine/storage/volume/pom.xml +++ b/engine/storage/volume/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-engine - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/framework/cluster/pom.xml b/framework/cluster/pom.xml index b0ad835662..093dce45f3 100644 --- a/framework/cluster/pom.xml +++ b/framework/cluster/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletAdapter.java b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletAdapter.java index d36aed1d4d..7451b5f422 100644 --- a/framework/cluster/src/com/cloud/cluster/ClusterServiceServletAdapter.java +++ b/framework/cluster/src/com/cloud/cluster/ClusterServiceServletAdapter.java @@ -24,12 +24,12 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; - import org.apache.cloudstack.framework.config.ConfigDepot; import com.cloud.cluster.dao.ManagementServerHostDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.AdapterBase; +import com.cloud.utils.component.ComponentLifecycle; import com.cloud.utils.db.DbProperties; public class ClusterServiceServletAdapter extends AdapterBase implements ClusterServiceAdapter { @@ -50,6 +50,10 @@ public class ClusterServiceServletAdapter extends AdapterBase implements Cluster private int _clusterServicePort = DEFAULT_SERVICE_PORT; + public ClusterServiceServletAdapter() { + setRunLevel(ComponentLifecycle.RUN_LEVEL_FRAMEWORK); + } + @Override public ClusterService getPeerService(String strPeer) throws RemoteException { try { diff --git a/framework/cluster/test/com/cloud/cluster/ClusterServiceServletAdapterTest.java b/framework/cluster/test/com/cloud/cluster/ClusterServiceServletAdapterTest.java new file mode 100644 index 0000000000..28dbcaa951 --- /dev/null +++ b/framework/cluster/test/com/cloud/cluster/ClusterServiceServletAdapterTest.java @@ -0,0 +1,47 @@ +// 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.cluster; + +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import com.cloud.utils.component.ComponentLifecycle; + +@RunWith(MockitoJUnitRunner.class) +public class ClusterServiceServletAdapterTest { + + ClusterServiceServletAdapter clusterServiceServletAdapter; + ClusterManagerImpl clusterManagerImpl; + + @Before + public void setup() throws IllegalArgumentException, + IllegalAccessException, NoSuchFieldException, SecurityException { + clusterServiceServletAdapter = new ClusterServiceServletAdapter(); + clusterManagerImpl = new ClusterManagerImpl(); + } + + @Test + public void testRunLevel() { + int runLevel = clusterServiceServletAdapter.getRunLevel(); + assertTrue(runLevel == ComponentLifecycle.RUN_LEVEL_FRAMEWORK); + assertTrue(runLevel == clusterManagerImpl.getRunLevel()); + } +} diff --git a/framework/config/pom.xml b/framework/config/pom.xml index 4bd8519f26..54edcfb63f 100644 --- a/framework/config/pom.xml +++ b/framework/config/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/db/pom.xml b/framework/db/pom.xml index f61e321a5c..1027e7a81a 100644 --- a/framework/db/pom.xml +++ b/framework/db/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/db/src/com/cloud/utils/db/Filter.java b/framework/db/src/com/cloud/utils/db/Filter.java index fdcad9c3e5..59dc8c1477 100755 --- a/framework/db/src/com/cloud/utils/db/Filter.java +++ b/framework/db/src/com/cloud/utils/db/Filter.java @@ -89,7 +89,7 @@ public void addOrderBy(Class clazz, String field, boolean ascending) { if (_orderBy == null) { _orderBy = order.insert(0, " ORDER BY ").toString(); } else { - _orderBy = order.insert(0, _orderBy).toString(); + _orderBy = order.insert(0, _orderBy + ", ").toString(); } } diff --git a/framework/db/test/com/cloud/utils/db/FilterTest.java b/framework/db/test/com/cloud/utils/db/FilterTest.java new file mode 100644 index 0000000000..079611ab69 --- /dev/null +++ b/framework/db/test/com/cloud/utils/db/FilterTest.java @@ -0,0 +1,44 @@ +// 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 +// 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.db; + +import org.junit.Assert; +import org.junit.Test; + +public class FilterTest { + + @Test + /* + * This test verifies that the Order By clause generated by the filter is correct and it separates each + * order by field with a comma. Using DbTestVO to assert it + */ + public void testAddOrderBy() { + Filter filter = new Filter(DbTestVO.class, "fieldString", true, 1L, 1L); + + Assert.assertTrue(filter.getOrderBy().trim().toLowerCase().equals("order by test.fld_string asc")); + + filter.addOrderBy(DbTestVO.class, "fieldLong", true); + + Assert.assertTrue(filter.getOrderBy().contains(",")); + Assert.assertTrue(filter.getOrderBy().split(",")[1].trim().toLowerCase().equals("test.fld_long asc")); + + filter.addOrderBy(DbTestVO.class, "fieldInt", true); + + Assert.assertTrue(filter.getOrderBy().split(",").length == 3); + Assert.assertTrue(filter.getOrderBy().split(",")[2].trim().toLowerCase().equals("test.fld_int asc")); + } +} diff --git a/framework/events/pom.xml b/framework/events/pom.xml index e8b8e34c70..3d78a6d46a 100644 --- a/framework/events/pom.xml +++ b/framework/events/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/ipc/pom.xml b/framework/ipc/pom.xml index 8350cb0173..35d02c559c 100644 --- a/framework/ipc/pom.xml +++ b/framework/ipc/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/jobs/pom.xml b/framework/jobs/pom.xml index 745c3c6669..3380a3650b 100644 --- a/framework/jobs/pom.xml +++ b/framework/jobs/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java index c17c5812f0..2f97991e3e 100644 --- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java +++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/SyncQueueManagerImpl.java @@ -207,6 +207,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) { @Override @DB public void returnItem(final long queueItemId) { + s_logger.info("Returning queue item " + queueItemId + " back to queue for second try in case of DB deadlock"); try { Transaction.execute(new TransactionCallbackNoReturn() { @Override diff --git a/framework/managed-context/pom.xml b/framework/managed-context/pom.xml index 886d93a761..d55b07322f 100644 --- a/framework/managed-context/pom.xml +++ b/framework/managed-context/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-maven-standard - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../maven-standard/pom.xml diff --git a/framework/pom.xml b/framework/pom.xml index 42206929f4..64d1774c67 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT install diff --git a/framework/rest/pom.xml b/framework/rest/pom.xml index d18d8593eb..0ea2195c5a 100644 --- a/framework/rest/pom.xml +++ b/framework/rest/pom.xml @@ -22,7 +22,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml cloud-framework-rest diff --git a/framework/security/pom.xml b/framework/security/pom.xml index 631da2e036..03e97c8f1b 100644 --- a/framework/security/pom.xml +++ b/framework/security/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-framework - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/framework/spring/lifecycle/pom.xml b/framework/spring/lifecycle/pom.xml index 842e0be86e..937cf66f48 100644 --- a/framework/spring/lifecycle/pom.xml +++ b/framework/spring/lifecycle/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloud-maven-standard - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../maven-standard/pom.xml diff --git a/framework/spring/module/pom.xml b/framework/spring/module/pom.xml index 44d305218b..1836924fea 100644 --- a/framework/spring/module/pom.xml +++ b/framework/spring/module/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-maven-standard - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../maven-standard/pom.xml diff --git a/maven-standard/pom.xml b/maven-standard/pom.xml index ed1d8c4eda..f51fd9363b 100644 --- a/maven-standard/pom.xml +++ b/maven-standard/pom.xml @@ -25,7 +25,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/packaging/centos63/cloud.spec b/packaging/centos63/cloud.spec index 3efa54eff9..c8901a84d6 100644 --- a/packaging/centos63/cloud.spec +++ b/packaging/centos63/cloud.spec @@ -347,6 +347,7 @@ install -D agent/target/transformed/cloudstack-agent-upgrade ${RPM_BUILD_ROOT}%{ install -D agent/target/transformed/libvirtqemuhook ${RPM_BUILD_ROOT}%{_datadir}/%{name}-agent/lib/libvirtqemuhook install -D agent/target/transformed/cloud-ssh ${RPM_BUILD_ROOT}%{_bindir}/%{name}-ssh install -D agent/target/transformed/cloudstack-agent-profile.sh ${RPM_BUILD_ROOT}%{_sysconfdir}/profile.d/%{name}-agent-profile.sh +install -D agent/target/transformed/cloudstack-agent.logrotate ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/%{name}-agent install -D plugins/hypervisors/kvm/target/cloud-plugin-hypervisor-kvm-%{_maventag}.jar ${RPM_BUILD_ROOT}%{_datadir}/%name-agent/lib/cloud-plugin-hypervisor-kvm-%{_maventag}.jar cp plugins/hypervisors/kvm/target/dependencies/* ${RPM_BUILD_ROOT}%{_datadir}/%{name}-agent/lib @@ -651,6 +652,7 @@ fi %attr(0755,root,root) %{_bindir}/%{name}-ssh %attr(0755,root,root) %{_sysconfdir}/init.d/%{name}-agent %attr(0644,root,root) %{_sysconfdir}/profile.d/%{name}-agent-profile.sh +%attr(0644,root,root) %{_sysconfdir}/logrotate.d/%{name}-agent %attr(0755,root,root) %{_datadir}/%{name}-common/scripts/network/cisco %config(noreplace) %{_sysconfdir}/%{name}/agent %dir %{_localstatedir}/log/%{name}/agent diff --git a/packaging/debian/replace.properties b/packaging/debian/replace.properties index 5a0bd58ab6..124c016387 100644 --- a/packaging/debian/replace.properties +++ b/packaging/debian/replace.properties @@ -21,7 +21,6 @@ DBROOTPW= MSLOG=vmops.log APISERVERLOG=api.log DBHOST=localhost -MSMNTDIR=/mnt COMPONENTS-SPEC=components-premium.xml AWSAPILOG=awsapi.log REMOTEHOST=localhost @@ -45,7 +44,7 @@ MSCONF=/etc/cloudstack/management MSENVIRON=/usr/share/cloudstack-management MSLOG=/var/log/cloudstack/management/management-server.log MSLOGDIR=/var/log/cloudstack/management/ -MSMNTDIR=/var/lib/cloud/mnt +MSMNTDIR=/var/lib/cloudstack/mnt MSUSER=cloud PIDDIR=/var/run PLUGINJAVADIR= diff --git a/plugins/acl/static-role-based/pom.xml b/plugins/acl/static-role-based/pom.xml index f68ce46b01..bb6baf4441 100644 --- a/plugins/acl/static-role-based/pom.xml +++ b/plugins/acl/static-role-based/pom.xml @@ -26,7 +26,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/affinity-group-processors/explicit-dedication/pom.xml b/plugins/affinity-group-processors/explicit-dedication/pom.xml index 30d0760e75..6e1259e17c 100644 --- a/plugins/affinity-group-processors/explicit-dedication/pom.xml +++ b/plugins/affinity-group-processors/explicit-dedication/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/affinity-group-processors/host-anti-affinity/pom.xml b/plugins/affinity-group-processors/host-anti-affinity/pom.xml index b57127e1c1..097290c3e9 100644 --- a/plugins/affinity-group-processors/host-anti-affinity/pom.xml +++ b/plugins/affinity-group-processors/host-anti-affinity/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/alert-handlers/snmp-alerts/pom.xml b/plugins/alert-handlers/snmp-alerts/pom.xml index c46015e09d..d2832139ac 100644 --- a/plugins/alert-handlers/snmp-alerts/pom.xml +++ b/plugins/alert-handlers/snmp-alerts/pom.xml @@ -22,7 +22,7 @@ cloudstack-plugins org.apache.cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/plugins/alert-handlers/syslog-alerts/pom.xml b/plugins/alert-handlers/syslog-alerts/pom.xml index 747b0abf96..7473437a0d 100644 --- a/plugins/alert-handlers/syslog-alerts/pom.xml +++ b/plugins/alert-handlers/syslog-alerts/pom.xml @@ -22,7 +22,7 @@ cloudstack-plugins org.apache.cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/plugins/api/discovery/pom.xml b/plugins/api/discovery/pom.xml index 9018d7330e..53f23e9331 100644 --- a/plugins/api/discovery/pom.xml +++ b/plugins/api/discovery/pom.xml @@ -26,7 +26,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/api/rate-limit/pom.xml b/plugins/api/rate-limit/pom.xml index 03032a06e7..b5ccb1a44e 100644 --- a/plugins/api/rate-limit/pom.xml +++ b/plugins/api/rate-limit/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml @@ -32,7 +32,8 @@ org.apache.maven.plugins maven-surefire-plugin - -Xmx1024m + always + -Xmx2048m -XX:MaxPermSize=1024m org/apache/cloudstack/ratelimit/integration/* diff --git a/plugins/api/solidfire-intg-test/pom.xml b/plugins/api/solidfire-intg-test/pom.xml index 76459c26d4..c6ba7d4e24 100644 --- a/plugins/api/solidfire-intg-test/pom.xml +++ b/plugins/api/solidfire-intg-test/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/database/mysql-ha/pom.xml b/plugins/database/mysql-ha/pom.xml index 1a3c2dea76..32471adfdb 100644 --- a/plugins/database/mysql-ha/pom.xml +++ b/plugins/database/mysql-ha/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/dedicated-resources/pom.xml b/plugins/dedicated-resources/pom.xml index 859e136991..0a204f9a37 100644 --- a/plugins/dedicated-resources/pom.xml +++ b/plugins/dedicated-resources/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../pom.xml diff --git a/plugins/deployment-planners/implicit-dedication/pom.xml b/plugins/deployment-planners/implicit-dedication/pom.xml index 0d833a5793..f75a14e8f0 100644 --- a/plugins/deployment-planners/implicit-dedication/pom.xml +++ b/plugins/deployment-planners/implicit-dedication/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/deployment-planners/user-concentrated-pod/pom.xml b/plugins/deployment-planners/user-concentrated-pod/pom.xml index dce8043577..db6847d0af 100644 --- a/plugins/deployment-planners/user-concentrated-pod/pom.xml +++ b/plugins/deployment-planners/user-concentrated-pod/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/deployment-planners/user-dispersing/pom.xml b/plugins/deployment-planners/user-dispersing/pom.xml index 2ea14ca21b..01194804f6 100644 --- a/plugins/deployment-planners/user-dispersing/pom.xml +++ b/plugins/deployment-planners/user-dispersing/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/event-bus/inmemory/pom.xml b/plugins/event-bus/inmemory/pom.xml index f1a784eb98..9d3ccc4b33 100644 --- a/plugins/event-bus/inmemory/pom.xml +++ b/plugins/event-bus/inmemory/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/event-bus/rabbitmq/pom.xml b/plugins/event-bus/rabbitmq/pom.xml index 931d37203d..eb6860d24c 100644 --- a/plugins/event-bus/rabbitmq/pom.xml +++ b/plugins/event-bus/rabbitmq/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/file-systems/netapp/pom.xml b/plugins/file-systems/netapp/pom.xml index 43fb2814c8..7d743cbbcc 100644 --- a/plugins/file-systems/netapp/pom.xml +++ b/plugins/file-systems/netapp/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/ha-planners/skip-heurestics/pom.xml b/plugins/ha-planners/skip-heurestics/pom.xml index 4c85903170..ceee6530aa 100644 --- a/plugins/ha-planners/skip-heurestics/pom.xml +++ b/plugins/ha-planners/skip-heurestics/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/host-allocators/random/pom.xml b/plugins/host-allocators/random/pom.xml index 11cb98eaac..94361cdf19 100644 --- a/plugins/host-allocators/random/pom.xml +++ b/plugins/host-allocators/random/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/baremetal/pom.xml b/plugins/hypervisors/baremetal/pom.xml index f2be2c2e94..382aa654f9 100755 --- a/plugins/hypervisors/baremetal/pom.xml +++ b/plugins/hypervisors/baremetal/pom.xml @@ -21,7 +21,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml cloud-plugin-hypervisor-baremetal diff --git a/plugins/hypervisors/hyperv/pom.xml b/plugins/hypervisors/hyperv/pom.xml index 89764a2596..aab9f09434 100644 --- a/plugins/hypervisors/hyperv/pom.xml +++ b/plugins/hypervisors/hyperv/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/kvm/pom.xml b/plugins/hypervisors/kvm/pom.xml index 43695a2950..f5b8eb41a9 100644 --- a/plugins/hypervisors/kvm/pom.xml +++ b/plugins/hypervisors/kvm/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java b/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java index e750ced7e1..b816d09dbc 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java +++ b/plugins/hypervisors/kvm/src/com/cloud/ha/KVMInvestigator.java @@ -18,13 +18,6 @@ */ package com.cloud.ha; -import java.util.List; - -import javax.ejb.Local; -import javax.inject.Inject; - -import org.apache.log4j.Logger; - import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.CheckOnHostCommand; @@ -35,6 +28,11 @@ import com.cloud.hypervisor.Hypervisor; import com.cloud.resource.ResourceManager; import com.cloud.utils.component.AdapterBase; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.inject.Inject; +import java.util.List; @Local(value = Investigator.class) public class KVMInvestigator extends AdapterBase implements Investigator { @@ -60,22 +58,47 @@ public Status isAgentAlive(Host agent) { if (agent.getHypervisorType() != Hypervisor.HypervisorType.KVM && agent.getHypervisorType() != Hypervisor.HypervisorType.LXC) { return null; } + Status hostStatus = null; + Status neighbourStatus = null; CheckOnHostCommand cmd = new CheckOnHostCommand(agent); + + try { + Answer answer = _agentMgr.easySend(agent.getId(), cmd); + if (answer != null) { + hostStatus = answer.getResult() ? Status.Down : Status.Up; + } + } catch (Exception e) { + s_logger.debug("Failed to send command to host: " + agent.getId()); + } + if (hostStatus == null) { + hostStatus = Status.Disconnected; + } + List neighbors = _resourceMgr.listHostsInClusterByStatus(agent.getClusterId(), Status.Up); for (HostVO neighbor : neighbors) { if (neighbor.getId() == agent.getId() || (neighbor.getHypervisorType() != Hypervisor.HypervisorType.KVM && neighbor.getHypervisorType() != Hypervisor.HypervisorType.LXC)) { continue; } + s_logger.debug("Investigating host:" + agent.getId() + " via neighbouring host:" + neighbor.getId()); try { Answer answer = _agentMgr.easySend(neighbor.getId(), cmd); if (answer != null) { - return answer.getResult() ? Status.Down : Status.Up; + neighbourStatus = answer.getResult() ? Status.Down : Status.Up; + s_logger.debug("Neighbouring host:" + neighbor.getId() + " returned status:" + neighbourStatus + " for the investigated host:" + agent.getId()); + if (neighbourStatus == Status.Up) { + break; + } } } catch (Exception e) { s_logger.debug("Failed to send command to host: " + neighbor.getId()); } } - - return null; + if (neighbourStatus == Status.Up && (hostStatus == Status.Disconnected || hostStatus == Status.Down)) { + hostStatus = Status.Disconnected; + } + if (neighbourStatus == Status.Down && (hostStatus == Status.Disconnected || hostStatus == Status.Down)) { + hostStatus = Status.Down; + } + return hostStatus; } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java index aaf75ff921..2fab9a83cf 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java @@ -26,6 +26,7 @@ import javax.naming.ConfigurationException; +import com.google.common.base.Strings; import org.apache.log4j.Logger; import org.libvirt.LibvirtException; @@ -275,7 +276,7 @@ private void createControlNetwork() throws LibvirtException { createControlNetwork(_bridges.get("linklocal")); } - private void deleteExitingLinkLocalRouteTable(String linkLocalBr) { + private void deleteExistingLinkLocalRouteTable(String linkLocalBr) { Script command = new Script("/bin/bash", _timeout); command.add("-c"); command.add("ip route | grep " + NetUtils.getLinkLocalCIDR()); @@ -286,8 +287,12 @@ private void deleteExitingLinkLocalRouteTable(String linkLocalBr) { String[] lines = parser.getLines().split("\\n"); for (String line : lines) { String[] tokens = line.split(" "); - if (!tokens[2].equalsIgnoreCase(linkLocalBr)) { - Script.runSimpleBashScript("ip route del " + NetUtils.getLinkLocalCIDR()); + if (tokens != null && tokens.length < 2) { + continue; + } + final String device = tokens[2]; + if (!Strings.isNullOrEmpty(device) && !device.equalsIgnoreCase(linkLocalBr)) { + Script.runSimpleBashScript("ip route del " + NetUtils.getLinkLocalCIDR() + " dev " + tokens[2]); } else { foundLinkLocalBr = true; } @@ -300,7 +305,7 @@ private void deleteExitingLinkLocalRouteTable(String linkLocalBr) { } private void createControlNetwork(String privBrName) { - deleteExitingLinkLocalRouteTable(privBrName); + deleteExistingLinkLocalRouteTable(privBrName); if (!isBridgeExists(privBrName)) { Script.runSimpleBashScript("brctl addbr " + privBrName + "; ip link set " + privBrName + " up; ip address add 169.254.0.1/16 dev " + privBrName, _timeout); } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 4ceccaaae1..85b7376cc6 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -91,6 +91,7 @@ import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat; import org.apache.cloudstack.utils.qemu.QemuImgException; import org.apache.cloudstack.utils.qemu.QemuImgFile; +import org.apache.cloudstack.utils.hypervisor.HypervisorUtils; import com.cloud.agent.api.Answer; import com.cloud.agent.api.AttachIsoCommand; @@ -311,7 +312,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private String _ovsPvlanVmPath; private String _routerProxyPath; private String _ovsTunnelPath; - private String _setupCgroupPath; private String _host; private String _dcId; private String _pod; @@ -319,6 +319,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv private int _migrateSpeed; private int _migrateDowntime; private int _migratePauseAfter; + protected boolean _diskActivityCheckEnabled; + protected long _diskActivityCheckFileSizeMin = 10485760; // 10MB + protected int _diskActivityCheckTimeoutSeconds = 120; // 120s + protected long _diskActivityInactiveThresholdMilliseconds = 30000; // 30s private long _hvVersion; private long _kernelVersion; @@ -713,17 +717,6 @@ public boolean configure(String name, Map params) throws Configu _hypervisorType = HypervisorType.KVM; } - //Verify that cpu,cpuacct cgroups are not co-mounted - if(HypervisorType.LXC.equals(getHypervisorType())){ - _setupCgroupPath = Script.findScript(kvmScriptsDir, "setup-cgroups.sh"); - if (_setupCgroupPath == null) { - throw new ConfigurationException("Unable to find the setup-cgroups.sh"); - } - if(!checkCgroups()){ - throw new ConfigurationException("cpu,cpuacct cgroups are co-mounted"); - } - } - _hypervisorURI = (String)params.get("hypervisor.uri"); if (_hypervisorURI == null) { _hypervisorURI = LibvirtConnection.getHypervisorURI(_hypervisorType.toString()); @@ -817,9 +810,6 @@ public boolean configure(String name, Map params) throws Configu value = (String) params.get("kvmclock.disable"); if (Boolean.parseBoolean(value)) { _noKvmClock = true; - } else if(HypervisorType.LXC.equals(_hypervisorType) && (value == null)){ - //Disable kvmclock by default for LXC - _noKvmClock = true; } LibvirtConnection.initialize(_hypervisorURI); @@ -972,6 +962,7 @@ public boolean configure(String name, Map params) throws Configu params.put("libvirtVersion", _hypervisorLibvirtVersion); configureVifDrivers(params); + configureDiskActivityChecks(params); KVMStorageProcessor storageProcessor = new KVMStorageProcessor(_storagePoolMgr, this); storageProcessor.configure(name, params); @@ -985,6 +976,20 @@ public boolean configure(String name, Map params) throws Configu return true; } + protected void configureDiskActivityChecks(Map params) { + _diskActivityCheckEnabled = Boolean.parseBoolean((String)params.get("vm.diskactivity.checkenabled")); + if (_diskActivityCheckEnabled) { + int timeout = NumbersUtil.parseInt((String)params.get("vm.diskactivity.checktimeout_s"), 0); + if (timeout > 0) { + _diskActivityCheckTimeoutSeconds = timeout; + } + long inactiveTime = NumbersUtil.parseLong((String)params.get("vm.diskactivity.inactivetime_ms"), 0L); + if (inactiveTime > 0) { + _diskActivityInactiveThresholdMilliseconds = inactiveTime; + } + } + } + protected void configureVifDrivers(Map params) throws ConfigurationException { final String LIBVIRT_VIF_DRIVER = "libvirt.vif.driver"; @@ -3094,8 +3099,17 @@ private Answer execute(MigrateCommand cmd) { description for the instance to be used on the target host. This is supported by libvirt-java from version 0.50.0 + + CVE-2015-3252: Get XML with sensitive information suitable for migration by using + VIR_DOMAIN_XML_MIGRATABLE flag (value = 8) + https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainXMLFlags + + Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0. + */ - xmlDesc = dm.getXMLDesc(0).replace(_privateIp, cmd.getDestinationIp()); + int xmlFlag = conn.getLibVirVersion() >= 1000000 ? 8 : 1; // 1000000 equals v1.0.0 + + xmlDesc = dm.getXMLDesc(xmlFlag).replace(_privateIp, cmd.getDestinationIp()); dconn = new Connect("qemu+tcp://" + cmd.getDestinationIp() + "/system"); @@ -3921,6 +3935,17 @@ public int compare(DiskTO arg0, DiskTO arg1) { volPath = physicalDisk.getPath(); } + // check for disk activity, if detected we should exit because vm is running elsewhere + if (_diskActivityCheckEnabled && physicalDisk != null && physicalDisk.getFormat() == PhysicalDiskFormat.QCOW2) { + s_logger.debug("Checking physical disk file at path " + volPath + " for disk activity to ensure vm is not running elsewhere"); + try { + HypervisorUtils.checkVolumeFileForActivity(volPath, _diskActivityCheckTimeoutSeconds, _diskActivityInactiveThresholdMilliseconds, _diskActivityCheckFileSizeMin); + } catch (IOException ex) { + throw new CloudRuntimeException("Unable to check physical disk file for activity", ex); + } + s_logger.debug("Disk activity check cleared"); + } + // if params contains a rootDiskController key, use its value (this is what other HVs are doing) DiskDef.diskBus diskBusType = null; Map params = vmSpec.getDetails(); @@ -3979,6 +4004,7 @@ public int compare(DiskTO arg0, DiskTO arg1) { if (data instanceof VolumeObjectTO) { VolumeObjectTO volumeObjectTO = (VolumeObjectTO)data; + disk.setSerial(diskUuidToSerial(volumeObjectTO.getUuid())); if ((volumeObjectTO.getBytesReadRate() != null) && (volumeObjectTO.getBytesReadRate() > 0)) disk.setBytesReadRate(volumeObjectTO.getBytesReadRate()); if ((volumeObjectTO.getBytesWriteRate() != null) && (volumeObjectTO.getBytesWriteRate() > 0)) @@ -4269,6 +4295,11 @@ public StartupCommand[] initialize() { } } + public String diskUuidToSerial(String uuid) { + String uuidWithoutHyphen = uuid.replace("-",""); + return uuidWithoutHyphen.substring(0, Math.min(uuidWithoutHyphen.length(), 20)); + } + private String getIqn() { try { final String textToFind = "InitiatorName="; @@ -4510,7 +4541,10 @@ protected String rebootVM(Connect conn, String vmName) { String msg = null; try { dm = conn.domainLookupByName(vmName); - String vmDef = dm.getXMLDesc(0); + // Get XML Dump including the secure information such as VNC password + // By passing 1, or VIR_DOMAIN_XML_SECURE flag + // https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainXMLFlags + String vmDef = dm.getXMLDesc(1); LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser(); parser.parseDomainXML(vmDef); for (InterfaceDef nic : parser.getInterfaces()) { @@ -5268,17 +5302,6 @@ public HypervisorType getHypervisorType(){ return _hypervisorType; } - private boolean checkCgroups(){ - final Script command = new Script(_setupCgroupPath, 5 * 1000, s_logger); - String result; - result = command.execute(); - if (result != null) { - s_logger.debug("cgroup check failed:" + result); - return false; - } - return true; - } - public String mapRbdDevice(KVMPhysicalDisk disk){ KVMStoragePool pool = disk.getPool(); //Check if rbd image is already mapped diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index 8ff720ea73..688c082788 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -404,7 +404,7 @@ public List getInterfaces() { public static class DiskDef { public enum deviceType { - FLOPPY("floppy"), DISK("disk"), CDROM("cdrom"); + FLOPPY("floppy"), DISK("disk"), CDROM("cdrom"), LUN("lun"); String _type; deviceType(String type) { @@ -509,6 +509,7 @@ public String toString() { private Long _iopsReadRate; private Long _iopsWriteRate; private diskCacheMode _diskCacheMode; + private String _serial; private boolean qemuDriver = true; public void setDeviceType(deviceType deviceType) { @@ -693,6 +694,10 @@ public void setQemuDriver(boolean qemuDriver){ this.qemuDriver = qemuDriver; } + public void setSerial(String serial) { + this._serial = serial; + } + @Override public String toString() { StringBuilder diskBuilder = new StringBuilder(); @@ -746,6 +751,10 @@ public String toString() { } diskBuilder.append("/>\n"); + if (_serial != null && !_serial.isEmpty() && _deviceType != deviceType.LUN) { + diskBuilder.append("" + _serial + ""); + } + if ((_deviceType != deviceType.CDROM) && (s_libvirtVersion >= 9008) && (s_qemuVersion >= 1001000) && diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java index ebbb3d3166..83e151ad52 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java @@ -931,7 +931,7 @@ protected synchronized String attachOrDetachDevice(Connect conn, boolean attach, return null; } - protected synchronized String attachOrDetachDisk(Connect conn, boolean attach, String vmName, KVMPhysicalDisk attachingDisk, int devId) throws LibvirtException, + protected synchronized String attachOrDetachDisk(Connect conn, boolean attach, String vmName, KVMPhysicalDisk attachingDisk, int devId, String serial) throws LibvirtException, InternalErrorException { List disks = null; Domain dm = null; @@ -967,6 +967,7 @@ protected synchronized String attachOrDetachDisk(Connect conn, boolean attach, S } } else { diskdef = new DiskDef(); + diskdef.setSerial(serial); if (attachingPool.getType() == StoragePoolType.RBD) { if(resource.getHypervisorType() == Hypervisor.HypervisorType.LXC){ // For LXC, map image to host and then attach to Vm @@ -1009,6 +1010,7 @@ public Answer attachVolume(AttachCommand cmd) { VolumeObjectTO vol = (VolumeObjectTO)disk.getData(); PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)vol.getDataStore(); String vmName = cmd.getVmName(); + String serial = resource.diskUuidToSerial(vol.getUuid()); try { Connect conn = LibvirtConnection.getConnectionByVmName(vmName); @@ -1016,7 +1018,7 @@ public Answer attachVolume(AttachCommand cmd) { KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath()); - attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue()); + attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue(), serial); return new AttachAnswer(disk); } catch (LibvirtException e) { @@ -1035,12 +1037,13 @@ public Answer dettachVolume(DettachCommand cmd) { VolumeObjectTO vol = (VolumeObjectTO)disk.getData(); PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)vol.getDataStore(); String vmName = cmd.getVmName(); + String serial = resource.diskUuidToSerial(vol.getUuid()); try { Connect conn = LibvirtConnection.getConnectionByVmName(vmName); KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath()); - attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue()); + attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue(), serial); storagePoolMgr.disconnectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath()); diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index 5edc07b6db..856a78ab81 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -39,6 +39,7 @@ import com.ceph.rbd.Rbd; import com.ceph.rbd.RbdException; import com.ceph.rbd.RbdImage; +import com.ceph.rbd.jna.RbdImageInfo; import com.ceph.rbd.jna.RbdSnapInfo; import org.apache.cloudstack.utils.qemu.QemuImg; @@ -1243,6 +1244,10 @@ public KVMPhysicalDisk copyPhysicalDisk(KVMPhysicalDisk disk, String name, KVMSt destFile = new QemuImgFile(destPath, destFormat); try { qemu.convert(srcFile, destFile); + Map destInfo = qemu.info(destFile); + Long virtualSize = Long.parseLong(destInfo.get(new String("virtual_size"))); + newDisk.setVirtualSize(virtualSize); + newDisk.setSize(virtualSize); } catch (QemuImgException e) { s_logger.error("Failed to convert " + srcFile.getFileName() + " to " + destFile.getFileName() + " the error was: " + e.getMessage()); newDisk = null; @@ -1264,18 +1269,19 @@ public KVMPhysicalDisk copyPhysicalDisk(KVMPhysicalDisk disk, String name, KVMSt try { srcFile = new QemuImgFile(sourcePath, sourceFormat); + String rbdDestPath = destPool.getSourceDir() + "/" + name; String rbdDestFile = KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(), destPool.getSourcePort(), destPool.getAuthUserName(), destPool.getAuthSecret(), - destPool.getSourceDir() + "/" + name); + rbdDestPath); destFile = new QemuImgFile(rbdDestFile, destFormat); - s_logger.debug("Starting copy from source image " + srcFile.getFileName() + " to RBD image " + destPool.getSourceDir() + "/" + name); + s_logger.debug("Starting copy from source image " + srcFile.getFileName() + " to RBD image " + rbdDestPath); qemu.convert(srcFile, destFile); - s_logger.debug("Succesfully converted source image " + srcFile.getFileName() + " to RBD image " + destPool.getSourceDir() + "/" + name); + s_logger.debug("Succesfully converted source image " + srcFile.getFileName() + " to RBD image " + rbdDestPath); - /* We still have to create and protect a RBD snapshot in order to do cloning */ + /* We have to stat the RBD image to see how big it became afterwards */ Rados r = new Rados(destPool.getAuthUserName()); r.confSet("mon_host", destPool.getSourceHost() + ":" + destPool.getSourcePort()); r.confSet("key", destPool.getAuthSecret()); @@ -1287,8 +1293,12 @@ public KVMPhysicalDisk copyPhysicalDisk(KVMPhysicalDisk disk, String name, KVMSt Rbd rbd = new Rbd(io); RbdImage image = rbd.open(name); - + RbdImageInfo rbdInfo = image.stat(); + newDisk.setSize(rbdInfo.size); + newDisk.setVirtualSize(rbdInfo.size); + s_logger.debug("After copy the resulting RBD image " + rbdDestPath + " is " + rbdInfo.size + " bytes long"); rbd.close(image); + r.ioCtxDestroy(io); } catch (QemuImgException e) { s_logger.error("Failed to convert from " + srcFile.getFileName() + " to " + destFile.getFileName() + " the error was: " + e.getMessage()); diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/CPUStat.java b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/CPUStat.java index 38b7e8ef9e..d8228a4202 100644 --- a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/CPUStat.java +++ b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/CPUStat.java @@ -17,12 +17,12 @@ package org.apache.cloudstack.utils.linux; -import org.apache.log4j.Logger; - import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; +import org.apache.log4j.Logger; + public class CPUStat { private static final Logger s_logger = Logger.getLogger(CPUStat.class); @@ -52,8 +52,9 @@ private void init() { private UptimeStats getUptimeAndCpuIdleTime() { UptimeStats uptime = new UptimeStats(0d, 0d); - try { - String[] stats = new Scanner(new File(_uptimeFile)).useDelimiter("\\Z").next().split("\\s+"); + File f = new File(_uptimeFile); + try (Scanner scanner = new Scanner(f);) { + String[] stats = scanner.useDelimiter("\\Z").next().split("\\s+"); uptime = new UptimeStats(Double.parseDouble(stats[0]), Double.parseDouble(stats[1])); } catch (FileNotFoundException ex) { s_logger.warn("File " + _uptimeFile + " not found:" + ex.toString()); diff --git a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/MemStat.java b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/MemStat.java index 1e3c872c35..1d6a4fc5b4 100644 --- a/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/MemStat.java +++ b/plugins/hypervisors/kvm/src/org/apache/cloudstack/utils/linux/MemStat.java @@ -16,11 +16,10 @@ // under the License. package org.apache.cloudstack.utils.linux; -import java.util.HashMap; -import java.util.Map; - import java.io.File; import java.io.FileNotFoundException; +import java.util.HashMap; +import java.util.Map; import java.util.Scanner; public class MemStat { @@ -29,7 +28,7 @@ public class MemStat { protected final static String CACHE_KEY = "Cached"; protected final static String TOTAL_KEY = "MemTotal"; - private Map _memStats = new HashMap(); + private final Map _memStats = new HashMap(); public MemStat() { } @@ -51,9 +50,9 @@ public Double getCache() { } public void refresh() { - try { - Scanner fileScanner = new Scanner(new File(MEMINFO_FILE)); - parseFromScanner(fileScanner); + File f = new File(MEMINFO_FILE); + try (Scanner scanner = new Scanner(f)) { + parseFromScanner(scanner); } catch (FileNotFoundException ex) { throw new RuntimeException("File " + MEMINFO_FILE + " not found:" + ex.toString()); } diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java index bf4546c63d..789da343a3 100644 --- a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java +++ b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java @@ -359,6 +359,14 @@ public void testGetNicStats() { assertNotNull(stats); } + @Test + public void diskUuidToSerialTest() { + String uuid = "38400000-8cf0-11bd-b24e-10b96e4ef00d"; + String expected = "384000008cf011bdb24e"; + LibvirtComputingResource lcr = new LibvirtComputingResource(); + Assert.assertEquals(expected, lcr.diskUuidToSerial(uuid)); + } + @Test public void testUUID() { String uuid = "1"; diff --git a/plugins/hypervisors/ovm/pom.xml b/plugins/hypervisors/ovm/pom.xml index 921fceab68..d26d9acfeb 100644 --- a/plugins/hypervisors/ovm/pom.xml +++ b/plugins/hypervisors/ovm/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/simulator/pom.xml b/plugins/hypervisors/simulator/pom.xml index 67d85d5ebe..5dbf4bdf2d 100644 --- a/plugins/hypervisors/simulator/pom.xml +++ b/plugins/hypervisors/simulator/pom.xml @@ -22,7 +22,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml cloud-plugin-hypervisor-simulator diff --git a/plugins/hypervisors/ucs/pom.xml b/plugins/hypervisors/ucs/pom.xml index 80405e48be..d89d5f3a2a 100755 --- a/plugins/hypervisors/ucs/pom.xml +++ b/plugins/hypervisors/ucs/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml cloud-plugin-hypervisor-ucs diff --git a/plugins/hypervisors/vmware/pom.xml b/plugins/hypervisors/vmware/pom.xml index 48f362cc1a..c2015c30a5 100644 --- a/plugins/hypervisors/vmware/pom.xml +++ b/plugins/hypervisors/vmware/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java index 9ac32d4757..88ed576283 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java @@ -69,6 +69,7 @@ import com.cloud.hypervisor.HypervisorGuru; import com.cloud.hypervisor.HypervisorGuruBase; import com.cloud.hypervisor.vmware.manager.VmwareManager; +import com.cloud.hypervisor.vmware.mo.DiskControllerType; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; @@ -208,6 +209,12 @@ public VirtualMachineTO implement(VirtualMachineProfile vm) { details.put(VmDetailConstants.ROOK_DISK_CONTROLLER, _vmwareMgr.getRootDiskController()); } } + String diskController = details.get(VmDetailConstants.DATA_DISK_CONTROLLER); + if (userVm) { + if (diskController == null) { + details.put(VmDetailConstants.DATA_DISK_CONTROLLER, DiskControllerType.lsilogic.toString()); + } + } List nicProfiles = vm.getNics(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java index 35e275e004..72ee2184e3 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java @@ -78,5 +78,6 @@ public interface VmwareManager { boolean isLegacyZone(long dcId); + public String getDataDiskController(); boolean hasNexusVSM(Long clusterId); } 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 e852948b49..2bac9be134 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -185,6 +185,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw private String _rootDiskController = DiskControllerType.ide.toString(); + private String _dataDiskController = DiskControllerType.osdefault.toString(); + private final Map _storageMounts = new HashMap(); private final Random _rand = new Random(System.currentTimeMillis()); @@ -478,6 +480,7 @@ public void setupResourceStartupParams(Map params) { params.put("service.console.name", _serviceConsoleName); params.put("management.portgroup.name", _managemetPortGroupName); params.put("vmware.root.disk.controller", _rootDiskController); + params.put("vmware.data.disk.controller", _dataDiskController); params.put("vmware.recycle.hung.wokervm", _recycleHungWorker); params.put("ports.per.dvportgroup", _portsPerDvPortGroup); } @@ -930,6 +933,11 @@ public String getRootDiskController() { return _rootDiskController; } + @Override + public String getDataDiskController() { + return _dataDiskController; + } + @Override public int getVcenterSessionTimeout() { return _vCenterSessionTimeout; 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 9e7db37e23..e9fca8c763 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -33,7 +33,6 @@ 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; @@ -80,6 +79,7 @@ import com.vmware.vim25.VirtualDeviceConfigSpec; import com.vmware.vim25.VirtualDeviceConfigSpecOperation; import com.vmware.vim25.VirtualDisk; +import com.vmware.vim25.VirtualDiskFlatVer2BackingInfo; import com.vmware.vim25.VirtualEthernetCard; import com.vmware.vim25.VirtualEthernetCardDistributedVirtualPortBackingInfo; import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo; @@ -215,8 +215,8 @@ 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; @@ -227,6 +227,7 @@ import com.cloud.hypervisor.vmware.mo.DatastoreFile; import com.cloud.hypervisor.vmware.mo.DatastoreMO; import com.cloud.hypervisor.vmware.mo.DiskControllerType; +import com.cloud.hypervisor.vmware.mo.GuestOsDescriptorType; import com.cloud.hypervisor.vmware.mo.FeatureKeyConstants; import com.cloud.hypervisor.vmware.mo.HostMO; import com.cloud.hypervisor.vmware.mo.HostStorageSystemMO; @@ -566,7 +567,7 @@ private Answer execute(ResizeVolumeCommand cmd) { // 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); @@ -595,7 +596,18 @@ private Answer execute(ResizeVolumeCommand cmd) { s_logger.trace("resize volume done (failed)"); throw new Exception("No such disk device: " + path); } + // IDE virtual disk cannot be re-sized if VM is running + if (vdisk.second() != null && vdisk.second().contains("ide")) { + throw new Exception("Re-sizing a virtual disk over IDE controller is not supported in VMware hypervisor. " + + "Please re-try when virtual disk is attached to a VM using SCSI controller."); + } + VirtualDisk disk = vdisk.first(); + String vmdkAbsFile = getAbsoluteVmdkFile(disk); + if (vmdkAbsFile != null && !vmdkAbsFile.isEmpty()) { + vmMo.updateAdapterTypeIfRequired(vmdkAbsFile); + } + disk.setCapacityInKB(newSize); VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); @@ -1325,6 +1337,63 @@ protected ScaleVmAnswer execute(ScaleVmCommand cmd) { return new ScaleVmAnswer(cmd, true, null); } + protected void ensureDiskControllers(VirtualMachineMO vmMo, Pair controllerInfo) throws Exception { + if (vmMo == null) { + return; + } + + String msg; + String rootDiskController = controllerInfo.first(); + String dataDiskController = controllerInfo.second(); + String scsiDiskController; + String recommendedDiskController = null; + + if (VmwareHelper.isControllerOsRecommended(dataDiskController) || VmwareHelper.isControllerOsRecommended(rootDiskController)) { + recommendedDiskController = vmMo.getRecommendedDiskController(null); + } + scsiDiskController = HypervisorHostHelper.getScsiController(new Pair(rootDiskController, dataDiskController), recommendedDiskController); + if (scsiDiskController == null) { + return; + } + + vmMo.getScsiDeviceControllerKeyNoException(); + // This VM needs SCSI controllers. + // Get count of existing scsi controllers. Helps not to attempt to create more than the maximum allowed 4 + // Get maximum among the bus numbers in use by scsi controllers. Safe to pick maximum, because we always go sequential allocating bus numbers. + Ternary scsiControllerInfo = vmMo.getScsiControllerInfo(); + int requiredNumScsiControllers = VmwareHelper.MAX_SCSI_CONTROLLER_COUNT - scsiControllerInfo.first(); + int availableBusNum = scsiControllerInfo.second() + 1; // method returned current max. bus number + + if (requiredNumScsiControllers == 0) { + return; + } + if (scsiControllerInfo.first() > 0) { + // For VMs which already have a SCSI controller, do NOT attempt to add any more SCSI controllers & return the sub type. + // For Legacy VMs would have only 1 LsiLogic Parallel SCSI controller, and doesn't require more. + // For VMs created post device ordering support, 4 SCSI subtype controllers are ensured during deployment itself. No need to add more. + // For fresh VM deployment only, all required controllers should be ensured. + return; + } + ensureScsiDiskControllers(vmMo, scsiDiskController, requiredNumScsiControllers, availableBusNum); + } + + private void ensureScsiDiskControllers(VirtualMachineMO vmMo, String scsiDiskController, int requiredNumScsiControllers, int availableBusNum) throws Exception { + // Pick the sub type of scsi + if (DiskControllerType.getType(scsiDiskController) == DiskControllerType.pvscsi) { + if (!vmMo.isPvScsiSupported()) { + String msg = "This VM doesn't support Vmware Paravirtual SCSI controller for virtual disks, because the virtual hardware version is less than 7."; + throw new Exception(msg); + } + vmMo.ensurePvScsiDeviceController(requiredNumScsiControllers, availableBusNum); + } else if (DiskControllerType.getType(scsiDiskController) == DiskControllerType.lsisas1068) { + vmMo.ensureLsiLogicSasDeviceControllers(requiredNumScsiControllers, availableBusNum); + } else if (DiskControllerType.getType(scsiDiskController) == DiskControllerType.buslogic) { + vmMo.ensureBusLogicDeviceControllers(requiredNumScsiControllers, availableBusNum); + } else if (DiskControllerType.getType(scsiDiskController) == DiskControllerType.lsilogic) { + vmMo.ensureScsiDeviceControllers(requiredNumScsiControllers, availableBusNum); + } + } + protected StartAnswer execute(StartCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource StartCommand: " + _gson.toJson(cmd)); @@ -1340,7 +1409,29 @@ protected StartAnswer execute(StartCommand cmd) { Pair names = composeVmNames(vmSpec); String vmInternalCSName = names.first(); String vmNameOnVcenter = names.second(); + String dataDiskController = vmSpec.getDetails().get(VmDetailConstants.DATA_DISK_CONTROLLER); + String rootDiskController = vmSpec.getDetails().get(VmDetailConstants.ROOK_DISK_CONTROLLER); + + // If root disk controller is scsi, then data disk controller would also be scsi instead of using 'osdefault' + // This helps avoid mix of different scsi subtype controllers in instance. + if (DiskControllerType.lsilogic == DiskControllerType.getType(rootDiskController)) { + dataDiskController = DiskControllerType.scsi.toString(); + } + + // Validate the controller types + dataDiskController = DiskControllerType.getType(dataDiskController).toString(); + rootDiskController = DiskControllerType.getType(rootDiskController).toString(); + if (DiskControllerType.getType(rootDiskController) == DiskControllerType.none) { + throw new CloudRuntimeException("Invalid root disk controller detected : " + rootDiskController); + } + if (DiskControllerType.getType(dataDiskController) == DiskControllerType.none) { + throw new CloudRuntimeException("Invalid data disk controller detected : " + dataDiskController); + } + + Pair controllerInfo = new Pair(rootDiskController, dataDiskController); + + Boolean systemVm = vmSpec.getType().isUsedBySystem(); // Thus, vmInternalCSName always holds i-x-y, the cloudstack generated internal VM name. VmwareContext context = getServiceContext(); DatacenterMO dcMo = null; @@ -1358,7 +1449,7 @@ protected StartAnswer execute(StartCommand cmd) { s_logger.error(msg); throw new Exception(msg); } - + String guestOsId = translateGuestOsIdentifierEx(vmSpec.getArch(), vmSpec.getOs(), vmSpec.getPlatformEmulator()); DiskTO[] disks = validateDisks(vmSpec.getDisks()); assert (disks.length > 0); NicTO[] nics = vmSpec.getNics(); @@ -1379,6 +1470,9 @@ protected StartAnswer execute(StartCommand cmd) { VirtualMachineDiskInfoBuilder diskInfoBuilder = null; VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmInternalCSName); + DiskControllerType systemVmScsiControllerType = DiskControllerType.lsilogic; + int firstScsiControllerBusNum = 0; + int numScsiControllerForSystemVm = 1; boolean hasSnapshot = false; if (vmMo != null) { s_logger.info("VM " + vmInternalCSName + " already exists, tear down devices for reconfiguration"); @@ -1392,7 +1486,11 @@ protected StartAnswer execute(StartCommand cmd) { vmMo.tearDownDevices(new Class[] {VirtualDisk.class, VirtualEthernetCard.class}); else vmMo.tearDownDevices(new Class[] {VirtualEthernetCard.class}); - vmMo.ensureScsiDeviceController(); + if (systemVm) { + ensureScsiDiskControllers(vmMo, systemVmScsiControllerType.toString(), numScsiControllerForSystemVm, firstScsiControllerBusNum); + } else { + ensureDiskControllers(vmMo, controllerInfo); + } } else { ManagedObjectReference morDc = hyperHost.getHyperHostDatacenter(); assert (morDc != null); @@ -1414,7 +1512,13 @@ protected StartAnswer execute(StartCommand cmd) { vmMo.tearDownDevices(new Class[] {VirtualDisk.class, VirtualEthernetCard.class}); else vmMo.tearDownDevices(new Class[] {VirtualEthernetCard.class}); - vmMo.ensureScsiDeviceController(); + + if (systemVm) { + // System volumes doesn't require more than 1 SCSI controller as there is no requirement for data volumes. + ensureScsiDiskControllers(vmMo, systemVmScsiControllerType.toString(), numScsiControllerForSystemVm, firstScsiControllerBusNum); + } else { + ensureDiskControllers(vmMo, controllerInfo); + } } else { // If a VM with the same name is found in a different cluster in the DC, unregister the old VM and configure a new VM (cold-migration). VirtualMachineMO existingVmInDc = dcMo.findVm(vmInternalCSName); @@ -1458,7 +1562,7 @@ protected StartAnswer execute(StartCommand cmd) { tearDownVm(vmMo); }else if (!hyperHost.createBlankVm(vmNameOnVcenter, vmInternalCSName, vmSpec.getCpus(), vmSpec.getMaxSpeed().intValue(), getReservedCpuMHZ(vmSpec), vmSpec.getLimitCpuUse(), (int)(vmSpec.getMaxRam() / (1024 * 1024)), getReservedMemoryMb(vmSpec), - translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs(), vmSpec.getPlatformEmulator()).value(), rootDiskDataStoreDetails.first(), false)) { + guestOsId, rootDiskDataStoreDetails.first(), false, controllerInfo, systemVm)) { throw new Exception("Failed to create VM. vmName: " + vmInternalCSName); } } @@ -1482,7 +1586,6 @@ protected StartAnswer execute(StartCommand cmd) { } VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); - String guestOsId = translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs(), vmSpec.getPlatformEmulator()).value(); VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(), getReservedCpuMHZ(vmSpec), (int)(vmSpec.getMaxRam() / (1024 * 1024)), getReservedMemoryMb(vmSpec), @@ -1520,7 +1623,7 @@ protected StartAnswer execute(StartCommand cmd) { int scsiUnitNumber = 0; int nicUnitNumber = 0; int ideControllerKey = vmMo.getIDEDeviceControllerKey(); - int scsiControllerKey = vmMo.getScsiDeviceControllerKey(); + int scsiControllerKey = vmMo.getGenericScsiDeviceControllerKeyNoException(); int controllerKey; // @@ -1619,7 +1722,31 @@ protected StartAnswer execute(StartCommand cmd) { VirtualMachineDiskInfo matchingExistingDisk = getMatchingExistingDisk(diskInfoBuilder, vol, hyperHost, context); controllerKey = getDiskController(matchingExistingDisk, vol, vmSpec, ideControllerKey, scsiControllerKey); + String diskController = getDiskController(vmMo, matchingExistingDisk, vol, new Pair(rootDiskController, dataDiskController)); + if (DiskControllerType.getType(diskController) == DiskControllerType.osdefault) { + diskController = vmMo.getRecommendedDiskController(null); + } + if (DiskControllerType.getType(diskController) == DiskControllerType.ide) { + controllerKey = vmMo.getIDEControllerKey(ideUnitNumber); + if (vol.getType() == Volume.Type.DATADISK) { + // Could be result of flip due to user configured setting or "osdefault" for data disks + // Ensure maximum of 2 data volumes over IDE controller, 3 includeing root volume + if (vmMo.getNumberOfVirtualDisks() > 3) { + throw new CloudRuntimeException("Found more than 3 virtual disks attached to this VM [" + vmMo.getVmName() + "]. Unable to implement the disks over " + + diskController + " controller, as maximum number of devices supported over IDE controller is 4 includeing CDROM device."); + } + } + } else { + controllerKey = vmMo.getScsiDiskControllerKeyNoException(diskController); + if (controllerKey == -1) { + // This may happen for ROOT legacy VMs which doesn't have recommended disk controller when global configuration parameter 'vmware.root.disk.controller' is set to "osdefault" + // Retrieve existing controller and use. + Ternary vmScsiControllerInfo = vmMo.getScsiControllerInfo(); + DiskControllerType existingControllerType = vmScsiControllerInfo.third(); + controllerKey = vmMo.getScsiDiskControllerKeyNoException(existingControllerType.toString()); + } + } if (!hasSnapshot) { deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); @@ -1648,7 +1775,7 @@ protected StartAnswer execute(StartCommand cmd) { VirtualDevice device = VmwareHelper.prepareDiskDevice(vmMo, null, controllerKey, diskChain, volumeDsDetails.first(), - (controllerKey == ideControllerKey) ? ideUnitNumber++ : scsiUnitNumber++, i + 1); + (controllerKey == vmMo.getIDEControllerKey(ideUnitNumber)) ? ((ideUnitNumber++) % VmwareHelper.MAX_IDE_CONTROLLER_COUNT) : scsiUnitNumber++, i + 1); deviceConfigSpecArray[i].setDevice(device); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.ADD); @@ -1660,7 +1787,7 @@ protected StartAnswer execute(StartCommand cmd) { } else { if (controllerKey == scsiControllerKey && VmwareHelper.isReservedScsiDeviceNumber(scsiUnitNumber)) scsiUnitNumber++; - if (controllerKey == ideControllerKey) + if (controllerKey == vmMo.getIDEControllerKey(ideUnitNumber)) ideUnitNumber++; else scsiUnitNumber++; @@ -2187,6 +2314,36 @@ private int getDiskController(VirtualMachineDiskInfo matchingExistingDisk, DiskT return controllerKey; } + private String getDiskController(VirtualMachineMO vmMo, VirtualMachineDiskInfo matchingExistingDisk, DiskTO vol, Pair controllerInfo) throws Exception { + int controllerKey; + DiskControllerType controllerType = DiskControllerType.none; + if (matchingExistingDisk != null) { + String currentBusName = matchingExistingDisk.getDiskDeviceBusName(); + if (currentBusName != null) { + s_logger.info("Chose disk controller based on existing information: " + currentBusName); + if (currentBusName.startsWith("ide")) { + controllerType = DiskControllerType.ide; + } else if (currentBusName.startsWith("scsi")) { + controllerType = DiskControllerType.scsi; + } + } + if (controllerType == DiskControllerType.scsi || controllerType == DiskControllerType.none) { + Ternary vmScsiControllerInfo = vmMo.getScsiControllerInfo(); + controllerType = vmScsiControllerInfo.third(); + } + return controllerType.toString(); + } + + if (vol.getType() == Volume.Type.ROOT) { + s_logger.info("Chose disk controller for vol " + vol.getType() + " -> " + controllerInfo.first() + + ", based on root disk controller settings at global configuration setting."); + return controllerInfo.first(); + } else { + s_logger.info("Chose disk controller for vol " + vol.getType() + " -> " + controllerInfo.second() + + ", based on default data disk controller setting i.e. Operating system recommended."); // Need to bring in global configuration setting & template level setting. + return controllerInfo.second(); + } + } private void postDiskConfigBeforeStart(VirtualMachineMO vmMo, VirtualMachineTO vmSpec, DiskTO[] sortedDisks, int ideControllerKey, int scsiControllerKey, Map iqnToPath, VmwareHypervisorHost hyperHost, VmwareContext context) throws Exception { VirtualMachineDiskInfoBuilder diskInfoBuilder = vmMo.getDiskInfoBuilder(); @@ -3118,8 +3275,13 @@ protected Answer execute(MigrateWithStorageCommand cmd) { relocateSpec.setDatastore(morTgtDatastore); } diskLocator = new VirtualMachineRelocateSpecDiskLocator(); - diskLocator.setDatastore(morTgtDatastore); - int diskId = getVirtualDiskInfo(vmMo, volume.getPath() + ".vmdk"); + diskLocator.setDatastore(morDsAtSource); + Pair diskInfo = getVirtualDiskInfo(vmMo, volume.getPath() + ".vmdk"); + String vmdkAbsFile = getAbsoluteVmdkFile(diskInfo.first()); + if (vmdkAbsFile != null && !vmdkAbsFile.isEmpty()) { + vmMo.updateAdapterTypeIfRequired(vmdkAbsFile); + } + int diskId = diskInfo.first().getKey(); diskLocator.setDiskId(diskId); diskLocators.add(diskLocator); @@ -3194,6 +3356,7 @@ protected Answer execute(MigrateWithStorageCommand cmd) { s_logger.debug("Successfully consolidated disks of VM " + vmName + "."); } + VirtualMachineDiskInfoBuilder diskInfoBuilder = vmMo.getDiskInfoBuilder(); // Update and return volume path for every disk because that could have changed after migration for (Pair entry : volToFiler) { volume = entry.first(); @@ -3202,8 +3365,12 @@ protected Answer execute(MigrateWithStorageCommand cmd) { for (VirtualDisk disk : disks) { if (volumeDeviceKey.get(volumeId) == disk.getKey()) { VolumeObjectTO newVol = new VolumeObjectTO(); + String newPath = vmMo.getVmdkFileBaseName(disk); + String poolName = entry.second().getUuid().replace("-", ""); + VirtualMachineDiskInfo diskInfo = diskInfoBuilder.getDiskInfoByBackingFileBaseName(newPath, poolName); newVol.setId(volumeId); - newVol.setPath(vmMo.getVmdkFileBaseName(disk)); + newVol.setChainInfo(this._gson.toJson(diskInfo)); + newVol.setPath(newPath); volumeToList.add(newVol); break; } @@ -3281,7 +3448,13 @@ private Answer execute(MigrateVolumeCommand cmd) { DatastoreMO targetDsMo = new DatastoreMO(srcHyperHost.getContext(), morDs); String fullVolumePath = VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(targetDsMo, vmName, volumePath + ".vmdk"); - int diskId = getVirtualDiskInfo(vmMo, volumePath + ".vmdk"); + Pair diskInfo = getVirtualDiskInfo(vmMo, volumePath + ".vmdk"); + String vmdkAbsFile = getAbsoluteVmdkFile(diskInfo.first()); + if (vmdkAbsFile != null && !vmdkAbsFile.isEmpty()) { + vmMo.updateAdapterTypeIfRequired(vmdkAbsFile); + } + int diskId = diskInfo.first().getKey(); + diskLocator = new VirtualMachineRelocateSpecDiskLocator(); diskLocator.setDatastore(morDs); diskLocator.setDiskId(diskId); @@ -3329,7 +3502,11 @@ private Answer execute(MigrateVolumeCommand cmd) { } } - return new MigrateVolumeAnswer(cmd, true, null, volumePath); + VirtualMachineDiskInfoBuilder diskInfoBuilder = vmMo.getDiskInfoBuilder(); + String chainInfo = _gson.toJson(diskInfoBuilder.getDiskInfoByBackingFileBaseName(volumePath, poolTo.getUuid().replace("-", ""))); + MigrateVolumeAnswer answer = new MigrateVolumeAnswer(cmd, true, null, volumePath); + answer.setVolumeChainInfo(chainInfo); + return answer; } catch (Exception e) { String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString(); s_logger.error(msg, e); @@ -3337,12 +3514,12 @@ private Answer execute(MigrateVolumeCommand cmd) { } } - private int getVirtualDiskInfo(VirtualMachineMO vmMo, String srcDiskName) throws Exception { + private Pair getVirtualDiskInfo(VirtualMachineMO vmMo, String srcDiskName) throws Exception { Pair deviceInfo = vmMo.getDiskDevice(srcDiskName, false); if (deviceInfo == null) { throw new Exception("No such disk device: " + srcDiskName); } - return deviceInfo.first().getKey(); + return deviceInfo; } private VmwareHypervisorHost getTargetHyperHost(DatacenterMO dcMo, String destIp) throws Exception { @@ -4503,6 +4680,17 @@ private VirtualMachineGuestOsIdentifier translateGuestOsIdentifier(String cpuArc return VirtualMachineGuestOsIdentifier.OTHER_GUEST; } + private String translateGuestOsIdentifierEx(String cpuArchitecture, String guestOs, String cloudGuestOs) { + if (cloudGuestOs != null) { + GuestOsDescriptorType guestOsId = GuestOsDescriptorType.fromValue(cloudGuestOs); + if (guestOsId != null) { + s_logger.debug("Found guest OS mapping name for guest os: " + guestOs); + return guestOsId.toString(); + } + } + return translateGuestOsIdentifier(cpuArchitecture, guestOs, cloudGuestOs).value(); + } + private HashMap getHostVmStateReport() throws Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); @@ -4943,8 +5131,10 @@ public boolean configure(String name, Map params) throws Configu value = (String)params.get("vmware.root.disk.controller"); if (value != null && value.equalsIgnoreCase("scsi")) _rootDiskController = DiskControllerType.scsi; - else + else if (value != null && value.equalsIgnoreCase("ide")) _rootDiskController = DiskControllerType.ide; + else + _rootDiskController = DiskControllerType.osdefault; Integer intObj = (Integer)params.get("ports.per.dvportgroup"); if (intObj != null) @@ -5168,4 +5358,14 @@ public Answer execute(DestroyCommand cmd) { return new Answer(cmd, false, msg); } } + + private String getAbsoluteVmdkFile(VirtualDisk disk) { + String vmdkAbsFile = null; + VirtualDeviceBackingInfo backingInfo = disk.getBacking(); + if (backingInfo instanceof VirtualDiskFlatVer2BackingInfo) { + VirtualDiskFlatVer2BackingInfo diskBackingInfo = (VirtualDiskFlatVer2BackingInfo)backingInfo; + vmdkAbsFile = diskBackingInfo.getFileName(); + } + return vmdkAbsFile; + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java index 0ab97c0920..2b710f5f2b 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java @@ -71,12 +71,14 @@ import com.cloud.agent.api.to.DiskTO; import com.cloud.agent.api.to.NfsTO; import com.cloud.hypervisor.vmware.manager.VmwareHostService; +import com.cloud.hypervisor.vmware.manager.VmwareManager; import com.cloud.hypervisor.vmware.manager.VmwareStorageMount; import com.cloud.hypervisor.vmware.mo.ClusterMO; import com.cloud.hypervisor.vmware.mo.CustomFieldConstants; import com.cloud.hypervisor.vmware.mo.DatacenterMO; import com.cloud.hypervisor.vmware.mo.DatastoreFile; import com.cloud.hypervisor.vmware.mo.DatastoreMO; +import com.cloud.hypervisor.vmware.mo.DiskControllerType; import com.cloud.hypervisor.vmware.mo.HostDatastoreSystemMO; import com.cloud.hypervisor.vmware.mo.HostMO; import com.cloud.hypervisor.vmware.mo.HostStorageSystemMO; @@ -100,15 +102,16 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; import com.cloud.vm.VirtualMachine.PowerState; +import com.cloud.vm.VmDetailConstants; public class VmwareStorageProcessor implements StorageProcessor { private static final Logger s_logger = Logger.getLogger(VmwareStorageProcessor.class); - private VmwareHostService hostService; - private boolean _fullCloneFlag; - private VmwareStorageMount mountService; - private VmwareResource resource; - private Integer _timeout; + private final VmwareHostService hostService; + private final boolean _fullCloneFlag; + private final VmwareStorageMount mountService; + private final VmwareResource resource; + private final Integer _timeout; protected Integer _shutdownWaitMs; private final Gson _gson; private final StorageLayer _storage = new JavaStorageLayer(); @@ -1279,10 +1282,10 @@ public Answer attachVolume(AttachCommand cmd) { String storageHost = details.get(DiskTO.STORAGE_HOST); int storagePort = Integer.parseInt(details.get(DiskTO.STORAGE_PORT)); - return this.attachVolume(cmd, cmd.getDisk(), true, isManaged, cmd.getVmName(), iScsiName, storageHost, storagePort); + return this.attachVolume(cmd, cmd.getDisk(), true, isManaged, cmd.getVmName(), iScsiName, storageHost, storagePort, cmd.getControllerInfo()); } - private Answer attachVolume(Command cmd, DiskTO disk, boolean isAttach, boolean isManaged, String vmName, String iScsiName, String storageHost, int storagePort) { + private Answer attachVolume(Command cmd, DiskTO disk, boolean isAttach, boolean isManaged, String vmName, String iScsiName, String storageHost, int storagePort, Map controllerInfo) { VolumeObjectTO volumeTO = (VolumeObjectTO)disk.getData(); DataStoreTO primaryStore = volumeTO.getDataStore(); try { @@ -1342,7 +1345,18 @@ private Answer attachVolume(Command cmd, DiskTO disk, boolean isAttach, boolean AttachAnswer answer = new AttachAnswer(disk); if (isAttach) { - vmMo.attachDisk(new String[] { datastoreVolumePath }, morDs); + Map diskDetails = new HashMap(); + String diskController = null; + if (controllerInfo != null) { + diskController = controllerInfo.get(VmDetailConstants.DATA_DISK_CONTROLLER); + } + if (diskController == null) { + diskController = getLegacyVmDataDiskController(); + } + if (DiskControllerType.getType(diskController) == DiskControllerType.osdefault) { + diskController = vmMo.getRecommendedDiskController(null); + } + vmMo.attachDisk(new String[] {datastoreVolumePath}, morDs, diskController); } else { vmMo.removeAllSnapshots(); vmMo.detachDisk(datastoreVolumePath, false); @@ -1480,7 +1494,7 @@ public Answer dettachIso(DettachCommand cmd) { @Override public Answer dettachVolume(DettachCommand cmd) { - return this.attachVolume(cmd, cmd.getDisk(), false, cmd.isManaged(), cmd.getVmName(), cmd.get_iScsiName(), cmd.getStorageHost(), cmd.getStoragePort()); + return this.attachVolume(cmd, cmd.getDisk(), false, cmd.isManaged(), cmd.getVmName(), cmd.get_iScsiName(), cmd.getStorageHost(), cmd.getStoragePort(), null); } @Override @@ -2225,4 +2239,28 @@ private static String deriveTemplateUuidOnHost(VmwareHypervisorHost hyperHost, S templateUuid = templateUuid.replaceAll("-", ""); return templateUuid; } + + private String getControllerFromConfigurationSetting() throws Exception { + String diskController = null; + VmwareContext context = null; + try { + context = hostService.getServiceContext(null); + VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + diskController = mgr.getDataDiskController(); + } catch (Throwable e) { + if (e instanceof RemoteException) { + s_logger.warn("Encounter remote exception to vCenter, invalidate VMware session context"); + hostService.invalidateServiceContext(context); + } + + String details = "Failed to connect to vCenter due to " + VmwareHelper.getExceptionMessage(e); + s_logger.error(details, e); + } + + return diskController; + } + + private String getLegacyVmDataDiskController() throws Exception { + return DiskControllerType.lsilogic.toString(); + } } diff --git a/plugins/hypervisors/vmware/src/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java b/plugins/hypervisors/vmware/src/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java index da9764de54..4b77aab617 100644 --- a/plugins/hypervisors/vmware/src/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java +++ b/plugins/hypervisors/vmware/src/org/apache/cloudstack/storage/motion/VmwareStorageMotionStrategy.java @@ -207,6 +207,9 @@ private void updateVolumesAfterMigration(Map volumeToPool VolumeVO volumeVO = volDao.findById(volume.getId()); Long oldPoolId = volumeVO.getPoolId(); volumeVO.setPath(volumeTo.getPath()); + if (volumeTo.getChainInfo() != null) { + volumeVO.setChainInfo(volumeTo.getChainInfo()); + } volumeVO.setLastPoolId(oldPoolId); volumeVO.setFolder(pool.getPath()); volumeVO.setPodId(pool.getPodId()); diff --git a/plugins/hypervisors/xenserver/pom.xml b/plugins/hypervisors/xenserver/pom.xml index 8385eff06d..a76ba4edce 100644 --- a/plugins/hypervisors/xenserver/pom.xml +++ b/plugins/hypervisors/xenserver/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/bigswitch-vns/pom.xml b/plugins/network-elements/bigswitch-vns/pom.xml index 4b6fac9b2a..20ac3df4ac 100644 --- a/plugins/network-elements/bigswitch-vns/pom.xml +++ b/plugins/network-elements/bigswitch-vns/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/brocade-vcs/pom.xml b/plugins/network-elements/brocade-vcs/pom.xml index c325987dab..c81634b439 100644 --- a/plugins/network-elements/brocade-vcs/pom.xml +++ b/plugins/network-elements/brocade-vcs/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/cisco-vnmc/pom.xml b/plugins/network-elements/cisco-vnmc/pom.xml index 4e4373d7aa..9ae5d00615 100644 --- a/plugins/network-elements/cisco-vnmc/pom.xml +++ b/plugins/network-elements/cisco-vnmc/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/dns-notifier/pom.xml b/plugins/network-elements/dns-notifier/pom.xml index 32988d0aa1..5466605f2c 100644 --- a/plugins/network-elements/dns-notifier/pom.xml +++ b/plugins/network-elements/dns-notifier/pom.xml @@ -22,7 +22,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml cloud-plugin-example-dns-notifier diff --git a/plugins/network-elements/elastic-loadbalancer/pom.xml b/plugins/network-elements/elastic-loadbalancer/pom.xml index 12fa8a6f44..13eb9e4860 100644 --- a/plugins/network-elements/elastic-loadbalancer/pom.xml +++ b/plugins/network-elements/elastic-loadbalancer/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index d853299eef..11da736d1d 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -148,7 +148,6 @@ public class ElasticLoadBalancerManagerImpl extends ManagerBase implements Elast TrafficType _frontendTrafficType = TrafficType.Guest; Account _systemAcct; - ServiceOfferingVO _elasticLbVmOffering; ScheduledExecutorService _gcThreadPool; String _mgmtCidr; @@ -290,16 +289,19 @@ public boolean configure(String name, Map params) throws Configu } _mgmtCidr = _configDao.getValue(Config.ManagementNetwork.key()); - boolean useLocalStorage = Boolean.parseBoolean(configs.get(DataCenter.SystemVMUseLocalStorageCK)); - _elasticLbVmRamSize = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmMemory.key()), DEFAULT_ELB_VM_RAMSIZE); _elasticLbvmCpuMHz = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmCpuMhz.key()), DEFAULT_ELB_VM_CPU_MHZ); _elasticLbvmNumCpu = NumbersUtil.parseInt(configs.get(Config.ElasticLoadBalancerVmNumVcpu.key()), 1); - _elasticLbVmOffering = new ServiceOfferingVO("System Offering For Elastic LB VM", _elasticLbvmNumCpu, - _elasticLbVmRamSize, _elasticLbvmCpuMHz, 0, 0, true, null, Storage.ProvisioningType.THIN, useLocalStorage, - true, null, true, VirtualMachine.Type.ElasticLoadBalancerVm, true); - _elasticLbVmOffering.setUniqueName(ServiceOffering.elbVmDefaultOffUniqueName); - _elasticLbVmOffering = _serviceOfferingDao.persistSystemServiceOffering(_elasticLbVmOffering); + + List offerings = _serviceOfferingDao.createSystemServiceOfferings("System Offering For Elastic LB VM", + ServiceOffering.elbVmDefaultOffUniqueName, _elasticLbvmNumCpu, _elasticLbVmRamSize, _elasticLbvmCpuMHz, 0, 0, true, null, + Storage.ProvisioningType.THIN, true, null, true, VirtualMachine.Type.ElasticLoadBalancerVm, true); + // this can sometimes happen, if DB is manually or programmatically manipulated + if (offerings == null || offerings.size() < 2) { + String msg = "Data integrity problem : System Offering For Elastic LB VM has been removed?"; + s_logger.error(msg); + throw new ConfigurationException(msg); + } String enabled = _configDao.getValue(Config.ElasticLoadBalancerEnabled.key()); _enabled = (enabled == null) ? false : Boolean.parseBoolean(enabled); @@ -322,7 +324,7 @@ public boolean configure(String name, Map params) throws Configu _itMgr.registerGuru(VirtualMachine.Type.ElasticLoadBalancerVm, this); } - loadBalanceRuleHandler = new LoadBalanceRuleHandler(_elasticLbVmOffering, _instance, _systemAcct); + loadBalanceRuleHandler = new LoadBalanceRuleHandler(_instance, _systemAcct); return true; } diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/LoadBalanceRuleHandler.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/LoadBalanceRuleHandler.java index 32292cddd4..848b91a416 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/LoadBalanceRuleHandler.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/LoadBalanceRuleHandler.java @@ -27,6 +27,9 @@ import javax.inject.Inject; +import com.cloud.configuration.ConfigurationManagerImpl; +import com.cloud.offering.ServiceOffering; +import com.cloud.service.dao.ServiceOfferingDao; import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; @@ -140,15 +143,15 @@ public class LoadBalanceRuleHandler { private PhysicalNetworkServiceProviderDao _physicalProviderDao; @Inject private VirtualRouterProviderDao _vrProviderDao; + @Inject + private ServiceOfferingDao _serviceOfferingDao; static final private String ELB_VM_NAME_PREFIX = "l"; - private final ServiceOfferingVO _elasticLbVmOffering; private final String _instance; private final Account _systemAcct; - public LoadBalanceRuleHandler(ServiceOfferingVO elasticLbVmOffering, String instance, Account systemAcct) { - this._elasticLbVmOffering = elasticLbVmOffering; + public LoadBalanceRuleHandler(String instance, Account systemAcct) { this._instance = instance; this._systemAcct = systemAcct; } @@ -272,12 +275,13 @@ private DomainRouterVO deployELBVm(Network guestNetwork, DeployDestination dest, throw new CloudRuntimeException("Cannot find virtual router provider " + typeString + " as service provider " + provider.getId()); } - elbVm = new DomainRouterVO(id, _elasticLbVmOffering.getId(), vrProvider.getId(), VirtualMachineName.getSystemVmName(id, _instance, ELB_VM_NAME_PREFIX), + ServiceOfferingVO elasticLbVmOffering = _serviceOfferingDao.findDefaultSystemOffering(ServiceOffering.elbVmDefaultOffUniqueName, ConfigurationManagerImpl.SystemVMUseLocalStorage.valueIn(dest.getDataCenter().getId())); + elbVm = new DomainRouterVO(id, elasticLbVmOffering.getId(), vrProvider.getId(), VirtualMachineName.getSystemVmName(id, _instance, ELB_VM_NAME_PREFIX), template.getId(), template.getHypervisorType(), template.getGuestOSId(), owner.getDomainId(), owner.getId(), false, 0, false, RedundantState.UNKNOWN, - _elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm, null); + elasticLbVmOffering.getOfferHA(), false, VirtualMachine.Type.ElasticLoadBalancerVm, null); elbVm.setRole(Role.LB); elbVm = _routerDao.persist(elbVm); - _itMgr.allocate(elbVm.getInstanceName(), template, _elasticLbVmOffering, networks, plan, null); + _itMgr.allocate(elbVm.getInstanceName(), template, elasticLbVmOffering, networks, plan, null); elbVm = _routerDao.findById(elbVm.getId()); //TODO: create usage stats } diff --git a/plugins/network-elements/f5/pom.xml b/plugins/network-elements/f5/pom.xml index e0165d25e1..621ac625b8 100644 --- a/plugins/network-elements/f5/pom.xml +++ b/plugins/network-elements/f5/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/globodns/pom.xml b/plugins/network-elements/globodns/pom.xml index abea5f83aa..8f22c1e60b 100644 --- a/plugins/network-elements/globodns/pom.xml +++ b/plugins/network-elements/globodns/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/internal-loadbalancer/pom.xml b/plugins/network-elements/internal-loadbalancer/pom.xml index 22d32c9be4..5a9f5ef6e6 100644 --- a/plugins/network-elements/internal-loadbalancer/pom.xml +++ b/plugins/network-elements/internal-loadbalancer/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java index cf7715071f..eee1f12261 100644 --- a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java +++ b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java @@ -27,6 +27,7 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.configuration.ConfigurationManagerImpl; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO; @@ -376,15 +377,15 @@ public boolean configure(String name, Map params) throws Configu //if offering wasn't set, try to get the default one if (_internalLbVmOfferingId == 0L) { - boolean useLocalStorage = Boolean.parseBoolean(configs.get(DataCenter.SystemVMUseLocalStorageCK)); - ServiceOfferingVO newOff = - new ServiceOfferingVO("System Offering For Internal LB VM", 1, InternalLoadBalancerVMManager.DEFAULT_INTERNALLB_VM_RAMSIZE, + List offerings = _serviceOfferingDao.createSystemServiceOfferings("System Offering For Internal LB VM", + ServiceOffering.internalLbVmDefaultOffUniqueName, 1, InternalLoadBalancerVMManager.DEFAULT_INTERNALLB_VM_RAMSIZE, InternalLoadBalancerVMManager.DEFAULT_INTERNALLB_VM_CPU_MHZ, null, null, true, null, - Storage.ProvisioningType.THIN, useLocalStorage, true, null, true, - VirtualMachine.Type.InternalLoadBalancerVm, true); - newOff.setUniqueName(ServiceOffering.internalLbVmDefaultOffUniqueName); - newOff = _serviceOfferingDao.persistSystemServiceOffering(newOff); - _internalLbVmOfferingId = newOff.getId(); + Storage.ProvisioningType.THIN, true, null, true, VirtualMachine.Type.InternalLoadBalancerVm, true); + if (offerings == null || offerings.size() < 2) { + String msg = "Data integrity problem : System Offering For Internal LB VM has been removed?"; + s_logger.error(msg); + throw new ConfigurationException(msg); + } } _itMgr.registerGuru(VirtualMachine.Type.InternalLoadBalancerVm, this); @@ -616,9 +617,14 @@ protected List findOrDeployInternalLbVm(Network guestNetwork, Ip } LinkedHashMap> networks = createInternalLbVmNetworks(guestNetwork, plan, requestedGuestIp); + long internalLbVmOfferingId = _internalLbVmOfferingId; + if (internalLbVmOfferingId == 0L) { + ServiceOfferingVO serviceOffering = _serviceOfferingDao.findDefaultSystemOffering(ServiceOffering.internalLbVmDefaultOffUniqueName, ConfigurationManagerImpl.SystemVMUseLocalStorage.valueIn(dest.getDataCenter().getId())); + internalLbVmOfferingId = serviceOffering.getId(); + } //Pass startVm=false as we are holding the network lock that needs to be released at the end of vm allocation DomainRouterVO internalLbVm = - deployInternalLbVm(owner, dest, plan, params, internalLbProviderId, _internalLbVmOfferingId, guestNetwork.getVpcId(), networks, false); + deployInternalLbVm(owner, dest, plan, params, internalLbProviderId, internalLbVmOfferingId, guestNetwork.getVpcId(), networks, false); if (internalLbVm != null) { _internalLbVmDao.addRouterToGuestNetwork(internalLbVm, guestNetwork); internalLbVms.add(internalLbVm); diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java index 375ba5e593..5b5d65a3cd 100644 --- a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java +++ b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMManagerTest.java @@ -121,7 +121,12 @@ public void setUp() { ServiceOfferingVO off = new ServiceOfferingVO("alena", 1, 1, 1, 1, 1, false, "alena", Storage.ProvisioningType.THIN, false, false, null, false, VirtualMachine.Type.InternalLoadBalancerVm, false); off = setId(off, 1); - Mockito.when(_svcOffDao.persistSystemServiceOffering(Matchers.any(ServiceOfferingVO.class))).thenReturn(off); + List list = new ArrayList(); + list.add(off); + list.add(off); + Mockito.when(_svcOffDao.createSystemServiceOfferings(Matchers.anyString(), Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyInt(), + Matchers.anyInt(), Matchers.anyInt(), Matchers.anyBoolean(), Matchers.anyString(), Matchers.any(Storage.ProvisioningType.class), Matchers.anyBoolean(), + Matchers.anyString(), Matchers.anyBoolean(), Matchers.any(VirtualMachine.Type.class), Matchers.anyBoolean())).thenReturn(list); ComponentContext.initComponentsLifeCycle(); diff --git a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java index 11a0bed8e8..ec636fa797 100644 --- a/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java +++ b/plugins/network-elements/internal-loadbalancer/test/org/apache/cloudstack/internallbvmmgr/InternalLBVMServiceTest.java @@ -17,6 +17,8 @@ package org.apache.cloudstack.internallbvmmgr; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; import javax.inject.Inject; @@ -91,7 +93,12 @@ public void setUp() { ServiceOfferingVO off = new ServiceOfferingVO("alena", 1, 1, 1, 1, 1, false, "alena", Storage.ProvisioningType.THIN, false, false, null, false, VirtualMachine.Type.InternalLoadBalancerVm, false); off = setId(off, 1); - Mockito.when(_svcOffDao.persistSystemServiceOffering(Matchers.any(ServiceOfferingVO.class))).thenReturn(off); + List list = new ArrayList(); + list.add(off); + list.add(off); + Mockito.when(_svcOffDao.createSystemServiceOfferings(Matchers.anyString(), Matchers.anyString(), Matchers.anyInt(), Matchers.anyInt(), Matchers.anyInt(), + Matchers.anyInt(), Matchers.anyInt(), Matchers.anyBoolean(), Matchers.anyString(), Matchers.any(Storage.ProvisioningType.class), Matchers.anyBoolean(), + Matchers.anyString(), Matchers.anyBoolean(), Matchers.any(VirtualMachine.Type.class), Matchers.anyBoolean())).thenReturn(list); ComponentContext.initComponentsLifeCycle(); diff --git a/plugins/network-elements/juniper-contrail/pom.xml b/plugins/network-elements/juniper-contrail/pom.xml index 53b349efc3..e311f083d2 100644 --- a/plugins/network-elements/juniper-contrail/pom.xml +++ b/plugins/network-elements/juniper-contrail/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/juniper-srx/pom.xml b/plugins/network-elements/juniper-srx/pom.xml index 3c357dd89f..234249982a 100644 --- a/plugins/network-elements/juniper-srx/pom.xml +++ b/plugins/network-elements/juniper-srx/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/midonet/pom.xml b/plugins/network-elements/midonet/pom.xml index 9c5e815ae9..595497e99f 100644 --- a/plugins/network-elements/midonet/pom.xml +++ b/plugins/network-elements/midonet/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/netscaler/pom.xml b/plugins/network-elements/netscaler/pom.xml index 496c11fa2f..3c9a05df9b 100644 --- a/plugins/network-elements/netscaler/pom.xml +++ b/plugins/network-elements/netscaler/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/nicira-nvp/pom.xml b/plugins/network-elements/nicira-nvp/pom.xml index f0fea41b13..73e4352a7b 100644 --- a/plugins/network-elements/nicira-nvp/pom.xml +++ b/plugins/network-elements/nicira-nvp/pom.xml @@ -25,7 +25,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/nuage-vsp/pom.xml b/plugins/network-elements/nuage-vsp/pom.xml index b2b2223a6f..f2ca145048 100644 --- a/plugins/network-elements/nuage-vsp/pom.xml +++ b/plugins/network-elements/nuage-vsp/pom.xml @@ -25,7 +25,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/opendaylight/pom.xml b/plugins/network-elements/opendaylight/pom.xml index ebd32e3ff5..93baf6ee52 100644 --- a/plugins/network-elements/opendaylight/pom.xml +++ b/plugins/network-elements/opendaylight/pom.xml @@ -25,7 +25,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/ovs/pom.xml b/plugins/network-elements/ovs/pom.xml index 8dfb68db3b..63898329dd 100644 --- a/plugins/network-elements/ovs/pom.xml +++ b/plugins/network-elements/ovs/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/palo-alto/pom.xml b/plugins/network-elements/palo-alto/pom.xml index e36f7ab711..0db7620e4e 100644 --- a/plugins/network-elements/palo-alto/pom.xml +++ b/plugins/network-elements/palo-alto/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/stratosphere-ssp/pom.xml b/plugins/network-elements/stratosphere-ssp/pom.xml index 8a46e34695..ae109eaef0 100644 --- a/plugins/network-elements/stratosphere-ssp/pom.xml +++ b/plugins/network-elements/stratosphere-ssp/pom.xml @@ -25,7 +25,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/network-elements/vxlan/pom.xml b/plugins/network-elements/vxlan/pom.xml index be3d886d93..935dd60a04 100644 --- a/plugins/network-elements/vxlan/pom.xml +++ b/plugins/network-elements/vxlan/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/pom.xml b/plugins/pom.xml index d2aa80e25c..1706fe8a69 100755 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -17,7 +17,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT diff --git a/plugins/storage-allocators/random/pom.xml b/plugins/storage-allocators/random/pom.xml index feadda0c23..3922d6395c 100644 --- a/plugins/storage-allocators/random/pom.xml +++ b/plugins/storage-allocators/random/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/storage/image/default/pom.xml b/plugins/storage/image/default/pom.xml index 36544c7067..6e42eeddd8 100644 --- a/plugins/storage/image/default/pom.xml +++ b/plugins/storage/image/default/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/image/s3/pom.xml b/plugins/storage/image/s3/pom.xml index 989a8d2bac..0ea7f8c6ba 100644 --- a/plugins/storage/image/s3/pom.xml +++ b/plugins/storage/image/s3/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/image/sample/pom.xml b/plugins/storage/image/sample/pom.xml index 01d1f945ca..caa5509ce9 100644 --- a/plugins/storage/image/sample/pom.xml +++ b/plugins/storage/image/sample/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/image/swift/pom.xml b/plugins/storage/image/swift/pom.xml index 3ab5d8cc62..bceb104e0d 100644 --- a/plugins/storage/image/swift/pom.xml +++ b/plugins/storage/image/swift/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/cloudbyte/pom.xml b/plugins/storage/volume/cloudbyte/pom.xml index 8e67c8a65d..c8f25e3fe1 100755 --- a/plugins/storage/volume/cloudbyte/pom.xml +++ b/plugins/storage/volume/cloudbyte/pom.xml @@ -26,7 +26,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/default/pom.xml b/plugins/storage/volume/default/pom.xml index 0bfc99857d..887353ce83 100644 --- a/plugins/storage/volume/default/pom.xml +++ b/plugins/storage/volume/default/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/nexenta/pom.xml b/plugins/storage/volume/nexenta/pom.xml index 280a0c7271..98cc78bfbd 100644 --- a/plugins/storage/volume/nexenta/pom.xml +++ b/plugins/storage/volume/nexenta/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/sample/pom.xml b/plugins/storage/volume/sample/pom.xml index 896baeecf4..cc03898602 100644 --- a/plugins/storage/volume/sample/pom.xml +++ b/plugins/storage/volume/sample/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/storage/volume/solidfire/pom.xml b/plugins/storage/volume/solidfire/pom.xml index 0ade5996d0..fc79c1109a 100644 --- a/plugins/storage/volume/solidfire/pom.xml +++ b/plugins/storage/volume/solidfire/pom.xml @@ -16,7 +16,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../../pom.xml diff --git a/plugins/user-authenticators/ldap/pom.xml b/plugins/user-authenticators/ldap/pom.xml index 40a425072d..ec2813e00d 100644 --- a/plugins/user-authenticators/ldap/pom.xml +++ b/plugins/user-authenticators/ldap/pom.xml @@ -15,7 +15,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/md5/pom.xml b/plugins/user-authenticators/md5/pom.xml index 53e8d0215c..58642f7856 100644 --- a/plugins/user-authenticators/md5/pom.xml +++ b/plugins/user-authenticators/md5/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/pbkdf2/pom.xml b/plugins/user-authenticators/pbkdf2/pom.xml index 77a7bd1e60..8ae8b9b9c5 100644 --- a/plugins/user-authenticators/pbkdf2/pom.xml +++ b/plugins/user-authenticators/pbkdf2/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/plain-text/pom.xml b/plugins/user-authenticators/plain-text/pom.xml index 3d3fa3091e..c1a74ed025 100644 --- a/plugins/user-authenticators/plain-text/pom.xml +++ b/plugins/user-authenticators/plain-text/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/plugins/user-authenticators/saml2/pom.xml b/plugins/user-authenticators/saml2/pom.xml index fed1a5406d..d58ef0bb50 100644 --- a/plugins/user-authenticators/saml2/pom.xml +++ b/plugins/user-authenticators/saml2/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml @@ -47,5 +47,10 @@ cloud-api ${project.version}
+ + org.apache.cloudstack + cloud-framework-config + ${project.version} +
diff --git a/plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml b/plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml index 92f89b8dfb..d3a21947a2 100644 --- a/plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml +++ b/plugins/user-authenticators/saml2/resources/META-INF/cloudstack/saml2/spring-saml2-context.xml @@ -33,4 +33,7 @@ + + + diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java new file mode 100644 index 0000000000..54ce418b2c --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/AuthorizeSAMLSSOCmd.java @@ -0,0 +1,105 @@ +// 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.api.command; + +import com.cloud.domain.Domain; +import com.cloud.user.Account; +import com.cloud.user.UserAccount; +import org.apache.cloudstack.acl.SecurityChecker; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.IdpResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.saml.SAML2AuthManager; +import org.apache.log4j.Logger; + +import javax.inject.Inject; + +@APICommand(name = "authorizeSamlSso", description = "Allow or disallow a user to use SAML SSO", responseObject = SuccessResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) +public class AuthorizeSAMLSSOCmd extends BaseCmd { + public static final Logger s_logger = Logger.getLogger(AuthorizeSAMLSSOCmd.class.getName()); + + private static final String s_name = "authorizesamlssoresponse"; + + @Inject + SAML2AuthManager _samlAuthManager; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.USER_ID, type = CommandType.UUID, entityType = UserResponse.class, required = true, description = "User uuid") + private Long id; + + @Parameter(name = ApiConstants.ENABLE, type = CommandType.BOOLEAN, required = true, description = "If true, authorizes user to be able to use SAML for Single Sign. If False, disable user to user SAML SSO.") + private Boolean enable; + + public Boolean getEnable() { + return enable; + } + + public String getEntityId() { + return entityId; + } + + @Parameter(name = ApiConstants.ENTITY_ID, type = CommandType.STRING, entityType = IdpResponse.class, description = "The Identity Provider ID the user is allowed to get single signed on from") + private String entityId; + + public Long getId() { + return id; + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + // Check permissions + UserAccount userAccount = _accountService.getUserAccountById(getId()); + if (userAccount == null) { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR , "Unable to find a user account with the given ID"); + } + Domain domain = _domainService.getDomain(userAccount.getDomainId()); + Account account = _accountService.getAccount(userAccount.getAccountId()); + _accountService.checkAccess(CallContext.current().getCallingAccount(), domain); + _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.OperateEntry, true, account); + + CallContext.current().setEventDetails("UserId: " + getId()); + SuccessResponse response = new SuccessResponse(); + Boolean status = false; + + if (_samlAuthManager.authorizeUser(getId(), getEntityId(), getEnable())) { + status = true; + } + response.setResponseName(getCommandName()); + response.setSuccess(status); + setResponseObject(response); + } +} \ No newline at end of file diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java index e73083609f..80d38fd97a 100644 --- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmd.java @@ -14,7 +14,6 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. - package org.apache.cloudstack.api.command; import com.cloud.api.response.ApiResponseSerializer; @@ -30,21 +29,36 @@ import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; import org.apache.cloudstack.api.response.SAMLMetaDataResponse; import org.apache.cloudstack.saml.SAML2AuthManager; +import org.apache.cloudstack.saml.SAMLProviderMetadata; import org.apache.log4j.Logger; import org.opensaml.Configuration; import org.opensaml.DefaultBootstrap; import org.opensaml.common.xml.SAMLConstants; import org.opensaml.saml2.core.NameIDType; import org.opensaml.saml2.metadata.AssertionConsumerService; +import org.opensaml.saml2.metadata.ContactPerson; +import org.opensaml.saml2.metadata.ContactPersonTypeEnumeration; +import org.opensaml.saml2.metadata.EmailAddress; import org.opensaml.saml2.metadata.EntityDescriptor; +import org.opensaml.saml2.metadata.GivenName; import org.opensaml.saml2.metadata.KeyDescriptor; +import org.opensaml.saml2.metadata.LocalizedString; import org.opensaml.saml2.metadata.NameIDFormat; +import org.opensaml.saml2.metadata.Organization; +import org.opensaml.saml2.metadata.OrganizationName; +import org.opensaml.saml2.metadata.OrganizationURL; import org.opensaml.saml2.metadata.SPSSODescriptor; import org.opensaml.saml2.metadata.SingleLogoutService; import org.opensaml.saml2.metadata.impl.AssertionConsumerServiceBuilder; +import org.opensaml.saml2.metadata.impl.ContactPersonBuilder; +import org.opensaml.saml2.metadata.impl.EmailAddressBuilder; import org.opensaml.saml2.metadata.impl.EntityDescriptorBuilder; +import org.opensaml.saml2.metadata.impl.GivenNameBuilder; import org.opensaml.saml2.metadata.impl.KeyDescriptorBuilder; import org.opensaml.saml2.metadata.impl.NameIDFormatBuilder; +import org.opensaml.saml2.metadata.impl.OrganizationBuilder; +import org.opensaml.saml2.metadata.impl.OrganizationNameBuilder; +import org.opensaml.saml2.metadata.impl.OrganizationURLBuilder; import org.opensaml.saml2.metadata.impl.SPSSODescriptorBuilder; import org.opensaml.saml2.metadata.impl.SingleLogoutServiceBuilder; import org.opensaml.xml.ConfigurationException; @@ -73,6 +87,7 @@ import java.io.IOException; import java.io.StringWriter; import java.util.List; +import java.util.Locale; import java.util.Map; @APICommand(name = "getSPMetadata", description = "Returns SAML2 CloudStack Service Provider MetaData", responseObject = SAMLMetaDataResponse.class, entityType = {}) @@ -118,8 +133,10 @@ public String authenticate(String command, Map params, HttpSes params, responseType)); } + final SAMLProviderMetadata spMetadata = _samlAuthManager.getSPMetadata(); + EntityDescriptor spEntityDescriptor = new EntityDescriptorBuilder().buildObject(); - spEntityDescriptor.setEntityID(_samlAuthManager.getServiceProviderId()); + spEntityDescriptor.setEntityID(spMetadata.getEntityId()); SPSSODescriptor spSSODescriptor = new SPSSODescriptorBuilder().buildObject(); spSSODescriptor.setWantAssertionsSigned(true); @@ -129,19 +146,23 @@ public String authenticate(String command, Map params, HttpSes keyInfoGeneratorFactory.setEmitEntityCertificate(true); KeyInfoGenerator keyInfoGenerator = keyInfoGeneratorFactory.newInstance(); + KeyDescriptor signKeyDescriptor = new KeyDescriptorBuilder().buildObject(); + signKeyDescriptor.setUse(UsageType.SIGNING); + KeyDescriptor encKeyDescriptor = new KeyDescriptorBuilder().buildObject(); encKeyDescriptor.setUse(UsageType.ENCRYPTION); - KeyDescriptor signKeyDescriptor = new KeyDescriptorBuilder().buildObject(); - signKeyDescriptor.setUse(UsageType.SIGNING); + BasicX509Credential signingCredential = new BasicX509Credential(); + signingCredential.setEntityCertificate(spMetadata.getSigningCertificate()); + + BasicX509Credential encryptionCredential = new BasicX509Credential(); + encryptionCredential.setEntityCertificate(spMetadata.getEncryptionCertificate()); - BasicX509Credential credential = new BasicX509Credential(); - credential.setEntityCertificate(_samlAuthManager.getSpX509Certificate()); try { - encKeyDescriptor.setKeyInfo(keyInfoGenerator.generate(credential)); - signKeyDescriptor.setKeyInfo(keyInfoGenerator.generate(credential)); - spSSODescriptor.getKeyDescriptors().add(encKeyDescriptor); + signKeyDescriptor.setKeyInfo(keyInfoGenerator.generate(signingCredential)); + encKeyDescriptor.setKeyInfo(keyInfoGenerator.generate(encryptionCredential)); spSSODescriptor.getKeyDescriptors().add(signKeyDescriptor); + spSSODescriptor.getKeyDescriptors().add(encKeyDescriptor); } catch (SecurityException e) { s_logger.warn("Unable to add SP X509 descriptors:" + e.getMessage()); } @@ -159,19 +180,62 @@ public String authenticate(String command, Map params, HttpSes spSSODescriptor.getNameIDFormats().add(transientNameIDFormat); AssertionConsumerService assertionConsumerService = new AssertionConsumerServiceBuilder().buildObject(); - assertionConsumerService.setIndex(0); - assertionConsumerService.setBinding(SAMLConstants.SAML2_REDIRECT_BINDING_URI); - assertionConsumerService.setLocation(_samlAuthManager.getSpSingleSignOnUrl()); + assertionConsumerService.setIndex(1); + assertionConsumerService.setIsDefault(true); + assertionConsumerService.setBinding(SAMLConstants.SAML2_POST_BINDING_URI); + assertionConsumerService.setLocation(spMetadata.getSsoUrl()); + spSSODescriptor.getAssertionConsumerServices().add(assertionConsumerService); + + AssertionConsumerService assertionConsumerService2 = new AssertionConsumerServiceBuilder().buildObject(); + assertionConsumerService2.setIndex(2); + assertionConsumerService2.setBinding(SAMLConstants.SAML2_REDIRECT_BINDING_URI); + assertionConsumerService2.setLocation(spMetadata.getSsoUrl()); + spSSODescriptor.getAssertionConsumerServices().add(assertionConsumerService2); SingleLogoutService ssoService = new SingleLogoutServiceBuilder().buildObject(); ssoService.setBinding(SAMLConstants.SAML2_REDIRECT_BINDING_URI); - ssoService.setLocation(_samlAuthManager.getSpSingleLogOutUrl()); - + ssoService.setLocation(spMetadata.getSloUrl()); spSSODescriptor.getSingleLogoutServices().add(ssoService); - spSSODescriptor.getAssertionConsumerServices().add(assertionConsumerService); + + SingleLogoutService ssoService2 = new SingleLogoutServiceBuilder().buildObject(); + ssoService2.setBinding(SAMLConstants.SAML2_POST_BINDING_URI); + ssoService2.setLocation(spMetadata.getSloUrl()); + spSSODescriptor.getSingleLogoutServices().add(ssoService2); + spSSODescriptor.addSupportedProtocol(SAMLConstants.SAML20P_NS); spEntityDescriptor.getRoleDescriptors().add(spSSODescriptor); + // Add technical contact + GivenName givenName = new GivenNameBuilder().buildObject(); + givenName.setName(spMetadata.getContactPersonName()); + EmailAddress emailAddress = new EmailAddressBuilder().buildObject(); + emailAddress.setAddress(spMetadata.getContactPersonEmail()); + ContactPerson contactPerson = new ContactPersonBuilder().buildObject(); + contactPerson.setType(ContactPersonTypeEnumeration.TECHNICAL); + contactPerson.setGivenName(givenName); + contactPerson.getEmailAddresses().add(emailAddress); + spEntityDescriptor.getContactPersons().add(contactPerson); + + // Add administrative/support contact + GivenName givenNameAdmin = new GivenNameBuilder().buildObject(); + givenNameAdmin.setName(spMetadata.getContactPersonName()); + EmailAddress emailAddressAdmin = new EmailAddressBuilder().buildObject(); + emailAddressAdmin.setAddress(spMetadata.getContactPersonEmail()); + ContactPerson contactPersonAdmin = new ContactPersonBuilder().buildObject(); + contactPersonAdmin.setType(ContactPersonTypeEnumeration.ADMINISTRATIVE); + contactPersonAdmin.setGivenName(givenNameAdmin); + contactPersonAdmin.getEmailAddresses().add(emailAddressAdmin); + spEntityDescriptor.getContactPersons().add(contactPersonAdmin); + + Organization organization = new OrganizationBuilder().buildObject(); + OrganizationName organizationName = new OrganizationNameBuilder().buildObject(); + organizationName.setName(new LocalizedString(spMetadata.getOrganizationName(), Locale.getDefault().getLanguage())); + OrganizationURL organizationURL = new OrganizationURLBuilder().buildObject(); + organizationURL.setURL(new LocalizedString(spMetadata.getOrganizationUrl(), Locale.getDefault().getLanguage())); + organization.getOrganizationNames().add(organizationName); + organization.getURLs().add(organizationURL); + spEntityDescriptor.setOrganization(organization); + StringWriter stringWriter = new StringWriter(); try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); @@ -203,7 +267,7 @@ public String authenticate(String command, Map params, HttpSes @Override public APIAuthenticationType getAPIType() { - return APIAuthenticationType.LOGIN_API; + return APIAuthenticationType.READONLY_API; } @Override @@ -214,7 +278,7 @@ public void setAuthenticators(List authenticators) { } } if (_samlAuthManager == null) { - s_logger.error("No suitable Pluggable Authentication Manager found for SAML2 Login Cmd"); + s_logger.error("No suitable Pluggable Authentication Manager found for SAML2 getSPMetadata Cmd"); } } } diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java new file mode 100644 index 0000000000..80aee1b4e6 --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmd.java @@ -0,0 +1,205 @@ +// 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.api.command; + +import com.cloud.api.response.ApiResponseSerializer; +import com.cloud.domain.Domain; +import com.cloud.domain.dao.DomainDao; +import com.cloud.exception.CloudAuthenticationException; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserAccount; +import com.cloud.user.UserAccountVO; +import com.cloud.user.dao.UserAccountDao; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.HttpUtils; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ApiServerService; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.auth.APIAuthenticationType; +import org.apache.cloudstack.api.auth.APIAuthenticator; +import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; +import org.apache.cloudstack.api.response.DomainResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.LoginCmdResponse; +import org.apache.cloudstack.api.response.SamlUserAccountResponse; +import org.apache.cloudstack.api.response.SuccessResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.saml.SAML2AuthManager; +import org.apache.cloudstack.saml.SAMLUtils; +import org.apache.log4j.Logger; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@APICommand(name = "listAndSwitchSamlAccount", description = "Lists and switches to other SAML accounts owned by the SAML user", responseObject = SuccessResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) +public class ListAndSwitchSAMLAccountCmd extends BaseCmd implements APIAuthenticator { + public static final Logger s_logger = Logger.getLogger(ListAndSwitchSAMLAccountCmd.class.getName()); + private static final String s_name = "listandswitchsamlaccountresponse"; + + @Inject + ApiServerService _apiServer; + + @Inject + private UserAccountDao _userAccountDao; + @Inject + private UserDao _userDao; + @Inject + private DomainDao _domainDao; + + SAML2AuthManager _samlAuthManager; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name = ApiConstants.USER_ID, type = CommandType.UUID, entityType = UserResponse.class, required = false, description = "User uuid") + private Long userId; + + @Parameter(name = ApiConstants.DOMAIN_ID, type = CommandType.UUID, entityType = DomainResponse.class, required = false, description = "Domain uuid") + private Long domainId; + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + throw new ServerApiException(ApiErrorCode.METHOD_NOT_ALLOWED, "This is an authentication plugin api, cannot be used directly"); + } + + @Override + public String authenticate(final String command, final Map params, final HttpSession session, final String remoteAddress, final String responseType, final StringBuilder auditTrailSb, final HttpServletRequest req, final HttpServletResponse resp) throws ServerApiException { + if (session == null || session.isNew()) { + throw new ServerApiException(ApiErrorCode.UNAUTHORIZED, _apiServer.getSerializedApiError(ApiErrorCode.UNAUTHORIZED.getHttpCode(), + "Only authenticated saml users can request this API", + params, responseType)); + } + + if (!HttpUtils.validateSessionKey(session, params, req.getCookies(), ApiConstants.SESSIONKEY)) { + throw new ServerApiException(ApiErrorCode.UNAUTHORIZED, _apiServer.getSerializedApiError(ApiErrorCode.UNAUTHORIZED.getHttpCode(), + "Unauthorized session, please re-login", + params, responseType)); + } + + final long currentUserId = (Long) session.getAttribute("userid"); + final UserAccount currentUserAccount = _accountService.getUserAccountById(currentUserId); + if (currentUserAccount == null || currentUserAccount.getSource() != User.Source.SAML2) { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "Only authenticated saml users can request this API", + params, responseType)); + } + + String userUuid = null; + String domainUuid = null; + if (params.containsKey(ApiConstants.USER_ID)) { + userUuid = ((String[])params.get(ApiConstants.USER_ID))[0]; + } + if (params.containsKey(ApiConstants.DOMAIN_ID)) { + domainUuid = ((String[])params.get(ApiConstants.DOMAIN_ID))[0]; + } + + if (userUuid != null && domainUuid != null) { + final User user = _userDao.findByUuid(userUuid); + final Domain domain = _domainDao.findByUuid(domainUuid); + final UserAccount nextUserAccount = _accountService.getUserAccountById(user.getId()); + if (nextUserAccount != null && !nextUserAccount.getAccountState().equals(Account.State.enabled.toString())) { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.PARAM_ERROR.getHttpCode(), + "The requested user account is locked and cannot be switched to, please contact your administrator.", + params, responseType)); + } + if (nextUserAccount == null + || !nextUserAccount.getAccountState().equals(Account.State.enabled.toString()) + || !nextUserAccount.getUsername().equals(currentUserAccount.getUsername()) + || !nextUserAccount.getExternalEntity().equals(currentUserAccount.getExternalEntity()) + || (nextUserAccount.getDomainId() != domain.getId()) + || (nextUserAccount.getSource() != User.Source.SAML2)) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.PARAM_ERROR.getHttpCode(), + "User account is not allowed to switch to the requested account", + params, responseType)); + } + try { + if (_apiServer.verifyUser(nextUserAccount.getId())) { + final LoginCmdResponse loginResponse = (LoginCmdResponse) _apiServer.loginUser(session, nextUserAccount.getUsername(), nextUserAccount.getUsername() + nextUserAccount.getSource().toString(), + nextUserAccount.getDomainId(), null, remoteAddress, params); + SAMLUtils.setupSamlUserCookies(loginResponse, resp); + resp.sendRedirect(SAML2AuthManager.SAMLCloudStackRedirectionUrl.value()); + return ApiResponseSerializer.toSerializedString(loginResponse, responseType); + } + } catch (CloudAuthenticationException | IOException exception) { + s_logger.debug("Failed to switch to request SAML user account due to: " + exception.getMessage()); + } + } else { + List switchableAccounts = _userAccountDao.getAllUsersByNameAndEntity(currentUserAccount.getUsername(), currentUserAccount.getExternalEntity()); + if (switchableAccounts != null && switchableAccounts.size() > 0 && currentUserId != User.UID_SYSTEM) { + List accountResponses = new ArrayList(); + for (UserAccountVO userAccount: switchableAccounts) { + User user = _userDao.getUser(userAccount.getId()); + Domain domain = _domainService.getDomain(userAccount.getDomainId()); + SamlUserAccountResponse accountResponse = new SamlUserAccountResponse(); + accountResponse.setUserId(user.getUuid()); + accountResponse.setUserName(user.getUsername()); + accountResponse.setDomainId(domain.getUuid()); + accountResponse.setDomainName(domain.getName()); + accountResponse.setAccountName(userAccount.getAccountName()); + accountResponse.setIdpId(user.getExternalEntity()); + accountResponses.add(accountResponse); + } + ListResponse response = new ListResponse(); + response.setResponses(accountResponses); + response.setResponseName(getCommandName()); + return ApiResponseSerializer.toSerializedString(response, responseType); + } + } + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "Unable to switch to requested SAML account. Please make sure your user/account is enabled. Please contact your administrator.", + params, responseType)); + } + + @Override + public APIAuthenticationType getAPIType() { + return APIAuthenticationType.READONLY_API; + } + + @Override + public void setAuthenticators(List authenticators) { + for (PluggableAPIAuthenticator authManager: authenticators) { + if (authManager != null && authManager instanceof SAML2AuthManager) { + _samlAuthManager = (SAML2AuthManager) authManager; + } + } + if (_samlAuthManager == null) { + s_logger.error("No suitable Pluggable Authentication Manager found for SAML2 listAndSwitchSamlAccount Cmd"); + } + } +} \ No newline at end of file diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListIdpsCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListIdpsCmd.java new file mode 100644 index 0000000000..47713420df --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListIdpsCmd.java @@ -0,0 +1,114 @@ +// 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.api.command; + +import com.cloud.api.response.ApiResponseSerializer; +import com.cloud.user.Account; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ApiServerService; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.auth.APIAuthenticationType; +import org.apache.cloudstack.api.auth.APIAuthenticator; +import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; +import org.apache.cloudstack.api.response.IdpResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.saml.SAML2AuthManager; +import org.apache.cloudstack.saml.SAMLProviderMetadata; +import org.apache.log4j.Logger; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@APICommand(name = "listIdps", description = "Returns list of discovered SAML Identity Providers", responseObject = IdpResponse.class, entityType = {}) +public class ListIdpsCmd extends BaseCmd implements APIAuthenticator { + public static final Logger s_logger = Logger.getLogger(ListIdpsCmd.class.getName()); + private static final String s_name = "listidpsresponse"; + + @Inject + ApiServerService _apiServer; + + SAML2AuthManager _samlAuthManager; + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_TYPE_NORMAL; + } + + @Override + public void execute() throws ServerApiException { + // We should never reach here + throw new ServerApiException(ApiErrorCode.METHOD_NOT_ALLOWED, "This is an authentication api, cannot be used directly"); + } + + @Override + public String authenticate(String command, Map params, HttpSession session, String remoteAddress, String responseType, StringBuilder auditTrailSb, final HttpServletRequest req, final HttpServletResponse resp) throws ServerApiException { + auditTrailSb.append("=== SAML List IdPs ==="); + ListResponse response = new ListResponse(); + List idpResponseList = new ArrayList(); + for (SAMLProviderMetadata metadata: _samlAuthManager.getAllIdPMetadata()) { + if (metadata == null) { + continue; + } + IdpResponse idpResponse = new IdpResponse(); + idpResponse.setId(metadata.getEntityId()); + if (metadata.getOrganizationName() == null || metadata.getOrganizationName().isEmpty()) { + idpResponse.setOrgName(metadata.getEntityId()); + } else { + idpResponse.setOrgName(metadata.getOrganizationName()); + } + idpResponse.setOrgUrl(metadata.getOrganizationUrl()); + idpResponse.setObjectName("idp"); + idpResponseList.add(idpResponse); + } + response.setResponses(idpResponseList, idpResponseList.size()); + response.setResponseName(getCommandName()); + return ApiResponseSerializer.toSerializedString(response, responseType); + } + + @Override + public APIAuthenticationType getAPIType() { + return APIAuthenticationType.READONLY_API; + } + + @Override + public void setAuthenticators(List authenticators) { + for (PluggableAPIAuthenticator authManager: authenticators) { + if (authManager != null && authManager instanceof SAML2AuthManager) { + _samlAuthManager = (SAML2AuthManager) authManager; + } + } + if (_samlAuthManager == null) { + s_logger.error("No suitable Pluggable Authentication Manager found for SAML2 Login Cmd"); + } + } +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java new file mode 100644 index 0000000000..be958a1628 --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/ListSamlAuthorizationCmd.java @@ -0,0 +1,95 @@ +// 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.api.command; + +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.user.UserVO; +import com.cloud.user.dao.UserDao; +import org.apache.cloudstack.acl.SecurityChecker; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseListCmd; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.cloudstack.api.response.SamlAuthorizationResponse; +import org.apache.cloudstack.api.response.UserResponse; +import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; + +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.List; + +@APICommand(name = "listSamlAuthorization", description = "Lists authorized users who can used SAML SSO", responseObject = SamlAuthorizationResponse.class, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) +public class ListSamlAuthorizationCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListSamlAuthorizationCmd.class.getName()); + private static final String s_name = "listsamlauthorizationsresponse"; + + @Inject + private UserDao _userDao; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + @Parameter(name = ApiConstants.USER_ID, type = CommandType.UUID, entityType = UserResponse.class, required = false, description = "User uuid") + private Long userId; + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + public Long getUserId() { + return userId; + } + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public long getEntityOwnerId() { + return Account.ACCOUNT_ID_SYSTEM; + } + + @Override + public void execute() { + List users = new ArrayList(); + if (getUserId() != null) { + UserVO user = _userDao.getUser(getUserId()); + if (user != null) { + Account account = _accountService.getAccount(user.getAccountId()); + _accountService.checkAccess(CallContext.current().getCallingAccount(), SecurityChecker.AccessType.ListEntry, true, account); + users.add(user); + } + } else if (CallContext.current().getCallingAccount().getType() == Account.ACCOUNT_TYPE_ADMIN) { + users = _userDao.listAll(); + } + + ListResponse response = new ListResponse(); + List authorizationResponses = new ArrayList(); + for (User user: users) { + SamlAuthorizationResponse authorizationResponse = new SamlAuthorizationResponse(user.getUuid(), user.getSource().equals(User.Source.SAML2), user.getExternalEntity()); + authorizationResponse.setObjectName("samlauthorization"); + authorizationResponses.add(authorizationResponse); + } + response.setResponses(authorizationResponses); + response.setResponseName(getCommandName()); + setResponseObject(response); + } +} \ No newline at end of file diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java index a10afb6588..2c1b292e6e 100644 --- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java @@ -14,18 +14,15 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. - package org.apache.cloudstack.api.command; import com.cloud.api.response.ApiResponseSerializer; -import com.cloud.configuration.Config; -import com.cloud.domain.Domain; import com.cloud.exception.CloudAuthenticationException; import com.cloud.user.Account; import com.cloud.user.DomainManager; import com.cloud.user.UserAccount; +import com.cloud.user.UserAccountVO; import com.cloud.user.dao.UserAccountDao; -import com.cloud.utils.HttpUtils; import com.cloud.utils.db.EntityManager; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; @@ -38,43 +35,42 @@ import org.apache.cloudstack.api.auth.APIAuthenticator; import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; import org.apache.cloudstack.api.response.LoginCmdResponse; -import org.apache.cloudstack.context.CallContext; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.saml.SAML2AuthManager; -import org.apache.cloudstack.utils.auth.SAMLUtils; +import org.apache.cloudstack.saml.SAMLPluginConstants; +import org.apache.cloudstack.saml.SAMLProviderMetadata; +import org.apache.cloudstack.saml.SAMLTokenVO; +import org.apache.cloudstack.saml.SAMLUtils; import org.apache.log4j.Logger; import org.opensaml.DefaultBootstrap; import org.opensaml.saml2.core.Assertion; -import org.opensaml.saml2.core.Attribute; -import org.opensaml.saml2.core.AttributeStatement; -import org.opensaml.saml2.core.AuthnRequest; -import org.opensaml.saml2.core.NameID; -import org.opensaml.saml2.core.NameIDType; +import org.opensaml.saml2.core.EncryptedAssertion; +import org.opensaml.saml2.core.Issuer; import org.opensaml.saml2.core.Response; import org.opensaml.saml2.core.StatusCode; +import org.opensaml.saml2.encryption.Decrypter; import org.opensaml.xml.ConfigurationException; -import org.opensaml.xml.io.MarshallingException; +import org.opensaml.xml.encryption.DecryptionException; +import org.opensaml.xml.encryption.EncryptedKeyResolver; +import org.opensaml.xml.encryption.InlineEncryptedKeyResolver; import org.opensaml.xml.io.UnmarshallingException; +import org.opensaml.xml.security.SecurityHelper; +import org.opensaml.xml.security.credential.Credential; +import org.opensaml.xml.security.keyinfo.StaticKeyInfoCredentialResolver; import org.opensaml.xml.security.x509.BasicX509Credential; +import org.opensaml.xml.signature.Signature; import org.opensaml.xml.signature.SignatureValidator; import org.opensaml.xml.validation.ValidationException; import org.xml.sax.SAXException; import javax.inject.Inject; -import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.FactoryConfigurationError; import java.io.IOException; -import java.net.URLEncoder; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; import java.util.List; import java.util.Map; -import java.util.UUID; @APICommand(name = "samlSso", description = "SP initiated SAML Single Sign On", requestHasSensitiveInfo = true, responseObject = LoginCmdResponse.class, entityType = {}) public class SAML2LoginAPIAuthenticatorCmd extends BaseCmd implements APIAuthenticator { @@ -84,16 +80,14 @@ public class SAML2LoginAPIAuthenticatorCmd extends BaseCmd implements APIAuthent ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - @Parameter(name = ApiConstants.IDP_URL, type = CommandType.STRING, description = "Identity Provider SSO HTTP-Redirect binding URL", required = true) - private String idpUrl; + @Parameter(name = ApiConstants.IDP_ID, type = CommandType.STRING, description = "Identity Provider Entity ID", required = true) + private String idpId; @Inject ApiServerService _apiServer; @Inject EntityManager _entityMgr; @Inject - ConfigurationDao _configDao; - @Inject DomainManager _domainMgr; @Inject private UserAccountDao _userAccountDao; @@ -104,8 +98,8 @@ public class SAML2LoginAPIAuthenticatorCmd extends BaseCmd implements APIAuthent /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - public String getIdpUrl() { - return idpUrl; + public String getIdpId() { + return idpId; } ///////////////////////////////////////////////////// @@ -128,30 +122,6 @@ public void execute() throws ServerApiException { throw new ServerApiException(ApiErrorCode.METHOD_NOT_ALLOWED, "This is an authentication api, cannot be used directly"); } - private String buildAuthnRequestUrl(String idpUrl) { - String spId = _samlAuthManager.getServiceProviderId(); - String consumerUrl = _samlAuthManager.getSpSingleSignOnUrl(); - String identityProviderUrl = _samlAuthManager.getIdpSingleSignOnUrl(); - - if (idpUrl != null) { - identityProviderUrl = idpUrl; - } - - String redirectUrl = ""; - try { - DefaultBootstrap.bootstrap(); - AuthnRequest authnRequest = SAMLUtils.buildAuthnRequestObject(spId, identityProviderUrl, consumerUrl); - PrivateKey privateKey = null; - if (_samlAuthManager.getSpKeyPair() != null) { - privateKey = _samlAuthManager.getSpKeyPair().getPrivate(); - } - redirectUrl = identityProviderUrl + "?" + SAMLUtils.generateSAMLRequestSignature("SAMLRequest=" + SAMLUtils.encodeSAMLRequest(authnRequest), privateKey); - } catch (ConfigurationException | FactoryConfigurationError | MarshallingException | IOException | NoSuchAlgorithmException | InvalidKeyException | java.security.SignatureException e) { - s_logger.error("SAML AuthnRequest message building error: " + e.getMessage()); - } - return redirectUrl; - } - public Response processSAMLResponse(String responseMessage) { Response responseObject = null; try { @@ -167,13 +137,44 @@ public Response processSAMLResponse(String responseMessage) { @Override public String authenticate(final String command, final Map params, final HttpSession session, final String remoteAddress, final String responseType, final StringBuilder auditTrailSb, final HttpServletRequest req, final HttpServletResponse resp) throws ServerApiException { try { - if (!params.containsKey("SAMLResponse") && !params.containsKey("SAMLart")) { - String idpUrl = null; - final String[] idps = (String[])params.get(ApiConstants.IDP_URL); - if (idps != null && idps.length > 0) { - idpUrl = idps[0]; + if (!params.containsKey(SAMLPluginConstants.SAML_RESPONSE) && !params.containsKey("SAMLart")) { + String idpId = null; + String domainPath = null; + + if (params.containsKey(ApiConstants.IDP_ID)) { + idpId = ((String[])params.get(ApiConstants.IDP_ID))[0]; + } + + if (params.containsKey(ApiConstants.DOMAIN)) { + domainPath = ((String[])params.get(ApiConstants.DOMAIN))[0]; } - String redirectUrl = this.buildAuthnRequestUrl(idpUrl); + + if (domainPath != null && !domainPath.isEmpty()) { + if (!domainPath.startsWith("/")) { + domainPath = "/" + domainPath; + } + if (!domainPath.endsWith("/")) { + domainPath = domainPath + "/"; + } + } + + SAMLProviderMetadata spMetadata = _samlAuthManager.getSPMetadata(); + SAMLProviderMetadata idpMetadata = _samlAuthManager.getIdPMetadata(idpId); + if (idpMetadata == null) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.PARAM_ERROR.getHttpCode(), + "IdP ID (" + idpId + ") is not found in our list of supported IdPs, cannot proceed.", + params, responseType)); + } + if (idpMetadata.getSsoUrl() == null || idpMetadata.getSsoUrl().isEmpty()) { + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.PARAM_ERROR.getHttpCode(), + "IdP ID (" + idpId + ") has no Single Sign On URL defined please contact " + + idpMetadata.getContactPersonName() + " <" + idpMetadata.getContactPersonEmail() + ">, cannot proceed.", + params, responseType)); + } + String authnId = SAMLUtils.generateSecureRandomId(); + _samlAuthManager.saveToken(authnId, domainPath, idpMetadata.getEntityId()); + s_logger.debug("Sending SAMLRequest id=" + authnId); + String redirectUrl = SAMLUtils.buildAuthnRequestUrl(authnId, spMetadata, idpMetadata, SAML2AuthManager.SAMLSignatureAlgorithm.value()); resp.sendRedirect(redirectUrl); return ""; } if (params.containsKey("SAMLart")) { @@ -181,7 +182,7 @@ public String authenticate(final String command, final Map par "SAML2 HTTP Artifact Binding is not supported", params, responseType)); } else { - final String samlResponse = ((String[])params.get(SAMLUtils.SAML_RESPONSE))[0]; + final String samlResponse = ((String[])params.get(SAMLPluginConstants.SAML_RESPONSE))[0]; Response processedSAMLResponse = this.processSAMLResponse(samlResponse); String statusCode = processedSAMLResponse.getStatus().getStatusCode().getValue(); if (!statusCode.equals(StatusCode.SUCCESS_URI)) { @@ -190,10 +191,33 @@ public String authenticate(final String command, final Map par params, responseType)); } - if (_samlAuthManager.getIdpSigningKey() != null) { - org.opensaml.xml.signature.Signature sig = processedSAMLResponse.getSignature(); + String username = null; + Issuer issuer = processedSAMLResponse.getIssuer(); + SAMLProviderMetadata spMetadata = _samlAuthManager.getSPMetadata(); + SAMLProviderMetadata idpMetadata = _samlAuthManager.getIdPMetadata(issuer.getValue()); + + String responseToId = processedSAMLResponse.getInResponseTo(); + s_logger.debug("Received SAMLResponse in response to id=" + responseToId); + SAMLTokenVO token = _samlAuthManager.getToken(responseToId); + if (token != null) { + if (!(token.getEntity().equalsIgnoreCase(issuer.getValue()))) { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "The SAML response contains Issuer Entity ID that is different from the original SAML request", + params, responseType)); + } + } else { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "Received SAML response for a SSO request that we may not have made or has expired, please try logging in again", + params, responseType)); + } + + // Set IdpId for this session + session.setAttribute(SAMLPluginConstants.SAML_IDPID, issuer.getValue()); + + Signature sig = processedSAMLResponse.getSignature(); + if (idpMetadata.getSigningCertificate() != null && sig != null) { BasicX509Credential credential = new BasicX509Credential(); - credential.setEntityCertificate(_samlAuthManager.getIdpSigningKey()); + credential.setEntityCertificate(idpMetadata.getSigningCertificate()); SignatureValidator validator = new SignatureValidator(credential); try { validator.validate(sig); @@ -204,97 +228,95 @@ public String authenticate(final String command, final Map par params, responseType)); } } - - String domainString = _configDao.getValue(Config.SAMLUserDomain.key()); - - Long domainId = null; - Domain domain = _domainMgr.getDomain(domainString); - if (domain != null) { - domainId = domain.getId(); - } else { - try { - domainId = Long.parseLong(domainString); - } catch (NumberFormatException ignore) { - } - } - if (domainId == null) { - s_logger.error("The default domain ID for SAML users is not set correct, it should be a UUID. ROOT domain will be used."); + if (username == null) { + username = SAMLUtils.getValueFromAssertions(processedSAMLResponse.getAssertions(), SAML2AuthManager.SAMLUserAttributeName.value()); } - String username = null; - String password = SAMLUtils.generateSecureRandomId(); // Random password - String firstName = ""; - String lastName = ""; - String timeZone = "GMT"; - String email = ""; - short accountType = 0; // User account - - Assertion assertion = processedSAMLResponse.getAssertions().get(0); - NameID nameId = assertion.getSubject().getNameID(); - String sessionIndex = assertion.getAuthnStatements().get(0).getSessionIndex(); - session.setAttribute(SAMLUtils.SAML_NAMEID, nameId); - session.setAttribute(SAMLUtils.SAML_SESSION, sessionIndex); - - if (nameId.getFormat().equals(NameIDType.PERSISTENT) || nameId.getFormat().equals(NameIDType.EMAIL)) { - username = nameId.getValue(); - if (nameId.getFormat().equals(NameIDType.EMAIL)) { - email = username; + for (Assertion assertion: processedSAMLResponse.getAssertions()) { + if (assertion!= null && assertion.getSubject() != null && assertion.getSubject().getNameID() != null) { + session.setAttribute(SAMLPluginConstants.SAML_NAMEID, assertion.getSubject().getNameID().getValue()); + break; } } - List attributeStatements = assertion.getAttributeStatements(); - if (attributeStatements != null && attributeStatements.size() > 0) { - for (AttributeStatement attributeStatement: attributeStatements) { - if (attributeStatement == null) { - continue; - } - // Try capturing standard LDAP attributes - for (Attribute attribute: attributeStatement.getAttributes()) { - String attributeName = attribute.getName(); - String attributeValue = attribute.getAttributeValues().get(0).getDOM().getTextContent(); - if (attributeName.equalsIgnoreCase("uid") && username == null) { - username = attributeValue; - } else if (attributeName.equalsIgnoreCase("givenName")) { - firstName = attributeValue; - } else if (attributeName.equalsIgnoreCase(("sn"))) { - lastName = attributeValue; - } else if (attributeName.equalsIgnoreCase("mail")) { - email = attributeValue; + if (idpMetadata.getEncryptionCertificate() != null && spMetadata != null + && spMetadata.getKeyPair() != null && spMetadata.getKeyPair().getPrivate() != null) { + Credential credential = SecurityHelper.getSimpleCredential(idpMetadata.getEncryptionCertificate().getPublicKey(), + spMetadata.getKeyPair().getPrivate()); + StaticKeyInfoCredentialResolver keyInfoResolver = new StaticKeyInfoCredentialResolver(credential); + EncryptedKeyResolver keyResolver = new InlineEncryptedKeyResolver(); + Decrypter decrypter = new Decrypter(null, keyInfoResolver, keyResolver); + decrypter.setRootInNewDocument(true); + List encryptedAssertions = processedSAMLResponse.getEncryptedAssertions(); + if (encryptedAssertions != null) { + for (EncryptedAssertion encryptedAssertion : encryptedAssertions) { + Assertion assertion = null; + try { + assertion = decrypter.decrypt(encryptedAssertion); + } catch (DecryptionException e) { + s_logger.warn("SAML EncryptedAssertion error: " + e.toString()); + } + if (assertion == null) { + continue; + } + Signature encSig = assertion.getSignature(); + if (idpMetadata.getSigningCertificate() != null && encSig != null) { + BasicX509Credential sigCredential = new BasicX509Credential(); + sigCredential.setEntityCertificate(idpMetadata.getSigningCertificate()); + SignatureValidator validator = new SignatureValidator(sigCredential); + try { + validator.validate(encSig); + } catch (ValidationException e) { + s_logger.error("SAML Response's signature failed to be validated by IDP signing key:" + e.getMessage()); + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "SAML Response's signature failed to be validated by IDP signing key", + params, responseType)); + } + } + if (assertion.getSubject() != null && assertion.getSubject().getNameID() != null) { + session.setAttribute(SAMLPluginConstants.SAML_NAMEID, assertion.getSubject().getNameID().getValue()); + } + if (username == null) { + username = SAMLUtils.getValueFromAttributeStatements(assertion.getAttributeStatements(), SAML2AuthManager.SAMLUserAttributeName.value()); } } } } - if (username == null && email != null) { - username = email; + if (username == null) { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "Failed to find admin configured username attribute in the SAML Response. Please ask your administrator to check SAML user attribute name.", params, responseType)); } - final String uniqueUserId = SAMLUtils.createSAMLId(username); - UserAccount userAccount = _userAccountDao.getUserAccount(username, domainId); - if (userAccount == null && uniqueUserId != null && username != null) { - CallContext.current().setEventDetails("SAML Account/User with UserName: " + username + ", FirstName :" + password + ", LastName: " + lastName); - userAccount = _accountService.createUserAccount(username, password, firstName, lastName, email, timeZone, - username, (short) accountType, domainId, null, null, UUID.randomUUID().toString(), uniqueUserId); + UserAccount userAccount = null; + List possibleUserAccounts = _userAccountDao.getAllUsersByNameAndEntity(username, issuer.getValue()); + if (possibleUserAccounts != null && possibleUserAccounts.size() > 0) { + // Log into the first enabled user account + // Users can switch to other allowed accounts later + for (UserAccountVO possibleUserAccount: possibleUserAccounts) { + if (possibleUserAccount.getAccountState().equals(Account.State.enabled.toString())) { + userAccount = possibleUserAccount; + break; + } + } } - if (userAccount != null) { - try { - if (_apiServer.verifyUser(userAccount.getId())) { - LoginCmdResponse loginResponse = (LoginCmdResponse) _apiServer.loginUser(session, username, userAccount.getPassword(), domainId, null, remoteAddress, params); - resp.addCookie(new Cookie("userid", URLEncoder.encode(loginResponse.getUserId(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("domainid", URLEncoder.encode(loginResponse.getDomainId(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("role", URLEncoder.encode(loginResponse.getType(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("username", URLEncoder.encode(loginResponse.getUsername(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("sessionkey", URLEncoder.encode(loginResponse.getSessionKey(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("account", URLEncoder.encode(loginResponse.getAccount(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("timezone", URLEncoder.encode(loginResponse.getTimeZone(), HttpUtils.UTF_8))); - resp.addCookie(new Cookie("userfullname", URLEncoder.encode(loginResponse.getFirstName() + " " + loginResponse.getLastName(), HttpUtils.UTF_8).replace("+", "%20"))); - resp.sendRedirect(_configDao.getValue(Config.SAMLCloudStackRedirectionUrl.key())); - return ApiResponseSerializer.toSerializedString(loginResponse, responseType); + if (userAccount == null || userAccount.getExternalEntity() == null || !_samlAuthManager.isUserAuthorized(userAccount.getId(), issuer.getValue())) { + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), + "Your authenticated user is not authorized for SAML Single Sign-On, please contact your administrator", + params, responseType)); + } - } - } catch (final CloudAuthenticationException ignored) { + try { + if (_apiServer.verifyUser(userAccount.getId())) { + LoginCmdResponse loginResponse = (LoginCmdResponse) _apiServer.loginUser(session, userAccount.getUsername(), userAccount.getUsername() + userAccount.getSource().toString(), + userAccount.getDomainId(), null, remoteAddress, params); + SAMLUtils.setupSamlUserCookies(loginResponse, resp); + resp.sendRedirect(SAML2AuthManager.SAMLCloudStackRedirectionUrl.value()); + return ApiResponseSerializer.toSerializedString(loginResponse, responseType); } + } catch (CloudAuthenticationException | IOException exception) { + s_logger.debug("SAML Login failed to log in the user due to: " + exception.getMessage()); } } } catch (IOException e) { @@ -302,7 +324,7 @@ public String authenticate(final String command, final Map par auditTrailSb.append(e.getMessage()); } throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), - "Unable to authenticate or retrieve user while performing SAML based SSO", + "Unable to authenticate user while performing SAML based SSO. Please make sure your user/account has been added, enable and authorized by the admin before you can authenticate. Please contact your administrator.", params, responseType)); } diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java index 992e4317f8..a012431b29 100644 --- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmd.java @@ -17,7 +17,6 @@ package org.apache.cloudstack.api.command; import com.cloud.api.response.ApiResponseSerializer; -import com.cloud.configuration.Config; import com.cloud.user.Account; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiErrorCode; @@ -28,13 +27,13 @@ import org.apache.cloudstack.api.auth.APIAuthenticator; import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; import org.apache.cloudstack.api.response.LogoutCmdResponse; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.saml.SAML2AuthManager; -import org.apache.cloudstack.utils.auth.SAMLUtils; +import org.apache.cloudstack.saml.SAMLPluginConstants; +import org.apache.cloudstack.saml.SAMLProviderMetadata; +import org.apache.cloudstack.saml.SAMLUtils; import org.apache.log4j.Logger; import org.opensaml.DefaultBootstrap; import org.opensaml.saml2.core.LogoutRequest; -import org.opensaml.saml2.core.NameID; import org.opensaml.saml2.core.Response; import org.opensaml.saml2.core.StatusCode; import org.opensaml.xml.ConfigurationException; @@ -59,8 +58,7 @@ public class SAML2LogoutAPIAuthenticatorCmd extends BaseCmd implements APIAuthen @Inject ApiServerService _apiServer; - @Inject - ConfigurationDao _configDao; + SAML2AuthManager _samlAuthManager; ///////////////////////////////////////////////////// @@ -93,7 +91,7 @@ public String authenticate(String command, Map params, HttpSes if (session == null) { try { - resp.sendRedirect(_configDao.getValue(Config.SAMLCloudStackRedirectionUrl.key())); + resp.sendRedirect(SAML2AuthManager.SAMLCloudStackRedirectionUrl.value()); } catch (IOException ignored) { } return responseString; @@ -110,7 +108,7 @@ public String authenticate(String command, Map params, HttpSes if (params != null && params.containsKey("SAMLResponse")) { try { - final String samlResponse = ((String[])params.get(SAMLUtils.SAML_RESPONSE))[0]; + final String samlResponse = ((String[])params.get(SAMLPluginConstants.SAML_RESPONSE))[0]; Response processedSAMLResponse = SAMLUtils.decodeSAMLResponse(samlResponse); String statusCode = processedSAMLResponse.getStatus().getStatusCode().getValue(); if (!statusCode.equals(StatusCode.SUCCESS_URI)) { @@ -122,25 +120,26 @@ public String authenticate(String command, Map params, HttpSes s_logger.error("SAMLResponse processing error: " + e.getMessage()); } try { - resp.sendRedirect(_configDao.getValue(Config.SAMLCloudStackRedirectionUrl.key())); + resp.sendRedirect(SAML2AuthManager.SAMLCloudStackRedirectionUrl.value()); } catch (IOException ignored) { } return responseString; } - NameID nameId = (NameID) session.getAttribute(SAMLUtils.SAML_NAMEID); - String sessionIndex = (String) session.getAttribute(SAMLUtils.SAML_SESSION); - if (nameId == null || sessionIndex == null) { + String idpId = (String) session.getAttribute(SAMLPluginConstants.SAML_IDPID); + SAMLProviderMetadata idpMetadata = _samlAuthManager.getIdPMetadata(idpId); + String nameId = (String) session.getAttribute(SAMLPluginConstants.SAML_NAMEID); + if (idpMetadata == null || nameId == null || nameId.isEmpty()) { try { - resp.sendRedirect(_configDao.getValue(Config.SAMLCloudStackRedirectionUrl.key())); + resp.sendRedirect(SAML2AuthManager.SAMLCloudStackRedirectionUrl.value()); } catch (IOException ignored) { } return responseString; } - LogoutRequest logoutRequest = SAMLUtils.buildLogoutRequest(_samlAuthManager.getIdpSingleLogOutUrl(), _samlAuthManager.getServiceProviderId(), nameId, sessionIndex); + LogoutRequest logoutRequest = SAMLUtils.buildLogoutRequest(idpMetadata.getSloUrl(), _samlAuthManager.getSPMetadata().getEntityId(), nameId); try { - String redirectUrl = _samlAuthManager.getIdpSingleLogOutUrl() + "?SAMLRequest=" + SAMLUtils.encodeSAMLRequest(logoutRequest); + String redirectUrl = idpMetadata.getSloUrl() + "?SAMLRequest=" + SAMLUtils.encodeSAMLRequest(logoutRequest); resp.sendRedirect(redirectUrl); } catch (MarshallingException | IOException e) { s_logger.error("SAML SLO error: " + e.getMessage()); diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/IdpResponse.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/IdpResponse.java new file mode 100644 index 0000000000..d95cc3349c --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/IdpResponse.java @@ -0,0 +1,62 @@ +// 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.api.response; + +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +public class IdpResponse extends AuthenticationCmdResponse { + @SerializedName("id") + @Param(description = "The IdP Entity ID") + private String id; + + @SerializedName("orgName") + @Param(description = "The IdP Organization Name") + private String orgName; + + @SerializedName("orgUrl") + @Param(description = "The IdP Organization URL") + private String orgUrl; + + public IdpResponse() { + super(); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getOrgName() { + return orgName; + } + + public void setOrgName(String orgName) { + this.orgName = orgName; + } + + public String getOrgUrl() { + return orgUrl; + } + + public void setOrgUrl(String orgUrl) { + this.orgUrl = orgUrl; + } +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java new file mode 100644 index 0000000000..445ee887af --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlAuthorizationResponse.java @@ -0,0 +1,68 @@ +// 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.api.response; + +import com.cloud.serializer.Param; +import com.cloud.user.User; +import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.EntityReference; + +@EntityReference(value = User.class) +public class SamlAuthorizationResponse extends BaseResponse { + @SerializedName("userid") + @Param(description = "the user ID") + private String userId; + + @SerializedName("status") + @Param(description = "the SAML authorization status") + private Boolean status; + + @SerializedName("idpid") + @Param(description = "the authorized Identity Provider ID") + private String idpId; + + public SamlAuthorizationResponse(String userId, Boolean status, String idpId) { + this.userId = userId; + this.status = status; + this.idpId = idpId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public String getIdpId() { + return idpId; + } + + public void setIdpId(String idpId) { + this.idpId = idpId; + } +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlUserAccountResponse.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlUserAccountResponse.java new file mode 100644 index 0000000000..f0927e3f6d --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/response/SamlUserAccountResponse.java @@ -0,0 +1,99 @@ +// 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.api.response; + +import com.cloud.serializer.Param; +import com.google.gson.annotations.SerializedName; + +public class SamlUserAccountResponse extends AuthenticationCmdResponse { + @SerializedName("userId") + @Param(description = "The User Id") + private String userId; + + @SerializedName("domainId") + @Param(description = "The Domain Id") + private String domainId; + + @SerializedName("userName") + @Param(description = "The User Name") + private String userName; + + @SerializedName("accountName") + @Param(description = "The Account Name") + private String accountName; + + @SerializedName("domainName") + @Param(description = "The Domain Name") + private String domainName; + + @SerializedName("idpId") + @Param(description = "The IDP ID") + private String idpId; + + public SamlUserAccountResponse() { + super(); + setObjectName("samluseraccount"); + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getDomainId() { + return domainId; + } + + public void setDomainId(String domainId) { + this.domainId = domainId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getIdpId() { + return idpId; + } + + public void setIdpId(String idpId) { + this.idpId = idpId; + } +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManager.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManager.java index 9c0d4b42fc..c65f8b3ad1 100644 --- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManager.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2AuthManager.java @@ -17,23 +17,67 @@ package org.apache.cloudstack.saml; +import com.cloud.utils.component.PluggableService; import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; +import org.apache.cloudstack.framework.config.ConfigKey; -import java.security.KeyPair; -import java.security.cert.X509Certificate; +import java.util.Collection; -public interface SAML2AuthManager extends PluggableAPIAuthenticator { - public String getServiceProviderId(); - public String getIdentityProviderId(); +public interface SAML2AuthManager extends PluggableAPIAuthenticator, PluggableService { - public X509Certificate getIdpSigningKey(); - public X509Certificate getIdpEncryptionKey(); - public X509Certificate getSpX509Certificate(); - public KeyPair getSpKeyPair(); + public static final ConfigKey SAMLIsPluginEnabled = new ConfigKey("Advanced", Boolean.class, "saml2.enabled", "false", + "Indicates whether SAML SSO plugin is enabled or not", true); - public String getSpSingleSignOnUrl(); - public String getIdpSingleSignOnUrl(); + public static final ConfigKey SAMLServiceProviderID = new ConfigKey("Advanced", String.class, "saml2.sp.id", "org.apache.cloudstack", + "SAML2 Service Provider Identifier String", true); - public String getSpSingleLogOutUrl(); - public String getIdpSingleLogOutUrl(); + public static final ConfigKey SAMLServiceProviderContactPersonName = new ConfigKey("Advanced", String.class, "saml2.sp.contact.person", "CloudStack Developers", + "SAML2 Service Provider Contact Person Name", true); + + public static final ConfigKey SAMLServiceProviderContactEmail = new ConfigKey("Advanced", String.class, "saml2.sp.contact.email", "dev@cloudstack.apache.org", + "SAML2 Service Provider Contact Email Address", true); + + public static final ConfigKey SAMLServiceProviderOrgName = new ConfigKey("Advanced", String.class, "saml2.sp.org.name", "Apache CloudStack", + "SAML2 Service Provider Organization Name", true); + + public static final ConfigKey SAMLServiceProviderOrgUrl = new ConfigKey("Advanced", String.class, "saml2.sp.org.url", "http://cloudstack.apache.org", + "SAML2 Service Provider Organization URL", true); + + public static final ConfigKey SAMLServiceProviderSingleSignOnURL = new ConfigKey("Advanced", String.class, "saml2.sp.sso.url", "http://localhost:8080/client/api?command=samlSso", + "SAML2 CloudStack Service Provider Single Sign On URL", true); + + public static final ConfigKey SAMLServiceProviderSingleLogOutURL = new ConfigKey("Advanced", String.class, "saml2.sp.slo.url", "http://localhost:8080/client/", + "SAML2 CloudStack Service Provider Single Log Out URL", true); + + public static final ConfigKey SAMLCloudStackRedirectionUrl = new ConfigKey("Advanced", String.class, "saml2.redirect.url", "http://localhost:8080/client", + "The CloudStack UI url the SSO should redirected to when successful", true); + + public static final ConfigKey SAMLUserAttributeName = new ConfigKey("Advanced", String.class, "saml2.user.attribute", "uid", + "Attribute name to be looked for in SAML response that will contain the username", true); + + public static final ConfigKey SAMLIdentityProviderMetadataURL = new ConfigKey("Advanced", String.class, "saml2.idp.metadata.url", "https://openidp.feide.no/simplesaml/saml2/idp/metadata.php", + "SAML2 Identity Provider Metadata XML Url", true); + + public static final ConfigKey SAMLDefaultIdentityProviderId = new ConfigKey("Advanced", String.class, "saml2.default.idpid", "https://openidp.feide.no", + "The default IdP entity ID to use only in case of multiple IdPs", true); + + public static final ConfigKey SAMLSignatureAlgorithm = new ConfigKey("Advanced", String.class, "saml2.sigalg", "SHA1", + "The algorithm to use to when signing a SAML request. Default is SHA1, allowed algorithms: SHA1, SHA256, SHA384, SHA512", true); + + public static final ConfigKey SAMLAppendDomainSuffix = new ConfigKey("Advanced", Boolean.class, "saml2.append.idpdomain", "false", + "If enabled, create account/user dialog with SAML SSO enabled will append the IdP domain to the user or account name in the UI dialog", true); + + public static final ConfigKey SAMLTimeout = new ConfigKey("Advanced", Integer.class, "saml2.timeout", "1800", + "SAML2 IDP Metadata refresh interval in seconds, minimum value is set to 300", true); + + public SAMLProviderMetadata getSPMetadata(); + public SAMLProviderMetadata getIdPMetadata(String entityId); + public Collection getAllIdPMetadata(); + + public boolean isUserAuthorized(Long userId, String entityId); + public boolean authorizeUser(Long userId, String entityId, boolean enable); + + public void saveToken(String authnId, String domain, String entity); + public SAMLTokenVO getToken(String authnId); + public void expireTokens(); } 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 36c9da5e1e..46b1c407b5 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 @@ -16,28 +16,47 @@ // under the License. package org.apache.cloudstack.saml; -import com.cloud.configuration.Config; +import com.cloud.domain.Domain; +import com.cloud.user.DomainManager; +import com.cloud.user.User; +import com.cloud.user.UserVO; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; import org.apache.cloudstack.api.auth.PluggableAPIAuthenticator; +import org.apache.cloudstack.api.command.AuthorizeSAMLSSOCmd; import org.apache.cloudstack.api.command.GetServiceProviderMetaDataCmd; +import org.apache.cloudstack.api.command.ListAndSwitchSAMLAccountCmd; +import org.apache.cloudstack.api.command.ListIdpsCmd; +import org.apache.cloudstack.api.command.ListSamlAuthorizationCmd; import org.apache.cloudstack.api.command.SAML2LoginAPIAuthenticatorCmd; import org.apache.cloudstack.api.command.SAML2LogoutAPIAuthenticatorCmd; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.framework.security.keystore.KeystoreDao; import org.apache.cloudstack.framework.security.keystore.KeystoreVO; -import org.apache.cloudstack.utils.auth.SAMLUtils; -import org.apache.log4j.Logger; import org.apache.commons.codec.binary.Base64; +import org.apache.commons.httpclient.HttpClient; +import org.apache.log4j.Logger; import org.opensaml.DefaultBootstrap; import org.opensaml.common.xml.SAMLConstants; +import org.opensaml.saml2.metadata.ContactPerson; +import org.opensaml.saml2.metadata.EmailAddress; +import org.opensaml.saml2.metadata.EntitiesDescriptor; import org.opensaml.saml2.metadata.EntityDescriptor; import org.opensaml.saml2.metadata.IDPSSODescriptor; import org.opensaml.saml2.metadata.KeyDescriptor; +import org.opensaml.saml2.metadata.OrganizationDisplayName; +import org.opensaml.saml2.metadata.OrganizationName; +import org.opensaml.saml2.metadata.OrganizationURL; import org.opensaml.saml2.metadata.SingleLogoutService; import org.opensaml.saml2.metadata.SingleSignOnService; +import org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider; +import org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider; import org.opensaml.saml2.metadata.provider.HTTPMetadataProvider; import org.opensaml.saml2.metadata.provider.MetadataProviderException; import org.opensaml.xml.ConfigurationException; +import org.opensaml.xml.XMLObject; import org.opensaml.xml.parse.BasicParserPool; import org.opensaml.xml.security.credential.UsageType; import org.opensaml.xml.security.keyinfo.KeyInfoHelper; @@ -48,6 +67,7 @@ import javax.xml.stream.FactoryConfigurationError; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; @@ -63,61 +83,87 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; @Component @Local(value = {SAML2AuthManager.class, PluggableAPIAuthenticator.class}) -public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManager { +public class SAML2AuthManagerImpl extends AdapterBase implements SAML2AuthManager, Configurable { private static final Logger s_logger = Logger.getLogger(SAML2AuthManagerImpl.class); - private String serviceProviderId; - private String identityProviderId; + private SAMLProviderMetadata _spMetadata = new SAMLProviderMetadata(); + private Map _idpMetadataMap = new HashMap(); - private X509Certificate idpSigningKey; - private X509Certificate idpEncryptionKey; - private X509Certificate spX509Key; - private KeyPair spKeyPair; - - private String spSingleSignOnUrl; private String idpSingleSignOnUrl; - - private String spSingleLogOutUrl; private String idpSingleLogOutUrl; - private HTTPMetadataProvider idpMetaDataProvider; + private Timer _timer; + private int _refreshInterval = SAMLPluginConstants.SAML_REFRESH_INTERVAL; + private AbstractReloadingMetadataProvider _idpMetaDataProvider; @Inject - ConfigurationDao _configDao; + private KeystoreDao _ksDao; @Inject - private KeystoreDao _ksDao; + private SAMLTokenDao _samlTokenDao; + + @Inject + private UserDao _userDao; + + @Inject + DomainManager _domainMgr; @Override public boolean start() { if (isSAMLPluginEnabled()) { setup(); + s_logger.info("SAML auth plugin loaded"); + } else { + s_logger.info("SAML auth plugin not enabled so not loading"); } return super.start(); } - private boolean setup() { - KeystoreVO keyStoreVO = _ksDao.findByName(SAMLUtils.SAMLSP_KEYPAIR); + @Override + public boolean stop() { + if (_timer != null) { + _timer.cancel(); + } + return super.stop(); + } + + private boolean initSP() { + KeystoreVO keyStoreVO = _ksDao.findByName(SAMLPluginConstants.SAMLSP_KEYPAIR); if (keyStoreVO == null) { try { KeyPair keyPair = SAMLUtils.generateRandomKeyPair(); - _ksDao.save(SAMLUtils.SAMLSP_KEYPAIR, SAMLUtils.savePrivateKey(keyPair.getPrivate()), SAMLUtils.savePublicKey(keyPair.getPublic()), "samlsp-keypair"); - keyStoreVO = _ksDao.findByName(SAMLUtils.SAMLSP_KEYPAIR); + _ksDao.save(SAMLPluginConstants.SAMLSP_KEYPAIR, SAMLUtils.savePrivateKey(keyPair.getPrivate()), SAMLUtils.savePublicKey(keyPair.getPublic()), "samlsp-keypair"); + keyStoreVO = _ksDao.findByName(SAMLPluginConstants.SAMLSP_KEYPAIR); + s_logger.info("No SAML keystore found, created and saved a new Service Provider keypair"); } catch (NoSuchProviderException | NoSuchAlgorithmException e) { - s_logger.error("Unable to create and save SAML keypair"); + s_logger.error("Unable to create and save SAML keypair: " + e.toString()); } } + String spId = SAMLServiceProviderID.value(); + String spSsoUrl = SAMLServiceProviderSingleSignOnURL.value(); + String spSloUrl = SAMLServiceProviderSingleLogOutURL.value(); + String spOrgName = SAMLServiceProviderOrgName.value(); + String spOrgUrl = SAMLServiceProviderOrgUrl.value(); + String spContactPersonName = SAMLServiceProviderContactPersonName.value(); + String spContactPersonEmail = SAMLServiceProviderContactEmail.value(); + KeyPair spKeyPair = null; + X509Certificate spX509Key = null; if (keyStoreVO != null) { PrivateKey privateKey = SAMLUtils.loadPrivateKey(keyStoreVO.getCertificate()); PublicKey publicKey = SAMLUtils.loadPublicKey(keyStoreVO.getKey()); if (privateKey != null && publicKey != null) { spKeyPair = new KeyPair(publicKey, privateKey); - KeystoreVO x509VO = _ksDao.findByName(SAMLUtils.SAMLSP_X509CERT); + KeystoreVO x509VO = _ksDao.findByName(SAMLPluginConstants.SAMLSP_X509CERT); if (x509VO == null) { try { spX509Key = SAMLUtils.generateRandomX509Certificate(spKeyPair); @@ -125,7 +171,7 @@ private boolean setup() { ObjectOutput out = new ObjectOutputStream(bos); out.writeObject(spX509Key); out.flush(); - _ksDao.save(SAMLUtils.SAMLSP_X509CERT, Base64.encodeBase64String(bos.toByteArray()), "", "samlsp-x509cert"); + _ksDao.save(SAMLPluginConstants.SAMLSP_X509CERT, Base64.encodeBase64String(bos.toByteArray()), "", "samlsp-x509cert"); bos.close(); } catch (NoSuchAlgorithmException | NoSuchProviderException | CertificateEncodingException | SignatureException | InvalidKeyException | IOException e) { s_logger.error("SAML Plugin won't be able to use X509 signed authentication"); @@ -142,61 +188,194 @@ private boolean setup() { } } } - - this.serviceProviderId = _configDao.getValue(Config.SAMLServiceProviderID.key()); - this.identityProviderId = _configDao.getValue(Config.SAMLIdentityProviderID.key()); - - this.spSingleSignOnUrl = _configDao.getValue(Config.SAMLServiceProviderSingleSignOnURL.key()); - this.spSingleLogOutUrl = _configDao.getValue(Config.SAMLServiceProviderSingleLogOutURL.key()); - - String idpMetaDataUrl = _configDao.getValue(Config.SAMLIdentityProviderMetadataURL.key()); - - int tolerance = 30000; - String timeout = _configDao.getValue(Config.SAMLTimeout.key()); - if (timeout != null) { - tolerance = Integer.parseInt(timeout); + if (spKeyPair != null && spX509Key != null + && spId != null && spSsoUrl != null && spSloUrl != null + && spOrgName != null && spOrgUrl != null + && spContactPersonName != null && spContactPersonEmail != null) { + _spMetadata.setEntityId(spId); + _spMetadata.setOrganizationName(spOrgName); + _spMetadata.setOrganizationUrl(spOrgUrl); + _spMetadata.setContactPersonName(spContactPersonName); + _spMetadata.setContactPersonEmail(spContactPersonEmail); + _spMetadata.setSsoUrl(spSsoUrl); + _spMetadata.setSloUrl(spSloUrl); + _spMetadata.setKeyPair(spKeyPair); + _spMetadata.setSigningCertificate(spX509Key); + _spMetadata.setEncryptionCertificate(spX509Key); + return true; } + return false; + } - try { - DefaultBootstrap.bootstrap(); - idpMetaDataProvider = new HTTPMetadataProvider(idpMetaDataUrl, tolerance); - idpMetaDataProvider.setRequireValidMetadata(true); - idpMetaDataProvider.setParserPool(new BasicParserPool()); - idpMetaDataProvider.initialize(); + private void addIdpToMap(EntityDescriptor descriptor, Map idpMap) { + SAMLProviderMetadata idpMetadata = new SAMLProviderMetadata(); + idpMetadata.setEntityId(descriptor.getEntityID()); + s_logger.debug("Adding IdP to the list of discovered IdPs: " + descriptor.getEntityID()); + if (descriptor.getOrganization() != null) { + if (descriptor.getOrganization().getDisplayNames() != null) { + for (OrganizationDisplayName orgName : descriptor.getOrganization().getDisplayNames()) { + if (orgName != null && orgName.getName() != null) { + idpMetadata.setOrganizationName(orgName.getName().getLocalString()); + break; + } + } + } + if (idpMetadata.getOrganizationName() == null && descriptor.getOrganization().getOrganizationNames() != null) { + for (OrganizationName orgName : descriptor.getOrganization().getOrganizationNames()) { + if (orgName != null && orgName.getName() != null) { + idpMetadata.setOrganizationName(orgName.getName().getLocalString()); + break; + } + } + } + if (descriptor.getOrganization().getURLs() != null) { + for (OrganizationURL organizationURL : descriptor.getOrganization().getURLs()) { + if (organizationURL != null && organizationURL.getURL() != null) { + idpMetadata.setOrganizationUrl(organizationURL.getURL().getLocalString()); + break; + } + } + } + } + if (descriptor.getContactPersons() != null) { + for (ContactPerson person : descriptor.getContactPersons()) { + if (person == null || (person.getGivenName() == null && person.getSurName() == null) + || person.getEmailAddresses() == null) { + continue; + } + if (person.getGivenName() != null) { + idpMetadata.setContactPersonName(person.getGivenName().getName()); - EntityDescriptor idpEntityDescriptor = idpMetaDataProvider.getEntityDescriptor(this.identityProviderId); + } else if (person.getSurName() != null) { + idpMetadata.setContactPersonName(person.getSurName().getName()); + } + for (EmailAddress emailAddress : person.getEmailAddresses()) { + if (emailAddress != null && emailAddress.getAddress() != null) { + idpMetadata.setContactPersonEmail(emailAddress.getAddress()); + } + } + if (idpMetadata.getContactPersonName() != null && idpMetadata.getContactPersonEmail() != null) { + break; + } + } + } - IDPSSODescriptor idpssoDescriptor = idpEntityDescriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS); - if (idpssoDescriptor != null) { - for (SingleSignOnService ssos: idpssoDescriptor.getSingleSignOnServices()) { + IDPSSODescriptor idpDescriptor = descriptor.getIDPSSODescriptor(SAMLConstants.SAML20P_NS); + if (idpDescriptor != null) { + if (idpDescriptor.getSingleSignOnServices() != null) { + for (SingleSignOnService ssos : idpDescriptor.getSingleSignOnServices()) { if (ssos.getBinding().equals(SAMLConstants.SAML2_REDIRECT_BINDING_URI)) { - this.idpSingleSignOnUrl = ssos.getLocation(); + idpMetadata.setSsoUrl(ssos.getLocation()); } } - - for (SingleLogoutService slos: idpssoDescriptor.getSingleLogoutServices()) { + } + if (idpDescriptor.getSingleLogoutServices() != null) { + for (SingleLogoutService slos : idpDescriptor.getSingleLogoutServices()) { if (slos.getBinding().equals(SAMLConstants.SAML2_REDIRECT_BINDING_URI)) { - this.idpSingleLogOutUrl = slos.getLocation(); + idpMetadata.setSloUrl(slos.getLocation()); } } + } - for (KeyDescriptor kd: idpssoDescriptor.getKeyDescriptors()) { + X509Certificate unspecifiedKey = null; + if (idpDescriptor.getKeyDescriptors() != null) { + for (KeyDescriptor kd : idpDescriptor.getKeyDescriptors()) { if (kd.getUse() == UsageType.SIGNING) { try { - this.idpSigningKey = KeyInfoHelper.getCertificates(kd.getKeyInfo()).get(0); + idpMetadata.setSigningCertificate(KeyInfoHelper.getCertificates(kd.getKeyInfo()).get(0)); } catch (CertificateException ignored) { } } if (kd.getUse() == UsageType.ENCRYPTION) { try { - this.idpEncryptionKey = KeyInfoHelper.getCertificates(kd.getKeyInfo()).get(0); + idpMetadata.setEncryptionCertificate(KeyInfoHelper.getCertificates(kd.getKeyInfo()).get(0)); + } catch (CertificateException ignored) { + } + } + if (kd.getUse() == UsageType.UNSPECIFIED) { + try { + unspecifiedKey = KeyInfoHelper.getCertificates(kd.getKeyInfo()).get(0); } catch (CertificateException ignored) { } } } + } + if (idpMetadata.getSigningCertificate() == null && unspecifiedKey != null) { + idpMetadata.setSigningCertificate(unspecifiedKey); + } + if (idpMetadata.getEncryptionCertificate() == null && unspecifiedKey != null) { + idpMetadata.setEncryptionCertificate(unspecifiedKey); + } + if (idpMap.containsKey(idpMetadata.getEntityId())) { + s_logger.warn("Duplicate IdP metadata found with entity Id: " + idpMetadata.getEntityId()); + } + idpMap.put(idpMetadata.getEntityId(), idpMetadata); + } + } + + private void discoverAndAddIdp(XMLObject metadata, Map idpMap) { + if (metadata instanceof EntityDescriptor) { + EntityDescriptor entityDescriptor = (EntityDescriptor) metadata; + addIdpToMap(entityDescriptor, idpMap); + } else if (metadata instanceof EntitiesDescriptor) { + EntitiesDescriptor entitiesDescriptor = (EntitiesDescriptor) metadata; + if (entitiesDescriptor.getEntityDescriptors() != null) { + for (EntityDescriptor entityDescriptor: entitiesDescriptor.getEntityDescriptors()) { + addIdpToMap(entityDescriptor, idpMap); + } + } + if (entitiesDescriptor.getEntitiesDescriptors() != null) { + for (EntitiesDescriptor entitiesDescriptorInner: entitiesDescriptor.getEntitiesDescriptors()) { + discoverAndAddIdp(entitiesDescriptorInner, idpMap); + } + } + } + } + + class MetadataRefreshTask extends TimerTask { + @Override + public void run() { + if (_idpMetaDataProvider == null) { + return; + } + s_logger.debug("Starting SAML IDP Metadata Refresh Task"); + Map metadataMap = new HashMap(); + try { + discoverAndAddIdp(_idpMetaDataProvider.getMetadata(), metadataMap); + _idpMetadataMap = metadataMap; + expireTokens(); + s_logger.debug("Finished refreshing SAML Metadata and expiring old auth tokens"); + } catch (MetadataProviderException e) { + s_logger.warn("SAML Metadata Refresh task failed with exception: " + e.getMessage()); + } + + } + } + + private boolean setup() { + if (!initSP()) { + s_logger.error("SAML Plugin failed to initialize, please fix the configuration and restart management server"); + return false; + } + _timer = new Timer(); + final HttpClient client = new HttpClient(); + final String idpMetaDataUrl = SAMLIdentityProviderMetadataURL.value(); + if (SAMLTimeout.value() != null && SAMLTimeout.value() > SAMLPluginConstants.SAML_REFRESH_INTERVAL) { + _refreshInterval = SAMLTimeout.value(); + } + try { + DefaultBootstrap.bootstrap(); + if (idpMetaDataUrl.startsWith("http")) { + _idpMetaDataProvider = new HTTPMetadataProvider(_timer, client, idpMetaDataUrl); } else { - s_logger.warn("Provided IDP XML Metadata does not contain IDPSSODescriptor, SAML authentication may not work"); + 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); } + _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"); @@ -204,70 +383,139 @@ private boolean setup() { s_logger.error("OpenSAML bootstrapping failed: error: " + e.getMessage()); } catch (NullPointerException e) { s_logger.error("Unable to setup SAML Auth Plugin due to NullPointerException" + - " please check the SAML IDP metadata URL and entity ID in global settings: " + e.getMessage()); - } - - if (this.idpSingleLogOutUrl == null || this.idpSingleSignOnUrl == null) { - s_logger.error("SAML based authentication won't work"); + " please check the SAML global settings: " + e.getMessage()); } - return true; } @Override - public List> getAuthCommands() { - List> cmdList = new ArrayList>(); - if (!isSAMLPluginEnabled()) { - return cmdList; + public SAMLProviderMetadata getSPMetadata() { + return _spMetadata; + } + + @Override + public SAMLProviderMetadata getIdPMetadata(String entityId) { + if (entityId != null && _idpMetadataMap.containsKey(entityId)) { + return _idpMetadataMap.get(entityId); } - cmdList.add(SAML2LoginAPIAuthenticatorCmd.class); - cmdList.add(SAML2LogoutAPIAuthenticatorCmd.class); - cmdList.add(GetServiceProviderMetaDataCmd.class); - return cmdList; + String defaultIdpId = SAMLDefaultIdentityProviderId.value(); + if (defaultIdpId != null && _idpMetadataMap.containsKey(defaultIdpId)) { + return _idpMetadataMap.get(defaultIdpId); + } + // In case of a single IdP, return that as default + if (_idpMetadataMap.size() == 1) { + return _idpMetadataMap.values().iterator().next(); + } + return null; } - public String getServiceProviderId() { - return serviceProviderId; + @Override + public Collection getAllIdPMetadata() { + return _idpMetadataMap.values(); } - public String getIdpSingleSignOnUrl() { - return this.idpSingleSignOnUrl; + @Override + public boolean isUserAuthorized(Long userId, String entityId) { + UserVO user = _userDao.getUser(userId); + if (user != null) { + if (user.getSource().equals(User.Source.SAML2) && + user.getExternalEntity().equalsIgnoreCase(entityId)) { + return true; + } + } + return false; } - public String getIdpSingleLogOutUrl() { - return this.idpSingleLogOutUrl; + @Override + public boolean authorizeUser(Long userId, String entityId, boolean enable) { + UserVO user = _userDao.getUser(userId); + if (user != null) { + if (enable) { + user.setExternalEntity(entityId); + user.setSource(User.Source.SAML2); + } else { + if (user.getSource().equals(User.Source.SAML2)) { + user.setSource(User.Source.SAML2DISABLED); + } else { + return false; + } + } + _userDao.update(user.getId(), user); + return true; + } + return false; } - public String getSpSingleSignOnUrl() { - return spSingleSignOnUrl; + @Override + public void saveToken(String authnId, String domainPath, String entity) { + Long domainId = null; + if (domainPath != null) { + Domain domain = _domainMgr.findDomainByPath(domainPath); + if (domain != null) { + domainId = domain.getId(); + } + } + SAMLTokenVO token = new SAMLTokenVO(authnId, domainId, entity); + if (_samlTokenDao.findByUuid(authnId) == null) { + _samlTokenDao.persist(token); + } else { + s_logger.warn("Duplicate SAML token for entity=" + entity + " token id=" + authnId + " domain=" + domainPath); + } } - public String getSpSingleLogOutUrl() { - return spSingleLogOutUrl; + @Override + public SAMLTokenVO getToken(String authnId) { + return _samlTokenDao.findByUuid(authnId); } - public String getIdentityProviderId() { - return identityProviderId; + @Override + public void expireTokens() { + _samlTokenDao.expireTokens(); } - public X509Certificate getIdpSigningKey() { - return idpSigningKey; + public Boolean isSAMLPluginEnabled() { + return SAMLIsPluginEnabled.value(); } - public X509Certificate getIdpEncryptionKey() { - return idpEncryptionKey; + @Override + public String getConfigComponentName() { + return "SAML2-PLUGIN"; } - public Boolean isSAMLPluginEnabled() { - return Boolean.valueOf(_configDao.getValue(Config.SAMLIsPluginEnabled.key())); + @Override + public List> getAuthCommands() { + List> cmdList = new ArrayList>(); + if (!isSAMLPluginEnabled()) { + return cmdList; + } + cmdList.add(SAML2LoginAPIAuthenticatorCmd.class); + cmdList.add(SAML2LogoutAPIAuthenticatorCmd.class); + cmdList.add(GetServiceProviderMetaDataCmd.class); + cmdList.add(ListIdpsCmd.class); + cmdList.add(ListAndSwitchSAMLAccountCmd.class); + return cmdList; } - public X509Certificate getSpX509Certificate() { - return spX509Key; + @Override + public List> getCommands() { + List> cmdList = new ArrayList>(); + if (!isSAMLPluginEnabled()) { + return cmdList; + } + cmdList.add(AuthorizeSAMLSSOCmd.class); + cmdList.add(ListSamlAuthorizationCmd.class); + return cmdList; } @Override - public KeyPair getSpKeyPair() { - return spKeyPair; + public ConfigKey[] getConfigKeys() { + return new ConfigKey[] { + SAMLIsPluginEnabled, SAMLServiceProviderID, + SAMLServiceProviderContactPersonName, SAMLServiceProviderContactEmail, + SAMLServiceProviderOrgName, SAMLServiceProviderOrgUrl, + SAMLServiceProviderSingleSignOnURL, SAMLServiceProviderSingleLogOutURL, + SAMLCloudStackRedirectionUrl, SAMLUserAttributeName, + SAMLIdentityProviderMetadataURL, SAMLDefaultIdentityProviderId, + SAMLSignatureAlgorithm, SAMLAppendDomainSuffix, SAMLTimeout}; } } diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2UserAuthenticator.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2UserAuthenticator.java index 68bd81c18f..65a7959d99 100644 --- a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2UserAuthenticator.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAML2UserAuthenticator.java @@ -21,7 +21,6 @@ import com.cloud.user.dao.UserAccountDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.Pair; -import org.apache.cloudstack.utils.auth.SAMLUtils; import org.apache.cxf.common.util.StringUtils; import org.apache.log4j.Logger; @@ -50,13 +49,12 @@ public Pair authenticate(String username, } final UserAccount userAccount = _userAccountDao.getUserAccount(username, domainId); - if (userAccount == null) { - s_logger.debug("Unable to find user with " + username + " in domain " + domainId); + if (userAccount == null || userAccount.getSource() != User.Source.SAML2) { + s_logger.debug("Unable to find user with " + username + " in domain " + domainId + ", or user source is not SAML2"); return new Pair(false, null); } else { User user = _userDao.getUser(userAccount.getId()); - if (user != null && SAMLUtils.checkSAMLUser(user.getUuid(), username) && - requestParameters != null && requestParameters.containsKey(SAMLUtils.SAML_RESPONSE)) { + if (user != null && user.getSource() == User.Source.SAML2 && user.getExternalEntity() != null) { return new Pair(true, null); } } diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLPluginConstants.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLPluginConstants.java new file mode 100644 index 0000000000..5f806e2f69 --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLPluginConstants.java @@ -0,0 +1,30 @@ +// +// 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; + +public class SAMLPluginConstants { + public static final int SAML_REFRESH_INTERVAL = 300; + + public static final String SAML_RESPONSE = "SAMLResponse"; + public static final String SAML_IDPID = "SAML_IDPID"; + public static final String SAML_SESSIONID = "SAML_SESSIONID"; + public static final String SAML_NAMEID = "SAML_NAMEID"; + public static final String SAMLSP_KEYPAIR = "SAMLSP_KEYPAIR"; + public static final String SAMLSP_X509CERT = "SAMLSP_X509CERT"; +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLProviderMetadata.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLProviderMetadata.java new file mode 100644 index 0000000000..c7138a1d79 --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLProviderMetadata.java @@ -0,0 +1,122 @@ +// 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 java.security.KeyPair; +import java.security.cert.X509Certificate; + +public class SAMLProviderMetadata { + private String entityId; + private String organizationName; + private String organizationUrl; + private String contactPersonName; + private String contactPersonEmail; + private String ssoUrl; + private String sloUrl; + private KeyPair keyPair; + private X509Certificate signingCertificate; + private X509Certificate encryptionCertificate; + + public SAMLProviderMetadata() { + } + + public void setCommonCertificate(X509Certificate certificate) { + this.signingCertificate = certificate; + this.encryptionCertificate = certificate; + } + + public String getEntityId() { + return entityId; + } + + public void setEntityId(String entityId) { + this.entityId = entityId; + } + + public String getContactPersonName() { + return contactPersonName; + } + + public void setContactPersonName(String contactPersonName) { + this.contactPersonName = contactPersonName; + } + + public String getContactPersonEmail() { + return contactPersonEmail; + } + + public void setContactPersonEmail(String contactPersonEmail) { + this.contactPersonEmail = contactPersonEmail; + } + + public String getOrganizationName() { + return organizationName; + } + + public void setOrganizationName(String organizationName) { + this.organizationName = organizationName; + } + + public String getOrganizationUrl() { + return organizationUrl; + } + + public void setOrganizationUrl(String organizationUrl) { + this.organizationUrl = organizationUrl; + } + + public KeyPair getKeyPair() { + return keyPair; + } + + public void setKeyPair(KeyPair keyPair) { + this.keyPair = keyPair; + } + + public X509Certificate getSigningCertificate() { + return signingCertificate; + } + + public void setSigningCertificate(X509Certificate signingCertificate) { + this.signingCertificate = signingCertificate; + } + + public X509Certificate getEncryptionCertificate() { + return encryptionCertificate; + } + + public void setEncryptionCertificate(X509Certificate encryptionCertificate) { + this.encryptionCertificate = encryptionCertificate; + } + + public String getSsoUrl() { + return ssoUrl; + } + + public void setSsoUrl(String ssoUrl) { + this.ssoUrl = ssoUrl; + } + + public String getSloUrl() { + return sloUrl; + } + + public void setSloUrl(String sloUrl) { + this.sloUrl = sloUrl; + } +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDao.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDao.java new file mode 100644 index 0000000000..b045562009 --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDao.java @@ -0,0 +1,23 @@ +// 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.utils.db.GenericDao; + +public interface SAMLTokenDao extends GenericDao { + public void expireTokens(); +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java new file mode 100644 index 0000000000..eb106d97ad --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenDaoImpl.java @@ -0,0 +1,51 @@ +// 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.utils.db.DB; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.TransactionLegacy; +import com.cloud.utils.exception.CloudRuntimeException; +import org.springframework.stereotype.Component; + +import javax.ejb.Local; +import java.sql.PreparedStatement; + +@DB +@Component +@Local(value = {SAMLTokenDao.class}) +public class SAMLTokenDaoImpl extends GenericDaoBase implements SAMLTokenDao { + + public SAMLTokenDaoImpl() { + super(); + } + + @Override + public void expireTokens() { + TransactionLegacy txn = TransactionLegacy.currentTxn(); + try { + txn.start(); + String sql = "DELETE FROM `saml_token` WHERE `created` < (NOW() - INTERVAL 1 HOUR)"; + PreparedStatement pstmt = txn.prepareAutoCloseStatement(sql); + pstmt.executeUpdate(); + txn.commit(); + } catch (Exception e) { + txn.rollback(); + throw new CloudRuntimeException("Unable to flush old SAML tokens due to exception", e); + } + } +} diff --git a/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenVO.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenVO.java new file mode 100644 index 0000000000..c8ac2f1f43 --- /dev/null +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLTokenVO.java @@ -0,0 +1,97 @@ +// 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.utils.db.GenericDao; +import org.apache.cloudstack.api.Identity; +import org.apache.cloudstack.api.InternalIdentity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Table(name = "saml_token") +public class SAMLTokenVO implements Identity, InternalIdentity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "uuid") + private String uuid; + + @Column(name = "domain_id") + private Long domainId = null; + + @Column(name = "entity") + private String entity = null; + + @Column(name = GenericDao.CREATED_COLUMN) + private Date created; + + public SAMLTokenVO() { + } + + public SAMLTokenVO(String uuid, Long domainId, String entity) { + this.uuid = uuid; + this.domainId = domainId; + this.entity = entity; + } + + @Override + public long getId() { + return id; + } + + @Override + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Long getDomainId() { + return domainId; + } + + public void setDomainId(long domainId) { + this.domainId = domainId; + } + + public String getEntity() { + return entity; + } + + public void setEntity(String entity) { + this.entity = entity; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } +} diff --git a/utils/src/org/apache/cloudstack/utils/auth/SAMLUtils.java b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLUtils.java similarity index 67% rename from utils/src/org/apache/cloudstack/utils/auth/SAMLUtils.java rename to plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLUtils.java index a6d2d347be..fb2d960f57 100644 --- a/utils/src/org/apache/cloudstack/utils/auth/SAMLUtils.java +++ b/plugins/user-authenticators/saml2/src/org/apache/cloudstack/saml/SAMLUtils.java @@ -17,37 +17,38 @@ // under the License. // -package org.apache.cloudstack.utils.auth; +package org.apache.cloudstack.saml; import com.cloud.utils.HttpUtils; -import org.apache.commons.codec.digest.DigestUtils; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.response.LoginCmdResponse; import org.apache.log4j.Logger; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.x509.X509V1CertificateGenerator; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.opensaml.Configuration; +import org.opensaml.DefaultBootstrap; import org.opensaml.common.SAMLVersion; import org.opensaml.common.xml.SAMLConstants; +import org.opensaml.saml2.core.Assertion; +import org.opensaml.saml2.core.Attribute; +import org.opensaml.saml2.core.AttributeStatement; +import org.opensaml.saml2.core.AuthnContext; import org.opensaml.saml2.core.AuthnContextClassRef; import org.opensaml.saml2.core.AuthnContextComparisonTypeEnumeration; import org.opensaml.saml2.core.AuthnRequest; import org.opensaml.saml2.core.Issuer; import org.opensaml.saml2.core.LogoutRequest; import org.opensaml.saml2.core.NameID; -import org.opensaml.saml2.core.NameIDPolicy; -import org.opensaml.saml2.core.NameIDType; import org.opensaml.saml2.core.RequestedAuthnContext; import org.opensaml.saml2.core.Response; -import org.opensaml.saml2.core.SessionIndex; import org.opensaml.saml2.core.impl.AuthnContextClassRefBuilder; import org.opensaml.saml2.core.impl.AuthnRequestBuilder; import org.opensaml.saml2.core.impl.IssuerBuilder; import org.opensaml.saml2.core.impl.LogoutRequestBuilder; import org.opensaml.saml2.core.impl.NameIDBuilder; -import org.opensaml.saml2.core.impl.NameIDPolicyBuilder; import org.opensaml.saml2.core.impl.RequestedAuthnContextBuilder; -import org.opensaml.saml2.core.impl.SessionIndexBuilder; import org.opensaml.xml.ConfigurationException; import org.opensaml.xml.XMLObject; import org.opensaml.xml.io.Marshaller; @@ -63,9 +64,12 @@ import org.xml.sax.SAXException; import javax.security.auth.x500.X500Principal; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.FactoryConfigurationError; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -90,67 +94,85 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; +import java.util.List; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; public class SAMLUtils { public static final Logger s_logger = Logger.getLogger(SAMLUtils.class); - public static final String SAML_RESPONSE = "SAMLResponse"; - public static final String SAML_NS = "SAML-"; - public static final String SAML_NAMEID = "SAML_NAMEID"; - public static final String SAML_SESSION = "SAML_SESSION"; - public static final String SAMLSP_KEYPAIR = "SAMLSP_KEYPAIR"; - public static final String SAMLSP_X509CERT = "SAMLSP_X509CERT"; + public static String generateSecureRandomId() { + return new BigInteger(160, new SecureRandom()).toString(32); + } - public static String createSAMLId(String uid) { - if (uid == null) { + public static String getValueFromAttributeStatements(final List attributeStatements, final String attributeKey) { + if (attributeStatements == null || attributeStatements.size() < 1 || attributeKey == null) { return null; } - String hash = DigestUtils.sha256Hex(uid); - String samlUuid = SAML_NS + hash; - return samlUuid.substring(0, 40); + for (AttributeStatement attributeStatement : attributeStatements) { + if (attributeStatement == null || attributeStatements.size() < 1) { + continue; + } + for (Attribute attribute : attributeStatement.getAttributes()) { + if (attribute.getAttributeValues() != null && attribute.getAttributeValues().size() > 0) { + String value = attribute.getAttributeValues().get(0).getDOM().getTextContent(); + s_logger.debug("SAML attribute name: " + attribute.getName() + " friendly-name:" + attribute.getFriendlyName() + " value:" + value); + if (attributeKey.equals(attribute.getName()) || attributeKey.equals(attribute.getFriendlyName())) { + return value; + } + } + } + } + return null; } - public static boolean checkSAMLUser(String uuid, String username) { - if (uuid == null || uuid.isEmpty() || username == null || username.isEmpty()) { - return false; + public static String getValueFromAssertions(final List assertions, final String attributeKey) { + if (assertions == null || attributeKey == null) { + return null; + } + for (Assertion assertion : assertions) { + String value = getValueFromAttributeStatements(assertion.getAttributeStatements(), attributeKey); + if (value != null) { + return value; + } } - return uuid.startsWith(SAML_NS) && createSAMLId(username).equals(uuid); + return null; } - public static String generateSecureRandomId() { - return new BigInteger(160, new SecureRandom()).toString(32); + public static String buildAuthnRequestUrl(final String authnId, final SAMLProviderMetadata spMetadata, final SAMLProviderMetadata idpMetadata, final String signatureAlgorithm) { + String redirectUrl = ""; + try { + DefaultBootstrap.bootstrap(); + AuthnRequest authnRequest = SAMLUtils.buildAuthnRequestObject(authnId, spMetadata.getEntityId(), idpMetadata.getSsoUrl(), spMetadata.getSsoUrl()); + PrivateKey privateKey = null; + if (spMetadata.getKeyPair() != null) { + privateKey = spMetadata.getKeyPair().getPrivate(); + } + redirectUrl = idpMetadata.getSsoUrl() + "?" + SAMLUtils.generateSAMLRequestSignature("SAMLRequest=" + SAMLUtils.encodeSAMLRequest(authnRequest), privateKey, signatureAlgorithm); + } catch (ConfigurationException | FactoryConfigurationError | MarshallingException | IOException | NoSuchAlgorithmException | InvalidKeyException | java.security.SignatureException e) { + s_logger.error("SAML AuthnRequest message building error: " + e.getMessage()); + } + return redirectUrl; } - public static AuthnRequest buildAuthnRequestObject(String spId, String idpUrl, String consumerUrl) { - String authnId = generateSecureRandomId(); + public static AuthnRequest buildAuthnRequestObject(final String authnId, final String spId, final String idpUrl, final String consumerUrl) { // Issuer object IssuerBuilder issuerBuilder = new IssuerBuilder(); Issuer issuer = issuerBuilder.buildObject(); issuer.setValue(spId); - // NameIDPolicy - NameIDPolicyBuilder nameIdPolicyBuilder = new NameIDPolicyBuilder(); - NameIDPolicy nameIdPolicy = nameIdPolicyBuilder.buildObject(); - nameIdPolicy.setFormat(NameIDType.PERSISTENT); - nameIdPolicy.setSPNameQualifier(spId); - nameIdPolicy.setAllowCreate(true); - // AuthnContextClass AuthnContextClassRefBuilder authnContextClassRefBuilder = new AuthnContextClassRefBuilder(); AuthnContextClassRef authnContextClassRef = authnContextClassRefBuilder.buildObject( SAMLConstants.SAML20_NS, "AuthnContextClassRef", "saml"); - authnContextClassRef.setAuthnContextClassRef("urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"); + authnContextClassRef.setAuthnContextClassRef(AuthnContext.PPT_AUTHN_CTX); - // AuthnContex + // AuthnContext RequestedAuthnContextBuilder requestedAuthnContextBuilder = new RequestedAuthnContextBuilder(); RequestedAuthnContext requestedAuthnContext = requestedAuthnContextBuilder.buildObject(); - requestedAuthnContext - .setComparison(AuthnContextComparisonTypeEnumeration.EXACT); - requestedAuthnContext.getAuthnContextClassRefs().add( - authnContextClassRef); + requestedAuthnContext.setComparison(AuthnContextComparisonTypeEnumeration.EXACT); + requestedAuthnContext.getAuthnContextClassRefs().add(authnContextClassRef); // Creation of AuthRequestObject AuthnRequestBuilder authRequestBuilder = new AuthnRequestBuilder(); @@ -160,36 +182,27 @@ public static AuthnRequest buildAuthnRequestObject(String spId, String idpUrl, S authnRequest.setVersion(SAMLVersion.VERSION_20); authnRequest.setForceAuthn(false); authnRequest.setIsPassive(false); - authnRequest.setIssuer(issuer); authnRequest.setIssueInstant(new DateTime()); - authnRequest.setProtocolBinding(SAMLConstants.SAML2_REDIRECT_BINDING_URI); + authnRequest.setProtocolBinding(SAMLConstants.SAML2_POST_BINDING_URI); authnRequest.setAssertionConsumerServiceURL(consumerUrl); authnRequest.setProviderName(spId); - authnRequest.setNameIDPolicy(nameIdPolicy); + authnRequest.setIssuer(issuer); authnRequest.setRequestedAuthnContext(requestedAuthnContext); return authnRequest; } - public static LogoutRequest buildLogoutRequest(String logoutUrl, String spId, NameID sessionNameId, String sessionIndex) { - IssuerBuilder issuerBuilder = new IssuerBuilder(); - Issuer issuer = issuerBuilder.buildObject(); + public static LogoutRequest buildLogoutRequest(String logoutUrl, String spId, String nameIdString) { + Issuer issuer = new IssuerBuilder().buildObject(); issuer.setValue(spId); - - SessionIndex sessionIndexElement = new SessionIndexBuilder().buildObject(); - sessionIndexElement.setSessionIndex(sessionIndex); - NameID nameID = new NameIDBuilder().buildObject(); - nameID.setValue(sessionNameId.getValue()); - nameID.setFormat(sessionNameId.getFormat()); - + nameID.setValue(nameIdString); LogoutRequest logoutRequest = new LogoutRequestBuilder().buildObject(); logoutRequest.setID(generateSecureRandomId()); logoutRequest.setDestination(logoutUrl); logoutRequest.setVersion(SAMLVersion.VERSION_20); logoutRequest.setIssueInstant(new DateTime()); logoutRequest.setIssuer(issuer); - logoutRequest.getSessionIndexes().add(sessionIndexElement); logoutRequest.setNameID(nameID); return logoutRequest; } @@ -226,13 +239,28 @@ public static Response decodeSAMLResponse(String responseMessage) return (Response) unmarshaller.unmarshall(element); } - public static String generateSAMLRequestSignature(String urlEncodedString, PrivateKey signingKey) + public static String generateSAMLRequestSignature(final String urlEncodedString, final PrivateKey signingKey, final String sigAlgorithmName) throws NoSuchAlgorithmException, SignatureException, InvalidKeyException, UnsupportedEncodingException { if (signingKey == null) { return urlEncodedString; } - String url = urlEncodedString + "&SigAlg=" + URLEncoder.encode(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1, HttpUtils.UTF_8); - Signature signature = Signature.getInstance("SHA1withRSA"); + + String opensamlAlgoIdSignature = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1; + String javaSignatureAlgorithmName = "SHA1withRSA"; + + if (sigAlgorithmName.equalsIgnoreCase("SHA256")) { + opensamlAlgoIdSignature = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA256; + javaSignatureAlgorithmName = "SHA256withRSA"; + } else if (sigAlgorithmName.equalsIgnoreCase("SHA384")) { + opensamlAlgoIdSignature = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA384; + javaSignatureAlgorithmName = "SHA384withRSA"; + } else if (sigAlgorithmName.equalsIgnoreCase("SHA512")) { + opensamlAlgoIdSignature = SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA512; + javaSignatureAlgorithmName = "SHA512withRSA"; + } + + String url = urlEncodedString + "&SigAlg=" + URLEncoder.encode(opensamlAlgoIdSignature, HttpUtils.UTF_8); + Signature signature = Signature.getInstance(javaSignatureAlgorithmName); signature.initSign(signingKey); signature.update(url.getBytes()); String signatureString = Base64.encodeBytes(signature.sign(), Base64.DONT_BREAK_LINES); @@ -327,4 +355,18 @@ public static X509Certificate generateRandomX509Certificate(KeyPair keyPair) thr return certGen.generate(keyPair.getPrivate(), "BC"); } + public static void setupSamlUserCookies(final LoginCmdResponse loginResponse, final HttpServletResponse resp) throws IOException { + resp.addCookie(new Cookie("userid", URLEncoder.encode(loginResponse.getUserId(), HttpUtils.UTF_8))); + resp.addCookie(new Cookie("domainid", URLEncoder.encode(loginResponse.getDomainId(), HttpUtils.UTF_8))); + resp.addCookie(new Cookie("role", URLEncoder.encode(loginResponse.getType(), HttpUtils.UTF_8))); + resp.addCookie(new Cookie("username", URLEncoder.encode(loginResponse.getUsername(), HttpUtils.UTF_8))); + resp.addCookie(new Cookie("account", URLEncoder.encode(loginResponse.getAccount(), HttpUtils.UTF_8))); + String timezone = loginResponse.getTimeZone(); + if (timezone != null) { + resp.addCookie(new Cookie("timezone", URLEncoder.encode(timezone, HttpUtils.UTF_8))); + } + resp.addCookie(new Cookie("userfullname", URLEncoder.encode(loginResponse.getFirstName() + " " + loginResponse.getLastName(), HttpUtils.UTF_8).replace("+", "%20"))); + resp.addHeader("SET-COOKIE", String.format("%s=%s;HttpOnly", ApiConstants.SESSIONKEY, loginResponse.getSessionKey())); + } + } diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmdTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java similarity index 77% rename from plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmdTest.java rename to plugins/user-authenticators/saml2/test/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java index cb16f0cc29..0b176712cd 100644 --- a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/GetServiceProviderMetaDataCmdTest.java +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/GetServiceProviderMetaDataCmdTest.java @@ -17,13 +17,15 @@ * under the License. */ -package org.apache.cloudstack.api.command; +package org.apache.cloudstack; import com.cloud.utils.HttpUtils; import org.apache.cloudstack.api.ApiServerService; import org.apache.cloudstack.api.auth.APIAuthenticationType; +import org.apache.cloudstack.api.command.GetServiceProviderMetaDataCmd; import org.apache.cloudstack.saml.SAML2AuthManager; -import org.apache.cloudstack.utils.auth.SAMLUtils; +import org.apache.cloudstack.saml.SAMLProviderMetadata; +import org.apache.cloudstack.saml.SAMLUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,6 +38,7 @@ import javax.servlet.http.HttpSession; import java.lang.reflect.Field; import java.security.InvalidKeyException; +import java.security.KeyPair; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SignatureException; @@ -75,24 +78,25 @@ public void testAuthenticate() throws NoSuchFieldException, SecurityException, I String spId = "someSPID"; String url = "someUrl"; - X509Certificate cert = SAMLUtils.generateRandomX509Certificate(SAMLUtils.generateRandomKeyPair()); - Mockito.when(samlAuthManager.getServiceProviderId()).thenReturn(spId); - Mockito.when(samlAuthManager.getIdpSigningKey()).thenReturn(cert); - Mockito.when(samlAuthManager.getIdpSingleLogOutUrl()).thenReturn(url); - Mockito.when(samlAuthManager.getSpSingleLogOutUrl()).thenReturn(url); + KeyPair kp = SAMLUtils.generateRandomKeyPair(); + X509Certificate cert = SAMLUtils.generateRandomX509Certificate(kp); + + SAMLProviderMetadata providerMetadata = new SAMLProviderMetadata(); + providerMetadata.setEntityId("random"); + providerMetadata.setSigningCertificate(cert); + providerMetadata.setEncryptionCertificate(cert); + providerMetadata.setKeyPair(kp); + providerMetadata.setSsoUrl("http://test.local"); + providerMetadata.setSloUrl("http://test.local"); + + Mockito.when(samlAuthManager.getSPMetadata()).thenReturn(providerMetadata); String result = cmd.authenticate("command", null, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); Assert.assertTrue(result.contains("md:EntityDescriptor")); - - Mockito.verify(samlAuthManager, Mockito.atLeast(1)).getServiceProviderId(); - Mockito.verify(samlAuthManager, Mockito.atLeast(1)).getSpSingleSignOnUrl(); - Mockito.verify(samlAuthManager, Mockito.atLeast(1)).getSpSingleLogOutUrl(); - Mockito.verify(samlAuthManager, Mockito.never()).getIdpSingleSignOnUrl(); - Mockito.verify(samlAuthManager, Mockito.never()).getIdpSingleLogOutUrl(); } @Test public void testGetAPIType() { - Assert.assertTrue(new GetServiceProviderMetaDataCmd().getAPIType() == APIAuthenticationType.LOGIN_API); + Assert.assertTrue(new GetServiceProviderMetaDataCmd().getAPIType() == APIAuthenticationType.READONLY_API); } } \ No newline at end of file diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2AuthManagerImplTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2AuthManagerImplTest.java new file mode 100644 index 0000000000..b06a1372a8 --- /dev/null +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2AuthManagerImplTest.java @@ -0,0 +1,174 @@ +/* + * 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; + +import com.cloud.user.DomainManager; +import com.cloud.user.User; +import com.cloud.user.UserVO; +import com.cloud.user.dao.UserDao; +import junit.framework.TestCase; +import org.apache.cloudstack.framework.security.keystore.KeystoreDao; +import org.apache.cloudstack.saml.SAML2AuthManagerImpl; +import org.apache.cloudstack.saml.SAMLTokenDao; +import org.apache.cloudstack.saml.SAMLTokenVO; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import java.lang.reflect.Field; + +@RunWith(MockitoJUnitRunner.class) +public class SAML2AuthManagerImplTest extends TestCase { + @Mock + private KeystoreDao ksDao; + + @Mock + private SAMLTokenDao samlTokenDao; + + @Mock + private UserDao userDao; + + @Mock + DomainManager domainMgr; + + SAML2AuthManagerImpl saml2AuthManager; + + @Override + @Before + public void setUp() throws NoSuchFieldException, IllegalAccessException { + saml2AuthManager = Mockito.spy(new SAML2AuthManagerImpl()); + + Field ksDaoField = SAML2AuthManagerImpl.class.getDeclaredField("_ksDao"); + ksDaoField.setAccessible(true); + ksDaoField.set(saml2AuthManager, ksDao); + + Field samlTokenDaoField = SAML2AuthManagerImpl.class.getDeclaredField("_samlTokenDao"); + samlTokenDaoField.setAccessible(true); + samlTokenDaoField.set(saml2AuthManager, samlTokenDao); + + Field userDaoField = SAML2AuthManagerImpl.class.getDeclaredField("_userDao"); + userDaoField.setAccessible(true); + userDaoField.set(saml2AuthManager, userDao); + + Field domainMgrField = SAML2AuthManagerImpl.class.getDeclaredField("_domainMgr"); + domainMgrField.setAccessible(true); + domainMgrField.set(saml2AuthManager, domainMgr); + + // enable the plugin + Mockito.doReturn(true).when(saml2AuthManager).isSAMLPluginEnabled(); + } + + @Test + public void testIsUserAuthorized() { + final String entityID = "some IDP ID"; + + // Test unauthorized user + UserVO user = new UserVO(200L); + user.setUsername("someuser"); + user.setSource(User.Source.UNKNOWN); + user.setExternalEntity(entityID); + Mockito.when(userDao.getUser(Mockito.anyLong())).thenReturn(user); + assertFalse(saml2AuthManager.isUserAuthorized(user.getId(), "someID")); + + // Test authorized user with wrong IDP + user.setSource(User.Source.SAML2); + Mockito.when(userDao.getUser(Mockito.anyLong())).thenReturn(user); + assertFalse(saml2AuthManager.isUserAuthorized(user.getId(), "someID")); + + // Test authorized user with wrong IDP + user.setSource(User.Source.SAML2); + Mockito.when(userDao.getUser(Mockito.anyLong())).thenReturn(user); + assertTrue(saml2AuthManager.isUserAuthorized(user.getId(), entityID)); + } + + @Test + public void testAuthorizeUser() { + // Test invalid user + Mockito.when(userDao.getUser(Mockito.anyLong())).thenReturn(null); + assertFalse(saml2AuthManager.authorizeUser(1L, "someID", true)); + + // Test valid user + UserVO user = new UserVO(200L); + user.setUsername("someuser"); + Mockito.when(userDao.getUser(Mockito.anyLong())).thenReturn(user); + assertTrue(saml2AuthManager.authorizeUser(1L, "someID", true)); + Mockito.verify(userDao, Mockito.atLeastOnce()).update(Mockito.anyLong(), Mockito.any(user.getClass())); + } + + + + @Test + public void testSaveToken() { + // duplicate token test + Mockito.when(samlTokenDao.findByUuid(Mockito.anyString())).thenReturn(new SAMLTokenVO()); + saml2AuthManager.saveToken("someAuthnID", null, "https://idp.bhaisaab.org/profile/shibboleth"); + Mockito.verify(samlTokenDao, Mockito.times(0)).persist(Mockito.any(SAMLTokenVO.class)); + + // valid test + Mockito.when(samlTokenDao.findByUuid(Mockito.anyString())).thenReturn(null); + saml2AuthManager.saveToken("someAuthnID", null, "https://idp.bhaisaab.org/profile/shibboleth"); + Mockito.verify(samlTokenDao, Mockito.times(1)).persist(Mockito.any(SAMLTokenVO.class)); + } + + @Test + public void testGetToken() { + SAMLTokenVO randomToken = new SAMLTokenVO("uuid", 1L, "someIDPDI"); + Mockito.when(samlTokenDao.findByUuid(Mockito.anyString())).thenReturn(randomToken); + assertEquals(saml2AuthManager.getToken("someAuthnID"), randomToken); + } + + @Test + public void testExpireToken() { + saml2AuthManager.expireTokens(); + Mockito.verify(samlTokenDao, Mockito.atLeast(1)).expireTokens(); + } + + @Test + public void testPluginEnabled() { + assertTrue(saml2AuthManager.isSAMLPluginEnabled()); + } + + @Test + public void testPluginComponentName() { + assertEquals(saml2AuthManager.getConfigComponentName(), "SAML2-PLUGIN"); + } + + @Test + public void testGetCommands() { + // Plugin enabled + assertTrue(saml2AuthManager.getCommands().size() > 0); + assertTrue(saml2AuthManager.getAuthCommands().size() > 0); + + // Plugin disabled + Mockito.doReturn(false).when(saml2AuthManager).isSAMLPluginEnabled(); + assertTrue(saml2AuthManager.getCommands().size() == 0); + assertTrue(saml2AuthManager.getAuthCommands().size() == 0); + // Re-enable the plugin + Mockito.doReturn(true).when(saml2AuthManager).isSAMLPluginEnabled(); + } + + @Test + public void testConfigKeys() { + assertTrue(saml2AuthManager.getConfigKeys().length > 0); + } +} diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2UserAuthenticatorTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2UserAuthenticatorTest.java index 83792c64d0..5b37388560 100644 --- a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2UserAuthenticatorTest.java +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAML2UserAuthenticatorTest.java @@ -25,8 +25,8 @@ import com.cloud.user.dao.UserAccountDao; import com.cloud.user.dao.UserDao; import com.cloud.utils.Pair; +import org.apache.cloudstack.saml.SAMLPluginConstants; import org.apache.cloudstack.saml.SAML2UserAuthenticator; -import org.apache.cloudstack.utils.auth.SAMLUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -68,8 +68,6 @@ public void authenticate() throws NoSuchFieldException, SecurityException, Illeg account.setId(1L); UserVO user = new UserVO(); - user.setUuid(SAMLUtils.createSAMLId("someUID")); - Mockito.when(userAccountDao.getUserAccount(Mockito.anyString(), Mockito.anyLong())).thenReturn(account); Mockito.when(userDao.getUser(Mockito.anyLong())).thenReturn(user); @@ -81,9 +79,9 @@ public void authenticate() throws NoSuchFieldException, SecurityException, Illeg Assert.assertFalse(pair.first()); // When there is SAMLRequest in params and user is same as the mocked one - params.put(SAMLUtils.SAML_RESPONSE, new Object[]{}); + params.put(SAMLPluginConstants.SAML_RESPONSE, new String[]{"RandomString"}); pair = authenticator.authenticate("someUID", "random", 1l, params); - Assert.assertTrue(pair.first()); + Assert.assertFalse(pair.first()); // When there is SAMLRequest in params but username is null pair = authenticator.authenticate(null, "random", 1l, params); diff --git a/utils/test/org/apache/cloudstack/utils/auth/SAMLUtilsTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAMLUtilsTest.java similarity index 66% rename from utils/test/org/apache/cloudstack/utils/auth/SAMLUtilsTest.java rename to plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAMLUtilsTest.java index bebfd13044..bd87831913 100644 --- a/utils/test/org/apache/cloudstack/utils/auth/SAMLUtilsTest.java +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/SAMLUtilsTest.java @@ -17,14 +17,13 @@ // under the License. // -package org.apache.cloudstack.utils.auth; +package org.apache.cloudstack; import junit.framework.TestCase; +import org.apache.cloudstack.saml.SAMLUtils; import org.junit.Test; import org.opensaml.saml2.core.AuthnRequest; import org.opensaml.saml2.core.LogoutRequest; -import org.opensaml.saml2.core.NameID; -import org.opensaml.saml2.core.impl.NameIDBuilder; import java.security.KeyPair; import java.security.PrivateKey; @@ -32,18 +31,6 @@ public class SAMLUtilsTest extends TestCase { - @Test - public void testSAMLId() throws Exception { - assertEquals(SAMLUtils.createSAMLId(null), null); - assertEquals(SAMLUtils.createSAMLId("someUserName"), "SAML-305e19dd2581f33fd90b3949298ec8b17de"); - - assertTrue(SAMLUtils.checkSAMLUser(SAMLUtils.createSAMLId("someUserName"), "someUserName")); - assertFalse(SAMLUtils.checkSAMLUser(SAMLUtils.createSAMLId("someUserName"), "someOtherUserName")); - assertFalse(SAMLUtils.checkSAMLUser(SAMLUtils.createSAMLId(null), "someOtherUserName")); - assertFalse(SAMLUtils.checkSAMLUser("randomUID", "randomUID")); - assertFalse(SAMLUtils.checkSAMLUser(null, null)); - } - @Test public void testGenerateSecureRandomId() throws Exception { assertTrue(SAMLUtils.generateSecureRandomId().length() > 0); @@ -54,7 +41,8 @@ public void testBuildAuthnRequestObject() throws Exception { String consumerUrl = "http://someurl.com"; String idpUrl = "http://idp.domain.example"; String spId = "cloudstack"; - AuthnRequest req = SAMLUtils.buildAuthnRequestObject(spId, idpUrl, consumerUrl); + String authnId = SAMLUtils.generateSecureRandomId(); + AuthnRequest req = SAMLUtils.buildAuthnRequestObject(authnId, spId, idpUrl, consumerUrl); assertEquals(req.getAssertionConsumerServiceURL(), consumerUrl); assertEquals(req.getDestination(), idpUrl); assertEquals(req.getIssuer().getValue(), spId); @@ -64,15 +52,10 @@ public void testBuildAuthnRequestObject() throws Exception { public void testBuildLogoutRequest() throws Exception { String logoutUrl = "http://logoutUrl"; String spId = "cloudstack"; - String sessionIndex = "12345"; - String nameIdString = "someNameID"; - NameID sessionNameId = new NameIDBuilder().buildObject(); - sessionNameId.setValue(nameIdString); - LogoutRequest req = SAMLUtils.buildLogoutRequest(logoutUrl, spId, sessionNameId, sessionIndex); + String nameId = "_12345"; + LogoutRequest req = SAMLUtils.buildLogoutRequest(logoutUrl, spId, nameId); assertEquals(req.getDestination(), logoutUrl); assertEquals(req.getIssuer().getValue(), spId); - assertEquals(req.getNameID().getValue(), nameIdString); - assertEquals(req.getSessionIndexes().get(0).getSessionIndex(), sessionIndex); } @Test diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java new file mode 100644 index 0000000000..1423243cfe --- /dev/null +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/ListAndSwitchSAMLAccountCmdTest.java @@ -0,0 +1,201 @@ +/* + * 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.api.command; + +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.user.Account; +import com.cloud.user.AccountService; +import com.cloud.user.User; +import com.cloud.user.UserAccountVO; +import com.cloud.user.UserVO; +import com.cloud.user.dao.UserAccountDao; +import com.cloud.user.dao.UserDao; +import com.cloud.utils.HttpUtils; +import junit.framework.TestCase; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.ApiServerService; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.auth.APIAuthenticationType; +import org.apache.cloudstack.api.response.LoginCmdResponse; +import org.apache.cloudstack.saml.SAML2AuthManager; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +@RunWith(MockitoJUnitRunner.class) +public class ListAndSwitchSAMLAccountCmdTest extends TestCase { + @Mock + ApiServerService apiServer; + + @Mock + SAML2AuthManager samlAuthManager; + + @Mock + AccountService accountService; + + @Mock + UserAccountDao userAccountDao; + + @Mock + UserDao userDao; + + @Mock + DomainDao domainDao; + + @Mock + HttpSession session; + + @Mock + HttpServletResponse resp; + + @Mock + HttpServletRequest req; + + @Test + public void testListAndSwitchSAMLAccountCmd() throws Exception { + // Setup + final Map params = new HashMap(); + final String sessionKeyValue = "someSessionIDValue"; + Mockito.when(session.getAttribute(ApiConstants.SESSIONKEY)).thenReturn(sessionKeyValue); + Mockito.when(session.getAttribute("userid")).thenReturn(2L); + params.put(ApiConstants.USER_ID, new String[]{"2"}); + params.put(ApiConstants.DOMAIN_ID, new String[]{"1"}); + Mockito.when(userDao.findByUuid(Mockito.anyString())).thenReturn(new UserVO(2L)); + Mockito.when(domainDao.findByUuid(Mockito.anyString())).thenReturn(new DomainVO()); + + // Mock/field setup + ListAndSwitchSAMLAccountCmd cmd = new ListAndSwitchSAMLAccountCmd(); + Field apiServerField = ListAndSwitchSAMLAccountCmd.class.getDeclaredField("_apiServer"); + apiServerField.setAccessible(true); + apiServerField.set(cmd, apiServer); + + Field managerField = ListAndSwitchSAMLAccountCmd.class.getDeclaredField("_samlAuthManager"); + managerField.setAccessible(true); + managerField.set(cmd, samlAuthManager); + + Field accountServiceField = BaseCmd.class.getDeclaredField("_accountService"); + accountServiceField.setAccessible(true); + accountServiceField.set(cmd, accountService); + + Field userAccountDaoField = ListAndSwitchSAMLAccountCmd.class.getDeclaredField("_userAccountDao"); + userAccountDaoField.setAccessible(true); + userAccountDaoField.set(cmd, userAccountDao); + + Field userDaoField = ListAndSwitchSAMLAccountCmd.class.getDeclaredField("_userDao"); + userDaoField.setAccessible(true); + userDaoField.set(cmd, userDao); + + Field domainDaoField = ListAndSwitchSAMLAccountCmd.class.getDeclaredField("_domainDao"); + domainDaoField.setAccessible(true); + domainDaoField.set(cmd, domainDao); + + // invalid session test + try { + cmd.authenticate("command", params, null, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); + } catch (ServerApiException exception) { + assertEquals(exception.getErrorCode(), ApiErrorCode.UNAUTHORIZED); + } finally { + Mockito.verify(accountService, Mockito.times(0)).getUserAccountById(Mockito.anyLong()); + } + + // invalid sessionkey value test + params.put(ApiConstants.SESSIONKEY, new String[]{"someOtherValue"}); + try { + Mockito.when(session.isNew()).thenReturn(false); + cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); + } catch (ServerApiException exception) { + assertEquals(exception.getErrorCode(), ApiErrorCode.UNAUTHORIZED); + } finally { + Mockito.verify(accountService, Mockito.times(0)).getUserAccountById(Mockito.anyLong()); + } + + // valid sessionkey value test + params.put(ApiConstants.SESSIONKEY, new String[]{sessionKeyValue}); + try { + cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); + } catch (ServerApiException exception) { + assertEquals(exception.getErrorCode(), ApiErrorCode.ACCOUNT_ERROR); + } finally { + Mockito.verify(accountService, Mockito.times(1)).getUserAccountById(Mockito.anyLong()); + } + + // valid sessionkey, invalid useraccount type (non-saml) value test + UserAccountVO mockedUserAccount = new UserAccountVO(); + mockedUserAccount.setId(2L); + mockedUserAccount.setAccountState(Account.State.enabled.toString()); + mockedUserAccount.setUsername("someUsername"); + mockedUserAccount.setExternalEntity("some IDP ID"); + mockedUserAccount.setDomainId(0L); + mockedUserAccount.setSource(User.Source.UNKNOWN); + Mockito.when(accountService.getUserAccountById(Mockito.anyLong())).thenReturn(mockedUserAccount); + try { + cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); + } catch (ServerApiException exception) { + assertEquals(exception.getErrorCode(), ApiErrorCode.ACCOUNT_ERROR); + } finally { + // accountService should have been called twice by now, for this case and the case above + Mockito.verify(accountService, Mockito.times(2)).getUserAccountById(Mockito.anyLong()); + } + + // all valid test + mockedUserAccount.setSource(User.Source.SAML2); + Mockito.when(accountService.getUserAccountById(Mockito.anyLong())).thenReturn(mockedUserAccount); + Mockito.when(apiServer.verifyUser(Mockito.anyLong())).thenReturn(true); + LoginCmdResponse loginCmdResponse = new LoginCmdResponse(); + loginCmdResponse.setUserId("1"); + loginCmdResponse.setDomainId("1"); + loginCmdResponse.setType("1"); + loginCmdResponse.setUsername("userName"); + loginCmdResponse.setAccount("someAccount"); + loginCmdResponse.setFirstName("firstName"); + loginCmdResponse.setLastName("lastName"); + loginCmdResponse.setSessionKey("newSessionKeyString"); + Mockito.when(apiServer.loginUser(Mockito.any(HttpSession.class), Mockito.anyString(), Mockito.anyString(), + Mockito.anyLong(), Mockito.anyString(), Mockito.anyString(), Mockito.anyMap())).thenReturn(loginCmdResponse); + try { + cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); + } catch (ServerApiException exception) { + fail("SAML list and switch account API failed to pass for all valid data: " + exception.getMessage()); + } finally { + // accountService should have been called 4 times by now, for this case twice and 2 for cases above + Mockito.verify(accountService, Mockito.times(4)).getUserAccountById(Mockito.anyLong()); + Mockito.verify(resp, Mockito.times(1)).sendRedirect(Mockito.anyString()); + } + } + + @Test + public void testGetAPIType() { + Assert.assertTrue(new ListAndSwitchSAMLAccountCmd().getAPIType() == APIAuthenticationType.READONLY_API); + } + +} diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java index 30ecc938af..c98c0b59e8 100644 --- a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmdTest.java @@ -29,9 +29,10 @@ import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.auth.APIAuthenticationType; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.saml.SAML2AuthManager; -import org.apache.cloudstack.utils.auth.SAMLUtils; +import org.apache.cloudstack.saml.SAMLPluginConstants; +import org.apache.cloudstack.saml.SAMLProviderMetadata; +import org.apache.cloudstack.saml.SAMLUtils; import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Test; @@ -43,6 +44,7 @@ import org.opensaml.saml2.core.Assertion; import org.opensaml.saml2.core.AttributeStatement; import org.opensaml.saml2.core.AuthnStatement; +import org.opensaml.saml2.core.Issuer; import org.opensaml.saml2.core.NameID; import org.opensaml.saml2.core.NameIDType; import org.opensaml.saml2.core.Response; @@ -52,6 +54,7 @@ import org.opensaml.saml2.core.impl.AssertionBuilder; import org.opensaml.saml2.core.impl.AttributeStatementBuilder; import org.opensaml.saml2.core.impl.AuthnStatementBuilder; +import org.opensaml.saml2.core.impl.IssuerBuilder; import org.opensaml.saml2.core.impl.NameIDBuilder; import org.opensaml.saml2.core.impl.ResponseBuilder; import org.opensaml.saml2.core.impl.StatusBuilder; @@ -62,6 +65,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.lang.reflect.Field; +import java.security.KeyPair; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; @@ -75,9 +79,6 @@ public class SAML2LoginAPIAuthenticatorCmdTest { @Mock SAML2AuthManager samlAuthManager; - @Mock - ConfigurationDao configDao; - @Mock DomainManager domainMgr; @@ -104,6 +105,9 @@ private Response buildMockResponse() throws Exception { samlMessage.setID("foo"); samlMessage.setVersion(SAMLVersion.VERSION_20); samlMessage.setIssueInstant(new DateTime(0)); + Issuer issuer = new IssuerBuilder().buildObject(); + issuer.setValue("MockedIssuer"); + samlMessage.setIssuer(issuer); Status status = new StatusBuilder().buildObject(); StatusCode statusCode = new StatusCodeBuilder().buildObject(); statusCode.setValue(StatusCode.SUCCESS_URI); @@ -145,32 +149,33 @@ public void testAuthenticate() throws Exception { domainMgrField.setAccessible(true); domainMgrField.set(cmd, domainMgr); - Field configDaoField = SAML2LoginAPIAuthenticatorCmd.class.getDeclaredField("_configDao"); - configDaoField.setAccessible(true); - configDaoField.set(cmd, configDao); - Field userAccountDaoField = SAML2LoginAPIAuthenticatorCmd.class.getDeclaredField("_userAccountDao"); userAccountDaoField.setAccessible(true); userAccountDaoField.set(cmd, userAccountDao); String spId = "someSPID"; String url = "someUrl"; - X509Certificate cert = SAMLUtils.generateRandomX509Certificate(SAMLUtils.generateRandomKeyPair()); - Mockito.when(samlAuthManager.getServiceProviderId()).thenReturn(spId); - Mockito.when(samlAuthManager.getIdpSigningKey()).thenReturn(null); - Mockito.when(samlAuthManager.getIdpSingleSignOnUrl()).thenReturn(url); - Mockito.when(samlAuthManager.getSpSingleSignOnUrl()).thenReturn(url); + KeyPair kp = SAMLUtils.generateRandomKeyPair(); + X509Certificate cert = SAMLUtils.generateRandomX509Certificate(kp); + + SAMLProviderMetadata providerMetadata = new SAMLProviderMetadata(); + providerMetadata.setEntityId("random"); + providerMetadata.setSigningCertificate(cert); + providerMetadata.setEncryptionCertificate(cert); + providerMetadata.setKeyPair(kp); + providerMetadata.setSsoUrl("http://test.local"); + providerMetadata.setSloUrl("http://test.local"); Mockito.when(session.getAttribute(Mockito.anyString())).thenReturn(null); - Mockito.when(configDao.getValue(Mockito.anyString())).thenReturn("someString"); Mockito.when(domain.getId()).thenReturn(1L); Mockito.when(domainMgr.getDomain(Mockito.anyString())).thenReturn(domain); UserAccountVO user = new UserAccountVO(); - user.setUsername(SAMLUtils.createSAMLId("someUID")); user.setId(1000L); Mockito.when(userAccountDao.getUserAccount(Mockito.anyString(), Mockito.anyLong())).thenReturn(user); Mockito.when(apiServer.verifyUser(Mockito.anyLong())).thenReturn(false); + Mockito.when(samlAuthManager.getSPMetadata()).thenReturn(providerMetadata); + Mockito.when(samlAuthManager.getIdPMetadata(Mockito.anyString())).thenReturn(providerMetadata); Map params = new HashMap(); @@ -179,20 +184,18 @@ public void testAuthenticate() throws Exception { Mockito.verify(resp, Mockito.times(1)).sendRedirect(Mockito.anyString()); // SSO SAMLResponse verification test, this should throw ServerApiException for auth failure - params.put(SAMLUtils.SAML_RESPONSE, new String[]{"Some String"}); + params.put(SAMLPluginConstants.SAML_RESPONSE, new String[]{"Some String"}); Mockito.stub(cmd.processSAMLResponse(Mockito.anyString())).toReturn(buildMockResponse()); try { cmd.authenticate("command", params, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); } catch (ServerApiException ignored) { } - Mockito.verify(configDao, Mockito.atLeastOnce()).getValue(Mockito.anyString()); - Mockito.verify(domainMgr, Mockito.times(1)).getDomain(Mockito.anyString()); - Mockito.verify(userAccountDao, Mockito.times(1)).getUserAccount(Mockito.anyString(), Mockito.anyLong()); - Mockito.verify(apiServer, Mockito.times(1)).verifyUser(Mockito.anyLong()); + Mockito.verify(userAccountDao, Mockito.times(0)).getUserAccount(Mockito.anyString(), Mockito.anyLong()); + Mockito.verify(apiServer, Mockito.times(0)).verifyUser(Mockito.anyLong()); } @Test public void testGetAPIType() { - Assert.assertTrue(new GetServiceProviderMetaDataCmd().getAPIType() == APIAuthenticationType.LOGIN_API); + Assert.assertTrue(new SAML2LoginAPIAuthenticatorCmd().getAPIType() == APIAuthenticationType.LOGIN_API); } } \ No newline at end of file diff --git a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java index e9834c9dd1..eff4b296d6 100644 --- a/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java +++ b/plugins/user-authenticators/saml2/test/org/apache/cloudstack/api/command/SAML2LogoutAPIAuthenticatorCmdTest.java @@ -22,9 +22,8 @@ import com.cloud.utils.HttpUtils; import org.apache.cloudstack.api.ApiServerService; import org.apache.cloudstack.api.auth.APIAuthenticationType; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.saml.SAML2AuthManager; -import org.apache.cloudstack.utils.auth.SAMLUtils; +import org.apache.cloudstack.saml.SAMLUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -47,9 +46,6 @@ public class SAML2LogoutAPIAuthenticatorCmdTest { @Mock SAML2AuthManager samlAuthManager; - @Mock - ConfigurationDao configDao; - @Mock HttpSession session; @@ -71,19 +67,10 @@ public void testAuthenticate() throws Exception { managerField.setAccessible(true); managerField.set(cmd, samlAuthManager); - Field configDaoField = SAML2LogoutAPIAuthenticatorCmd.class.getDeclaredField("_configDao"); - configDaoField.setAccessible(true); - configDaoField.set(cmd, configDao); - String spId = "someSPID"; String url = "someUrl"; X509Certificate cert = SAMLUtils.generateRandomX509Certificate(SAMLUtils.generateRandomKeyPair()); - Mockito.when(samlAuthManager.getServiceProviderId()).thenReturn(spId); - Mockito.when(samlAuthManager.getIdpSigningKey()).thenReturn(cert); - Mockito.when(samlAuthManager.getIdpSingleLogOutUrl()).thenReturn(url); - Mockito.when(samlAuthManager.getSpSingleLogOutUrl()).thenReturn(url); Mockito.when(session.getAttribute(Mockito.anyString())).thenReturn(null); - Mockito.when(configDao.getValue(Mockito.anyString())).thenReturn("someString"); cmd.authenticate("command", null, session, "random", HttpUtils.RESPONSE_TYPE_JSON, new StringBuilder(), req, resp); Mockito.verify(resp, Mockito.times(1)).sendRedirect(Mockito.anyString()); diff --git a/plugins/user-authenticators/sha256salted/pom.xml b/plugins/user-authenticators/sha256salted/pom.xml index 7ea6e026b4..f646c828f0 100644 --- a/plugins/user-authenticators/sha256salted/pom.xml +++ b/plugins/user-authenticators/sha256salted/pom.xml @@ -23,7 +23,7 @@ org.apache.cloudstack cloudstack-plugins - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../../pom.xml diff --git a/pom.xml b/pom.xml index 0726340409..3090888f99 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ org.apache.cloudstack cloudstack - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT pom Apache CloudStack Apache CloudStack is an IaaS (“Infrastructure as a Service”) cloud orchestration platform. @@ -45,7 +45,7 @@ 1.6 1.6 1.8 - 3.2.1 + 3.2.2 1.1.1 0.5 3.0 diff --git a/python/lib/cloud_utils.py b/python/lib/cloud_utils.py index 243bb408d4..b01cd9c1a2 100644 --- a/python/lib/cloud_utils.py +++ b/python/lib/cloud_utils.py @@ -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 @@ -18,7 +18,7 @@ - + # -*- coding: utf-8 -*- """CloudStack Python utility library""" @@ -106,7 +106,7 @@ def exit(errno=E_GENERIC,message=None,*args): def resolve(host,port): return [ (x[4][0],len(x[4])+2) for x in socket.getaddrinfo(host,port,socket.AF_UNSPEC,socket.SOCK_STREAM, 0, socket.AI_PASSIVE) ] - + def resolves_to_ipv6(host,port): return resolve(host,port)[0][1] == IPV6 @@ -119,7 +119,7 @@ def __init__(self, returncode, cmd): self.returncode = returncode ; self.cmd = cmd def __str__(self): return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode) subprocess.CalledProcessError = CalledProcessError - + def check_call(*popenargs, **kwargs): retcode = subprocess.call(*popenargs, **kwargs) cmd = kwargs.get("args") @@ -183,7 +183,7 @@ def __init__(self,stdout,stderr): self.stdout = stdout self.stderr = stderr return CommandOutput(*m) - + def __get_recursive_name(self,sep=None): m = self l = [] @@ -195,7 +195,7 @@ def __get_recursive_name(self,sep=None): else: return l def __str__(self): return ''%self.__get_recursive_name(sep=" ") - + def __repr__(self): return self.__str__() kvmok = Command("kvm-ok") @@ -275,7 +275,7 @@ def replace_line(f,startswith,stanza,always_add=False): def replace_or_add_line(f,startswith,stanza): return replace_line(f,startswith,stanza,always_add=True) - + # ==================================== CHECK FUNCTIONS ========================== # If they return without exception, it's okay. If they raise a CheckFailed exception, that means a condition @@ -410,8 +410,8 @@ def __init__(self,brname, pubNic, prvNic): else: self.nmservice = 'network-manager' self.netservice = 'networking' - - + + def done(self): try: alreadysetup = False @@ -422,7 +422,7 @@ def done(self): alreadysetup = alreadysetup or augtool._print("/files/etc/sysconfig/network-scripts/ifcfg-%s"%self.prvNic).stdout.strip() if not alreadysetup: alreadysetup = augtool._print("/files/etc/sysconfig/network-scripts/ifcfg-%s"%self.brname).stdout.strip() - + else: if self.pubNic != None: alreadysetup = alreadysetup or augtool._print("/files/etc/network/interfaces/iface",self.pubNic).stdout.strip() @@ -437,14 +437,14 @@ def done(self): def restore_state(self): if not self.runtime_state_changed: return - + try: o = ifconfig(self.brname) bridge_exists = True except CalledProcessError,e: print e.stdout + e.stderr bridge_exists = False - + if bridge_exists: ifconfig(self.brname,"0.0.0.0") if hasattr(self,"old_net_device"): @@ -458,8 +458,8 @@ def restore_state(self): except CalledProcessError: pass try: ifdown("--force",self.brname) except CalledProcessError: pass - - + + if self.was_net_service_running is None: # we do nothing pass @@ -475,7 +475,7 @@ def restore_state(self): if e.returncode == 1: pass else: raise time.sleep(1) - + if self.was_nm_service_running is None: # we do nothing pass @@ -488,7 +488,7 @@ def restore_state(self): time.sleep(1) start_service(self.nmservice,force=True) time.sleep(1) - + self.runtime_state_changed = False def execute(self): @@ -496,12 +496,12 @@ def execute(self): routes = ip.route().stdout.splitlines() defaultroute = [ x for x in routes if x.startswith("default") ] if not defaultroute: raise TaskFailed("Your network configuration does not have a default route") - + dev = defaultroute[0].split()[4] yield "Default route assigned to device %s"%dev - + self.old_net_device = dev - + if distro in (Fedora, CentOS, RHEL6): inconfigfile = "/".join(augtool.match("/files/etc/sysconfig/network-scripts/*/DEVICE",dev).stdout.strip().split("/")[:-1]) if not inconfigfile: raise TaskFailed("Device %s has not been set up in /etc/sysconfig/network-scripts"%dev) @@ -514,7 +514,7 @@ def execute(self): if not automatic: if distro is Fedora: raise TaskFailed("Device %s has not been set up in %s as automatic on boot"%dev,pathtoconfigfile) else: raise TaskFailed("Device %s has not been set up in /etc/network/interfaces as automatic on boot"%dev) - + if distro not in (Fedora , CentOS, RHEL6): inconfigfile = augtool.match("/files/etc/network/interfaces/iface",dev).stdout.strip() if not inconfigfile: raise TaskFailed("Device %s has not been set up in /etc/network/interfaces"%dev) @@ -534,12 +534,12 @@ def execute(self): disable_service(self.nmservice) else: self.was_nm_service_running = False - + if is_service_running(self.netservice): self.was_net_service_running = True else: self.was_net_service_running = False - + yield "Creating Cloud bridging device and making device %s member of this bridge"%dev if distro in (Fedora, CentOS, RHEL6): @@ -574,9 +574,9 @@ def execute(self): innewconfigfile,innewconfigfile,innewconfigfile,innewconfigfile, inconfigfile,inconfigfile,inconfigfile,inconfigfile,inconfigfile,inconfigfile, inconfigfile,self.brname) - + yield "Executing the following reconfiguration script:\n%s"%script - + try: returned = augtool < script if "Saved 2 file" not in returned.stdout: @@ -597,9 +597,9 @@ def execute(self): set %s %s set %s/bridge_ports %s save"""%(automatic,self.brname,inconfigfile,self.brname,inconfigfile,dev) - + yield "Executing the following reconfiguration script:\n%s"%script - + try: returned = augtool < script if "Saved 1 file" not in returned.stdout: @@ -611,16 +611,16 @@ def execute(self): #restore() print e.stdout + e.stderr raise TaskFailed("Network reconfiguration failed") - + yield "We are going to restart network services now, to make the network changes take effect. Hit ENTER when you are ready." if self.isAutoMode(): pass else: raw_input() - + # if we reach here, then if something goes wrong we should attempt to revert the runinng state # if not, then no point self.runtime_state_changed = True - + yield "Enabling and restarting non-NetworkManager networking" if distro is Ubuntu: ifup(self.brname,stdout=None,stderr=None) stop_service(self.netservice) @@ -628,28 +628,28 @@ def execute(self): except CalledProcessError,e: if e.returncode == 1: pass else: raise - + yield "Verifying that the bridge is up" try: o = ifconfig(self.brname) except CalledProcessError,e: print e.stdout + e.stderr raise TaskFailed("The bridge could not be set up properly") - + yield "Networking restart done" class SetupCgConfig(ConfigTask): name = "control groups configuration" - + def done(self): - + try: return "group virt" in file("/etc/cgconfig.conf","r").read(-1) except IOError,e: if e.errno is 2: raise TaskFailed("cgconfig has not been properly installed on this system") raise - + def execute(self): cgconfig = file("/etc/cgconfig.conf","r").read(-1) cgconfig = cgconfig + """ @@ -660,7 +660,7 @@ def execute(self): } """ file("/etc/cgconfig.conf","w").write(cgconfig) - + stop_service("cgconfig") enable_service("cgconfig",forcestart=True) @@ -668,53 +668,35 @@ def execute(self): class SetupCgRules(ConfigTask): name = "control group rules setup" cfgline = "root:/usr/sbin/libvirtd cpu virt/" - + def done(self): try: return self.cfgline in file("/etc/cgrules.conf","r").read(-1) except IOError,e: if e.errno is 2: raise TaskFailed("cgrulesd has not been properly installed on this system") raise - + def execute(self): cgrules = file("/etc/cgrules.conf","r").read(-1) cgrules = cgrules + "\n" + self.cfgline + "\n" file("/etc/cgrules.conf","w").write(cgrules) - + stop_service("cgred") enable_service("cgred") -class SetupCgroupControllers(ConfigTask): - name = "qemu cgroup controllers setup" - cfgline = "cgroup_controllers = [ \"cpu\" ]" - filename = "/etc/libvirt/qemu.conf" - - def done(self): - try: - return self.cfgline in file(self.filename,"r").read(-1) - except IOError,e: - if e.errno is 2: raise TaskFailed("qemu has not been properly installed on this system") - raise - - def execute(self): - libvirtqemu = file(self.filename,"r").read(-1) - libvirtqemu = libvirtqemu + "\n" + self.cfgline + "\n" - file("/etc/libvirt/qemu.conf","w").write(libvirtqemu) - - class SetupSecurityDriver(ConfigTask): name = "security driver setup" cfgline = "security_driver = \"none\"" filename = "/etc/libvirt/qemu.conf" - + def done(self): try: return self.cfgline in file(self.filename,"r").read(-1) except IOError,e: if e.errno is 2: raise TaskFailed("qemu has not been properly installed on this system") raise - + def execute(self): libvirtqemu = file(self.filename,"r").read(-1) libvirtqemu = libvirtqemu + "\n" + self.cfgline + "\n" @@ -733,7 +715,7 @@ def done(self): except IOError,e: if e.errno is 2: raise TaskFailed("libvirt has not been properly installed on this system") raise - + def execute(self): if distro in (Fedora,CentOS, RHEL6): libvirtfile = "/etc/sysconfig/libvirtd" elif distro is Ubuntu: libvirtfile = "/etc/default/libvirt-bin" @@ -741,7 +723,7 @@ def execute(self): libvirtbin = file(libvirtfile,"r").read(-1) libvirtbin = libvirtbin + "\n" + self.cfgline + "\n" file(libvirtfile,"w").write(libvirtbin) - + if distro in (CentOS, Fedora, RHEL6): svc = "libvirtd" else: svc = "libvirt-bin" stop_service(svc) @@ -755,7 +737,7 @@ class SetupLiveMigration(ConfigTask): 'auth_tcp="none"', "listen_tls=0", ) - + def done(self): try: lines = [ s.strip() for s in file("/etc/libvirt/libvirtd.conf").readlines() ] @@ -763,25 +745,25 @@ def done(self): except IOError,e: if e.errno is 2: raise TaskFailed("libvirt has not been properly installed on this system") raise - + def execute(self): - + for stanza in self.stanzas: startswith = stanza.split("=")[0] + '=' replace_or_add_line("/etc/libvirt/libvirtd.conf",startswith,stanza) if distro in (Fedora, RHEL6): replace_or_add_line("/etc/sysconfig/libvirtd","LIBVIRTD_ARGS=","LIBVIRTD_ARGS=-l") - + elif distro is Ubuntu: if os.path.exists("/etc/init/libvirt-bin.conf"): replace_line("/etc/init/libvirt-bin.conf", "exec /usr/sbin/libvirtd","exec /usr/sbin/libvirtd -d -l") else: replace_or_add_line("/etc/default/libvirt-bin","libvirtd_opts=","libvirtd_opts='-l -d'") - + else: raise AssertionError("Unsupported distribution") - + if distro in (CentOS, Fedora, RHEL6): svc = "libvirtd" else: svc = "libvirt-bin" stop_service(svc) @@ -790,13 +772,13 @@ def execute(self): class SetupRequiredServices(ConfigTask): name = "required services setup" - + def done(self): if distro in (Fedora, RHEL6): nfsrelated = "rpcbind nfslock" elif distro is CentOS: nfsrelated = "portmap nfslock" else: return True return all( [ is_service_running(svc) for svc in nfsrelated.split() ] ) - + def execute(self): if distro in (Fedora, RHEL6): nfsrelated = "rpcbind nfslock" @@ -808,9 +790,9 @@ def execute(self): class SetupFirewall(ConfigTask): name = "firewall setup" - + def done(self): - + if distro in (Fedora, CentOS,RHEL6): if not os.path.exists("/etc/sysconfig/iptables"): return True if ":on" not in chkconfig("--list","iptables").stdout: return True @@ -820,7 +802,7 @@ def done(self): rule = "-p tcp -m tcp --dport 16509 -j ACCEPT" if rule in iptablessave().stdout: return True return False - + def execute(self): ports = "22 1798 16509".split() if distro in (Fedora , CentOS, RHEL6): @@ -836,9 +818,9 @@ class SetupFirewall2(ConfigTask): def __init__(self,brname): ConfigTask.__init__(self) self.brname = brname - + def done(self): - + if distro in (Fedora, CentOS, RHEL6): if not os.path.exists("/etc/sysconfig/iptables"): return True if ":on" not in chkconfig("--list","iptables").stdout: return True @@ -847,13 +829,13 @@ def done(self): if "Status: active" not in ufw.status().stdout: return True if not os.path.exists("/etc/ufw/before.rules"): return True return False - + def execute(self): - + yield "Permitting traffic in the bridge interface, migration port and for VNC ports" - + if distro in (Fedora , CentOS, RHEL6): - + for rule in ( "-I INPUT 1 -p tcp --dport 5900:6100 -j ACCEPT", "-I INPUT 1 -p tcp --dport 49152:49216 -j ACCEPT", @@ -861,9 +843,9 @@ def execute(self): args = rule.split() o = iptables(*args) service.iptables.save(stdout=None,stderr=None) - + else: - + ufw.allow.proto.tcp("from","any","to","any","port","5900:6100") ufw.allow.proto.tcp("from","any","to","any","port","49152:49216") @@ -887,7 +869,6 @@ def config_tasks(brname, pubNic, prvNic): SetupNetworking(brname, pubNic, prvNic), SetupCgConfig(), SetupCgRules(), - SetupCgroupControllers(), SetupSecurityDriver(), SetupLibvirt(), SetupLiveMigration(), @@ -914,31 +895,31 @@ def remove_backup(targetdir): def list_zonespods(host): text = urllib2.urlopen('http://%s:8096/client/api?command=listPods'%host).read(-1) - dom = xml.dom.minidom.parseString(text) + dom = xml.dom.minidom.parseString(text) x = [ (zonename,podname) - for pod in dom.childNodes[0].childNodes - for podname in [ x.childNodes[0].wholeText for x in pod.childNodes if x.tagName == "name" ] + for pod in dom.childNodes[0].childNodes + for podname in [ x.childNodes[0].wholeText for x in pod.childNodes if x.tagName == "name" ] for zonename in [ x.childNodes[0].wholeText for x in pod.childNodes if x.tagName == "zonename" ] ] return x - + def prompt_for_hostpods(zonespods): """Ask user to select one from those zonespods Returns (zone,pod) or None if the user made the default selection.""" while True: stderr("Type the number of the zone and pod combination this host belongs to (hit ENTER to skip this step)") - print " N) ZONE, POD" + print " N) ZONE, POD" print "================" for n,(z,p) in enumerate(zonespods): print "%3d) %s, %s"%(n,z,p) print "================" print "> ", zoneandpod = raw_input().strip() - + if not zoneandpod: # we go with default, do not touch anything, just break return None - + try: # if parsing fails as an int, just vomit and retry zoneandpod = int(zoneandpod) @@ -946,10 +927,10 @@ def prompt_for_hostpods(zonespods): except ValueError,e: stderr(str(e)) continue # re-ask - + # oh yeah, the int represents an valid zone and pod index in the array return zonespods[zoneandpod] - + # this configures the agent def device_exist(devName): @@ -961,8 +942,8 @@ def device_exist(devName): alreadysetup = augtool.match("/files/etc/network/interfaces/iface",devName).stdout.strip() return alreadysetup except OSError,e: - return False - + return False + def setup_agent_config(configfile, host, zone, pod, cluster, guid, pubNic, prvNic): stderr("Examining Agent configuration") fn = configfile @@ -970,14 +951,14 @@ def setup_agent_config(configfile, host, zone, pod, cluster, guid, pubNic, prvNi lines = [ s.strip() for s in text.splitlines() ] confopts = dict([ m.split("=",1) for m in lines if "=" in m and not m.startswith("#") ]) confposes = dict([ (m.split("=",1)[0],n) for n,m in enumerate(lines) if "=" in m and not m.startswith("#") ]) - + if guid != None: confopts['guid'] = guid else: if not "guid" in confopts: stderr("Generating GUID for this Agent") confopts['guid'] = uuidgen().stdout.strip() - + if host == None: try: host = confopts["host"] except KeyError: host = "localhost" @@ -987,19 +968,19 @@ def setup_agent_config(configfile, host, zone, pod, cluster, guid, pubNic, prvNi if newhost: host = newhost confopts["host"] = host - + if pubNic != None and device_exist(pubNic): - confopts["public.network.device"] = pubNic + confopts["public.network.device"] = pubNic if prvNic == None or not device_exist(prvNic): - confopts["private.network.device"] = pubNic - + confopts["private.network.device"] = pubNic + if prvNic != None and device_exist(prvNic): - confopts["private.network.device"] = prvNic + confopts["private.network.device"] = prvNic if pubNic == None or not device_exist(pubNic): - confopts["public.network.device"] = prvNic + confopts["public.network.device"] = prvNic stderr("Querying %s for zones and pods",host) - + try: if zone == None or pod == None: x = list_zonespods(confopts['host']) @@ -1020,7 +1001,7 @@ def setup_agent_config(configfile, host, zone, pod, cluster, guid, pubNic, prvNi line = "=".join([opt,val]) if opt not in confposes: lines.append(line) else: lines[confposes[opt]] = line - + text = "\n".join(lines) file(fn,"w").write(text) @@ -1046,7 +1027,7 @@ def setup_consoleproxy_config(configfile, host, zone, pod): confopts["host"] = host stderr("Querying %s for zones and pods",host) - + try: if zone == None or pod == None: x = list_zonespods(confopts['host']) @@ -1066,7 +1047,7 @@ def setup_consoleproxy_config(configfile, host, zone, pod): line = "=".join([opt,val]) if opt not in confposes: lines.append(line) else: lines[confposes[opt]] = line - + text = "\n".join(lines) file(fn,"w").write(text) @@ -1083,22 +1064,22 @@ class NoMigrator(MigratorException): pass class Migrator: """Migrator class. - + The migrator gets a list of Python objects, and discovers MigrationSteps in it. It then sorts the steps into a chain, based on the attributes from_level and to_level in each one of the steps. - + When the migrator's run(context) is called, the chain of steps is applied sequentially on the context supplied to run(), in the order of the chain of steps found at discovery time. See the documentation for the MigrationStep class for information on how that happens. """ - + def __init__(self,evolver_source): self.discover_evolvers(evolver_source) self.sort_evolvers() - + def discover_evolvers(self,source): self.evolvers = [] for val in source: if hasattr(val,"from_level") and hasattr(val,"to_level") and val.to_level: self.evolvers.append(val) - + def sort_evolvers(self): new = [] while self.evolvers: @@ -1114,30 +1095,30 @@ def sort_evolvers(self): raise IndexError, "no evolver could be found to evolve from level %s"%new[-1].to_level new.append(self.evolvers.pop(idx)) self.evolvers = new - + def get_evolver_chain(self): return [ (s.from_level, s.to_level, s) for s in self.evolvers ] - + def get_evolver_by_starting_level(self,level): try: return [ s for s in self.evolvers if s.from_level == level][0] except IndexError: raise NoMigrator, "No evolver knows how to evolve the database from schema level %r"%level - + def get_evolver_by_ending_level(self,level): try: return [ s for s in self.evolvers if s.to_level == level][0] except IndexError: raise NoMigrator, "No evolver knows how to evolve the database to schema level %r"%level - + def run(self, context, dryrun = False, starting_level = None, ending_level = None): """Runs each one of the steps in sequence, passing the migration context to each. At the end of the process, context.commit() is called to save the changes, or context.rollback() is called if dryrun = True. - + If starting_level is not specified, then the context.get_schema_level() is used to find out at what level the context is at. Then starting_level is set to that. - + If ending_level is not specified, then the evolvers will run till the end of the chain.""" - + assert dryrun is False # NOT IMPLEMENTED, prolly gonna implement by asking the context itself to remember its state - + starting_level = starting_level or context.get_schema_level() or self.evolvers[0].from_level ending_level = ending_level or self.evolvers[-1].to_level - + evolution_path = self.evolvers idx = evolution_path.index(self.get_evolver_by_starting_level(starting_level)) evolution_path = evolution_path[idx:] @@ -1146,9 +1127,9 @@ def run(self, context, dryrun = False, starting_level = None, ending_level = Non raise NoEvolutionPath, "No evolution path from schema level %r to schema level %r" % \ (starting_level,ending_level) evolution_path = evolution_path[:idx+1] - + logging.info("Starting migration on %s"%context) - + for ec in evolution_path: assert ec.from_level == context.get_schema_level() evolver = ec(context=context) @@ -1164,36 +1145,36 @@ def run(self, context, dryrun = False, starting_level = None, ending_level = Non context.set_schema_level(evolver.to_level) #context.commit() logging.info("%s is now at level %s",context,context.get_schema_level()) - + #if dryrun: # implement me with backup and restore #logging.info("Rolling back changes on %s",context) #context.rollback() #else: #logging.info("Committing changes on %s",context) #context.commit() - + logging.info("Migration finished") - + class MigrationStep: """Base MigrationStep class, aka evolver. - + You develop your own steps, and then pass a list of those steps to the Migrator instance that will run them in order. - + When the migrator runs, it will take the list of steps you gave him, and, for each step: - + a) instantiate it, passing the context you gave to the migrator into the step's __init__(). b) run() the method in the migration step. - + As you can see, the default MigrationStep constructor makes the passed context available as self.context in the methods of your step. - + Each step has two member vars that determine in which order they are run, and if they need to run: - + - from_level = the schema level that the database should be at, before running the evolver The value None has special meaning here, it @@ -1202,14 +1183,14 @@ class MigrationStep: - to_level = the schema level number that the database will be at after the evolver has run """ - + # Implement these attributes in your steps from_level = None to_level = None - + def __init__(self,context): self.context = context - + def run(self): raise NotImplementedError @@ -1220,5 +1201,3 @@ def commit(self):raise NotImplementedError def rollback(self):raise NotImplementedError def get_schema_level(self):raise NotImplementedError def set_schema_level(self,l):raise NotImplementedError - - diff --git a/python/lib/cloudutils/serviceConfig.py b/python/lib/cloudutils/serviceConfig.py index 86f5a904f2..8847e63e03 100755 --- a/python/lib/cloudutils/serviceConfig.py +++ b/python/lib/cloudutils/serviceConfig.py @@ -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 @@ -54,9 +54,9 @@ def configration(self): except: logging.debug(formatExceptionInfo()) if self.syscfg.env.mode == "Server": - raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/setupManagement.log for detail"%self.serviceName) + raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/management/setupManagement.log for detail"%self.serviceName) else: - raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/setupAgent.log for detail"%self.serviceName) + raise CloudRuntimeException("Configure %s failed, Please check the /var/log/cloudstack/agent/setup.log for detail"%self.serviceName) def backup(self): if self.status is None: @@ -428,7 +428,7 @@ def config(self): return True except: - raise CloudRuntimeException("Failed to configure apparmor, please see the /var/log/cloudstack/setupAgent.log for detail, \ + raise CloudRuntimeException("Failed to configure apparmor, please see the /var/log/cloudstack/agent/setup.log for detail, \ or you can manually disable it before starting myCloud") def restore(self): @@ -458,7 +458,7 @@ def config(self): cfo.replace_line("SELINUX=", "SELINUX=permissive") return True except: - raise CloudRuntimeException("Failed to configure selinux, please see the /var/log/cloudstack/setupAgent.log for detail, \ + raise CloudRuntimeException("Failed to configure selinux, please see the /var/log/cloudstack/agent/setup.log for detail, \ or you can manually disable it before starting myCloud") else: return True @@ -493,7 +493,6 @@ def config(self): filename = "/etc/libvirt/qemu.conf" cfo = configFileOps(filename, self) - cfo.addEntry("cgroup_controllers", "[\"cpu\"]") cfo.addEntry("security_driver", "\"none\"") cfo.addEntry("user", "\"root\"") cfo.addEntry("group", "\"root\"") diff --git a/python/lib/cloudutils/serviceConfigServer.py b/python/lib/cloudutils/serviceConfigServer.py index b928df4d49..b9062e296e 100644 --- a/python/lib/cloudutils/serviceConfigServer.py +++ b/python/lib/cloudutils/serviceConfigServer.py @@ -108,6 +108,8 @@ def checkHostName(): #distro like sl 6.1 needs this folder, or tomcat6 failed to start checkHostName() bash("mkdir /var/log/cloudstack-management/") + bash("chown cloud:cloud -R /var/lib/cloudstack/") + bash("chmod +x -R /usr/share/cloudstack-management/webapps/client/WEB-INF/classes/scripts/") #set max process per account is unlimited if os.path.exists("/etc/security/limits.conf"): cfo = configFileOps("/etc/security/limits.conf") @@ -124,4 +126,4 @@ def checkHostName(): if self.syscfg.svo.enableService("cloudstack-management"): return True else: - raise CloudRuntimeException("Failed to configure %s, please see the /var/log/cloudstack/setupManagement.log for detail"%self.serviceName) + raise CloudRuntimeException("Failed to configure %s, please see the /var/log/cloudstack/management/setupManagement.log for detail"%self.serviceName) diff --git a/python/lib/cloudutils/utilities.py b/python/lib/cloudutils/utilities.py index 88e2d1c6f9..1fe5bd3d2c 100755 --- a/python/lib/cloudutils/utilities.py +++ b/python/lib/cloudutils/utilities.py @@ -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 @@ -53,25 +53,25 @@ def alarm_handler(signum, frame): except: raise CloudRuntimeException(formatExceptionInfo()) - if not self.success: + if not self.success: logging.debug("Failed to execute:" + self.getErrMsg()) def isSuccess(self): return self.success - + def getStdout(self): return self.stdout.strip("\n") - + def getLines(self): return self.stdout.split("\n") def getStderr(self): return self.stderr.strip("\n") - + def getErrMsg(self): if self.isSuccess(): return "" - + if self.getStderr() is None or self.getStderr() == "": return self.getStdout() else: @@ -80,11 +80,11 @@ def getErrMsg(self): def initLoging(logFile=None): try: if logFile is None: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(filename=logFile, level=logging.DEBUG) + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(filename=logFile, level=logging.DEBUG) except: - logging.basicConfig(level=logging.DEBUG) + logging.basicConfig(level=logging.DEBUG) def writeProgressBar(msg, result): output = "[%-6s]\n"%"Failed" @@ -100,7 +100,7 @@ def writeProgressBar(msg, result): class UnknownSystemException(Exception): "This Excption is raised if the current operating enviornment is unknown" pass - + class Distribution: def __init__(self): self.distro = "Unknown" @@ -112,7 +112,7 @@ def __init__(self): version = file("/etc/redhat-release").readline() if version.find("Red Hat Enterprise Linux Server release 6") != -1 or version.find("Scientific Linux release 6") != -1 or version.find("CentOS Linux release 6") != -1 or version.find("CentOS release 6.") != -1: self.distro = "RHEL6" - elif version.find("Red Hat Enterprise Linux Server release 7") != -1: + elif version.find("Red Hat Enterprise Linux Server release 7") != -1 or version.find("Scientific Linux release 7") != -1 or version.find("CentOS Linux release 7") != -1 or version.find("CentOS release 7.") != -1: self.distro = "RHEL7" elif version.find("CentOS release") != -1: self.distro = "CentOS" @@ -132,17 +132,17 @@ def __init__(self): self.distro = "Ubuntu" else: raise UnknownSystemException(distributor) - else: + else: raise UnknownSystemException def getVersion(self): - return self.distro + return self.distro def getRelease(self): return self.release def getArch(self): return self.arch - - + + class serviceOps: pass class serviceOpsRedhat(serviceOps): @@ -159,7 +159,7 @@ def isServiceRunning(self, servicename): def stopService(self, servicename,force=False): if self.isServiceRunning(servicename) or force: return bash("service " + servicename +" stop").isSuccess() - + return True def disableService(self, servicename): result = self.stopService(servicename) @@ -174,13 +174,13 @@ def startService(self, servicename,force=False): def enableService(self, servicename,forcestart=False): bash("chkconfig --level 2345 " + servicename + " on") return self.startService(servicename,force=forcestart) - + def isKVMEnabled(self): if os.path.exists("/dev/kvm"): return True else: return False - + class serviceOpsUbuntu(serviceOps): def isServiceRunning(self, servicename): try: @@ -200,7 +200,7 @@ def disableService(self, servicename): result = self.stopService(servicename) bash("sudo update-rc.d -f " + servicename + " remove") return result - + def startService(self, servicename,force=True): if not self.isServiceRunning(servicename) or force: return bash("sudo /usr/sbin/service " + servicename + " start").isSuccess() @@ -211,7 +211,7 @@ def enableService(self, servicename,forcestart=True): return self.startService(servicename,force=forcestart) def isKVMEnabled(self): - return bash("kvm-ok").isSuccess() + return bash("kvm-ok").isSuccess() class serviceOpsRedhat7(serviceOps): def isServiceRunning(self, servicename): diff --git a/quickcloud/pom.xml b/quickcloud/pom.xml index 4b54f9a9bb..c908c12512 100644 --- a/quickcloud/pom.xml +++ b/quickcloud/pom.xml @@ -24,7 +24,7 @@ org.apache.cloudstack cloud-maven-standard - 4.5.2-SNAPSHOT + 4.5.3-SNAPSHOT ../maven-standard/pom.xml diff --git a/scripts/storage/secondary/cloud-install-sys-tmplt b/scripts/storage/secondary/cloud-install-sys-tmplt index 96b11de41d..c4cd431b5a 100755 --- a/scripts/storage/secondary/cloud-install-sys-tmplt +++ b/scripts/storage/secondary/cloud-install-sys-tmplt @@ -8,9 +8,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 @@ -20,7 +20,7 @@ usage() { - printf "Usage: %s: -m -f [-h ] [ -s ][-u ] [-F ] [-e