Merge branch 'pr/812' into interfacePatternCheck

This commit is contained in:
Daan Hoogland 2015-10-23 17:07:34 +02:00
commit fea976a694
849 changed files with 29711 additions and 18203 deletions

1
.gitignore vendored
View File

@ -85,7 +85,6 @@ configure-stamp
*_flymake.js
engine/storage/integration-test/test-output
tools/apidoc/log/
log/
plugins/network-elements/juniper-contrail/logs/
scripts/vm/hypervisor/xenserver/vhd-util
*.orig

View File

@ -105,4 +105,3 @@ $ git checkout master
$ git branch -D feature_x
$ git push origin :feature_x
```

View File

@ -1,37 +0,0 @@
FROM ubuntu:14.04
RUN apt-get -y update && apt-get install -y \
genisoimage \
git \
maven \
openjdk-7-jdk \
python-dev \
python-setuptools \
python-pip \
supervisor
RUN echo 'mysql-server mysql-server/root_password password root' | debconf-set-selections; \
echo 'mysql-server mysql-server/root_password_again password root' | debconf-set-selections;
RUN apt-get install -qqy mysql-server && \
apt-get clean all
RUN (/usr/bin/mysqld_safe &); sleep 5; mysqladmin -u root -proot password ''
RUN pip install --allow-external mysql-connector-python mysql-connector-python
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY . ./root
WORKDIR /root
RUN mvn -Pdeveloper -Dsimulator -DskipTests clean install
RUN (/usr/bin/mysqld_safe &); \
sleep 3; \
mvn -Pdeveloper -pl developer -Ddeploydb; \
mvn -Pdeveloper -pl developer -Ddeploydb-simulator; \
pip install tools/marvin/dist/Marvin-4.6.0-SNAPSHOT.tar.gz
EXPOSE 8080
CMD ["/usr/bin/supervisord"]

View File

@ -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

View File

@ -16,6 +16,7 @@
# specific language governing permissions and limitations
# under the License.
import sys
import re
from xml.dom.minidom import parse
from cloudutils.configFileOps import configFileOps
from cloudutils.networkConfig import networkConfig
@ -24,21 +25,29 @@ def isOldStyleBridge(brName):
return True
else:
return False
def isNewStyleBridge(brName):
if re.match(r"br(\w+)-(\d+)", brName) == None:
return False
else:
return True
def getGuestNetworkDevice():
netlib = networkConfig()
cfo = configFileOps("/etc/cloudstack/agent/agent.properties")
guestDev = cfo.getEntry("guest.network.device")
enslavedDev = netlib.getEnslavedDev(guestDev, 1)
return enslavedDev
return enslavedDev.split(".")[0]
def handleMigrateBegin():
try:
domain = parse(sys.stdin)
for interface in domain.getElementsByTagName("interface"):
source = interface.getElementsByTagName("source")[0]
bridge = source.getAttribute("bridge")
if not isOldStyleBridge(bridge):
if isOldStyleBridge(bridge):
vlanId = bridge.replace("cloudVirBr","")
elif isNewStyleBridge(bridge):
vlanId = re.sub(r"br(\w+)-","",bridge)
else:
continue
vlanId = bridge.replace("cloudVirBr","")
phyDev = getGuestNetworkDevice()
newBrName="br" + phyDev + "-" + vlanId
source.setAttribute("bridge", newBrName)

View File

@ -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

View File

@ -35,9 +35,8 @@ import java.util.concurrent.atomic.AtomicInteger;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import org.apache.cloudstack.managed.context.ManagedContextTimerTask;
import org.apache.log4j.Logger;
import com.cloud.agent.api.AgentControlAnswer;
import com.cloud.agent.api.AgentControlCommand;
@ -59,6 +58,8 @@ import com.cloud.utils.PropertiesUtil;
import com.cloud.utils.backoff.BackoffAlgorithm;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.exception.NioConnectionException;
import com.cloud.utils.exception.TaskExecutionException;
import com.cloud.utils.nio.HandlerFactory;
import com.cloud.utils.nio.Link;
import com.cloud.utils.nio.NioClient;
@ -121,11 +122,11 @@ public class Agent implements HandlerFactory, IAgentControl {
long _startupWait = _startupWaitDefault;
boolean _reconnectAllowed = true;
//For time sentitive task, e.g. PingTask
private ThreadPoolExecutor _ugentTaskPool;
private final ThreadPoolExecutor _ugentTaskPool;
ExecutorService _executor;
// for simulator use only
public Agent(IAgentShell shell) {
public Agent(final IAgentShell shell) {
_shell = shell;
_link = null;
@ -134,29 +135,29 @@ public class Agent implements HandlerFactory, IAgentControl {
Runtime.getRuntime().addShutdownHook(new ShutdownThread(this));
_ugentTaskPool =
new ThreadPoolExecutor(shell.getPingRetries(), 2 * shell.getPingRetries(), 10, TimeUnit.MINUTES, new SynchronousQueue<Runnable>(), new NamedThreadFactory(
"UgentTask"));
new ThreadPoolExecutor(shell.getPingRetries(), 2 * shell.getPingRetries(), 10, TimeUnit.MINUTES, new SynchronousQueue<Runnable>(), new NamedThreadFactory(
"UgentTask"));
_executor =
new ThreadPoolExecutor(_shell.getWorkers(), 5 * _shell.getWorkers(), 1, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory(
"agentRequest-Handler"));
new ThreadPoolExecutor(_shell.getWorkers(), 5 * _shell.getWorkers(), 1, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory(
"agentRequest-Handler"));
}
public Agent(IAgentShell shell, int localAgentId, ServerResource resource) throws ConfigurationException {
public Agent(final IAgentShell shell, final int localAgentId, final ServerResource resource) throws ConfigurationException {
_shell = shell;
_resource = resource;
_link = null;
resource.setAgentControl(this);
String value = _shell.getPersistentProperty(getResourceName(), "id");
final String value = _shell.getPersistentProperty(getResourceName(), "id");
_id = value != null ? Long.parseLong(value) : null;
s_logger.info("id is " + ((_id != null) ? _id : ""));
s_logger.info("id is " + (_id != null ? _id : ""));
final Map<String, Object> params = PropertiesUtil.toMap(_shell.getProperties());
// merge with properties from command line to let resource access command line parameters
for (Map.Entry<String, Object> cmdLineProp : _shell.getCmdLineProperties().entrySet()) {
for (final Map.Entry<String, Object> cmdLineProp : _shell.getCmdLineProperties().entrySet()) {
params.put(cmdLineProp.getKey(), cmdLineProp.getValue());
}
@ -172,15 +173,15 @@ public class Agent implements HandlerFactory, IAgentControl {
Runtime.getRuntime().addShutdownHook(new ShutdownThread(this));
_ugentTaskPool =
new ThreadPoolExecutor(shell.getPingRetries(), 2 * shell.getPingRetries(), 10, TimeUnit.MINUTES, new SynchronousQueue<Runnable>(), new NamedThreadFactory(
"UgentTask"));
new ThreadPoolExecutor(shell.getPingRetries(), 2 * shell.getPingRetries(), 10, TimeUnit.MINUTES, new SynchronousQueue<Runnable>(), new NamedThreadFactory(
"UgentTask"));
_executor =
new ThreadPoolExecutor(_shell.getWorkers(), 5 * _shell.getWorkers(), 1, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory(
"agentRequest-Handler"));
new ThreadPoolExecutor(_shell.getWorkers(), 5 * _shell.getWorkers(), 1, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory(
"agentRequest-Handler"));
s_logger.info("Agent [id = " + (_id != null ? _id : "new") + " : type = " + getResourceName() + " : zone = " + _shell.getZone() + " : pod = " + _shell.getPod() +
" : workers = " + _shell.getWorkers() + " : host = " + _shell.getHost() + " : port = " + _shell.getPort());
" : workers = " + _shell.getWorkers() + " : host = " + _shell.getHost() + " : port = " + _shell.getPort());
}
public String getVersion() {
@ -188,7 +189,7 @@ public class Agent implements HandlerFactory, IAgentControl {
}
public String getResourceGuid() {
String guid = _shell.getGuid();
final String guid = _shell.getGuid();
return guid + "-" + getResourceName();
}
@ -222,11 +223,19 @@ public class Agent implements HandlerFactory, IAgentControl {
throw new CloudRuntimeException("Unable to start the resource: " + _resource.getName());
}
_connection.start();
try {
_connection.start();
} catch (final NioConnectionException e) {
throw new CloudRuntimeException("Unable to start the connection!", e);
}
while (!_connection.isStartup()) {
_shell.getBackoffAlgorithm().waitBeforeRetry();
_connection = new NioClient("Agent", _shell.getHost(), _shell.getPort(), _shell.getWorkers(), this);
_connection.start();
try {
_connection.start();
} catch (final NioConnectionException e) {
throw new CloudRuntimeException("Unable to start the connection!", e);
}
}
}
@ -236,12 +245,12 @@ public class Agent implements HandlerFactory, IAgentControl {
final ShutdownCommand cmd = new ShutdownCommand(reason, detail);
try {
if (_link != null) {
Request req = new Request((_id != null ? _id : -1), -1, cmd, false);
final Request req = new Request(_id != null ? _id : -1, -1, cmd, false);
_link.send(req.toBytes());
}
} catch (final ClosedChannelException e) {
s_logger.warn("Unable to send: " + cmd.toString());
} catch (Exception e) {
} catch (final Exception e) {
s_logger.warn("Unable to send: " + cmd.toString() + " due to exception: ", e);
}
s_logger.debug("Sending shutdown to management server");
@ -294,13 +303,13 @@ public class Agent implements HandlerFactory, IAgentControl {
_watchList.clear();
}
}
public synchronized void lockStartupTask(Link link)
public synchronized void lockStartupTask(final Link link)
{
_startup = new StartupTask(link);
_timer.schedule(_startup, _startupWait);
}
public void sendStartup(Link link) {
public void sendStartup(final Link link) {
final StartupCommand[] startup = _resource.initialize();
if (startup != null) {
final Command[] commands = new Command[startup.length];
@ -323,7 +332,7 @@ public class Agent implements HandlerFactory, IAgentControl {
}
}
protected void setupStartupCommand(StartupCommand startup) {
protected void setupStartupCommand(final StartupCommand startup) {
InetAddress addr;
try {
addr = InetAddress.getLocalHost();
@ -349,7 +358,7 @@ public class Agent implements HandlerFactory, IAgentControl {
}
@Override
public Task create(Task.Type type, Link link, byte[] data) {
public Task create(final Task.Type type, final Link link, final byte[] data) {
return new ServerHandler(type, link, data);
}
@ -391,19 +400,23 @@ public class Agent implements HandlerFactory, IAgentControl {
try {
_connection.cleanUp();
} catch (IOException e) {
} catch (final IOException e) {
s_logger.warn("Fail to clean up old connection. " + e);
}
_connection = new NioClient("Agent", _shell.getHost(), _shell.getPort(), _shell.getWorkers(), this);
do {
s_logger.info("Reconnecting...");
_connection.start();
try {
_connection.start();
} catch (final NioConnectionException e) {
throw new CloudRuntimeException("Unable to start the connection!", e);
}
_shell.getBackoffAlgorithm().waitBeforeRetry();
} while (!_connection.isStartup());
s_logger.info("Connected to the server");
}
public void processStartupAnswer(Answer answer, Response response, Link link) {
public void processStartupAnswer(final Answer answer, final Response response, final Link link) {
boolean cancelled = false;
synchronized (this) {
if (_startup != null) {
@ -450,7 +463,7 @@ public class Agent implements HandlerFactory, IAgentControl {
if (s_logger.isDebugEnabled()) {
if (!requestLogged) // ensures request is logged only once per method call
{
String requestMsg = request.toString();
final String requestMsg = request.toString();
if (requestMsg != null) {
s_logger.debug("Request:" + requestMsg);
}
@ -464,7 +477,7 @@ public class Agent implements HandlerFactory, IAgentControl {
scheduleWatch(link, request, (long)watch.getInterval() * 1000, watch.getInterval() * 1000);
answer = new Answer(cmd, true, null);
} else if (cmd instanceof ShutdownCommand) {
ShutdownCommand shutdown = (ShutdownCommand)cmd;
final ShutdownCommand shutdown = (ShutdownCommand)cmd;
s_logger.debug("Received shutdownCommand, due to: " + shutdown.getReason());
cancelTasks();
_reconnectAllowed = false;
@ -481,7 +494,7 @@ public class Agent implements HandlerFactory, IAgentControl {
} else if (cmd instanceof AgentControlCommand) {
answer = null;
synchronized (_controlListeners) {
for (IAgentControlListener listener : _controlListeners) {
for (final IAgentControlListener listener : _controlListeners) {
answer = listener.processControlRequest(request, (AgentControlCommand)cmd);
if (answer != null) {
break;
@ -527,7 +540,7 @@ public class Agent implements HandlerFactory, IAgentControl {
response = new Response(request, answers);
} finally {
if (s_logger.isDebugEnabled()) {
String responseMsg = response.toString();
final String responseMsg = response.toString();
if (responseMsg != null) {
s_logger.debug(response.toString());
}
@ -553,7 +566,7 @@ public class Agent implements HandlerFactory, IAgentControl {
} else if (answer instanceof AgentControlAnswer) {
// Notice, we are doing callback while holding a lock!
synchronized (_controlListeners) {
for (IAgentControlListener listener : _controlListeners) {
for (final IAgentControlListener listener : _controlListeners) {
listener.processControlResponse(response, (AgentControlAnswer)answer);
}
}
@ -562,7 +575,7 @@ public class Agent implements HandlerFactory, IAgentControl {
}
}
public void processReadyCommand(Command cmd) {
public void processReadyCommand(final Command cmd) {
final ReadyCommand ready = (ReadyCommand)cmd;
@ -574,10 +587,10 @@ public class Agent implements HandlerFactory, IAgentControl {
}
public void processOtherTask(Task task) {
public void processOtherTask(final Task task) {
final Object obj = task.get();
if (obj instanceof Response) {
if ((System.currentTimeMillis() - _lastPingResponseTime) > _pingInterval * _shell.getPingRetries()) {
if (System.currentTimeMillis() - _lastPingResponseTime > _pingInterval * _shell.getPingRetries()) {
s_logger.error("Ping Interval has gone past " + _pingInterval * _shell.getPingRetries() + ". Won't reconnect to mgt server, as connection is still alive");
return;
}
@ -633,25 +646,25 @@ public class Agent implements HandlerFactory, IAgentControl {
}
@Override
public void registerControlListener(IAgentControlListener listener) {
public void registerControlListener(final IAgentControlListener listener) {
synchronized (_controlListeners) {
_controlListeners.add(listener);
}
}
@Override
public void unregisterControlListener(IAgentControlListener listener) {
public void unregisterControlListener(final IAgentControlListener listener) {
synchronized (_controlListeners) {
_controlListeners.remove(listener);
}
}
@Override
public AgentControlAnswer sendRequest(AgentControlCommand cmd, int timeoutInMilliseconds) throws AgentControlChannelException {
Request request = new Request(this.getId(), -1, new Command[] {cmd}, true, false);
public AgentControlAnswer sendRequest(final AgentControlCommand cmd, final int timeoutInMilliseconds) throws AgentControlChannelException {
final Request request = new Request(getId(), -1, new Command[] {cmd}, true, false);
request.setSequence(getNextSequence());
AgentControlListener listener = new AgentControlListener(request);
final AgentControlListener listener = new AgentControlListener(request);
registerControlListener(listener);
try {
@ -659,7 +672,7 @@ public class Agent implements HandlerFactory, IAgentControl {
synchronized (listener) {
try {
listener.wait(timeoutInMilliseconds);
} catch (InterruptedException e) {
} catch (final InterruptedException e) {
s_logger.warn("sendRequest is interrupted, exit waiting");
}
}
@ -671,13 +684,13 @@ public class Agent implements HandlerFactory, IAgentControl {
}
@Override
public void postRequest(AgentControlCommand cmd) throws AgentControlChannelException {
Request request = new Request(this.getId(), -1, new Command[] {cmd}, true, false);
public void postRequest(final AgentControlCommand cmd) throws AgentControlChannelException {
final Request request = new Request(getId(), -1, new Command[] {cmd}, true, false);
request.setSequence(getNextSequence());
postRequest(request);
}
private void postRequest(Request request) throws AgentControlChannelException {
private void postRequest(final Request request) throws AgentControlChannelException {
if (_link != null) {
try {
_link.send(request.toBytes());
@ -694,7 +707,7 @@ public class Agent implements HandlerFactory, IAgentControl {
private AgentControlAnswer _answer;
private final Request _request;
public AgentControlListener(Request request) {
public AgentControlListener(final Request request) {
_request = request;
}
@ -703,12 +716,12 @@ public class Agent implements HandlerFactory, IAgentControl {
}
@Override
public Answer processControlRequest(Request request, AgentControlCommand cmd) {
public Answer processControlRequest(final Request request, final AgentControlCommand cmd) {
return null;
}
@Override
public void processControlResponse(Response response, AgentControlAnswer answer) {
public void processControlResponse(final Response response, final AgentControlAnswer answer) {
if (_request.getSequence() == response.getSequence()) {
_answer = answer;
synchronized (this) {
@ -797,13 +810,13 @@ public class Agent implements HandlerFactory, IAgentControl {
}
public class AgentRequestHandler extends Task {
public AgentRequestHandler(Task.Type type, Link link, Request req) {
public AgentRequestHandler(final Task.Type type, final Link link, final Request req) {
super(type, link, req);
}
@Override
protected void doTask(Task task) throws Exception {
Request req = (Request)this.get();
protected void doTask(final Task task) throws TaskExecutionException {
final Request req = (Request)get();
if (!(req instanceof Response)) {
processRequest(req, task.getLink());
}
@ -811,16 +824,16 @@ public class Agent implements HandlerFactory, IAgentControl {
}
public class ServerHandler extends Task {
public ServerHandler(Task.Type type, Link link, byte[] data) {
public ServerHandler(final Task.Type type, final Link link, final byte[] data) {
super(type, link, data);
}
public ServerHandler(Task.Type type, Link link, Request req) {
public ServerHandler(final Task.Type type, final Link link, final Request req) {
super(type, link, req);
}
@Override
public void doTask(final Task task) {
public void doTask(final Task task) throws TaskExecutionException {
if (task.getType() == Task.Type.CONNECT) {
_shell.getBackoffAlgorithm().reset();
setLink(task.getLink());
@ -835,7 +848,7 @@ public class Agent implements HandlerFactory, IAgentControl {
} else {
//put the requests from mgt server into another thread pool, as the request may take a longer time to finish. Don't block the NIO main thread pool
//processRequest(request, task.getLink());
_executor.execute(new AgentRequestHandler(this.getType(), this.getLink(), request));
_executor.submit(new AgentRequestHandler(getType(), getLink(), request));
}
} catch (final ClassNotFoundException e) {
s_logger.error("Unable to find this request ");

View File

@ -464,6 +464,7 @@ public class AgentShell implements IAgentShell, Daemon {
while (!_exit)
Thread.sleep(1000);
} catch (InterruptedException e) {
s_logger.debug("[ignored] AgentShell was interupted.");
}
} catch (final ConfigurationException e) {

View File

@ -0,0 +1,27 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.exception;
public class StorageConflictException extends ManagementServerException {
private static final long serialVersionUID = -294905017911859479L;
public StorageConflictException(String message) {
super(message);
}
}

View File

@ -39,6 +39,7 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba
Ready("The volume is ready to be used."),
Migrating("The volume is migrating to other storage pool"),
Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"),
RevertSnapshotting("There is a snapshot created on this volume, the volume is being reverting from snapshot"),
Resizing("The volume is being resized"),
Expunging("The volume is being expunging"),
Expunged("The volume has been expunged"),
@ -91,6 +92,9 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Ready, Event.SnapshotRequested, Snapshotting, null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Snapshotting, Event.OperationSucceeded, Ready, null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Snapshotting, Event.OperationFailed, Ready,null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Ready, Event.RevertSnapshotRequested, RevertSnapshotting, null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(RevertSnapshotting, Event.OperationSucceeded, Ready, null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(RevertSnapshotting, Event.OperationFailed, Ready,null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Allocated, Event.MigrationCopyRequested, Creating, null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Creating, Event.MigrationCopyFailed, Allocated, null));
s_fsm.addTransition(new StateMachine2.Transition<State, Event>(Creating, Event.MigrationCopySucceeded, Ready, Arrays.asList(new StateMachine2.Transition.Impact[]{StateMachine2.Transition.Impact.USAGE})));
@ -131,6 +135,7 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba
MigrationCopySucceeded,
MigrationCopyFailed,
SnapshotRequested,
RevertSnapshotRequested,
DestroyRequested,
ExpungingRequested,
ResizeRequested,

View File

@ -106,7 +106,7 @@ public interface SnapshotApiService {
*/
Long getHostIdForSnapshotOperation(Volume vol);
boolean revertSnapshot(Long snapshotId);
Snapshot revertSnapshot(Long snapshotId);
SnapshotPolicy updateSnapshotPolicy(UpdateSnapshotPolicyCmd updateSnapshotPolicyCmd);
}

View File

@ -51,7 +51,7 @@ public interface TemplateApiService {
VirtualMachineTemplate copyTemplate(CopyTemplateCmd cmd) throws StorageUnavailableException, ResourceAllocationException;
VirtualMachineTemplate prepareTemplate(long templateId, long zoneId);
VirtualMachineTemplate prepareTemplate(long templateId, long zoneId, Long storageId);
boolean detachIso(long vmId);

View File

@ -115,14 +115,8 @@ public interface Nic extends Identity, InternalIdentity {
boolean isDefaultNic();
String getIp4Address();
String getMacAddress();
String getNetmask();
String getGateway();
/**
* @return network profile id that this
*/
@ -145,11 +139,25 @@ public interface Nic extends Identity, InternalIdentity {
AddressFormat getAddressFormat();
String getIp6Gateway();
String getIp6Cidr();
String getIp6Address();
boolean getSecondaryIp();
//
// IPv4
//
String getIPv4Address();
String getIPv4Netmask();
String getIPv4Gateway();
//
// IPv6
//
String getIPv6Gateway();
String getIPv6Cidr();
String getIPv6Address();
}

View File

@ -33,214 +33,64 @@ public class NicProfile implements InternalIdentity, Serializable {
long id;
long networkId;
BroadcastDomainType broadcastType;
Mode mode;
long vmId;
String gateway;
AddressFormat format;
TrafficType trafficType;
String ip4Address;
String ip6Address;
String ip6Gateway;
String ip6Cidr;
String macAddress;
URI isolationUri;
String netmask;
URI broadcastUri;
ReservationStrategy strategy;
String reservationId;
boolean defaultNic;
Integer deviceId;
String dns1;
String dns2;
String ip6Dns1;
String ip6Dns2;
Integer networkRate;
boolean isSecurityGroupEnabled;
String name;
String requestedIpv4;
String requestedIpv6;
String uuid;
public String getDns1() {
return dns1;
}
String macAddress;
BroadcastDomainType broadcastType;
Mode mode;
AddressFormat format;
TrafficType trafficType;
URI isolationUri;
URI broadcastUri;
ReservationStrategy strategy;
boolean defaultNic;
Integer networkRate;
boolean isSecurityGroupEnabled;
public String getName() {
return name;
}
// IPv4
String iPv4Address;
String iPv4Netmask;
String iPv4Gateway;
String iPv4Dns1;
String iPv4Dns2;
String requestedIPv4;
public void setName(String name) {
this.name = name;
}
// IPv6
String iPv6Address;
String iPv6Gateway;
String iPv6Cidr;
String iPv6Dns1;
String iPv6Dns2;
String requestedIPv6;
public String getDns2() {
return dns2;
}
//
// CONSTRUCTORS
//
public void setDns1(String dns1) {
this.dns1 = dns1;
}
public void setDns2(String dns2) {
this.dns2 = dns2;
}
public boolean isDefaultNic() {
return defaultNic;
}
public String getNetmask() {
return netmask;
}
public void setNetmask(String netmask) {
this.netmask = netmask;
}
public void setBroadcastUri(URI broadcastUri) {
this.broadcastUri = broadcastUri;
}
public URI getBroadCastUri() {
return broadcastUri;
}
public void setIsolationUri(URI isolationUri) {
this.isolationUri = isolationUri;
}
public URI getIsolationUri() {
return isolationUri;
}
public void setStrategy(ReservationStrategy strategy) {
this.strategy = strategy;
}
public BroadcastDomainType getType() {
return broadcastType;
}
public void setBroadcastType(BroadcastDomainType broadcastType) {
this.broadcastType = broadcastType;
}
public void setMode(Mode mode) {
this.mode = mode;
}
public void setDeviceId(int deviceId) {
this.deviceId = deviceId;
}
public void setDefaultNic(boolean defaultNic) {
this.defaultNic = defaultNic;
}
public Integer getDeviceId() {
return deviceId;
}
public void setGateway(String gateway) {
this.gateway = gateway;
}
public void setFormat(AddressFormat format) {
this.format = format;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public void setTrafficType(TrafficType trafficType) {
this.trafficType = trafficType;
}
public void setIp6Address(String ip6Address) {
this.ip6Address = ip6Address;
}
public Mode getMode() {
return mode;
}
public long getNetworkId() {
return networkId;
}
public long getVirtualMachineId() {
return vmId;
}
@Override
public long getId() {
return id;
}
public BroadcastDomainType getBroadcastType() {
return broadcastType;
}
public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}
public long getVmId() {
return vmId;
}
public String getGateway() {
return gateway;
}
public AddressFormat getFormat() {
return format;
}
public TrafficType getTrafficType() {
return trafficType;
}
public String getIp4Address() {
return ip4Address;
}
public String getIp6Address() {
return ip6Address;
}
public String getMacAddress() {
return macAddress;
}
public void setIp4Address(String ip4Address) {
this.ip4Address = ip4Address;
}
public Integer getNetworkRate() {
return networkRate;
}
public ReservationStrategy getStrategy() {
return strategy;
}
public String getUuid() {
return uuid;
public NicProfile() {
}
public NicProfile(Nic nic, Network network, URI broadcastUri, URI isolationUri, Integer networkRate, boolean isSecurityGroupEnabled, String name) {
id = nic.getId();
networkId = network.getId();
gateway = nic.getGateway();
mode = network.getMode();
broadcastType = network.getBroadcastDomainType();
trafficType = network.getTrafficType();
ip4Address = nic.getIp4Address();
format = nic.getAddressFormat();
ip6Address = nic.getIp6Address();
iPv4Address = nic.getIPv4Address();
iPv4Netmask = nic.getIPv4Netmask();
iPv4Gateway = nic.getIPv4Gateway();
iPv6Address = nic.getIPv6Address();
iPv6Gateway = nic.getIPv6Gateway();
iPv6Cidr = nic.getIPv6Cidr();
macAddress = nic.getMacAddress();
reservationId = nic.getReservationId();
strategy = nic.getReservationStrategy();
@ -248,12 +98,10 @@ public class NicProfile implements InternalIdentity, Serializable {
defaultNic = nic.isDefaultNic();
this.broadcastUri = broadcastUri;
this.isolationUri = isolationUri;
netmask = nic.getNetmask();
this.isSecurityGroupEnabled = isSecurityGroupEnabled;
vmId = nic.getInstanceId();
this.name = name;
ip6Cidr = nic.getIp6Cidr();
ip6Gateway = nic.getIp6Gateway();
uuid = nic.getUuid();
if (networkRate != null) {
@ -261,25 +109,47 @@ public class NicProfile implements InternalIdentity, Serializable {
}
}
public NicProfile(ReservationStrategy strategy, String ip4Address, String macAddress, String gateway, String netmask) {
public NicProfile(String requestedIPv4, String requestedIPv6) {
this.requestedIPv4 = requestedIPv4;
this.requestedIPv6 = requestedIPv6;
}
public NicProfile(ReservationStrategy strategy, String iPv4Address, String macAddress, String iPv4gateway, String iPv4netmask) {
format = AddressFormat.Ip4;
this.ip4Address = ip4Address;
this.iPv4Address = iPv4Address;
this.iPv4Gateway = iPv4gateway;
this.iPv4Netmask = iPv4netmask;
this.macAddress = macAddress;
this.gateway = gateway;
this.netmask = netmask;
this.strategy = strategy;
}
public NicProfile(String requestedIpv4, String requestedIpv6) {
this.requestedIpv4 = requestedIpv4;
this.requestedIpv6 = requestedIpv6;
//
// GET & SET GENERAL
//
@Override
public long getId() {
return id;
}
public NicProfile() {
public void setId(long id) {
this.id = id;
}
public ReservationStrategy getReservationStrategy() {
return strategy;
public long getNetworkId() {
return networkId;
}
public void setNetworId(long networkId){
this.networkId = networkId;
}
public long getVirtualMachineId() {
return vmId;
}
public void setVirtualMachineId(long virtualMachineId) {
this.vmId = virtualMachineId;
}
public String getReservationId() {
@ -290,6 +160,110 @@ public class NicProfile implements InternalIdentity, Serializable {
this.reservationId = reservationId;
}
public Integer getDeviceId() {
return deviceId;
}
public void setDeviceId(int deviceId) {
this.deviceId = deviceId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getMacAddress() {
return macAddress;
}
public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}
public BroadcastDomainType getBroadcastType() {
return broadcastType;
}
public void setBroadcastType(BroadcastDomainType broadcastType) {
this.broadcastType = broadcastType;
}
public Mode getMode() {
return mode;
}
public void setMode(Mode mode) {
this.mode = mode;
}
public AddressFormat getFormat() {
return format;
}
public void setFormat(AddressFormat format) {
this.format = format;
}
public TrafficType getTrafficType() {
return trafficType;
}
public void setTrafficType(TrafficType trafficType) {
this.trafficType = trafficType;
}
public URI getIsolationUri() {
return isolationUri;
}
public void setIsolationUri(URI isolationUri) {
this.isolationUri = isolationUri;
}
public URI getBroadCastUri() {
return broadcastUri;
}
public void setBroadcastUri(URI broadcastUri) {
this.broadcastUri = broadcastUri;
}
public ReservationStrategy getReservationStrategy() {
return strategy;
}
public void setReservationStrategy(ReservationStrategy strategy) {
this.strategy = strategy;
}
public boolean isDefaultNic() {
return defaultNic;
}
public void setDefaultNic(boolean defaultNic) {
this.defaultNic = defaultNic;
}
public Integer getNetworkRate() {
return networkRate;
}
public void setNetworkRate(Integer networkRate) {
this.networkRate = networkRate;
}
public boolean isSecurityGroupEnabled() {
return isSecurityGroupEnabled;
}
@ -298,27 +272,139 @@ public class NicProfile implements InternalIdentity, Serializable {
isSecurityGroupEnabled = enabled;
}
public String getRequestedIpv4() {
return requestedIpv4;
//
// GET & SET IPv4
//
public String getIPv4Address() {
return iPv4Address;
}
public void setIPv4Address(String ipv4Address) {
this.iPv4Address = ipv4Address;
}
public String getIPv4Netmask() {
return iPv4Netmask;
}
public void setIPv4Netmask(String ipv4Netmask) {
this.iPv4Netmask = ipv4Netmask;
}
public String getIPv4Gateway() {
return iPv4Gateway;
}
public void setIPv4Gateway(String ipv4Gateway) {
this.iPv4Gateway = ipv4Gateway;
}
public String getIPv4Dns1() {
return iPv4Dns1;
}
public void setIPv4Dns1(String ipv4Dns1) {
this.iPv4Dns1 = ipv4Dns1;
}
public String getIPv4Dns2() {
return iPv4Dns2;
}
public void setIPv4Dns2(String ipv4Dns2) {
this.iPv4Dns2 = ipv4Dns2;
}
public String getRequestedIPv4() {
return requestedIPv4;
}
public void setRequestedIPv4(String requestedIPv4) {
this.requestedIPv4 = requestedIPv4;
}
//
// GET & SET IPv6
//
public String getIPv6Address() {
return iPv6Address;
}
public void setIPv6Address(String ipv6Address) {
this.iPv6Address = ipv6Address;
}
public String getIPv6Gateway() {
return iPv6Gateway;
}
public void setIPv6Gateway(String ipv6Gateway) {
this.iPv6Gateway = ipv6Gateway;
}
public String getIPv6Cidr() {
return iPv6Cidr;
}
public void setIPv6Cidr(String ipv6Cidr) {
this.iPv6Cidr = ipv6Cidr;
}
public String getIPv6Dns1() {
return iPv6Dns1;
}
public void setIPv6Dns1(String ipv6Dns1) {
this.iPv6Dns1 = ipv6Dns1;
}
public String getIPv6Dns2() {
return iPv6Dns2;
}
public void setIPv6Dns2(String ipv6Dns2) {
this.iPv6Dns2 = ipv6Dns2;
}
public String getRequestedIPv6() {
return requestedIPv6;
}
public void setRequestedIPv6(String requestedIPv6) {
this.requestedIPv6 = requestedIPv6;
}
//
// OTHER METHODS
//
public void deallocate() {
gateway = null;
mode = null;
format = null;
broadcastType = null;
trafficType = null;
ip4Address = null;
ip6Address = null;
iPv4Address = null;
iPv4Netmask = null;
iPv4Gateway = null;
iPv4Dns1 = null;
iPv4Dns2 = null;
iPv6Address = null;
iPv6Gateway = null;
iPv6Cidr = null;
iPv6Dns1 = null;
iPv6Dns2 = null;
macAddress = null;
reservationId = null;
strategy = null;
deviceId = null;
broadcastUri = null;
isolationUri = null;
netmask = null;
dns1 = null;
dns2 = null;
}
@Override
@ -329,54 +415,9 @@ public class NicProfile implements InternalIdentity, Serializable {
.append("-")
.append(reservationId)
.append("-")
.append(ip4Address)
.append(iPv4Address)
.append("-")
.append(broadcastUri)
.toString();
}
public String getIp6Gateway() {
return ip6Gateway;
}
public void setIp6Gateway(String ip6Gateway) {
this.ip6Gateway = ip6Gateway;
}
public String getIp6Cidr() {
return ip6Cidr;
}
public void setIp6Cidr(String ip6Cidr) {
this.ip6Cidr = ip6Cidr;
}
public String getRequestedIpv6() {
return requestedIpv6;
}
public void setRequestedIpv6(String requestedIpv6) {
this.requestedIpv6 = requestedIpv6;
}
public String getIp6Dns1() {
return ip6Dns1;
}
public void setIp6Dns1(String ip6Dns1) {
this.ip6Dns1 = ip6Dns1;
}
public String getIp6Dns2() {
return ip6Dns2;
}
public void setIp6Dns2(String ip6Dns2) {
this.ip6Dns2 = ip6Dns2;
}
public void setNetworId(long networkId){
this.networkId = networkId;
}
}
}

View File

@ -271,6 +271,7 @@ public class ApiConstants {
public static final String VIRTUAL_MACHINE_ID = "virtualmachineid";
public static final String VIRTUAL_MACHINE_IDS = "virtualmachineids";
public static final String VIRTUAL_MACHINE_ID_IP = "vmidipmap";
public static final String VIRTUAL_MACHINE_COUNT = "virtualmachinecount";
public static final String USAGE_ID = "usageid";
public static final String VLAN = "vlan";
@ -627,6 +628,8 @@ public class ApiConstants {
public static final String OVM3_CLUSTER = "ovm3cluster";
public static final String OVM3_VIP = "ovm3vip";
public static final String ADMIN = "admin";
public enum HostDetails {
all, capacity, events, stats, min;
}

View File

@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.account;
import java.util.Collection;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.cloudstack.api.APICommand;
@ -31,7 +32,6 @@ import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.AccountResponse;
import org.apache.cloudstack.api.response.DomainResponse;
import org.apache.cloudstack.context.CallContext;
import org.apache.commons.lang.StringUtils;
import com.cloud.user.Account;
import com.cloud.user.UserAccount;
@ -175,9 +175,7 @@ public class CreateAccountCmd extends BaseCmd {
@Override
public void execute() {
if (StringUtils.isEmpty(getPassword())) {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Empty passwords are not allowed");
}
validateParams();
CallContext.current().setEventDetails("Account Name: " + getAccountName() + ", Domain Id:" + getDomainId());
UserAccount userAccount =
_accountService.createUserAccount(getUsername(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimeZone(), getAccountName(), getAccountType(),
@ -190,4 +188,13 @@ public class CreateAccountCmd extends BaseCmd {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user account");
}
}
/**
* TODO: this should be done through a validator. for now replicating the validation logic in create account and user
*/
private void validateParams() {
if(StringUtils.isEmpty(getPassword())) {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Empty passwords are not allowed");
}
}
}

View File

@ -28,6 +28,7 @@ import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ResponseObject.ResponseView;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.StoragePoolResponse;
import org.apache.cloudstack.api.response.TemplateResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
@ -60,6 +61,15 @@ public class PrepareTemplateCmd extends BaseCmd {
description = "template ID of the template to be prepared in primary storage(s).")
private Long templateId;
@ACL(accessType = AccessType.OperateEntry)
@Parameter(name = ApiConstants.STORAGE_ID,
type = CommandType.UUID,
entityType = StoragePoolResponse.class,
required = false,
description = "storage pool ID of the primary storage pool to which the template should be prepared. If it is not provided the template" +
" is prepared on all the available primary storage pools.")
private Long storageId;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@ -72,6 +82,10 @@ public class PrepareTemplateCmd extends BaseCmd {
return templateId;
}
public Long getStorageId() {
return storageId;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@ -90,7 +104,7 @@ public class PrepareTemplateCmd extends BaseCmd {
public void execute() {
ListResponse<TemplateResponse> response = new ListResponse<TemplateResponse>();
VirtualMachineTemplate vmTemplate = _templateService.prepareTemplate(templateId, zoneId);
VirtualMachineTemplate vmTemplate = _templateService.prepareTemplate(templateId, zoneId, storageId);
List<TemplateResponse> templateResponses = _responseGenerator.createTemplateResponses(ResponseView.Full, vmTemplate, zoneId, true);
response.setResponses(templateResponses);
response.setResponseName(getCommandName());

View File

@ -150,9 +150,7 @@ public class CreateUserCmd extends BaseCmd {
@Override
public void execute() {
if (StringUtils.isEmpty(getPassword())) {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Empty passwords are not allowed");
}
validateParams();
CallContext.current().setEventDetails("UserName: " + getUserName() + ", FirstName :" + getFirstName() + ", LastName: " + getLastName());
User user =
_accountService.createUser(getUserName(), getPassword(), getFirstName(), getLastName(), getEmail(), getTimezone(), getAccountName(), getDomainId(),
@ -165,4 +163,13 @@ public class CreateUserCmd extends BaseCmd {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user");
}
}
/**
* TODO: this should be done through a validator. for now replicating the validation logic in create account and user
*/
private void validateParams() {
if(StringUtils.isEmpty(getPassword())) {
throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Empty passwords are not allowed");
}
}
}

View File

@ -134,7 +134,7 @@ public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd {
long conditionId = getConditionIds().get(0);
Condition condition = _entityMgr.findById(Condition.class, conditionId);
if (condition == null) {
// it is an invalid condition, return system acccount, error will be thrown later.
// it is an invalid condition, return system account, error will be thrown later.
conditionDomainId = Domain.ROOT_DOMAIN;
conditionAccountId = Account.ACCOUNT_ID_SYSTEM;
} else {

View File

@ -18,11 +18,10 @@ package org.apache.cloudstack.api.command.user.config;
import java.util.Map;
import org.apache.log4j.Logger;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.response.CapabilitiesResponse;
import org.apache.log4j.Logger;
import com.cloud.user.Account;
@ -57,6 +56,8 @@ public class ListCapabilitiesCmd extends BaseCmd {
response.setDiskOffMaxSize((Long)capabilities.get("customDiskOffMaxSize"));
response.setRegionSecondaryEnabled((Boolean)capabilities.get("regionSecondaryEnabled"));
response.setKVMSnapshotEnabled((Boolean)capabilities.get("KVMSnapshotEnabled"));
response.setAllowUserViewDestroyedVM((Boolean)capabilities.get("allowUserViewDestroyedVM"));
response.setAllowUserExpungeRecoverVM((Boolean)capabilities.get("allowUserExpungeRecoverVM"));
if (capabilities.containsKey("apiLimitInterval")) {
response.setApiLimitInterval((Integer)capabilities.get("apiLimitInterval"));
}

View File

@ -29,8 +29,8 @@ import org.apache.cloudstack.api.BaseCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.SnapshotResponse;
import org.apache.cloudstack.api.response.SuccessResponse;
import org.apache.cloudstack.context.CallContext;
import org.apache.log4j.Logger;
import com.cloud.event.EventTypes;
import com.cloud.storage.Snapshot;
@ -39,17 +39,27 @@ import com.cloud.user.Account;
@APICommand(name = "revertSnapshot", description = "revert a volume snapshot.", responseObject = SnapshotResponse.class, entityType = {Snapshot.class},
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
public class RevertSnapshotCmd extends BaseAsyncCmd {
public static final Logger s_logger = Logger.getLogger(RevertSnapshotCmd.class.getName());
private static final String s_name = "revertsnapshotresponse";
/////////////////////////////////////////////////////
//////////////// API parameters /////////////////////
/////////////////////////////////////////////////////
@ACL(accessType = AccessType.OperateEntry)
@Parameter(name= ApiConstants.ID, type= BaseCmd.CommandType.UUID, entityType = SnapshotResponse.class,
required=true, description="The ID of the snapshot")
private Long id;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
public Long getId() {
return id;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@Override
public String getCommandName() {
return s_name;
@ -88,9 +98,9 @@ public class RevertSnapshotCmd extends BaseAsyncCmd {
@Override
public void execute() {
CallContext.current().setEventDetails("Snapshot Id: " + getId());
boolean result = _snapshotService.revertSnapshot(getId());
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
Snapshot snapshot = _snapshotService.revertSnapshot(getId());
if (snapshot != null) {
SnapshotResponse response = _responseGenerator.createSnapshotResponse(snapshot);
response.setResponseName(getCommandName());
setResponseObject(response);
} else {

View File

@ -20,6 +20,14 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.api.response.GuestOSResponse;
import org.apache.cloudstack.api.response.SnapshotResponse;
import org.apache.cloudstack.api.response.TemplateResponse;
import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.api.response.ProjectResponse;
import org.apache.log4j.Logger;
import org.apache.cloudstack.api.APICommand;
@ -30,11 +38,6 @@ import org.apache.cloudstack.api.BaseAsyncCreateCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ResponseObject.ResponseView;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.GuestOSResponse;
import org.apache.cloudstack.api.response.SnapshotResponse;
import org.apache.cloudstack.api.response.TemplateResponse;
import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.context.CallContext;
import com.cloud.event.EventTypes;
@ -124,6 +127,9 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd {
description = "true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory")
protected Boolean isDynamicallyScalable;
@Parameter(name = ApiConstants.PROJECT_ID, type = CommandType.UUID, entityType = ProjectResponse.class, description = "create template for the project")
private Long projectId;
// ///////////////////////////////////////////////////
// ///////////////// Accessors ///////////////////////
// ///////////////////////////////////////////////////
@ -211,37 +217,43 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd {
public long getEntityOwnerId() {
Long volumeId = getVolumeId();
Long snapshotId = getSnapshotId();
Long accountId = null;
Account callingAccount = CallContext.current().getCallingAccount();
if (volumeId != null) {
Volume volume = _entityMgr.findById(Volume.class, volumeId);
if (volume != null) {
accountId = volume.getAccountId();
_accountService.checkAccess(callingAccount, SecurityChecker.AccessType.UseEntry, false, volume);
} else {
throw new InvalidParameterValueException("Unable to find volume by id=" + volumeId);
}
} else {
Snapshot snapshot = _entityMgr.findById(Snapshot.class, snapshotId);
if (snapshot != null) {
accountId = snapshot.getAccountId();
_accountService.checkAccess(callingAccount, SecurityChecker.AccessType.UseEntry, false, snapshot);
} else {
throw new InvalidParameterValueException("Unable to find snapshot by id=" + snapshotId);
}
}
Account account = _accountService.getAccount(accountId);
//Can create templates for enabled projects/accounts only
if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
Project project = _projectService.findByProjectAccountId(accountId);
if (project.getState() != Project.State.Active) {
PermissionDeniedException ex =
new PermissionDeniedException("Can't add resources to the specified project id in state=" + project.getState() + " as it's no longer active");
ex.addProxyObject(project.getUuid(), "projectId");
if(projectId != null){
final Project project = _projectService.getProject(projectId);
if (project != null) {
if (project.getState() == Project.State.Active) {
Account projectAccount= _accountService.getAccount(project.getProjectAccountId());
_accountService.checkAccess(callingAccount, SecurityChecker.AccessType.UseEntry, false, projectAccount);
return project.getProjectAccountId();
} else {
final PermissionDeniedException ex =
new PermissionDeniedException("Can't add resources to the project with specified projectId in state=" + project.getState() +
" as it's no longer active");
ex.addProxyObject(project.getUuid(), "projectId");
throw ex;
}
} else {
throw new InvalidParameterValueException("Unable to find project by id");
}
} else if (account.getState() == Account.State.disabled) {
throw new PermissionDeniedException("The owner of template is disabled: " + account);
}
return accountId;
return callingAccount.getId();
}
@Override
@ -267,7 +279,7 @@ public class CreateTemplateCmd extends BaseAsyncCreateCmd {
public void create() throws ResourceAllocationException {
VirtualMachineTemplate template = null;
//TemplateOwner should be the caller https://issues.citrite.net/browse/CS-17530
template = _templateService.createPrivateTemplateRecord(this, CallContext.current().getCallingAccount());
template = _templateService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId()));
if (template != null) {
setEntityId(template.getId());
setEntityUuid(template.getUuid());

View File

@ -40,7 +40,7 @@ import com.cloud.user.Account;
import com.cloud.uservm.UserVm;
import com.cloud.vm.VirtualMachine;
@APICommand(name = "destroyVirtualMachine", description = "Destroys a virtual machine. Once destroyed, only the administrator can recover it.", responseObject = UserVmResponse.class, responseView = ResponseView.Restricted, entityType = {VirtualMachine.class},
@APICommand(name = "destroyVirtualMachine", description = "Destroys a virtual machine.", responseObject = UserVmResponse.class, responseView = ResponseView.Restricted, entityType = {VirtualMachine.class},
requestHasSensitiveInfo = false,
responseHasSensitiveInfo = true)
public class DestroyVMCmd extends BaseAsyncCmd {
@ -59,7 +59,7 @@ public class DestroyVMCmd extends BaseAsyncCmd {
@Parameter(name = ApiConstants.EXPUNGE,
type = CommandType.BOOLEAN,
description = "If true is passed, the vm is expunged immediately. False by default. Parameter can be passed to the call by ROOT/Domain admin only",
description = "If true is passed, the vm is expunged immediately. False by default.",
since = "4.2.1")
private Boolean expunge;

View File

@ -94,7 +94,7 @@ public class UpdateVMCmd extends BaseCustomIdCmd {
private String instanceName;
@Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, description = "Details in key/value pairs.")
protected Map details;
protected Map<String, String> details;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@ -136,13 +136,13 @@ public class UpdateVMCmd extends BaseCustomIdCmd {
return instanceName;
}
public Map getDetails() {
public Map<String, String> getDetails() {
if (this.details == null || this.details.isEmpty()) {
return null;
}
Collection paramsCollection = this.details.values();
return (Map) (paramsCollection.toArray())[0];
Collection<String> paramsCollection = this.details.values();
return (Map<String, String>) (paramsCollection.toArray())[0];
}
/////////////////////////////////////////////////////

View File

@ -16,12 +16,11 @@
// under the License.
package org.apache.cloudstack.api.response;
import com.google.gson.annotations.SerializedName;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
public class CapabilitiesResponse extends BaseResponse {
@ -73,6 +72,14 @@ public class CapabilitiesResponse extends BaseResponse {
@Param(description = "Max allowed number of api requests within the specified interval")
private Integer apiLimitMax;
@SerializedName("allowuserviewdestroyedvm")
@Param(description = "true if the user is allowed to view destroyed virtualmachines, false otherwise", since = "4.6.0")
private boolean allowUserViewDestroyedVM;
@SerializedName("allowuserexpungerecovervm")
@Param(description = "true if the user can recover and expunge virtualmachines, false otherwise", since = "4.6.0")
private boolean allowUserExpungeRecoverVM;
public void setSecurityGroupsEnabled(boolean securityGroupsEnabled) {
this.securityGroupsEnabled = securityGroupsEnabled;
}
@ -121,4 +128,11 @@ public class CapabilitiesResponse extends BaseResponse {
this.apiLimitMax = apiLimitMax;
}
}
public void setAllowUserViewDestroyedVM(boolean allowUserViewDestroyedVM) {
this.allowUserViewDestroyedVM = allowUserViewDestroyedVM;
}
public void setAllowUserExpungeRecoverVM(boolean allowUserExpungeRecoverVM) {
this.allowUserExpungeRecoverVM = allowUserExpungeRecoverVM;
}
}

View File

@ -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.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 com.google.gson.annotations.SerializedName;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.EntityReference;
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 class HostResponse extends BaseResponse {
}
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;
}
}

View File

@ -19,14 +19,13 @@ package org.apache.cloudstack.api.response;
import java.util.LinkedHashSet;
import java.util.Set;
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.network.security.SecurityGroup;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
@EntityReference(value = SecurityGroup.class)
@ -76,7 +75,16 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
@Param(description = "the list of resource tags associated with the rule", responseObject = ResourceTagResponse.class)
private Set<ResourceTagResponse> tags;
@SerializedName(ApiConstants.VIRTUAL_MACHINE_COUNT)
@Param(description = "the number of virtualmachines associated with this securitygroup", since = "4.6.0")
private Integer virtualMachineCount;
@SerializedName(ApiConstants.VIRTUAL_MACHINE_IDS)
@Param(description = "the list of virtualmachine ids associated with this securitygroup", since = "4.6.0")
private Set<String> virtualMachineIds;
public SecurityGroupResponse() {
this.virtualMachineIds = new LinkedHashSet<String>();
this.ingressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
this.egressRules = new LinkedHashSet<SecurityGroupRuleResponse>();
this.tags = new LinkedHashSet<ResourceTagResponse>();
@ -176,4 +184,16 @@ public class SecurityGroupResponse extends BaseResponse implements ControlledVie
public void addTag(ResourceTagResponse tag) {
this.tags.add(tag);
}
public void setVirtualMachineCount(Integer virtualMachineCount) {
this.virtualMachineCount = virtualMachineCount;
}
public void setVirtualMachineIds(Set<String> virtualMachineIds) {
this.virtualMachineIds = virtualMachineIds;
}
public void addVirtualMachineId(String virtualMachineId) {
this.virtualMachineIds.add(virtualMachineId);
}
}

View File

@ -71,6 +71,7 @@ import org.apache.cloudstack.api.response.UserResponse;
import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.cloudstack.framework.config.ConfigKey;
import com.cloud.exception.PermissionDeniedException;
@ -80,6 +81,10 @@ import com.cloud.exception.PermissionDeniedException;
*/
public interface QueryService {
// Config keys
static final ConfigKey<Boolean> AllowUserViewDestroyedVM = new ConfigKey<Boolean>("Advanced", Boolean.class, "allow.user.view.destroyed.vm", "false",
"Determines whether users can view their destroyed or expunging vm ", true, ConfigKey.Scope.Account);
ListResponse<UserResponse> searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException;
ListResponse<EventResponse> searchForEvents(ListEventsCmd cmd);

View File

@ -0,0 +1,100 @@
/*
* 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.admin.account;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.context.CallContext;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.test.util.ReflectionTestUtils;
import com.cloud.user.Account;
import com.cloud.user.AccountService;
import com.cloud.user.User;
public class CreateAccountCmdTest {
public static final Logger s_logger = Logger.getLogger(CreateAccountCmdTest.class.getName());
@Mock
private AccountService accountService;
@InjectMocks
private CreateAccountCmd createAccountCmd = new CreateAccountCmd();
private short accountType = 1;
private Long domainId = 1L;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(createAccountCmd, "domainId", domainId);
ReflectionTestUtils.setField(createAccountCmd, "accountType", accountType);
CallContext.register(Mockito.mock(User.class), Mockito.mock(Account.class));
}
@After
public void tearDown() throws Exception {
CallContext.unregister();
}
@Test
public void testExecuteWithNotBlankPassword() {
ReflectionTestUtils.setField(createAccountCmd, "password", "Test");
try {
createAccountCmd.execute();
} catch (ServerApiException e) {
Assert.assertTrue("Received exception as the mock accountService createUserAccount returns null user", true);
}
Mockito.verify(accountService, Mockito.times(1)).createUserAccount(null, "Test", null, null, null, null, null, accountType, domainId, null, null, null, null);
}
@Test
public void testExecuteWithNullPassword() {
ReflectionTestUtils.setField(createAccountCmd, "password", null);
try {
createAccountCmd.execute();
Assert.fail("should throw exception for a null password");
} catch (ServerApiException e) {
Assert.assertEquals(ApiErrorCode.PARAM_ERROR, e.getErrorCode());
Assert.assertEquals("Empty passwords are not allowed", e.getMessage());
}
Mockito.verify(accountService, Mockito.never()).createUserAccount(null, null, null, null, null, null, null, accountType, domainId, null, null, null, null);
}
@Test
public void testExecuteWithEmptyPassword() {
ReflectionTestUtils.setField(createAccountCmd, "password", "");
try {
createAccountCmd.execute();
Assert.fail("should throw exception for a empty password");
} catch (ServerApiException e) {
Assert.assertEquals(ApiErrorCode.PARAM_ERROR, e.getErrorCode());
Assert.assertEquals("Empty passwords are not allowed", e.getMessage());
}
Mockito.verify(accountService, Mockito.never()).createUserAccount(null, null, null, null, null, null, null, accountType, domainId, null, null, null, null);
}
}

View File

@ -0,0 +1,96 @@
/*
* 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.admin.user;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.context.CallContext;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.test.util.ReflectionTestUtils;
import com.cloud.user.Account;
import com.cloud.user.AccountService;
import com.cloud.user.User;
public class CreateUserCmdTest {
public static final Logger s_logger = Logger.getLogger(CreateUserCmdTest.class.getName());
@Mock
private AccountService accountService;
@InjectMocks
private CreateUserCmd createUserCmd = new CreateUserCmd();
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
CallContext.register(Mockito.mock(User.class), Mockito.mock(Account.class));
}
@After
public void tearDown() throws Exception {
CallContext.unregister();
}
@Test
public void testExecuteWithNotBlankPassword() {
ReflectionTestUtils.setField(createUserCmd, "password", "Test");
try {
createUserCmd.execute();
} catch (ServerApiException e) {
Assert.assertTrue("Received exception as the mock accountService createUser returns null user", true);
}
Mockito.verify(accountService, Mockito.times(1)).createUser(null, "Test", null, null, null, null, null, null, null);
}
@Test
public void testExecuteWithNullPassword() {
ReflectionTestUtils.setField(createUserCmd, "password", null);
try {
createUserCmd.execute();
Assert.fail("should throw exception for a null password");
} catch (ServerApiException e) {
Assert.assertEquals(ApiErrorCode.PARAM_ERROR,e.getErrorCode());
Assert.assertEquals("Empty passwords are not allowed", e.getMessage());
}
Mockito.verify(accountService, Mockito.never()).createUser(null, null, null, null, null, null, null, null, null);
}
@Test
public void testExecuteWithEmptyPassword() {
ReflectionTestUtils.setField(createUserCmd, "password", "");
try {
createUserCmd.execute();
Assert.fail("should throw exception for a empty password");
} catch (ServerApiException e) {
Assert.assertEquals(ApiErrorCode.PARAM_ERROR,e.getErrorCode());
Assert.assertEquals("Empty passwords are not allowed", e.getMessage());
}
Mockito.verify(accountService, Mockito.never()).createUser(null, null, null, null, null, null, null, null, null);
}
}

View File

@ -70,32 +70,6 @@ public class AddVpnUserCmdTest extends TestCase {
};
}
/*
* @Test public void testExecuteVpnUserNotFound() {
*
* EntityManager entityManager = Mockito.mock(EntityManager.class);
*
* Mockito.when(entityManager.findById(VpnUser.class,
* Mockito.anyLong())).thenReturn(null);
*
* addVpnUserCmd._entityMgr = entityManager; try { addVpnUserCmd.execute();
* } catch (Exception e) { }
*
* }
*
*
* @Test public void testExecuteVpnUserFound() {
*
* EntityManager entityManager = Mockito.mock(EntityManager.class);
* addVpnUserCmd._entityMgr = entityManager;
*
* VpnUser vpnUser = Mockito.mock(VpnUser.class);
* Mockito.when(entityManager.findById(VpnUser.class,
* Mockito.anyLong())).thenReturn(vpnUser); addVpnUserCmd.execute();
*
* }
*/
@Test
public void testCreateSuccess() {

View File

@ -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);
}
}

View File

@ -461,6 +461,7 @@ label.cluster.type=Cluster Type
label.cluster=Cluster
label.clusters=Clusters
label.clvm=CLVM
label.custom.disk.offering=Custom Disk Offering
label.rbd=RBD
label.rbd.monitor=Ceph monitor
label.rbd.pool=Ceph pool
@ -492,6 +493,7 @@ label.cpu.mhz=CPU (in MHz)
label.cpu.utilized=CPU Utilized
label.cpu=CPU
label.create.project=Create project
label.create.ssh.key.pair=Create a SSH Key Pair
label.create.template=Create template
label.create.VPN.connection=Create VPN Connection
label.created.by.system=Created by system
@ -615,6 +617,7 @@ label.f5=F5
label.failed=Failed
label.featured=Featured
label.fetch.latest=Fetch latest
label.fingerprint=FingerPrint
label.filterBy=Filter by
label.firewall=Firewall
label.first.name=First Name
@ -650,6 +653,7 @@ label.hints=Hints
label.host.alerts=Host Alerts
label.host.MAC=Host MAC
label.host.name=Host Name
label.host.tag=Host Tag
label.host.tags=Host Tags
label.host=Host
label.hosts=Hosts
@ -762,6 +766,7 @@ 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.local.file=Local file
label.login=Login
label.logout=Logout
label.saml.enable=Authorize SAML SSO
@ -891,6 +896,7 @@ label.networking.and.security=Networking and security
label.networks=Networks
label.new.password=New Password
label.new.project=New Project
label.new.ssh.key.pair=New SSH Key Pair
label.new.vm=New VM
label.new=New
label.next=Next
@ -974,6 +980,7 @@ label.private.interface=Private Interface
label.private.ip.range=Private IP Range
label.private.ip=Private IP Address
label.private.ips=Private IP Addresses
label.private.key=Private Key
label.private.network=Private network
label.private.port=Private Port
label.private.zone=Private Zone
@ -991,6 +998,7 @@ label.providers=Providers
label.public.interface=Public Interface
label.public.ip=Public IP Address
label.public.ips=Public IP Addresses
label.public.key=Public Key
label.public.network=Public network
label.public.port=Public Port
label.public.traffic=Public traffic
@ -1018,6 +1026,7 @@ label.remove.pf=Remove port forwarding rule
label.remove.project.account=Remove account from project
label.remove.region=Remove Region
label.remove.rule=Remove rule
label.remove.ssh.key.pair=Remove SSH Key Pair
label.remove.static.nat.rule=Remove static NAT rule
label.remove.static.route=Remove static route
label.remove.tier=Remove tier
@ -1029,6 +1038,8 @@ label.required=Required
label.reserved.system.gateway=Reserved system gateway
label.reserved.system.ip=Reserved System IP
label.reserved.system.netmask=Reserved system netmask
label.reset.ssh.key.pair=Reset SSH Key Pair
label.reset.ssh.key.pair.on.vm=Reset SSH Key Pair on VM
label.reset.VPN.connection=Reset VPN connection
label.resize.new.offering.id=New Offering
label.resize.new.size=New Size (GB)
@ -1092,8 +1103,8 @@ label.service.capabilities=Service Capabilities
label.service.offering=Service Offering
label.session.expired=Session Expired
label.set.up.zone.type=Set up zone type
label.setup.network=Setup Network
label.setup.zone=Setup Zone
label.setup.network=Set up Network
label.setup.zone=Set up Zone
label.setup=Setup
label.shared=Shared
label.SharedMountPoint=SharedMountPoint
@ -1104,8 +1115,8 @@ label.size=Size
label.skip.guide=I have used CloudStack before, skip this guide
label.snapshot.limits=Snapshot Limits
label.snapshot.name=Snapshot Name
label.snapshot.s=Snapshot(s)
label.snapshot.schedule=Setup Recurring Snapshot
label.snapshot.s=Snapshots
label.snapshot.schedule=Set up Recurring Snapshot
label.snapshot=Snapshot
label.snapshots=Snapshots
label.source.nat=Source NAT
@ -1114,6 +1125,8 @@ label.specify.vlan=Specify VLAN
label.specify.vxlan=Specify VXLAN
label.SR.name=SR Name-Label
label.srx=SRX
label.ssh.key.pair=SSH Key Pair
label.ssh.key.pair.details=SSH Key Pair Details
label.PA=Palo Alto
label.start.IP=Start IP
label.start.port=Start Port
@ -1214,7 +1227,11 @@ label.update.project.resources=Update project resources
label.update.ssl.cert= SSL Certificate
label.update.ssl= SSL Certificate
label.updating=Updating
label.upload.from.local=Upload from Local
label.upload.template.from.local=Upload Template from Local
label.upload.volume=Upload volume
label.upload.volume.from.local=Upload Volume from Local
label.upload.volume.from.url=Upload volume from URL
label.upload=Upload
label.url=URL
label.usage.interface=Usage Interface
@ -1795,8 +1812,10 @@ message.delete.VPN.gateway=Please confirm that you want to delete this VPN Gatew
message.desc.advanced.zone=For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or load balancer support.
message.desc.basic.zone=Provide a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering).
message.desc.cluster=Each pod must contain one or more clusters, and we will add the first cluster now. A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Each cluster consists of one or more hosts and one or more primary storage servers.
message.desc.created.ssh.key.pair=Created a SSH Key Pair.
message.desc.host=Each cluster must contain at least one host (computer) for guest VMs to run on, and we will add the first host now. For a host to function in CloudStack, you must install hypervisor software on the host, assign an IP address to the host, and ensure the host is connected to the CloudStack management server.<br/><br/>Give the host\\'s DNS or IP address, the user name (usually root) and password, and any labels you use to categorize hosts.
message.desc.primary.storage=Each cluster must contain one or more primary storage servers, and we will add the first one now. Primary storage contains the disk volumes for all the VMs running on hosts in the cluster. Use any standards-compliant protocol that is supported by the underlying hypervisor.
message.desc.reset.ssh.key.pair=Please specify a ssh key pair that you would like to add to this VM. Please note the root password will be changed by this operation if password is enabled.
message.desc.secondary.storage=Each zone must have at least one NFS or secondary storage server, and we will add the first one now. Secondary storage stores VM templates, ISO images, and VM disk volume snapshots. This server must be available to all hosts in the zone.<br/><br/>Provide the IP address and exported path.
message.desc.zone=A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone.
message.detach.disk=Are you sure you want to detach this disk?
@ -1915,7 +1934,7 @@ message.select.template=Please select a template for your new virtual instance.
message.setup.physical.network.during.zone.creation.basic=When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.<br/><br/>You may also <strong>drag and drop</strong> other traffic types onto the physical network.
message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.<br/><br/><strong>Drag and drop one or more traffic types</strong> onto each physical network.
message.setup.successful=Cloud setup successful\!
message.snapshot.schedule=You can setup recurring snapshot schedules by selecting from the available options below and applying your policy preference
message.snapshot.schedule=You can set up recurring snapshot schedules by selecting from the available options below and applying your policy preference
message.specify.url=Please specify URL
message.step.1.continue=Please select a template or ISO to continue
message.step.1.desc=Please select a template for your new virtual instance. You can also choose to select a blank template from which an ISO image can be installed onto.
@ -2106,7 +2125,6 @@ label.zone.name=Zone Name
label.instances=Instances
label.event=Event
label.minutes.past.hour=minutes(s) past the hour
label.snapshots=snapshot(s)
label.time.colon=Time:
label.min.past.the.hr=min past the hr
label.timezone.colon=Timezone:
@ -2115,3 +2133,48 @@ label.every=Every
label.day=Day
label.of.month=of month
label.add.private.gateway=Add Private Gateway
label.link.domain.to.ldap=Link Domain to LDAP
message.link.domain.to.ldap=Enable autosync for this domain in LDAP
label.ldap.link.type=Type
label.account.type=Account Type
message.desc.created.ssh.key.pair=Created a SSH Key Pair.
message.please.confirm.remove.ssh.key.pair=Please confirm that you want to remove this SSH Key Pair
message.password.has.been.reset.to=Password has been reset to
message.password.of.the.vm.has.been.reset.to=Password of the VM has been reset to
message.question.are.you.sure.you.want.to.add=Are you sure you want to add
label.domain.details=Domain details
label.account.details=Account details
label.user.details=User details
label.service.offering.details=Service offering details
label.system.service.offering.details=System service offering details
label.disk.offering.details=Disk offering details
label.network.offering.details=Network offering details
label.remove.this.physical.network=Remove this physical network
label.physical.network.name=Physical network name
label.save.changes=Save changes
label.autoscale.configuration.wizard=AutoScale Configuration Wizard
label.health.check.wizard=Health Check Wizard
label.health.check.message.desc=Your load balancer will automatically perform health checks on your cloudstack instances and only route traffic to instances that pass the health check
label.health.check.configurations.options=Configuration Options:
label.health.check.advanced.options=Advanced Options:
label.add.isolated.guest.network.with.sourcenat=Add Isolated Guest Network with SourceNat
message.network.remote.access.vpn.configuration=Remote Access VPN configuration has been generated, but it failed to apply. Please check connectivity of the network element, then re-try.
label.vpc.router.details=VPC Router Details
label.edit.rule=Edit rule
label.advanced.search=Advanced Search
label.internal.lb=Internal LB
label.public.lb=Public LB
label.acl.list.rules=ACL List Rules
label.static.routes=Static Routes
label.network.details=Network Details
label.scaleup.policy=ScaleUp Policy
label.scaledown.policy=ScaleDown Policy
label.configure.sticky.policy=Configure Sticky Policy
label.please.complete.the.following.fields=Please complete the following fields
message.desc.add.new.lb.sticky.rule=Add new LB sticky rule
label.ssh.key.pairs=SSH Key Pairs
message.desc.create.ssh.key.pair=Please fill in the following data to create or register a ssh key pair.<br><br>(1) If public key is set, CloudStack will register the public key. You can use it through your private key.<br><br>(2) If public key is not set, CloudStack will create a new SSH Key pair. In this case, please copy and save the private key. CloudStack will not keep it.<br>
message.removed.ssh.key.pair=Removed a SSH Key Pair
message.please.select.ssh.key.pair.use.with.this.vm=Please select a ssh key pair you want this VM to use:
message.configure.firewall.rules.allow.traffic=Configure the rules to allow Traffic
message.configure.firewall.rules.block.traffic=Configure the rules to block Traffic

View File

@ -38,6 +38,7 @@ label.about=\u00dcber
label.accept.project.invitation=Projekteinladung annehmen
label.account.and.security.group=Konto, Sicherheitsgruppe
label.account=Benutzerkonto
label.account.details=Kontodetails
label.account.id=Benutzerkonto-ID
label.account.lower=Konto
label.account.name=Benutzerkonto-Name
@ -45,6 +46,7 @@ label.accounts=Benutzerkonten
label.account.specific=Besonderheiten des Benutzerkontos
label.acl=ACL
label.acl.id=ACL-Kennung
label.acl.list.rules=ACL-Listenregeln
label.acl.name=ACL-Name
label.acl.replaced=ACL ersetzt
label.acquire.new.ip=Neue IP erwerben
@ -208,6 +210,7 @@ label.action.resource.limits=Grenzen der Ressourcen
label.action.restore.instance=Instanz wiederherstellen
label.action.restore.instance.processing=Instanz wird wiederhergestellt....
label.action.revert.snapshot=Auf Schnappschuss zur\u00fcckkehren
label.action.revert.snapshot.processing=Es wird auf den Schnappschuss zur\u00fcckgekehrt...
label.actions=Aktionen
label.action.start.instance=Instanz beginnen
label.action.start.instance.processing=Instanz wird gestartet....
@ -231,6 +234,7 @@ label.action.update.resource.count.processing=Ressourcenanzahl wird aktualisiert
label.action.update.resource.count=Ressourcenanzahl aktualisieren
label.action.vmsnapshot.create=VM-Schnappschuss machen
label.action.vmsnapshot.delete=VM-Schnappschuss l\u00f6schen
label.action.vmsnapshot.revert=Auf VM-Schnappschuss zur\u00fcckkehren
label.activate.project=Projekt aktivieren
label.active.sessions=Aktive Sitzungen
label.add.account=Konto hinzuf\u00fcgen
@ -264,11 +268,13 @@ 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.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.add.ldap.account=LDAP-Konto hinzuf\u00fcgen
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
@ -285,6 +291,7 @@ label.add.pod=Pod hinzuf\u00fcgen
label.add.portable.ip.range=Portablen IP-Bereich hinzuf\u00fcgen
label.add.port.forwarding.rule=Portweiterleitungsregel hinzuf\u00fcgen
label.add.primary.storage=Hauptspeicher hinzuf\u00fcgen
label.add.private.gateway=Privaten Gateway hinzuf\u00fcgen
label.add.region=Region hinzuf\u00fcgen
label.add.resources=Ressourcen hinzuf\u00fcgen
label.add.route=Route hinzuf\u00fcgen
@ -444,6 +451,7 @@ 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.internal.lb=Interne LB l\u00f6schen
label.delete=L\u00f6schen
label.delete.PA=Palo Alto l\u00f6schen
label.delete.portable.ip.range=Portablen IP-Bereich l\u00f6schen
@ -478,12 +486,20 @@ label.disable.vpn=Fernzugriff-VPN deaktivieren
label.disabling.vpn.access=Deaktivierung des VPN Zugangs
label.disbale.vnmc.device=VNMC-Ger\u00e4t deaktivieren
label.disk.allocated=Zugeordnete Festplatte
label.disk.bytes.read.rate=Festplatten-Leserate (BPS)
label.disk.bytes.write.rate=Festplatten-Schreibrate (BPS)
label.disk.iops.read.rate=Festplatten-Leserate (IOPS)
label.disk.iops.total=Gesamte IOPS
label.disk.iops.write.rate=Festplatten-Schreibrate (IOPS)
label.disk.offering=Festplatten-Angebot
label.disk.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=Festplattenvolumen
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
@ -503,17 +519,21 @@ label.duration.in.sec=Dauer (in Sekunden)
label.dynamically.scalable=Dynamisch skalierbar
label.edit.acl.rule=ACL-Regel bearbeiten
label.edit=Bearbeiten
label.edit.lb.rule=LB-Regel bearbeiten
label.edit.network.details=Netzwerkdetails bearbeiten
label.edit.project.details=Projektdetails bearbeiten
label.edit.region=Region bearbeiten
label.edit.rule=Regel bearbeiten
label.edit.secondary.ips=Sekund\u00e4re IPs bearbeiten
label.edit.tags=Schlagw\u00f6rter bearbeiten
label.edit.traffic.type=Datenverkehrstyp bearbeiten
label.edit.vpc=VPC bearbeiten
label.email=E-Mail
label.email.lower=E-Mail-Adresse
label.enable.autoscale=Automatische Skalierung aktivieren
label.enable.host=Host aktivieren
label.enable.network.offering=Netzwerkangebot aktivieren
label.enable.provider=Anbieter aktivieren
label.enable.swift=Swift aktivieren
label.enable.vnmc.device=VNMC-Ger\u00e4t aktivieren
label.enable.vnmc.provider=VNMC-Anbieter aktivieren
@ -544,6 +564,7 @@ label.f5=F5
label.failed=Fehlgeschlagen
label.featured=Besonderheiten aufweisen
label.filterBy=Filtern nach
label.fingerprint=FingerAbdruck
label.firewall=Firewall
label.firstname.lower=Vorname
label.first.name=Vorname
@ -573,6 +594,7 @@ 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
@ -589,6 +611,8 @@ label.guest.networks=Gastnetzwerke
label.guest.traffic=Gast-Datenverkehr
label.guest.type=Gasttyp
label.ha.enabled=HA aktiviert
label.health.check.advanced.options=Erweiterte Optionen\:
label.health.check.configurations.options=Konfigurationsoptionen\:
label.help=Hilfe
label.hide.ingress.rule=Verstecke Regeln, die den Zutritt steuern
label.hints=Hinweise
@ -634,6 +658,8 @@ label.instance.name=Name der Instanz
label.instances=Instanzen
label.internal.dns.1=Interne DNS 1
label.internal.dns.2=Interne DNS 2
label.internal.lb.details=Interne LB-Details
label.internal.lb=Interne LB
label.internal.name=Interner Name
label.interval.type=Interval Typ
label.introduction.to.cloudstack=Einf\u00fchrung in CloudStack&\#8482
@ -706,6 +732,8 @@ 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.ldap.configuration=LDAP-Konfiguration
@ -715,7 +743,9 @@ label.level=Ebene
label.load.balancer=Serverlastverteilung
label.load.balancer.type=Lastverteilungstyp
label.load.balancing=Lastverteilung
label.load.balancing.policies=Verteilungsrichtlinien laden
label.loading=Laden
label.local.file=Lokale Datei
label.local=Lokal
label.local.storage=Lokaler Speicher
label.login=Login
@ -819,11 +849,13 @@ label.network.ACL=Netzwerk-ACL
label.network.ACLs=Netzwerk-ACLs
label.network.addVM=Netzwerk zur VM hinzuf\u00fcgen
label.network.cidr=Netzwerk-CIDR
label.network.details=Netzwerkdetails
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.limits=Netzwerkbegrenzungen
label.network.name=Netzwerk Name
label.network=Netzwerk
@ -836,12 +868,14 @@ label.network.type=Netzwerk-Typ
label.new=Neu
label.new.password=Neues Passwort
label.new.project=Neues Projekt
label.new.ssh.key.pair=Neues SSH-Schl\u00fcsselpaar
label.new.vm=Neue VM
label.next=Weiter
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.nvp.details=Nicira NVP-Details
label.nics=NICs
label.no.actions=Nicht verf\u00fcgbare Aktionen
@ -874,6 +908,7 @@ 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.ovs=OVS
@ -887,6 +922,7 @@ 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.persistent=Persistent
label.physical.network.ID=Physikalisches Netzwerkkennung
@ -899,6 +935,7 @@ label.PING.storage.IP=IP des externen Speichers anpingen
label.please.wait=Bitte warten
label.pod=Pod
label.pods=Pod
label.polling.interval.sec=Abfrageintervall (in Sekunden)
label.portable.ip=Portable IP
label.portable.ip.range.details=Portable IP-Bereichsdetails
label.portable.ip.ranges=Portable IP-Bereiche
@ -920,6 +957,7 @@ label.private.ip=Private IP-Adresse
label.private.ip.range=Privater IP-Bereich
label.private.ips=Private IP-Adressen
label.privatekey=PKCS\#8 Privater Schl\u00fcssel
label.private.key=Privater Schl\u00fcssel
label.private.network=Privates Netzwerk
label.private.port=Privater Port
label.private.zone=Private Zone
@ -938,6 +976,9 @@ label.providers=Anbieter
label.public.interface=\u00d6ffentliches Interface
label.public.ips=\u00d6ffentliche IP-Adressen
label.public.ip=\u00d6ffentliche IP-Adresse
label.public.key=\u00d6ffentlicher Schl\u00fcssel
label.public.lb=\u00d6ffentliche LB
label.public.load.balancer.provider=\u00d6ffentlicher Lastverteileranbieter
label.public.network=\u00d6ffentliches Netzwerk
label.public.port=\u00d6ffentlicher Port
label.public.traffic=\u00d6ffentlicher Datenverkehr
@ -946,6 +987,7 @@ label.public.zone=\u00d6ffentliche Zone
label.purpose=Zweck
label.Pxe.server.type=PXE Server Type
label.quickview=Schnellansicht
label.quiet.time.sec=Ruhezeit (in Sekunden)
label.rbd.id=Cephx-Benutzer
label.rbd=RBD
label.rbd.secret=Cephx-Geheimnis
@ -969,6 +1011,11 @@ 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.ssh.key.pair=SSH-Schl\u00fcsselpaar entfernen
label.remove.static.nat.rule=Statische NAT-Regel entfernen
label.remove.static.route=Statische Route entfernen
label.remove.this.physical.network=Dieses physikalische Netzwerk 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
@ -980,6 +1027,8 @@ label.required=Erforderlich
label.requires.upgrade=Erfordert Aktualisierung
label.reserved.ip.range=Reservierter IP-Bereich
label.reserved.system.ip=Reservierte System-IP
label.reset.ssh.key.pair.on.vm=SSH-Schl\u00fcsselpaar auf VM zur\u00fccksetzen
label.reset.ssh.key.pair=SSH-Schl\u00fcsselpaar zur\u00fccksetzen
label.resetVM=VM zur\u00fccksetzen
label.reset.VPN.connection=VPN-Verbindung zur\u00fccksetzen
label.resize.new.offering.id=Neues Angebot
@ -1007,8 +1056,10 @@ 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.entity=Identit\u00e4tsanbieter
label.saturday=Samstag
label.save.and.continue=Speichern und fortsetzen
label.save.changes=\u00c4nderungen speichern
label.save=Sichern
label.saving.processing=Speichern....
label.scope=Geltungsbereich
@ -1058,8 +1109,8 @@ label.smb.username=SMB-Benutzername
label.snapshot.limits=Schnappschuss Grenzen
label.snapshot.name=Schnappschuss Name
label.snapshot=Schnappschuss
label.snapshot.s=Schnappsch\u00fcsse
label.snapshots=Schnappsch\u00fcsse
label.snapshot.s=Schnappschuss (Schnappsch\u00fcsse)
label.SNMP.port=SNMP-Port
label.sockets=CPU-Sockets
label.specify.IP.ranges=IP-Bereiche angeben
@ -1067,6 +1118,9 @@ label.specify.vlan=VLAN angeben
label.specify.vxlan=VXLAN angeben
label.srx.details=SRX-Details
label.srx=SRX
label.ssh.key.pair.details=SSH-Schl\u00fcsselpaardetails
label.ssh.key.pair=SSH-Schl\u00fcsselpaar
label.ssh.key.pairs=SSH-Schl\u00fcsselpaare
label.standard.us.keyboard=Standard-(US)-Tastatur
label.start.IP=Start-IP
label.start.lb.vm=LB-VM starten
@ -1075,6 +1129,7 @@ label.start.reserved.system.IP=Reservierte System-IP starten
label.start.vxlan=VXLAN starten
label.state=Status
label.static.nat=Statische NAT
label.static.routes=Statische Routen
label.statistics=Statistiken
label.status=Status
label.step.1=Schritt 1
@ -1140,6 +1195,7 @@ label.total.cpu=Gesamtanzahl CPU
label.total.CPU=Gesamtanzahl CPU
label.total.hosts=Gesamtanzahl Hosts
label.total.memory=Gesamter Speicher
label.total.of.ip=Gesamtzahl der IP-Adressen
label.total.of.vm=Gesamtanzahl VMs
label.total.storage=Gesamter Speicher
label.total.vms=Gesamtanzahl VMs
@ -1167,6 +1223,7 @@ label.usage.server=Auslastungsserver
label.used=Gebraucht
label.user=Benutzer
label.user.data=Benutzerdaten
label.user.details=Benutzerdetails
label.username=Benutzername
label.username.lower=Benutzername
label.users=Benutzer
@ -1279,6 +1336,7 @@ label.zone.step.4.title=Schritt 4\: <strong>F\u00fcgen Sie einen IP-Bereich hinz
label.zones=Zonen
label.zone.type=Zonentyp
label.zone.wide=Zonenweit
label.zoneWizard.trafficType.guest=Gast\: Datenverkehr zwischen den virtuellen Maschinen der Endbenutzer
label.zone=Zone
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.
@ -1292,6 +1350,7 @@ message.action.delete.ingress.rule=Bitte best\u00e4tigen Sie, dass Sie diese Zut
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.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.
@ -1305,17 +1364,22 @@ 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 diese System-VM zerst\u00f6ren m\u00f6chten.
message.action.disable.cluster=Bitte best\u00e4tigen Sie, dass Sie diesen Cluster 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.enable.cluster=Bitte best\u00e4tigen Sie, dass Sie diesen Cluster 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.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.reboot.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz neu starten m\u00f6chten.
message.action.reboot.systemvm=Bitte best\u00e4tigen Sie, dass Sie diese System-VM neu starten 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.
@ -1325,6 +1389,7 @@ message.action.start.systemvm=Bitte best\u00e4tigen Sie, dass Sie diese System-V
message.action.stop.instance=Bitte best\u00e4tigen Sie, dass Sie diese Instanz anhalten m\u00f6chten.
message.action.stop.systemvm=Bitte best\u00e4tigen Sie, dass Sie diese System-VM stoppen m\u00f6chten.
message.action.unmanage.cluster=Bitte best\u00e4tigen Sie, dass Sie das Cluster vernachl\u00e4ssigen m\u00f6chten.
message.action.vmsnapshot.revert=VM-Schnappschuss zur\u00fccksetzen
message.added.vpc.offering=VPC-Angebot hinzugef\u00fcgt
message.add.firewall=Eine Firewall zur Zone hinzuf\u00fcgen
message.add.host=Bitte spezifizieren Sie die folgenden Parameter, um einen neuen Host hinzuzuf\u00fcgen.
@ -1344,8 +1409,20 @@ 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.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.create.volume=Sind Sie sicher, dass Sie ein Volumen erstellen m\u00f6chten?
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.ciscoASA1000v=Bitte best\u00e4tigen Sie, dass Sie CiscoASA1000v 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.enable.host=Bitte best\u00e4tigen Sie, dass Sie den Host aktivieren m\u00f6chten
message.confirm.migrate.volume=M\u00f6chten Sie dieses Volumen migrieren?
message.confirm.remove.event=Sind Sie sicher, dass Sie dieses Ereignis 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.replace.acl.new.one=M\u00f6chten Sie die ACL durch die neue ersetzen?
message.copy.iso.confirm=Bitte best\u00e4tigen Sie, dass Sie Ihre ISO kopieren m\u00f6chten und zwar nach
message.create.template=Sind Sie sicher, dass Sie eine Vorlage erstellen m\u00f6chten?
message.create.template.vm=VM aus Vorlage <b id\="p_name"></b> erstellen
@ -1356,16 +1433,23 @@ message.creating.primary.storage=Hauptspeicher wird erstellt
message.creating.secondary.storage=Sekund\u00e4rspeicher wird erstellt
message.creating.zone=Zone wird erstellt
message.delete.account=Bitte best\u00e4tigen Sie, dass Sie dieses Benutzerkonto 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.desc.created.ssh.key.pair=Erstellte ein SSH-Schl\u00fcsselpaar.
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 <a href\="\#">00000</a>, um das ISO herunterzuladen
message.download.template=Bitte klicken Sie auf <a href\="\#">00000</a>, um die Vorlage herunterzuladen
message.download.volume=Bitte klicken Sie auf <a href\="\#">00000</a>, um das Volumen herunterzuladen
message.download.volume.confirm=Bitte best\u00e4tigen Sie, dass Sie dieses Volumen herunterladen 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.enable.vpn.access=VPN ist zurzeit nicht f\u00fcr diese IP Addresse aktiviert. M\u00f6chten Sie den VPN Zugriff aktivieren?
@ -1400,11 +1484,14 @@ message.number.clusters=<h2><span> \# of </span> Cluster</h2>
message.number.hosts=<h2><span> \# of </span> Hosts</h2>
message.number.storage=<h2><span> \# von </span> Hauptspeichervolumina</h2>
message.number.zones=<h2><span> \# of </span> Zonen</h2>
message.password.has.been.reset.to=Passwort wurde zur\u00fcckgesetzt auf
message.password.of.the.vm.has.been.reset.to=Passwort der VM wurde zur\u00fcckgesetzt auf
message.pending.projects.1=Sie haben ausstehende Projekteinladungen\:
message.please.select.a.configuration.for.your.zone=Bitte w\u00e4hlen Sie eine Konfiguration f\u00fcr Ihre Zone aus.
message.please.select.networks=Bitte w\u00e4hlen Sie Netzwerke f\u00fcr Ihre virtuelle Maschine aus.
message.recover.vm=Bitte best\u00e4tigen Sie, dass Sie diese VM wiederherstellen m\u00f6chten.
message.redirecting.region=Weiterleitung zu Region...
message.removed.ssh.key.pair=Hat ein SSH-Schl\u00fcsselpaar entfernt
message.remove.vpn.access=Bitte best\u00e4tigen Sie, dass Sie den VPN-Zugriff vom folgenden Benutzer entfernen m\u00f6chten.
message.reset.VPN.connection=Bitte best\u00e4tigen Sie, dass Sie die VPN-Verbindung zur\u00fccksetzen m\u00f6chten
message.restart.vpc=Bitte best\u00e4tigen Sie, dass Sie den VPC neu starten m\u00f6chten

View File

@ -808,7 +808,7 @@ label.skip.guide=He utilizado CloudStack anteriormente, saltar esta gu\u00eda
label.snapshot=Instant\u00c3\u00a1nea
label.snapshot.limits=instant\u00c3\u00a1neas L\u00c3\u00admites
label.snapshot.name=Nombre de instant\u00c3\u00a1neas
label.snapshot.schedule=Lista de instant\u00c3\u00a1neas
label.snapshot.s=instant\u00c3\u00a1neas
label.snapshots=instant\u00c3\u00a1neas
label.sockets=Sockets
label.source.nat=NAT Fuente
@ -1138,7 +1138,6 @@ message.select.iso=Por favor seleccione un ISO para su nueva instancia virtual
message.select.item=Por favor, seleccionar un item .
message.select.template=Por favor seleccione un template para su nueva instancia virtual
message.setup.successful=La configuraci\u00f3n de la cloud finalizo satisfactoriamente.
message.snapshot.schedule=Puede horarios de configuraci\u00c3\u00b3n recurrente instant\u00c3\u00a1neas mediante la selecci\u00c3\u00b3n de las opciones disponibles a continuaci\u00c3\u00b3n y la aplicaci\u00c3\u00b3n de su preferencia pol\u00c3\u00adtica
message.specify.url=Por favor especifique la URL
message.step.1.continue=Por favor seleccione una plantilla o ISO para continuar
message.step.1.desc=Por favor seleccione una plantilla para la instancia virtual. Tambi\u00c3\u00a9n puede optar por seleccionar una plantilla en blanco desde el que puede ser una imagen ISO instalado en.

View File

@ -26,7 +26,7 @@ error.login=Votre identifiant / mot de passe ne correspond pas \u00e0 nos enregi
error.menu.select=\u00c9chec de l\\'action car il n\\'y a aucun \u00e9l\u00e9ment s\u00e9lectionn\u00e9.
error.mgmt.server.inaccessible=Le serveur de gestion est inaccessible. Veuillez essayer plus tard.
error.password.not.match=Les champs mot de passe ne correspondent pas
error.please.specify.physical.network.tags=L\\'offre r\u00e9seau ne sera pas disponible tant que des libell\u00e9s n\\'auront pas \u00e9t\u00e9 renseign\u00e9s pour ce r\u00e9seau physique.
error.please.specify.physical.network.tags=L\\'offre de r\u00e9seau ne sera pas disponible tant que des libell\u00e9s n\\'auront pas \u00e9t\u00e9 renseign\u00e9s pour ce r\u00e9seau physique.
error.session.expired=Votre session a expir\u00e9e.
error.something.went.wrong.please.correct.the.following=Quelque chose s\\'est mal pass\u00e9e ; veuillez corriger le point suivant
error.unable.to.reach.management.server=Impossible d\\'attendre le serveur de gestion
@ -51,6 +51,7 @@ label.about=A propos de
label.accept.project.invitation=Accepter l\\'invitation au projet
label.account.and.security.group=Compte, groupe de s\u00e9curit\u00e9
label.account=Compte
label.account.details=D\u00e9tails compte
label.account.id=ID de compte
label.account.lower=compte
label.account.name=Nom de compte
@ -58,6 +59,7 @@ label.accounts=Comptes
label.account.specific=Sp\u00e9cifique au compte
label.acl=ACL
label.acl.id=ID ACL
label.acl.list.rules=Liste r\u00e8gles ACL
label.acl.name=Nom ACL
label.acl.replaced=ACL remplac\u00e9e
label.acquire.new.ip=Acqu\u00e9rir nouvelle adr. IP
@ -70,8 +72,9 @@ label.action.attach.iso=Rattacher image ISO
label.action.cancel.maintenance.mode=Annuler mode maintenance
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.change.service=Changer Service
label.action.change.service.processing=Changement 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
@ -88,8 +91,8 @@ label.action.delete.account.processing=Suppression du compte...
label.action.delete.account=Supprimer un compte
label.action.delete.cluster.processing=Suppression du Cluster...
label.action.delete.cluster=Supprimer le Cluster
label.action.delete.disk.offering.processing=Suppression de l\\'offre Disque...
label.action.delete.disk.offering=Supprimer Offre Disque
label.action.delete.disk.offering.processing=Suppression de l\\'offre de disque...
label.action.delete.disk.offering=Supprimer Offre de Disque
label.action.delete.domain.processing=Suppression du domaine...
label.action.delete.domain=Supprimer le domaine
label.action.delete.firewall.processing=Suppression du Pare-feu...
@ -298,8 +301,10 @@ label.add.intermediate.certificate=Ajouter certificat interm\u00e9diaire
label.add.internal.lb=Ajouter LB interne
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.guest.network.with.sourcenat=Ajouter un r\u00e9seau d\\'invit\u00e9 isol\u00e9 avec SourceNat
label.add.isolated.network=Ajouter un r\u00e9seau isol\u00e9
label.additional.networks=R\u00e9seaux additionnels
label.add.LDAP.account=Ajouter Compte LDAP
label.add.ldap.account=Ajouter un compte LDAP
label.add.list.name=Nom Liste ACL
label.add.load.balancer=Ajouter un r\u00e9partiteur de charge
@ -403,6 +408,7 @@ label.attached.iso=Image ISO attach\u00e9e
label.author.email=Email auteur
label.author.name=Nom auteur
label.autoscale=AutoScale
label.autoscale.configuration.wizard=Assistant de configuration AutoScale
label.availability=Disponibilit\u00e9
label.availabilityZone=availabilityZone
label.availability.zone=Zone de disponibilit\u00e9
@ -491,6 +497,7 @@ label.configuration=Configuration
label.configure=Configurer
label.configure.ldap=Configurer LDAP
label.configure.network.ACLs=Configurer les r\u00e8gles d\\'acc\u00e8s r\u00e9seau ACL
label.configure.sticky.policy=Configurer Strat\u00e9gie Sticky
label.configure.vpc=Configurer le VPC
label.confirmation=Confirmation
label.confirm.password=Confirmer le mot de passe
@ -515,10 +522,12 @@ label.created=Cr\u00e9\u00e9
label.create.nfs.secondary.staging.storage=Cr\u00e9er le Stockage Secondaire Interm\u00e9diaire NFS
label.create.nfs.secondary.staging.store=Cr\u00e9er le stockage secondaire interm\u00e9diaire NFS
label.create.project=Cr\u00e9er un projet
label.create.ssh.key.pair=Cr\u00e9er une bi-cl\u00e9 SSH
label.create.template=Cr\u00e9er un mod\u00e8le
label.create.VPN.connection=Cr\u00e9er une connexion VPN
label.cross.zones=Multi Zones
label.custom.disk.iops=IOPS personnalis\u00e9
label.custom.disk.offering=Offre de disque personnalis\u00e9e
label.custom.disk.size=Taille de disque personnalis\u00e9e
label.custom=Personnalis\u00e9
label.daily=Quotidien
@ -607,6 +616,7 @@ label.disk.iops.min=IOPS minimum
label.disk.iops.read.rate=D\u00e9bit lecture disque (IOPS)
label.disk.iops.total=IOPS Total
label.disk.iops.write.rate=D\u00e9bit \u00e9criture disque (IOPS)
label.disk.offering.details=D\u00e9tails offre de disque
label.diskoffering=diskoffering
label.disk.offering=Offre de Disque
label.disk.provisioningtype=Type de provisionnement
@ -626,6 +636,7 @@ label.dns.2=DNS 2
label.dns=DNS
label.DNS.domain.for.guest.networks=Domaine DNS pour les r\u00e9seaux invit\u00e9s
label.domain.admin=Administrateur du domaine
label.domain.details=D\u00e9tails domaine
label.domain=Domaine
label.domain.id=ID du domaine
label.domain.lower=domaine
@ -645,6 +656,7 @@ label.edit=Modifier
label.edit.network.details=Modifier les param\u00e8tres r\u00e9seau
label.edit.project.details=Modifier les d\u00e9tails du projet
label.edit.region=\u00c9diter R\u00e9gion
label.edit.rule=Modifier r\u00e8gle
label.edit.secondary.ips=\u00c9diter IPs secondaires
label.edit.tags=Modifier les balises
label.edit.traffic.type=Modifier le type de trafic
@ -692,7 +704,7 @@ label.every=Tous
label.example=Exemple
label.expunge=Purger
label.external.link=Lien externe
label.extractable.lower=t\u00e9l\u00e9chargeable
label.extractable.lower=T\u00e9l\u00e9chargeable
label.extractable=T\u00e9l\u00e9chargeable
label.f5.details=D\u00e9tails F5
label.f5=F5
@ -700,6 +712,7 @@ label.failed=\u00c9chou\u00e9
label.featured=Sponsoris\u00e9
label.fetch.latest=Rafra\u00eechir
label.filterBy=Filtre
label.fingerprint=Empreinte
label.firewall=Pare-feu
label.firstname.lower=pr\u00e9nom
label.first.name=Pr\u00e9nom
@ -753,8 +766,12 @@ label.guest.traffic.vswitch.name=Nom Trafic Invit\u00e9 vSwitch
label.guest.traffic.vswitch.type=Type Trafic Invit\u00e9 vSwitch
label.guest.type=Type d\\'invit\u00e9
label.ha.enabled=Haute disponibilit\u00e9 activ\u00e9e
label.health.check.advanced.options=Options avanc\u00e9es \:
label.health.check.configurations.options=Options de configuration \:
label.health.check.interval.in.sec=Fr\u00e9quence de v\u00e9rification d\\'\u00e9tat (sec)
label.health.check.message.desc=Votre r\u00e9partiteur de charge va automatiquement effectuer des v\u00e9rifications d\\'\u00e9tat sur vos instances CloudStack et router seulement le trafic vers les instances ayant pass\u00e9es les v\u00e9rifications avec succ\u00e8s
label.health.check=V\u00e9rification statut
label.health.check.wizard=Assistant V\u00e9rification Sant\u00e9
label.healthy.threshold=Seuil d\\'\u00e9tat
label.help=Aide
label.hide.ingress.rule=Cacher la r\u00e8gle d\\'entr\u00e9e
@ -765,6 +782,7 @@ label.host=H\u00f4te
label.host.MAC=Adresse MAC h\u00f4te
label.host.name=Nom d\\'h\u00f4te
label.hosts=H\u00f4tes
label.host.tag=Etiquette h\u00f4te
label.host.tags=\u00c9tiquettes d\\'h\u00f4te
label.hourly=Chaque heure
label.hvm=HVM
@ -813,6 +831,7 @@ label.intermediate.certificate=Certificat interm\u00e9diaire {0}
label.internal.dns.1=DNS interne 1
label.internal.dns.2=DNS interne 2
label.internal.lb.details=D\u00e9tails du LB interne
label.internal.lb=R\u00e9partiteur interne
label.internallbvm=InternalLbVm
label.internal.name=Nom interne
label.interval.type=Type d\\'intervalle
@ -852,7 +871,7 @@ label.is.default=Est par d\u00e9faut
label.iso.boot=D\u00e9marrage par ISO
label.iso=ISO
label.isolated.networks=R\u00e9seaux isol\u00e9s
label.isolation.method=M\u00e9thode Isolation
label.isolation.method=Isolation
label.isolation.mode=Mode d\\'isolation
label.isolation.uri=URI d\\'isolation
label.is.redundant.router=Redondant
@ -904,6 +923,7 @@ label.load.balancer.type=Type R\u00e9partiteur de charge
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.file=Fichier local
label.local=Local
label.local.storage.enabled=Activer le stockage local pour les VMs Utilisateurs
label.local.storage.enabled.system.vms=Active le stockage local pour les VMs Syst\u00e8mes
@ -977,14 +997,14 @@ label.menu.snapshots=Instantan\u00e9s
label.menu.sshkeypair=Bi-cl\u00e9 SSH
label.menu.stopped.instances=Instances Arr\u00eat\u00e9es
label.menu.storage=Stockage
label.menu.system.service.offerings=Offres Syst\u00e8me
label.menu.system.service.offerings=Offres de Syst\u00e8me
label.menu.system=Syst\u00e8me
label.menu.system.vms=\ VMs Syst\u00e8mes
label.menu.templates=Mod\u00e8les
label.menu.virtual.appliances=Appliances Virtuelles
label.menu.virtual.resources=Ressources Virtuelles
label.menu.volumes=Volumes
label.menu.vpc.offerings=Offres VPC
label.menu.vpc.offerings=Offres de VPC
label.migrate.instance.to.host=Migration de l\\'instance sur un autre h\u00f4te
label.migrate.instance.to=Migrer l\\'instance vers
label.migrate.instance.to.ps=Migration de l\\'instance sur un autre stockage primaire
@ -1025,6 +1045,7 @@ label.network.ACL.total=Total R\u00e8gles d\\'acc\u00e8s r\u00e9seau
label.network.addVM=Ajouter r\u00e9seau \u00e0 la VM
label.network.cidr=CIDR r\u00e9seau
label.network.desc=Description r\u00e9seau
label.network.details=D\u00e9tails r\u00e9seau
label.network.device.type=Type d\\'\u00e9quipement r\u00e9seau
label.network.device=\u00c9quipement R\u00e9seau
label.network.domain=Nom de domaine
@ -1034,6 +1055,7 @@ label.networking.and.security=R\u00e9seau et s\u00e9curit\u00e9
label.network.label.display.for.blank.value=Utiliser la passerelle par d\u00e9faut
label.network.limits=Limites r\u00e9seau
label.network.name=Nom du r\u00e9seau
label.network.offering.details=D\u00e9tails offre de r\u00e9seau
label.network.offering.display.text=Texte affich\u00e9 Offre R\u00e9seau
label.network.offering.id=ID Offre R\u00e9seau
label.network.offering.name=Nom Offre R\u00e9seau
@ -1049,6 +1071,7 @@ label.network.write=\u00c9criture r\u00e9seau
label.new=Nouveau
label.new.password=Nouveau mot de passe
label.new.project=Nouveau projet
label.new.ssh.key.pair=Nouvelle bi-cl\u00e9 SSH
label.new.vm=Nouvelle VM
label.next=Suivant
label.nexusVswitch=Nexus 1000v
@ -1121,6 +1144,7 @@ label.PA.threat.profile=Profil menace Palo Alto
label.perfect.forward.secrecy=Confidentialit\u00e9 persistante
label.persistent=Persistant
label.physical.network.ID=Identifiant du r\u00e9seau physique
label.physical.network.name=Nom r\u00e9seau physique
label.physical.network=R\u00e9seau physique
label.PING.CIFS.password=Mot de passe CIFS PING
label.PING.CIFS.username=Identifiant CIFS PING
@ -1128,6 +1152,7 @@ label.PING.dir=R\u00e9pertoire PING
label.ping.path=Chemin Ping
label.PING.storage.IP=IP stockage PING
label.planner.mode=Mode planification
label.please.complete.the.following.fields=Veuillez remplir les champs suivants
label.please.specify.netscaler.info=Renseigner les informations sur le Netscaler
label.please.wait=Patientez s\\'il vous plait
label.plugin.details=D\u00e9tails extension
@ -1159,6 +1184,7 @@ label.private.interface=Interface priv\u00e9e
label.private.ip=Adresse IP Priv\u00e9e
label.private.ip.range=Plage d\\'adresses IP Priv\u00e9es
label.private.ips=Adresses IP Priv\u00e9es
label.private.key=Cl\u00e9 priv\u00e9e
label.privatekey=Cl\u00e9 priv\u00e9e PKCS\#8
label.private.network=R\u00e9seau priv\u00e9
label.private.port=Port priv\u00e9
@ -1178,6 +1204,8 @@ label.providers=Fournisseurs
label.public.interface=Interface publique
label.public.ip=Adresse IP publique
label.public.ips=Adresses IP publiques
label.public.key=Cl\u00e9 publique
label.public.lb=R\u00e9partiteur public
label.public.load.balancer.provider=Fournisseur r\u00e9partition de charge public
label.public.network=R\u00e9seau public
label.public.port=Port public
@ -1230,8 +1258,10 @@ label.remove.pf=Supprimer la r\u00e8gle de transfert de port
label.remove.project.account=Supprimer le compte projet
label.remove.region=Supprimer r\u00e9gion
label.remove.rule=Supprimer la r\u00e8gle
label.remove.ssh.key.pair=Supprimer bi-cl\u00e9 SSH
label.remove.static.nat.rule=Supprimer le NAT statique
label.remove.static.route=Supprimer une route statique
label.remove.this.physical.network=Supprimer ce r\u00e9seau physique
label.remove.tier=Supprimer le tiers
label.remove.vm.from.lb=Supprimer la VM de la r\u00e8gle de r\u00e9partition de charge
label.remove.vm.load.balancer=Supprimer VM du r\u00e9partiteur de charge
@ -1249,6 +1279,8 @@ label.reserved.ip.range=Plage IP r\u00e9serv\u00e9e
label.reserved.system.gateway=Passerelle r\u00e9serv\u00e9e Syst\u00e8me
label.reserved.system.ip=Adresse IP Syst\u00e8me r\u00e9serv\u00e9e
label.reserved.system.netmask=Masque de sous-r\u00e9seau r\u00e9serv\u00e9 Syst\u00e8me
label.reset.ssh.key.pair.on.vm=R\u00e9-initialiser bi-cl\u00e9 sur la VM
label.reset.ssh.key.pair=R\u00e9-initialiser bi-cl\u00e9 SSH
label.resetVM=R\u00e9-initialiser VM
label.reset.VPN.connection=R\u00e9-initialiser la connexion VPN
label.resize.new.offering.id=Nouvelle Offre
@ -1289,11 +1321,16 @@ label.s3.nfs.server=Serveur NFS S3
label.s3.secret_key=Cl\u00e9 Priv\u00e9e
label.s3.socket_timeout=D\u00e9lai d\\'expiration de la socket
label.s3.use_https=Utiliser HTTPS
label.saml.enable=Autoriser SAML SSO
label.saml.entity=Fournisseur d\\'identit\u00e9
label.saturday=Samedi
label.save.and.continue=Enregistrer et continuer
label.save.changes=Sauver changements
label.save=Sauvegarder
label.saving.processing=Sauvegarde en cours...
label.scaledown.policy=Strat\u00e9gie ScaleDown
label.scale.up.policy=POLITIQUE D\\'AGRANDISSEMENT
label.scaleup.policy=Strat\u00e9gie ScaleUp
label.scope=Port\u00e9e
label.search=Rechercher
label.secondary.ips=IPs secondaires
@ -1327,6 +1364,7 @@ label.select.vm.for.static.nat=S\u00e9lectionner une VM pour le NAT statique
label.sent=Envoy\u00e9
label.server=Serveur
label.service.capabilities=Fonctions disponibles
label.service.offering.details=D\u00e9tails offre de service
label.service.offering=Offre de Service
label.services=Services
label.service.state=\u00c9tat du service
@ -1334,8 +1372,8 @@ label.session.expired=Session expir\u00e9e
label.set.default.NIC=D\u00e9finir NIC par d\u00e9faut
label.settings=Param\u00e8tres
label.setup=Configuration
label.setup.network=Configurer le r\u00e9seau
label.setup.zone=Configurer la zone
label.setup.network=Configurer R\u00e9seau
label.setup.zone=Configurer Zone
label.set.up.zone.type=Configurer le type de zone
label.shared=En partage
label.SharedMountPoint=Point de montage partag\u00e9
@ -1353,7 +1391,7 @@ label.snapshot=Instantan\u00e9
label.snapshot.limits=Limites d\\'instantan\u00e9s
label.snapshot.name=Nom Instantan\u00e9
label.snapshot.schedule=Configurer un instantan\u00e9 r\u00e9current
label.snapshot.s=Instantan\u00e9(s)
label.snapshot.s=Instantan\u00e9s
label.snapshots=Instantan\u00e9s
label.SNMP.community=Communaut\u00e9 SNMP
label.SNMP.port=Port SNMP
@ -1368,6 +1406,9 @@ label.specify.vxlan=Pr\u00e9ciser le VXLAN
label.SR.name=Nom du point de montage
label.srx.details=D\u00e9tails SRX
label.srx=SRX
label.ssh.key.pair=Bi-cl\u00e9 SSH
label.ssh.key.pair.details=D\u00e9tails bi-cl\u00e9 SSH
label.ssh.key.pairs=Bi-cl\u00e9s SSH
label.standard.us.keyboard=Clavier standard (US)
label.start.IP=IP d\u00e9but plage
label.start.lb.vm=D\u00e9marrer LB VM
@ -1380,6 +1421,7 @@ label.static.nat.enabled=NAT statique activ\u00e9
label.static.nat=NAT Statique
label.static.nat.to=NAT Statique vers
label.static.nat.vm.details=D\u00e9tails des NAT statique VM
label.static.routes=Routes statiques
label.statistics=Statistiques
label.status=Statut
label.step.1.title=\u00c9tape 1 \: <strong>S\u00e9lectionnez un mod\u00e8le</strong>
@ -1427,8 +1469,9 @@ label.supportsstrechedl2subnet=Sous-r\u00e9seau Streched L2 support\u00e9
label.suspend.project=Suspendre projet
label.switch.type=Type commutateur
label.system.capacity=Capacit\u00e9 syst\u00e8me
label.system.offering.for.router=Offre Syst\u00e8me pour Routeur
label.system.offering=Offre de syst\u00e8me
label.system.offering.for.router=Offre de Syst\u00e8me pour Routeur
label.system.offering=Offre de Syst\u00e8me
label.system.service.offering.details=D\u00e9tails offre de service syst\u00e8me
label.system.service.offering=Offre de Service Syst\u00e8me
label.system.vm.details=D\u00e9tails VM Syst\u00e8me
label.system.vm.scaled.up=VM Syst\u00e8me agrandie
@ -1490,14 +1533,19 @@ 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.from.local=T\u00e9l\u00e9verser depuis Local
label.upload.template.from.local=T\u00e9l\u00e9verser Mod\u00e8le depuis Local
label.upload=T\u00e9l\u00e9verser
label.upload.volume.from.local=T\u00e9l\u00e9verser Volume depuis Local
label.upload.volume.from.url=T\u00e9l\u00e9verser volume depuis URL
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
label.usage.server=Serveur d\\'Usage
label.used=Utilis\u00e9
label.user.data=Donn\u00e9es utilisateur
label.user.details=D\u00e9tails utilisateur
label.username=Identifiant
label.username.lower=identifiant
label.users=Utilisateurs
@ -1589,7 +1637,8 @@ label.vpc.distributedvpcrouter=Routeur VPC Distribu\u00e9
label.vpc.id=ID VPC
label.VPC.limits=Limites VPC
label.vpc.offering.details=D\u00e9tails offre VPC
label.vpc.offering=Offre VPC
label.vpc.offering=Offre de VPC
label.vpc.router.details=D\u00e9tails Routeur VPC
label.VPC.router.details=D\u00e9tails routeur VPC
label.vpc.supportsregionlevelvpc=VPC niveau R\u00e9gion support\u00e9
label.vpc.virtual.router=Routeur virtuel VPC
@ -1718,7 +1767,7 @@ message.add.cluster.zone=Ajouter un cluster d\\'hyperviseurs g\u00e9r\u00e9 pour
message.add.disk.offering=Renseignez les param\u00e8tres suivants pour ajouter un offre de service de disques
message.add.domain=Sp\u00e9cifier le sous domaine que vous souhaitez cr\u00e9er sous ce domaine
message.added.new.nuage.vsp.controller=Ajout d\\'un nouveau contr\u00f4leur Nuage Vsp
message.added.vpc.offering=Ajout d\\'une offre VPC
message.added.vpc.offering=Offre de VPC ajout\u00e9e
message.add.firewall=Ajouter un pare-feu \u00e0 cette zone
message.add.guest.network=Confirmer l\\'ajout du r\u00e9seau invit\u00e9
message.add.host=Renseignez les param\u00e8tres suivants pour ajouter une h\u00f4te
@ -1740,7 +1789,7 @@ message.add.primary.storage=Ajouter un nouveau stockage primaire \u00e0 la zone
message.add.region=Renseigner les informations suivantes pour ajouter une nouvelle r\u00e9gion.
message.add.secondary.storage=Ajouter un nouveau stockage pour la zone <b><span id\="zone_name"></span></b>
message.add.service.offering=Renseigner les informations suivantes pour ajouter une nouvelle offre de service de calcul.
message.add.system.service.offering=Ajouter les informations suivantes pour cr\u00e9er une nouvelle offre syst\u00e8me.
message.add.system.service.offering=Ajouter les informations suivantes pour cr\u00e9er une nouvelle offre de syst\u00e8me.
message.add.template=Renseignez les informations suivantes pour cr\u00e9er votre nouveau mod\u00e8le
message.add.volume=Renseignez les informations suivantes pour ajouter un nouveau volume
message.add.VPN.gateway=Confirmer l\\'ajout d\\'une passerelle VPN
@ -1857,11 +1906,15 @@ message.delete.user=\u00cates-vous s\u00fbr que vous voulez supprimer cet utilis
message.delete.VPN.connection=\u00cates-vous s\u00fbr que vous voulez supprimer la connexion VPN
message.delete.VPN.customer.gateway=\u00cates-vous s\u00fbr que vous voulez supprimer cette passerelle VPN client
message.delete.VPN.gateway=\u00cates-vous s\u00fbr que vous voulez supprimer cette passerelle VPN
message.desc.add.new.lb.sticky.rule=Ajouter nouvelle r\u00e8gle LB sticky
message.desc.advanced.zone=Pour des topologies de r\u00e9seau plus sophistiqu\u00e9es. Ce mod\u00e8le de r\u00e9seau permet plus de flexibilit\u00e9 dans la d\u00e9finition des r\u00e9seaux d\\'invit\u00e9s et propose des offres personnalis\u00e9es telles que le support de pare-feu, VPN ou d\\'\u00e9quilibrage de charge.
message.desc.basic.zone=Fournit un r\u00e9seau unique o\u00f9 chaque instance de machine virtuelle se voit attribuer une adresse IP directement depuis le r\u00e9seau. L\\'isolation des invit\u00e9s peut \u00eatre assur\u00e9 au niveau de la couche r\u00e9seau-3 tels que les groupes de s\u00e9curit\u00e9 (filtrage d\\'adresse IP source).
message.desc.cluster=Chaque pod doit contenir un ou plusieurs clusters, et le premier cluster sera ajout\u00e9 tout de suite. Un cluster est un regroupement pour h\u00f4tes. Les h\u00f4tes d\\'un cluster ont tous un mat\u00e9riel identique, ex\u00e9cutent le m\u00eame hyperviseur, sont dans le m\u00eame sous-r\u00e9seau, et acc\u00e8dent au m\u00eame stockage partag\u00e9. Chaque cluster comprend une ou plusieurs h\u00f4tes et un ou plusieurs serveurs de stockage primaire.
message.desc.created.ssh.key.pair=Bi-cl\u00e9 SSH cr\u00e9\u00e9e
message.desc.create.ssh.key.pair=Veuillez remplir les champs suivants pour cr\u00e9er ou enregistrer une bi-cl\u00e9 SSH.<br><br>(1) Si la cl\u00e9 publique est d\u00e9finie, CloudStack va enregistrer cette cl\u00e9. Vous pouvez ensuite l\\'utiliser avec sa cl\u00e9 priv\u00e9e.<br><br>(2) Si la cl\u00e9 publique n\\'est pas d\u00e9finie, CloudStack va cr\u00e9er une nouvelle bi-cl\u00e9 SSH. Dans ce cas, veuillez copier et sauvegarder la cl\u00e9 priv\u00e9e. CloudStack ne va pas la conserver.<br>
message.desc.host=Chaque cluster doit contenir au moins un h\u00f4te (machine) pour ex\u00e9ctuer des machines virtuelles invit\u00e9es, et le premier h\u00f4te sera ajout\u00e9e maintenant. Pour un h\u00f4te fonctionnant dans CloudStack, vous devez installer un logiciel hyperviseur sur l\\'h\u00f4te, attribuer une adresse IP \u00e0 l\\'h\u00f4te, et s\\'assurer que l\\'h\u00f4te est connect\u00e9 au serveur d\\'administration CloudStack.<br/><br/>Indiquer le nom de l\\'h\u00f4te ou son adresse IP, l\\'identifiant de connexion (g\u00e9n\u00e9ralement root) et le mot de passe ainsi que toutes les \u00e9tiquettes permettant de classer les h\u00f4tes.
message.desc.primary.storage=Chaque cluster doit contenir un ou plusieurs serveurs de stockage primaire, et le premier sera ajout\u00e9 tout de suite. Le stockage principal contient les volumes de disque pour les machines virtuelles s\\'ex\u00e9cutant sur les h\u00f4tes dans le cluster. Utiliser les protocoles standards pris en charge par l\\'hyperviseur sous-jacent.
message.desc.reset.ssh.key.pair=Veuillez sp\u00e9cifier une bi-cl\u00e9 SSH que vous souhaitez ajouter \u00e0 cette VM. Noter que le mot de passe root sera chang\u00e9 durant cette op\u00e9ration si l\\'option mot de passe est activ\u00e9e.
message.desc.secondary.storage=Chaque zone doit avoir au moins un serveur NFS ou un serveur de stockage secondaire, et sera ajout\u00e9 en premier tout de suite. Le stockage secondaire entrepose les mod\u00e8les de machines virtuelles, les images ISO et les images disques des volumes des machines virtuelles. Ce serveur doit \u00eatre accessible pour toutes les machines h\u00f4tes dans la zone.<br/><br/>Saisir l\\'adresse IP et le chemin d\\'export.
message.desc.zone=Une zone est la plus grande unit\u00e9 organisationnelle dans CloudStack, et correspond typiquement \u00e0 un centre de donn\u00e9es. Les zones fournissent un isolement physique et de la redondance. Une zone est constitu\u00e9e d\\'un ou plusieurs pods (dont chacun contient les h\u00f4tes et les serveurs de stockage primaire) et un serveur de stockage secondaire qui est partag\u00e9e par tous les pods dans la zone.
message.detach.disk=Voulez-vous d\u00e9tacher ce disque ?
@ -1953,6 +2006,7 @@ message.migrate.systemvm.confirm=Confirmer la migration de la VM syst\u00e8me ve
message.migrate.volume=Confirmer la migration du volume vers un autre stockage primaire.
message.network.addVM.desc=Veuillez sp\u00e9cifier le r\u00e9seau que vous souhaitez ajouter \u00e0 cette VM. Une nouvelle interface NIC sera ajout\u00e9e pour ce r\u00e9seau.
message.network.addVMNIC=Confirmer l\\'ajout d\\'une nouvelle NIC VM pour ce r\u00e9seau.
message.network.remote.access.vpn.configuration=La configuration VPN Acc\u00e9s Distant a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9e mais elle n\\'a pas pu \u00eatre appliqu\u00e9e. Veuillez v\u00e9rifier la connectivit\u00e9 des \u00e9l\u00e9ments r\u00e9seau, et r\u00e9-essayez.
message.new.user=Renseigner les informations suivantes pour ajouter un nouveau compte utilisateur
message.no.affinity.groups=Vous n\\'avez pas de groupes d\\'affinit\u00e9. Continuer vers la prochaine \u00e9tape.
message.no.host.available=Aucun h\u00f4te n\\'est disponible pour la migration
@ -1965,23 +2019,29 @@ message.number.hosts=<h2><span> \# d\\' </span> H\u00f4tes</h2>
message.number.pods=<h2><span> \# de </span> Pods</h2>
message.number.storage=<h2><span> \# de </span> Volumes de Stockage Primaire</h2>
message.number.zones=<h2><span> \# de </span> Zones</h2>
message.password.has.been.reset.to=Le mot de passe a \u00e9t\u00e9 r\u00e9-initialiser en
message.password.of.the.vm.has.been.reset.to=Le mot de passe de la VM a \u00e9t\u00e9 r\u00e9-initialis\u00e9 en
message.pending.projects.1=Vous avez des invitations projet en attente \:
message.pending.projects.2=Pour les visualiser, aller dans la section projets, puis s\u00e9lectionner invitation dans la liste d\u00e9roulante.
message.please.add.at.lease.one.traffic.range=Ajouter au moins une plage r\u00e9seau
message.please.confirm.remove.ssh.key.pair=Confirmer la suppression de cette bi-cl\u00e9 SSH
message.please.proceed=Continuer vers la prochaine \u00e9tape.
message.please.select.a.configuration.for.your.zone=S\u00e9lectionner une configuration pour la zone.
message.please.select.a.different.public.and.management.network.before.removing=S\u00e9lectionner un r\u00e9seau public et d\\'administration diff\u00e9rent avant de supprimer
message.please.select.networks=S\u00e9lectionner les r\u00e9seaux pour votre machine virtuelle.
message.please.select.ssh.key.pair.use.with.this.vm=Veuillez s\u00e9lectionner la bi-cl\u00e9 SSH que vous souhaitez utiliser avec cette VM \:
message.please.wait.while.zone.is.being.created=Patienter pendant la cr\u00e9ation de la zone, cela peut prendre du temps...
message.pod.dedication.released=Lib\u00e9ration du pod d\u00e9di\u00e9
message.portable.ip.delete.confirm=Supprimer la plage IP portable ?
message.project.invite.sent=Invitation envoy\u00e9e ; les utilisateurs seront ajout\u00e9s apr\u00e8s acceptation de l\\'invitation
message.public.traffic.in.advanced.zone=Le trafic public est g\u00e9n\u00e9r\u00e9 lorsque les machines virtuelles dans le nuage acc\u00e8dent \u00e0 Internet. Des adresses IP publiquement accessibles doivent \u00eatre pr\u00e9vues \u00e0 cet effet. Les utilisateurs peuvent utiliser l\\'interface d\\'administration de CloudStack pour acqu\u00e9rir ces adresses IP qui impl\u00e9menteront une translation d\\'adresse NAT entre le r\u00e9seau d\\'invit\u00e9 et le r\u00e9seau public.<br/><br/>Fournir au moins une plage d\\'adresses IP pour le trafic Internet.
message.public.traffic.in.basic.zone=Le trafic public est g\u00e9n\u00e9r\u00e9 lorsque les machines virtuelles dans le nuage acc\u00e8dent \u00e0 Internet ou fournissent des services \u00e0 des utilisateurs sur Internet. Des adresses IP publiquement accessibles doivent \u00eatre pr\u00e9vus \u00e0 cet effet. Quand une instance est cr\u00e9\u00e9e, une adresse IP publique depuis un ensemble d\\'adresses IP publiques sera allou\u00e9e \u00e0 l\\'instance, en plus de l\\'adresse IP de l\\'invit\u00e9. La translation d\\'adresses statique NAT 1-1 sera mises en place automatiquement entre l\\'adresse IP publique et l\\'adresse IP de l\\'invit\u00e9. Les utilisateurs peuvent \u00e9galement utiliser l\\'interface d\\'administration CloudStack pour acqu\u00e9rir des adresses IP suppl\u00e9mentaires pour ajouter une translation d\\'adresse statique NAT entre leurs instances et le r\u00e9seau d\\'adresses IP publiques.
message.question.are.you.sure.you.want.to.add=\u00cates-vous certain de vouloir ajouter
message.read.admin.guide.scaling.up=Veuillez lire le paragraphe "dynamic scaling" dans le guide d\\'administration avant d\\'op\u00e9rer un dimensionnement dynamique.
message.recover.vm=Confirmer la restauration de cette VM.
message.redirecting.region=Redirection vers r\u00e9gion...
message.reinstall.vm=NOTE\: Proc\u00e9dez avec prudence. Cela entra\u00eenera la r\u00e9-installation de la VM \u00e0 partir du mod\u00e8le; les donn\u00e9es sur le disque ROOT seront perdues. Les volumes de donn\u00e9es suppl\u00e9mentaires, le cas \u00e9ch\u00e9ant, ne seront pas touch\u00e9s.
message.removed.ssh.key.pair=Bi-cl\u00e9 SSH supprim\u00e9e
message.remove.ldap=Voulez-vous supprimer la configuration LDAP ?
message.remove.region=Voulez-vous supprimer cette r\u00e9gion depuis ce serveur d\\'administration ?
message.remove.vpc=Confirmer la suppression du VPC
@ -2009,7 +2069,7 @@ message.set.default.NIC.manual=Veuillez mettre \u00e0 jour manuellement la NIC p
message.setup.physical.network.during.zone.creation.basic=Quand vous ajoutez une zone basique, vous pouvez param\u00e9trer un seul r\u00e9seau physique, correspondant \u00e0 une carte r\u00e9seau sur l\\'hyperviseur. Ce r\u00e9seau comportera plusieurs types de trafic.<br/><br/>Vous pouvez \u00e9galement <strong>glisser et d\u00e9poser</strong> d\\'autres types de trafic sur le r\u00e9seau physique.
message.setup.physical.network.during.zone.creation=Lorsque vous ajoutez une zone avanc\u00e9e, vous avez besoin de d\u00e9finir un ou plusieurs r\u00e9seaux physiques. Chaque r\u00e9seau correspond \u00e0 une carte r\u00e9seau sur l\\'hyperviseur. Chaque r\u00e9seau physique peut supporter un ou plusieurs types de trafic, avec certaines restrictions sur la fa\u00e7on dont ils peuvent \u00eatre combin\u00e9s.<br/><br/><strong>Glisser et d\u00e9poser un ou plusieurs types de trafic</strong> sur chaque r\u00e9seau physique.
message.setup.successful=Installation du Cloud r\u00e9ussie \!
message.snapshot.schedule=Vous pouvez mettre en place les politiques de g\u00e9n\u00e9ration d\\'instantan\u00e9s en s\u00e9lectionnant les options disponibles ci-dessous et en appliquant votre politique.
message.snapshot.schedule=Vous pouvez configurer des plannings d\\'instantan\u00e9s r\u00e9currents en s\u00e9lectionnant les options disponibles ci-dessous et en appliquant votre politique pr\u00e9f\u00e9r\u00e9e.
message.specifiy.tag.key.value=Sp\u00e9cifier une cl\u00e9 et valeur de tag
message.specify.url=Renseigner l\\'URL
message.step.1.continue=S\u00e9lectionnez un mod\u00e8le ou une image ISO pour continuer
@ -2103,6 +2163,6 @@ state.Starting=D\u00e9marrage en cours
state.Stopped=Arr\u00eat\u00e9e
state.Stopping=Arr\u00eat en cours
state.Suspended=Suspendu
title.upload.volume=Charger Volume
title.upload.volume=T\u00e9l\u00e9verser Volume
ui.listView.filters.all=Tous
ui.listView.filters.mine=Les miennes

View File

@ -43,17 +43,17 @@ hint.type.part.host.tag=\u00cdrd be egy kiszolg\u00e1l\u00f3 c\u00edmke r\u00e9s
hint.type.part.storage.tag=\u00cdrd be egy t\u00e1r c\u00edmke r\u00e9sz\u00e9t
ICMP.code=ICMP k\u00f3d
ICMP.type=ICMP t\u00edpus
image.directory=Image Directory
image.directory=Image K\u00f6nyvt\u00e1r
inline=Inline
instances.actions.reboot.label=P\u00e9ld\u00e1ny \u00fajraind\u00edt\u00e1sa
label.about.app=A CloudStack-r\u0151l
label.about=N\u00e9vjegy
label.accept.project.invitation=Project-megh\u00edv\u00f3 elfogad\u00e1sa
label.account.and.security.group=Account, Security group
label.account.and.security.group=Sz\u00e1mla, biztons\u00e1gi csoport
label.account.id=Sz\u00e1mla azonos\u00edt\u00f3
label.account.lower=sz\u00e1mla
label.account.name=Sz\u00e1mla n\u00e9v
label.account.specific=Account-Specific
label.account.specific=Sz\u00e1mla-specifikus
label.accounts=Sz\u00e1ml\u00e1k
label.account=Sz\u00e1mla
label.acl=ACL
@ -301,6 +301,7 @@ label.add.isolated.guest.network=Izol\u00e1lt vend\u00e9g h\u00e1l\u00f3zat felv
label.add.isolated.network=Izol\u00e1lt h\u00e1l\u00f3zat felv\u00e9tele
label.additional.networks=Tov\u00e1bbi h\u00e1l\u00f3zatok
label.add.ldap.account=LDAP hozz\u00e1f\u00e9r\u00e9s felv\u00e9tele
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
@ -340,7 +341,7 @@ label.add.static.route=Statikus \u00fatvonal felv\u00e9tele
label.add.system.service.offering=Add System Service Offering
label.add.template=Sablon felv\u00e9tele
label.add.to.group=Felv\u00e9tel a csoportba
label.add.ucs.manager=Add UCS Manager
label.add.ucs.manager=UCS Manager felv\u00e9tele
label.add.userdata=Felhaszn\u00e1l\u00f3 adat
label.add.user=Felhaszn\u00e1l\u00f3 felv\u00e9tele
label.add.vlan=VLAN felv\u00e9tele
@ -369,7 +370,7 @@ label.affinity.group=Affin\u00edt\u00e1si csoport
label.affinity.groups=Affin\u00edt\u00e1si csoportok
label.agent.password=\u00dcgyn\u00f6k jelsz\u00f3
label.agent.port=\u00dcgyn\u00f6k port
label.agent.state=Agent State
label.agent.state=\u00dcgyn\u00f6k \u00e1llapot
label.agent.username=\u00dcgyn\u00f6k felhaszn\u00e1l\u00f3n\u00e9v
label.agree=Elfogadom
label.alert.archived=Riaszt\u00e1s archiv\u00e1lva
@ -392,7 +393,7 @@ label.archive=Archive
label.archive.events=Esem\u00e9nyek archiv\u00e1l\u00e1sa
label.assigned.vms=Hozz\u00e1rendelt VM-ek
label.assign=Hozz\u00e1rendel\u00e9s
label.assign.instance.another=Assign Instance to Another Account
label.assign.instance.another=P\u00e9ld\u00e1ny hozz\u00e1rendel\u00e9se m\u00e1sik sz\u00e1ml\u00e1hoz
label.assign.to.load.balancer=P\u00e9ld\u00e1ny hozz\u00e1rendel\u00e9se terhel\u00e9seloszt\u00f3hoz
label.assign.vms=VM-ek hozz\u00e1rendel\u00e9se
label.associated.network.id=Kapcsolt h\u00e1l\u00f3zat ID
@ -429,8 +430,8 @@ label.broadcast.domain.type=Broadcast Domain Type
label.broadcast.uri=Broadcast URI
label.broadcasturi=broadcasturi
label.broadcat.uri=Broadcast URI
label.brocade.vcs.address=Vcs Switch Address
label.brocade.vcs.details=Brocade Vcs Switch details
label.brocade.vcs.address=Vcs Switch c\u00edm
label.brocade.vcs.details=Brocade Vcs Switch r\u00e9szletek
label.by.account=By Account
label.by.alert.type=Riaszt\u00e1s t\u00edpus szerint
label.by.availability=By Availability
@ -497,7 +498,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
@ -515,10 +516,12 @@ label.created=L\u00e9trehoz\u00e1s d\u00e1tuma
label.create.nfs.secondary.staging.storage=Create NFS Secondary Staging Store
label.create.nfs.secondary.staging.store=NFS m\u00e1sodlagos t\u00e1r l\u00e9trehoz\u00e1sa
label.create.project=Projekt l\u00e9trehoz\u00e1sa
label.create.ssh.key.pair=SSH kulcsp\u00e1r l\u00e9trehoz\u00e1sa
label.create.template=Sablon l\u00e9trehoz\u00e1sa
label.create.VPN.connection=VPN kapcsolat l\u00e9trehoz\u00e1sa
label.cross.zones=Cross Zones
label.custom.disk.iops=Egyedi IOPS
label.custom.disk.offering=Egyedi t\u00e1r aj\u00e1nlat
label.custom.disk.size=Egyedi merevlemez m\u00e9ret
label.custom=Egyedi
label.daily=Napi
@ -565,7 +568,7 @@ label.delete.project=Projekt t\u00f6rl\u00e9se
label.delete.secondary.staging.store=Delete Secondary Staging Store
label.delete.SRX=SRX t\u00f6rl\u00e9se
label.delete=T\u00f6rl\u00e9s
label.delete.ucs.manager=Delete UCS Manager
label.delete.ucs.manager=UCS Manager t\u00f6rl\u00e9se
label.delete.VPN.connection=VPN kapcsolat t\u00f6rl\u00e9se
label.delete.VPN.customer.gateway=VPN \u00fcgyf\u00e9l kapu t\u00f6rl\u00e9se
label.delete.VPN.gateway=VPN kapu t\u00f6rl\u00e9se
@ -597,7 +600,7 @@ label.disable.vnmc.provider=VNMC szolg\u00e1ltat\u00f3 kikapcsol\u00e1sa
label.disable.vpc.offering=VPC aj\u00e1nlat kikapcsol\u00e1sa
label.disable.vpn=T\u00e1voli VPN hozz\u00e1f\u00e9r\u00e9s kikapcsol\u00e1sa
label.disabling.vpn.access=VPN hozz\u00e1f\u00e9r\u00e9s kikapcsol\u00e1sa
label.disassociate.profile.blade=Disassociate Profile from Blade
label.disassociate.profile.blade=Profil elv\u00e1laszt\u00e1sa a blade-t\u0151l
label.disbale.vnmc.device=VNMC eszk\u00f6sz kikapcsol\u00e1sa
label.disk.allocated=Merevlemez lefoglalva
label.disk.bytes.read.rate=Olvas\u00e1si r\u00e1ta (BPS)
@ -642,7 +645,8 @@ label.edit.affinity.group=Affin\u00edt\u00e1si csoport szerkeszt\u00e9se
label.edit.lb.rule=LB szab\u00e1ly m\u00f3dos\u00edt\u00e1sa
label.edit.network.details=H\u00e1l\u00f3zat r\u00e9szleteinek szerkeszt\u00e9se
label.edit.project.details=Projekt r\u00e9szletek szerkeszt\u00e9se
label.edit.region=Edit Region
label.edit.region=R\u00e9gi\u00f3 szerkeszt\u00e9se
label.edit.rule=Szab\u00e1ly m\u00f3dos\u00edt\u00e1sa
label.edit.secondary.ips=M\u00e1sodlagos IP c\u00edmek m\u00f3dos\u00edt\u00e1sa
label.edit=Szerkeszt\u00e9s
label.edit.tags=Cimk\u00e9k szerkeszt\u00e9se
@ -699,6 +703,7 @@ label.failed=Hiba
label.featured=Kiemelt
label.fetch.latest=Legfrissebb let\u00f6lt\u00e9se
label.filterBy=Sz\u0171r\u00e9s
label.fingerprint=\u00dajlenyomat
label.firewall=T\u0171zfal
label.first.name=Keresztn\u00e9v
label.firstname.lower=keresztn\u00e9v
@ -718,9 +723,9 @@ label.go.step.3=3. l\u00e9p\u00e9sre
label.go.step.4=4. l\u00e9p\u00e9sre
label.go.step.5=5. l\u00e9psre
label.gpu=CPU
label.group.by.account=Group by account
label.group.by.cluster=Group by cluster
label.group.by.pod=Group by pod
label.group.by.account=Sz\u00e1ml\u00e1nk\u00e9nt csoportos\u00edtva
label.group.by.cluster=F\u00fcrt\u00f6nk\u00e9nt csoportos\u00edtva
label.group.by.pod=Pod-onk\u00e9nt csoportos\u00edtva
label.group.by.zone=Z\u00f3n\u00e1nk\u00e9nt csoportos\u00edtva
label.group=Csoport
label.group.optional=Csoport (opcion\u00e1lis)
@ -731,7 +736,7 @@ label.gslb.details=GSLB r\u00e9szletek
label.gslb.domain.name=GSLB dom\u00e9n n\u00e9v
label.gslb=GSLB
label.gslb.lb.details=Terhel\u00e9seloszt\u00f3 r\u00e9szletek
label.gslb.lb.remove=Remove load balancing from this GSLB
label.gslb.lb.remove=Terhel\u00e9seloszt\u00e1s t\u00f6rl\u00e9se ebb\u0151l a GSLB-b\u0151l
label.gslb.lb.rule=Terhel\u00e9seloszt\u00f3 szab\u00e1ly
label.gslb.service=GSLB szolg\u00e1ltat\u00e1s
label.gslb.service.private.ip=GSLB szolg\u00e1ltat\u00e1s priv\u00e1t IP
@ -747,11 +752,13 @@ label.guest.network.details=Vend\u00e9g h\u00e1l\u00f3zat r\u00e9szletek
label.guest.networks=Vend\u00e9g h\u00e1l\u00f3zatok
label.guest.start.ip=Kezd\u0151 vend\u00e9g IP
label.guest.traffic=Vend\u00e9g forgalom
label.guest.traffic.vswitch.name=Guest Traffic vSwitch Name
label.guest.traffic.vswitch.type=Guest Traffic vSwitch Type
label.guest.traffic.vswitch.name=Vend\u00e9g forgalom vSwitch n\u00e9v
label.guest.traffic.vswitch.type=Vend\u00e9g forgalom vSwitch t\u00edpus
label.guest.type=Vend\u00e9g t\u00edpus
label.guest=Vend\u00e9g
label.ha.enabled=HA bekapcsolva
label.health.check.advanced.options=Halad\u00f3 be\u00e1ll\u00edt\u00e1sok\:
label.health.check.configurations.options=Beall\u00edt\u00e1sok\:
label.health.check=Ellen\u0151rz\u00e9s
label.health.check.interval.in.sec=Ellen\u0151rz\u00e9s id\u0151k\u00f6z (mp)
label.healthy.threshold=Eg\u00e9szs\u00e9ges k\u00fcsz\u00f6b
@ -779,7 +786,7 @@ label.IKE.DH=IKE DH
label.IKE.encryption=IKE titkos\u00edt\u00e1s
label.IKE.hash=IKE Hash
label.IKE.lifetime=IKE \u00e9lettartam (mp)
label.IKE.policy=IKE policy
label.IKE.policy=IKE szab\u00e1lyzat
label.info=Inf\u00f3
label.info.upper=INFO
label.ingress.rule=Ingress szab\u00e1ly
@ -893,7 +900,7 @@ label.lb.algorithm.roundrobin=K\u00f6rbe forg\u00f3
label.lb.algorithm.source=Forr\u00e1s
label.LB.isolation=Terhel\u00e9seloszt\u00f3 izol\u00e1ci\u00f3
label.ldap.configuration=LDAP konfigur\u00e1ci\u00f3
label.ldap.group.name=LDAP Group
label.ldap.group.name=LDAP csoport
label.ldap.port=LDAP port
label.level=Szint
label.linklocal.ip=Link Local IP Address
@ -902,14 +909,17 @@ label.load.balancer.type=Terhel\u00e9seloszt\u00f3 t\u00edpus
label.load.balancing.policies=Terhel\u00e9seloszt\u00f3 szab\u00e1lyok
label.load.balancing=Terhel\u00e9seloszt\u00e1s
label.loading=Bet\u00f6lt\u00e9s
label.local.file=Helyi file
label.local=Helyi
label.local.storage.enabled=Helyi t\u00e1r bekapcsol\u00e1sa felhaszn\u00e1l\u00f3i VM-ek r\u00e9sz\u00e9re
label.local.storage.enabled.system.vms=Helyi t\u00e1r bekapcsol\u00e1sa a rendszer VM sz\u00e1m\u00e1ra
label.local.storage=Helyi t\u00e1r
label.login=Bejelentkez\u00e9s
label.logout=Kijelentkez\u00e9s
label.lun=LUN
label.LUN.number=LUN \#
label.lxc.traffic.label=LXC Traffic Label
label.make.project.owner=Make account project owner
label.make.project.owner=Sz\u00e1mla projekt-tulajdonoss\u00e1 t\u00e9tele
label.make.redundant=Redund\u00e1nss\u00e1 t\u00e9tel
label.managed=Vez\u00e9relt
label.management.ips=Vez\u00e9rl\u0151 IP c\u00edm
@ -1018,7 +1028,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
@ -1044,6 +1054,7 @@ label.network.type=H\u00e1l\u00f3zat t\u00edpus
label.network.write=H\u00e1l\u00f3zat \u00edr\u00e1s
label.new.password=\u00daj jelsz\u00f3
label.new.project=\u00daj projekt
label.new.ssh.key.pair=\u00daj SSH kulcsp\u00e1r
label.new=\u00daj
label.new.vm=\u00daj VM
label.next=K\u00f6vetkez\u0151
@ -1092,13 +1103,13 @@ label.order=Sorrend
label.os.preference=OS preferencia
label.os.type=OS t\u00edpus
label.other=M\u00e1s
label.override.guest.traffic=Override Guest-Traffic
label.override.guest.traffic=Vend\u00e9g forgalom fel\u00fclb\u00edr\u00e1l\u00e1sa
label.override.public.traffic=Publikus forgalom fel\u00fclb\u00edr\u00e1l\u00e1sa
label.ovm3.cluster=Nat\u00edv f\u00fcrt\u00f6z\u00e9s
label.ovm.traffic.label=OVM traffic label
label.ovs=OVS
label.owned.public.ips=Owned Public IP Addresses
label.owner.account=Owner Account
label.owned.public.ips=Birtokolt publikus IP c\u00edmek
label.owner.account=Tulajdonos sz\u00e1mla
label.owner.domain=Owner Domain
label.palo.alto.details=Palo Alto r\u00e9szletek
label.PA.log.profile=Palo Alto log profil
@ -1115,6 +1126,7 @@ label.perfect.forward.secrecy=Perfect Forward Secrecy
label.persistent=Perzisztens
label.physical.network=Fizikai h\u00e1l\u00f3zat
label.physical.network.ID=Fizikai h\u00e1l\u00f3zat ID
label.physical.network.name=A fizikai h\u00e1l\u00f3zat neve
label.PING.CIFS.password=PING CIFS jelsz\u00f3
label.PING.CIFS.username=PING CIFS felhaszn\u00e1l\u00f3
label.PING.dir=PING Directory
@ -1145,7 +1157,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
@ -1153,6 +1165,7 @@ label.private.ip=Priv\u00e1t IP c\u00edm
label.private.ip.range=Priv\u00e1t IP tartom\u00e1ny
label.private.ips=Priv\u00e1t IP c\u00edmek
label.privatekey=PKCS\#8 priv\u00e1t kulcs
label.private.key=Priv\u00e1t kulcs
label.private.network=Priv\u00e1t h\u00e1l\u00f3zat
label.private.port=Priv\u00e1t port
label.private.zone=Priv\u00e1t z\u00f3na
@ -1171,20 +1184,21 @@ label.provider=Szolg\u00e1ltat\u00f3
label.public.interface=Public Interface
label.public.ip=Publikus IP c\u00edm
label.public.ips=Publikus IP c\u00edmek
label.public.key=Publikus kulcs
label.public.load.balancer.provider=Publikus terhel\u00e9seloszt\u00f3 szolg\u00e1ltat\u00f3
label.public.network=Publikus h\u00e1l\u00f3zat
label.public.port=Publikus port
label.public=Publikus
label.public.traffic=Publikus forgalom
label.public.traffic.vswitch.name=Publikus forgalom vSwitch n\u00e9v
label.public.traffic.vswitch.type=Public Traffic vSwitch Type
label.public.traffic.vswitch.type=Publikus forgalom vSwitch t\u00edpus
label.public.zone=Publikus z\u00f3na
label.purpose=Rendeltet\u00e9s
label.Pxe.server.type=Pxe szerver t\u00edpus
label.qos.type=QoS t\u00edpus
label.quickview=Gyorsn\u00e9zet
label.quiesce.vm=VM felf\u00fcggeszt\u00e9se
label.quiet.time.sec=Quiet Time (in sec)
label.quiet.time.sec=V\u00e1rakoz\u00e1s (mp)
label.rbd.id=Cephx felhaszn\u00e1l\u00f3
label.rbd.monitor=Ceph monitor
label.rbd.pool=Ceph pool
@ -1206,7 +1220,7 @@ label.reinstall.vm=VM \u00fajratelep\u00edt\u00e9se
label.related=Kapcsol\u00f3d\u00f3
label.release.account.lowercase=Release from account
label.release.account=Release from Account
label.release.dedicated.cluster=Release Dedicated Cluster
label.release.dedicated.cluster=Dedik\u00e1lt f\u00fcrt elenged\u00e9se
label.release.dedicated.host=Dedik\u00e1lt kiszolg\u00e1l\u00f3 elenged\u00e9se
label.release.dedicated.pod=Dedik\u00e1lt pod elenged\u00e9se
label.release.dedicated.vlan.range=Dedik\u00e1lt VLAN tartom\u00e1ny elenged\u00e9se
@ -1223,13 +1237,15 @@ label.remove.pf=Port tov\u00e1bb\u00edt\u00f3 szab\u00e1ly elt\u00e1vol\u00edt\u
label.remove.project.account=Sz\u00e1mla elt\u00e1vol\u00edt\u00e1sa a projektb\u0151l
label.remove.region=R\u00e9gi\u00f3 elt\u00e1vol\u00edt\u00e1sa
label.remove.rule=Szab\u00e1ly elt\u00e1vol\u00edt\u00e1sa
label.remove.ssh.key.pair=SSH kulcsp\u00e1r elt\u00e1vol\u00edt\u00e1sa
label.remove.static.nat.rule=Statikus NAT szab\u00e1ly elt\u00e1vol\u00edt\u00e1sa
label.remove.static.route=Remove static route
label.remove.this.physical.network=A fizikai h\u00e1l\u00f3zat elt\u00e1vol\u00edt\u00e1sa
label.remove.tier=R\u00e9teg elt\u00e1vol\u00edt\u00e1sa
label.remove.vm.from.lb=VM elt\u00e1vol\u00edt\u00e1sa terhel\u00e9seloszt\u00f3 szab\u00e1lyb\u00f3l
label.remove.vm.load.balancer=VM elt\u00e1vol\u00edt\u00e1sa a terhel\u00e9seloszt\u00f3b\u00f3l
label.remove.vmware.datacenter=VMware adatk\u00f6zpont elt\u00e1vol\u00edt\u00e1sa
label.remove.vpc.offering=Remove VPC offering
label.remove.vpc.offering=VPC aj\u00e1nlat t\u00f6rl\u00e9se
label.remove.vpc=VPC elt\u00e1vol\u00edt\u00e1sa
label.removing=T\u00f6rl\u00e9s
label.removing.user=Felhaszn\u00e1l\u00f3 elt\u00e1vol\u00edt\u00e1sa
@ -1242,13 +1258,15 @@ label.reserved.ip.range=Elk\u00fcl\u00f6n\u00edtett IP c\u00edmtartom\u00e1ny
label.reserved.system.gateway=Reserved system gateway
label.reserved.system.ip=Elk\u00fcl\u00f6n\u00edtett rendszer IP
label.reserved.system.netmask=Elk\u00fcl\u00f6n\u00edtett rendszer h\u00e1l\u00f3zati maszk
label.resetVM=Reset VM
label.reset.ssh.key.pair.on.vm=SSH kulcsp\u00e1r \u00fajrabe\u00e1ll\u00edt\u00e1sa a VM-en
label.reset.ssh.key.pair=SSH kulcsp\u00e1r \u00fajrabe\u00e1ll\u00edt\u00e1sa
label.resetVM=VM \u00fajraind\u00edt\u00e1sa
label.reset.VPN.connection=VPN kapcsolat \u00fajraind\u00edt\u00e1sa
label.resize.new.offering.id=\u00daj aj\u00e1nlat
label.resize.new.size=\u00daj m\u00e9ret (GB)
label.resize.shrink.ok=Cs\u00f6kkent\u00e9s OK
label.resource=Er\u0151forr\u00e1s
label.resource.limit.exceeded=Resource Limit Exceeded
label.resource.limit.exceeded=Er\u0151forr\u00e1s-korl\u00e1t t\u00fall\u00e9p\u00e9s
label.resource.limits=Er\u0151forr\u00e1s korl\u00e1tok
label.resource.name=Er\u0151forr\u00e1s n\u00e9v
label.resources=Er\u0151forr\u00e1sok
@ -1267,9 +1285,9 @@ label.root.disk.controller=Root disk controller
label.root.disk.offering=Root Disk Offering
label.root.disk.size=Root merevlemez m\u00e9ret
label.router.vm.scaled.up=Router VM Scaled Up
label.routing.host=Routing Host
label.routing.host=Routing kiszolg\u00e1l\u00f3
label.routing=\u00datvonalv\u00e1laszt\u00e1s
label.rule.number=Rule Number
label.rule.number=Szab\u00e1ly sz\u00e1m
label.rules=Szab\u00e1lyok
label.running.vms=Fut\u00f3 VM-ek
label.s3.access_key=Hozz\u00e1f\u00e9r\u00e9si kulcs
@ -1284,6 +1302,7 @@ label.s3.socket_timeout=Kapcsolat id\u0151t\u00fall\u00e9p\u00e9s
label.s3.use_https=HTTPS haszn\u00e1lata
label.saturday=Szombat
label.save.and.continue=Ment\u00e9s \u00e9s folytat\u00e1s
label.save.changes=V\u00e1ltoz\u00e1sok ment\u00e9se
label.save=Ment\u00e9s
label.saving.processing=Ment\u00e9s...
label.scale.up.policy=SCALE UP POLICY
@ -1294,7 +1313,7 @@ label.secondary.isolated.vlan.id=M\u00e1sodlagos izol\u00e1lt VLAN ID
label.secondary.staging.store.details=Secondary Staging Store details
label.secondary.staging.store=Secondary Staging Store
label.secondary.storage.count=Secondary Storage Pools
label.secondary.storage.details=Secondary storage details
label.secondary.storage.details=M\u00e1sodlagos t\u00e1r r\u00e9szletek
label.secondary.storage.limits=Secondary Storage limits (GiB)
label.secondary.storage=M\u00e1sodlagos t\u00e1r
label.secondary.storage.vm=Secondary storage VM
@ -1315,7 +1334,7 @@ label.select.project=V\u00e1lassz projektet\!
label.select.region=R\u00e9gi\u00f3 kiv\u00e1laszt\u00e1sa
label.select.template=Sablon kiv\u00e1laszt\u00e1sa
label.select.tier=V\u00e1lassz r\u00e9teget\!
label.select-view=Select view
label.select-view=N\u00e9zet
label.select.vm.for.static.nat=V\u00e1lassz VM-et a statikus NAT-hoz
label.sent=Elk\u00fcld\u00f6tt
label.server=Szerver
@ -1324,7 +1343,7 @@ label.service.offering=Szolg\u00e1ltat\u00e1s aj\u00e1nlat
label.services=Szolg\u00e1ltat\u00e1sok
label.service.state=Szolg\u00e1ltat\u00e1s \u00e1llapot
label.session.expired=A munkamenet lej\u00e1rt
label.set.default.NIC=Set default NIC
label.set.default.NIC=Alap\u00e9rtelmezett NIC be\u00e1ll\u00edt\u00e1sa
label.settings=Be\u00e1ll\u00edt\u00e1sok
label.setup=Be\u00e1ll\u00edt\u00e1sok
label.setup.network=H\u00e1l\u00f3zat be\u00e1ll\u00edt\u00e1sa
@ -1345,8 +1364,7 @@ label.smb.username=SMB felhaszn\u00e1l\u00f3n\u00e9v
label.snapshot.limits=Pillanatfelv\u00e9tel korl\u00e1tok
label.snapshot.name=Pillanatfelv\u00e9tel n\u00e9v
label.snapshot=Pillanatfelv\u00e9tel
label.snapshot.schedule=Ism\u00e9tl\u0151d\u0151 pillanatfelv\u00e9telek be\u00e1ll\u00edt\u00e1sa
label.snapshot.s=Pillanatfelv\u00e9tel(ek)
label.snapshot.s=Pillanatfelv\u00e9telek
label.snapshots=Pillanatfelv\u00e9telek
label.SNMP.community=SNMP Community
label.SNMP.port=SNMP Port
@ -1361,6 +1379,9 @@ label.specify.vxlan=VXLAN megad\u00e1sa
label.SR.name=SR Name-Label
label.srx.details=SRX r\u00e9szletek
label.srx=SRX
label.ssh.key.pair.details=SSH kucsp\u00e1r r\u00e9szletei
label.ssh.key.pair=SSH kulcsp\u00e1r
label.ssh.key.pairs=SSH kulcsp\u00e1rok
label.standard.us.keyboard=Amerikai (USA) szabv\u00e1nyos billenty\u0171zet
label.start.IP=Kezd\u0151 IP
label.start.lb.vm=Terhel\u00e9seloszt\u00f3 VM ind\u00edt\u00e1sa
@ -1387,7 +1408,7 @@ label.step.5=5. l\u00e9p\u00e9s
label.step.5.title=5. l\u00e9p\u00e9s\: <strong>Ellen\u0151rz\u00e9s</strong>
label.stickiness.method=Stickiness method
label.stickiness=Stickiness
label.sticky.cookie-name=Cookie name
label.sticky.cookie-name=Cookie n\u00e9v
label.sticky.domain=Dom\u00e9n
label.sticky.expire=Lej\u00e1rat
label.sticky.holdtime=Hold time
@ -1397,11 +1418,11 @@ label.sticky.mode=M\u00f3d
label.sticky.name=Sticky Name
label.sticky.nocache=Nincs gyors\u00edt\u00f3t\u00e1r
label.sticky.postonly=Post only
label.sticky.prefix=Prefix
label.sticky.prefix=El\u0151tag
label.sticky.request-learn=Request learn
label.sticky.tablesize=T\u00e1bla m\u00e9ret
label.stop.lb.vm=Terhel\u00e9seloszt\u00f3 VM le\u00e1ll\u00edt\u00e1sa
label.stopped.vms=Stopped VMs
label.stopped.vms=Le\u00e1ll\u00edtott VM-ek
label.stop=\u00c1lj
label.storage.pool=Storage Pool
label.storage.tags=T\u00e1r c\u00edmk\u00e9k
@ -1410,12 +1431,12 @@ label.storage=T\u00e1r
label.storage.type=T\u00e1r t\u00edpus
label.subdomain.access=Subdomain Access
label.submit=Elk\u00fcld\u00e9s
label.submitted.by=[Submitted by\: <span id\="submitted_by"></span>]
label.submitted.by=[Bek\u00fcld\u0151\: <span id\="submitted_by"></span>]
label.succeeded=Siker\u00fclt
label.sunday=Vas\u00e1rnap
label.super.cidr.for.guest.networks=Super CIDR for Guest Networks
label.supported.services=T\u00e1mogatott szolg\u00e1ltat\u00e1sok
label.supported.source.NAT.type=Supported Source NAT type
label.supported.source.NAT.type=T\u00e1mogatott forr\u00e1s NAT t\u00edpus
label.supportsstrechedl2subnet=Supports Streched L2 Subnet
label.suspend.project=Projekt felf\u00fcggeszt\u00e9se
label.switch.type=Switch t\u00edpus
@ -1425,12 +1446,12 @@ label.system.offering=Rendszer aj\u00e1nlat
label.system.service.offering=Rendszer szolg\u00e1ltat\u00e1s aj\u00e1nlat
label.system.vm.details=Rendszer VM r\u00e9szletek
label.system.vm=Rendszer VM
label.system.vm.scaled.up=System VM Scaled Up
label.system.vm.scaled.up=Rendszer VM felm\u00e9retezve
label.system.vms=Rendszer VM-ek
label.system.vm.type=Rendszer VM t\u00edpus
label.system.wide.capacity=Rendszer-szint\u0171 kapac\u00edt\u00e1s
label.tagged=Cimk\u00e9zve
label.tag.key=Tag Key
label.tag.key=C\u00edmke kulcs
label.tags=Cimk\u00e9k
label.tag.value=C\u00edmke \u00e9rt\u00e9k
label.target.iqn=C\u00e9l IQN
@ -1464,9 +1485,9 @@ label.total.storage=\u00d6sszes t\u00e1r
label.total.virtual.routers=Total of Virtual Routers
label.total.virtual.routers.upgrade=Total of Virtual Routers that require upgrade
label.total.vms=\u00d6sszes VM
label.traffic.label=Traffic label
label.traffic.types=Traffic Types
label.traffic.type=Traffic Type
label.traffic.label=Forgalom c\u00edmke
label.traffic.type=Forgalom t\u00edpus
label.traffic.types=Forgalom t\u00edpusok
label.tuesday=Kedd
label.type.id=T\u00edpus ID
label.type.lower=t\u00edpus
@ -1484,6 +1505,10 @@ label.updating=Updating
label.upgrade.required=Frissit\u00e9sre van sz\u00fcks\u00e9g
label.upgrade.router.newer.template=Upgrade Router to Use Newer Template
label.upload=Felt\u00f6lt\u00e9s
label.upload.from.local=Felt\u00f6lt\u00e9s
label.upload.template.from.local=Sablon felt\u00f6lt\u00e9se
label.upload.volume.from.local=K\u00f6tet felt\u00f6lt\u00e9se
label.upload.volume.from.url=K\u00f6tet felt\u00f6lt\u00e9se URL-r\u0151l
label.upload.volume=K\u00f6tet felt\u00f6lt\u00e9se
label.url=URL
label.usage.interface=Usage Interface
@ -1497,7 +1522,7 @@ label.username.lower=felhaszn\u00e1l\u00f3n\u00e9v
label.users=Felhaszn\u00e1l\u00f3k
label.user.vm=Felhaszn\u00e1l\u00f3i VM
label.use.vm.ips=VM IP c\u00edmek haszn\u00e1lata
label.use.vm.ip=Use VM IP\:
label.use.vm.ip=VM IP c\u00edm haszn\u00e1lata\:
label.value=\u00c9rt\u00e9k
label.vcdcname=vCenter DC n\u00e9v
label.vcenter.cluster=vCenter f\u00fcrt
@ -1563,7 +1588,7 @@ label.vm.state=VM \u00e1llapot
label.vm.stop=\u00c1lj
label.vms=VM-ek
label.vmware.datacenter.id=VMware adatk\u00f6zpont ID
label.vmware.datacenter.name=VMware datacenter Name
label.vmware.datacenter.name=VMware adatk\u00f6zpont n\u00e9v
label.vmware.datacenter.vcenter=VMware datacenter vcenter
label.vmware.traffic.label=VMware traffic label
label.vnet.id=VLAN/VNI ID
@ -1578,13 +1603,13 @@ label.volume.limits=K\u00f6teg korl\u00e1tok
label.volume.migrated=K\u00f6tet \u00e1tk\u00f6lt\u00f6ztetve
label.volume.name=K\u00f6tet n\u00e9v
label.volumes=K\u00f6tetek
label.vpc.distributedvpcrouter=Distributed VPC Router
label.vpc.distributedvpcrouter=Elosztott VPC Router
label.vpc.id=VPC ID
label.VPC.limits=VPC korl\u00e1tok
label.vpc.offering.details=VPC aj\u00e1nlat r\u00e9szletei
label.vpc.offering=VPC aj\u00e1nlat
label.VPC.router.details=VPC router details
label.vpc.supportsregionlevelvpc=Supports Region Level VPC
label.VPC.router.details=VPC router r\u00e9szletek
label.vpc.supportsregionlevelvpc=R\u00e9gi\u00f3-szint\u0171 VPC-t t\u00e1mogat
label.vpc.virtual.router=VPC virtu\u00e1lis router
label.vpc=VPC
label.VPN.connection=VPN kapcsolat
@ -1626,10 +1651,10 @@ label.zone.step.4.title=4. l\u00e9p\u00e9s\: <strong>IP c\u00edmtartom\u00e1ny f
label.zones=Z\u00f3n\u00e1k
label.zone.type=Z\u00f3na t\u00edpus
label.zone.wide=Eg\u00e9sz z\u00f3n\u00e1ra kiterjed\u0151
label.zoneWizard.trafficType.guest=Guest\: Traffic between end-user virtual machines
label.zoneWizard.trafficType.management=Management\: Traffic between CloudStack\\\\'s internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs
label.zoneWizard.trafficType.public=Public\: Traffic between the internet and virtual machines in the cloud.
label.zoneWizard.trafficType.storage=Storage\: Traffic between primary and secondary storage servers, such as VM templates and snapshots
label.zoneWizard.trafficType.guest=Vend\u00e9g\: forgalom v\u00e9gfelhaszn\u00e1l\u00f3i virtu\u00e1lis g\u00e9pek k\u00f6z\u00f6tt
label.zoneWizard.trafficType.management=Vez\u00e9rl\u00e9s\: forgalom a CloudStack felh\u0151 er\u0151forr\u00e1sai k\u00f6z\u00f6tt, bele\u00e9rtve azokat a komponenseket, amelyek a vez\u00e9rl\u0151 szerverrel kommunik\u00e1lnak, mint a kiszolg\u00e1l\u00f3k \u00e9s a rendszer VM-ek
label.zoneWizard.trafficType.public=Publikus\: forgalom az internet \u00e9s a felh\u0151 virtu\u00e1lis g\u00e9pei k\u00f6z\u00f6tt
label.zoneWizard.trafficType.storage=T\u00e1r\: forgalom az els\u0151dleges \u00e9s m\u00e1sodlagos t\u00e1r szerverek k\u00f6z\u00f6tt, p\u00e9ld\u00e1ul VM sablonok \u00e9s pillanatfelv\u00e9telek
label.zone=Z\u00f3na
managed.state=Managed State
message.acquire.ip.nic=Er\u0151s\u00edtsd meg, hogy \u00faj m\u00e1sodlagos IP c\u00edmet k\u00e9rsz ehhez a NIC-hez\!<br/>Megjegyz\u00e9s\: manu\u00e1lisan kell be\u00e1ll\u00edtanod a frissen beszerzett m\u00e1sodlagos IP c\u00edmet a virtu\u00e1lis g\u00e9pben.
@ -1702,7 +1727,7 @@ message.action.stop.instance=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00
message.action.stop.router=Minden ezzel a routerrel kapcsolatos szolg\u00e1ltat\u00e1s megszakad. Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani ezt a routert\!
message.action.stop.systemvm=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani ezt a rendszer VM-et\!
message.action.take.snapshot=Er\u0151s\u00edtsd meg, hogy pillanatfelv\u00e9telt k\u00e9rsz err\u0151l a k\u00f6tetr\u0151l\!
message.action.unmanage.cluster=Please confirm that you want to unmanage the cluster.
message.action.unmanage.cluster=Er\u0151s\u00edtsd meg, hogy megszak\u00edtod a f\u00fcrt vez\u00e9rl\u00e9s\u00e9t\!
message.action.vmsnapshot.delete=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod ezt a VM pillanatfelv\u00e9telt\!
message.action.vmsnapshot.revert=Revert VM snapshot
message.activate.project=Biztosan aktiv\u00e1lni szeretn\u00e9d ezt a projektet?
@ -1713,38 +1738,39 @@ message.add.domain=Please specify the subdomain you want to create under this do
message.added.new.nuage.vsp.controller=\u00daj Nicira Vsp vez\u00e9rl\u0151 felv\u00e9ve
message.added.vpc.offering=VPC aj\u00e1nlat felv\u00e9ve
message.add.firewall=T\u0171zfal felv\u00e9tele a z\u00f3n\u00e1ba
message.add.guest.network=Please confirm that you would like to add a guest network
message.add.guest.network=Er\u0151s\u00edtsd meg, hogy vend\u00e9g h\u00e1l\u00f3zatot szeretn\u00e9l felvenni\!
message.add.host=Add meg a k\u00f6vetkez\u0151 adatokat az \u00faj kiszolg\u00e1l\u00f3 felv\u00e9tel\u00e9hez
message.adding.host=Kiszolg\u00e1l\u00f3 felv\u00e9tele
message.adding.Netscaler.device=Netscaler eszk\u00f6z felv\u00e9tele
message.adding.Netscaler.provider=Netscaler szolg\u00e1ltat\u00f3 felv\u00e9tele
message.add.ip.range=Add an IP range to public network in zone
message.add.ip.range.direct.network=Add an IP range to direct network <b><span id\="directnetwork_name"></span></b> in zone <b><span id\="zone_name"></span></b>
message.add.ip.range.to.pod=<p>Add an IP range to pod\: <b><span id\="pod_name_label"></span></b></p>
message.add.ip.range=IP tartom\u00e1ny felv\u00e9tele a z\u00f3na publikus h\u00e1l\u00f3zat\u00e1hoz
message.add.ip.range.to.pod=<p>IP tartom\u00e1ny felv\u00e9tele a <b><span id\="pod_name_label"></span></b> pod-hoz</p>
message.additional.networks.desc=V\u00e1laszd ki a tov\u00e1bbi h\u00e1l\u00f3zatokat, amelyhez a p\u00e9ld\u00e1ny csatlakozni fog\!
message.add.load.balancer=Terhel\u00e9seloszt\u00f3 felv\u00e9tele a z\u00f3n\u00e1ba
message.add.load.balancer.under.ip=The load balancer rule has been added under IP\:
message.add.network=Add a new network for zone\: <b><span id\="zone_name"></span></b>
message.add.network=H\u00e1l\u00f3zat felv\u00e9tele a <b><span id\="zone_name"></span></b> z\u00f3n\u00e1ban
message.add.new.gateway.to.vpc=Please specify the information to add a new gateway to this VPC.
message.add.pod=Add a new pod for zone <b><span id\="add_pod_zone_name"></span></b>
message.add.pod.during.zone.creation=Minden z\u00f3n\u00e1nak egy vagy t\u00f6bb pod-ot kell tartalmaznia. Vegy\u00fck fel az els\u0151 pod-ot\! A pod tartalmaz kiszolg\u00e1l\u00f3kat \u00e9s els\u0151dleges t\u00e1r szervereket, amelyeket a k\u00f6vetkez\u0151 l\u00e9p\u00e9sekben vesz\u00fcnk majd fel. El\u0151sz\u00f6r \u00e1ll\u00edts be egy elk\u00fcl\u00f6n\u00edtett IP c\u00edmtartom\u00e1nyt a CloudStack bels\u0151 forgalm\u00e1nak. A c\u00edmtartom\u00e1nynak egyedinek kell lennie a felh\u0151ben.
message.add.pod=\u00daj pod felv\u00e9tele a <b><span id\="add_pod_zone_name"></span></b> z\u00f3n\u00e1ban
message.add.primary=Please specify the following parameters to add a new primary storage
message.add.primary.storage=Add a new Primary Storage for zone <b><span id\="zone_name"></span></b>, pod <b><span id\="pod_name"></span></b>
message.add.region=Please specify the required information to add a new region.
message.add.secondary.storage=Add a new storage for zone <b><span id\="zone_name"></span></b>
message.add.primary.storage=\u00daj els\u0151dleges t\u00e1r felv\u00e9tele a <b><span id\="zone_name"></span></b> z\u00f3n\u00e1ban a <b><span id\="pod_name"></span> pod-hoz</b>
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 <b><span id\="zone_name"></span> z\u00f3n\u00e1hoz</b>
message.add.service.offering=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj sz\u00e1m\u00edt\u00e1si aj\u00e1nlat felv\u00e9tel\u00e9hez
message.add.system.service.offering=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj rendszer szolg\u00e1ltat\u00e1s aj\u00e1nlat felv\u00e9tel\u00e9hez
message.add.template=Add meg a k\u00f6vetkez\u0151 adatokat \u00faj sablon l\u00e9trehoz\u00e1s\u00e1hoz
message.add.volume=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat \u00faj k\u00f6tet l\u00e9trehoz\u00e1s\u00e1hoz
message.add.VPN.gateway=Er\u0151s\u00edtsd meg, hogy \u00faj VPN \u00e1tj\u00e1r\u00f3t akarsz felvenni\!
message.admin.guide.read=For VMware-based VMs, please read the dynamic scaling section in the admin guide before scaling. Would you like to continue?\\,
message.admin.guide.read=VMware-alap\u00fa VM-ek eset\u00e9ben k\u00e9rlek olvasd el a dinakikus sk\u00e1l\u00e1z\u00e1sr\u00f3l sz\u00f3l\u00f3 fejezetet\! Szeretn\u00e9d folytatni?\\,
message.advanced.mode.desc=Akkor v\u00e1laszd ezt a h\u00e1l\u00f3zat modellt, ha szeretn\u00e9d haszn\u00e1lni a VLAN t\u00e1mogat\u00e1st. Ez a h\u00e1l\u00f3zat modell biztos\u00edtja a legnagyobb rugalmass\u00e1got \u00e9s lehet\u0151v\u00e9 teszi, hogy a rendszergazd\u00e1k olyan aj\u00e1nlatokat biztos\u00edtsanak, mint a t\u0171zfalak, VPN vagy terhel\u00e9seloszt\u00f3k valamint a direkt \u00e9s virtu\u00e1lis h\u00e1l\u00f3zatok.
message.advanced.security.group=V\u00e1laszd ezt, ha biztons\u00e1gi csoportokat akarsz haszn\u00e1lni a vend\u00e9g VM izol\u00e1ci\u00f3hoz\!
message.advanced.virtual=Choose this if you wish to use zone-wide VLANs to provide guest VM isolation.
message.after.enable.s3=S3-backed Secondary Storage configured. Note\: When you leave this page, you will not be able to re-configure S3 again.
message.after.enable.swift=Swift configured. Note\: When you leave this page, you will not be able to re-configure Swift again.
message.advanced.virtual=V\u00e1laszd ezt, ha z\u00f3na-szint\u0171 VLAN-okat szeretn\u00e9l haszn\u00e1lni a vend\u00e9g VM-ek izol\u00e1ci\u00f3j\u00e1ra\!
message.after.enable.s3=Az S3-alap\u00fa m\u00e1sodlagos t\u00e1r konfigur\u00e1ci\u00f3ja k\u00e9sz. Megjegyz\u00e9s\: miut\u00e1n elhagytad ezt az oldalt, nem tudod majd az S3-at ism\u00e9t konfigur\u00e1lni.
message.after.enable.swift=A Swift konfigur\u00e1ci\u00f3ja k\u00e9sz. Megjegyz\u00e9s\: miut\u00e1n elhagytad ezt az oldalt, nem tudod majd \u00fajrakonfigur\u00e1lni a Swift-et\!
message.alert.state.detected=Alert state detected
message.allow.vpn.access=Add meg a VPN felhaszn\u00e1l\u00f3 nev\u00e9t \u00e9s jelszav\u00e1t
message.apply.snapshot.policy=You have successfully updated your current snapshot policy.
message.apply.snapshot.policy=Sikeresen m\u00f3dos\u00edtottad a jelenlegi pillanatfelv\u00e9tel szab\u00e1lyzatodat\!
message.attach.iso.confirm=Er\u0151s\u00edtsd meg, hogy az ISO-t ehhez a virtu\u00e1lis g\u00e9phez akarod csatolni\!
message.attach.volume=T\u00f6ltsd ki a k\u00f6vetkez\u0151 adatokat a k\u00f6tet csatlakoztat\u00e1s\u00e1hoz\! Ha Windows-alap\u00fa virtu\u00e1lis g\u00e9phez csatlakoztatsz merevlemezt, akkor \u00fajra kell ind\u00edtanod a p\u00e9ld\u00e1nyt ahhoz, hogy l\u00e1sd a merevlemezt.
message.basic.mode.desc=Akkor v\u00e1laszd ezt a h\u00e1l\u00f3zati modellt, ha <b>*<u>nem</u>*</b> akarsz VLAN t\u00e1mogat\u00e1st bekapcsolni. Ezen a h\u00e1l\u00f3zaton minden p\u00e9ld\u00e1ny k\u00f6zvetlen\u00fcl a h\u00e1l\u00f3zatt\u00f3l kap IP c\u00edmet \u00e9s a biztons\u00e1gi csoportok szolg\u00e1ltatnak biztons\u00e1got \u00e9s szegreg\u00e1ci\u00f3t.
@ -1753,13 +1779,13 @@ message.change.password=V\u00e1ltoztass jelsz\u00f3t\!
message.cluster.dedicated=F\u00fcrt dedik\u00e1lva
message.cluster.dedication.released=F\u00fcrt dedik\u00e1l\u00e1s elengedve
message.configure.all.traffic.types=T\u00f6bb fizikai h\u00e1l\u00f3zatod van. Kattints a \\'Szerkeszt\u00e9s\\' gombra \u00e9s \u00e1ll\u00edts be c\u00edmk\u00e9ket minden egyes forgalom t\u00edpushoz\!
message.configure.ldap=Please confirm you would like to configure LDAP.
message.configure.ldap=Er\u0151s\u00edtsd meg, hogy szeretn\u00e9l LDAP-t konfigur\u00e1lni\!
message.configuring.guest.traffic=Vend\u00e9g forgalom konfigur\u00e1l\u00e1sa
message.configuring.physical.networks=Fizikai h\u00e1l\u00f3zatok konfigur\u00e1l\u00e1sa
message.configuring.public.traffic=Publikus forgalom konfigur\u00e1l\u00e1sa
message.configuring.storage.traffic=T\u00e1r forgalom konfigur\u00e1l\u00e1sa
message.confirm.action.force.reconnect=Er\u0151s\u00edtsd meg, hogy \u00fajrakapcsol\u00f3dni akarsz a kiszolg\u00e1l\u00f3hoz\!
message.confirm.add.vnmc.provider=Please confirm you would like to add the VNMC provider.
message.confirm.add.vnmc.provider=Er\u0151s\u00edtsd meg, hogy fel szeretn\u00e9d venni a VNMC szolg\u00e1ltat\u00f3t.
message.confirm.archive.alert=Er\u0151s\u00edtsd meg, hogy archiv\u00e1lni akarod ezt a riaszt\u00e1st\!
message.confirm.archive.event=Er\u0151s\u00edtsd meg, hogy archiv\u00e1lni szeretn\u00e9d az esem\u00e9nyt\!
message.confirm.archive.selected.alerts=Er\u0151s\u00edtsd meg, hogy le akarod archiv\u00e1lni a kiv\u00e1lasztott riaszt\u00e1sokat\!
@ -1777,7 +1803,7 @@ message.confirm.delete.baremetal.rack.configuration=Er\u0151s\u00edtsd meg, hogy
message.confirm.delete.BigSwitchBcf=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d ezt a BigSwitch BCF vez\u00e9rl\u0151t\!
message.confirm.delete.BrocadeVcs=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d a Brocade Vcs Switch-et
message.confirm.delete.ciscoASA1000v=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a CiscoASA1000v-t
message.confirm.delete.ciscovnmc.resource=Please confirm you want to delete CiscoVNMC resource
message.confirm.delete.ciscovnmc.resource=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a CiscoVNMC er\u0151forr\u00e1st\!
message.confirm.delete.F5=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d az F5-\u00f6t
message.confirm.delete.internal.lb=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod ezt a bels\u0151 LB-t\!
message.confirm.delete.NetScaler=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni szeretn\u00e9d a NetScaler-t
@ -1790,12 +1816,12 @@ message.confirm.destroy.router=Er\u0151s\u00edtsd meg, hogy el akarod puszt\u00e
message.confirm.disable.host=Er\u0151s\u00edtsd meg, hogy ki akarod kapcsolni a kiszolg\u00e1l\u00f3t
message.confirm.disable.network.offering=Biztos vagy abban, hogy ki akarod kapcsolni ezt a h\u00e1l\u00f3zat aj\u00e1nlatot?
message.confirm.disable.provider=Er\u0151s\u00edtsd meg, hogy ki akarod kapcsolni ezt a szolg\u00e1ltat\u00f3t
message.confirm.disable.vnmc.provider=Please confirm you would like to disable the VNMC provider.
message.confirm.disable.vnmc.provider=Er\u0151s\u00edtsd meg, hogy ki szeretn\u00e9d kapcsolni a VNMC szolg\u00e1ltat\u00f3t\!
message.confirm.disable.vpc.offering=Biztos vagy abban, hogy ki akarod kapcsolni ezt a VPC aj\u00e1nlatot?
message.confirm.enable.host=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni a kiszolg\u00e1l\u00f3t
message.confirm.enable.network.offering=Biztos vagy abban, hogy be akarod kapcsolni ezt a h\u00e1l\u00f3zati aj\u00e1nlatot?
message.confirm.enable.provider=Er\u0151s\u00edtsd meg, hogy be szeretn\u00e9d kapcsolni ezt a szolg\u00e1ltat\u00f3t
message.confirm.enable.vnmc.provider=Please confirm you would like to enable the VNMC provider.
message.confirm.enable.vnmc.provider=Er\u0151s\u00edtsd meg, hogy be szeretn\u00e9d kapcsolni a VNMC szolg\u00e1ltat\u00f3t\!
message.confirm.enable.vpc.offering=Biztos vagy abban, hogy be akarod kapcsolni ezt a VPC aj\u00e1nlatot?
message.confirm.join.project=Er\u0151s\u00edtsd meg, hogy csatlakozni szeretn\u00e9l a projekthez
message.confirm.migrate.volume=El akarod k\u00f6lt\u00f6ztetni ezt a k\u00f6tetet?
@ -1804,7 +1830,7 @@ message.confirm.release.dedicated.cluster=El akarod engedni ezt a dedik\u00e1lt
message.confirm.release.dedicated.host=El akarod engedni ezt a dedik\u00e1lt kiszolg\u00e1l\u00f3t?
message.confirm.release.dedicated.pod=El akarod engedni ezt a dedik\u00e1lt pod-ot?
message.confirm.release.dedicated.zone=El akarod engedni ezt a dedik\u00e1lt z\u00f3n\u00e1t?
message.confirm.release.dedicate.vlan.range=Please confirm you want to release dedicated VLAN range
message.confirm.release.dedicate.vlan.range=Er\u0151s\u00edtsd meg, hogy elengeded a dedik\u00e1lt VLAN tartom\u00e1nyt\!
message.confirm.remove.event=Biztosan t\u00f6r\u00f6lni szeretn\u00e9d ezt az esem\u00e9nyt?
message.confirm.remove.IP.range=Er\u0151s\u00edtsd meg, hogy el akarod t\u00e1vol\u00edtani ezt az IP tartom\u00e1nyt
message.confirm.remove.load.balancer=Er\u0151s\u00edtsd meg, hogy el akarod t\u00e1vol\u00edtani a VM-et a terhel\u00e9seloszt\u00f3r\u00f3l\!
@ -1819,10 +1845,10 @@ message.confirm.scale.up.system.vm=Biztosan fel akarod m\u00e9retezni a rendszer
message.confirm.shutdown.provider=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani ezt a szolg\u00e1ltat\u00f3t
message.confirm.start.lb.vm=Er\u0151s\u00edtsd meg, hogy el akarod ind\u00edtani az LB VM-et\!
message.confirm.stop.lb.vm=Er\u0151s\u00edtsd meg, hogy le akarod \u00e1ll\u00edtani az LB VM-et\!
message.confirm.upgrade.router.newer.template=Please confirm that you want to upgrade router to use newer template
message.confirm.upgrade.router.newer.template=Er\u0151s\u00edtsd meg, hogy a routert \u00faj sablonnal akarod friss\u00edteni\!
message.confirm.upgrade.routers.account.newtemplate=Er\u0151s\u00edtsd meg, hogy minden a sz\u00e1mla minden router\u00e9t friss\u00edteni akarod az \u00faj sablonnal\!
message.confirm.upgrade.routers.cluster.newtemplate=Please confirm that you want to upgrade all routers in this cluster to use newer template
message.confirm.upgrade.routers.newtemplate=Please confirm that you want to upgrade all routers in this zone to use newer template
message.confirm.upgrade.routers.newtemplate=Er\u0151s\u00edtsd meg, hogy a z\u00f3na minden router\u00e9t friss\u00edteni akarod \u00faj sablonnal\!
message.confirm.upgrade.routers.pod.newtemplate=Please confirm that you want to upgrade all routers in this pod to use newer template
message.copy.iso.confirm=Er\u0151s\u00edtsd meg, hogy az ISO-t m\u00e1solni akarod\:
message.copy.template=A <b id\="copy_template_name_text">XXX</b> sablon m\u00e1sol\u00e1sa a <b id\="copy_template_source_zone_text"></b> z\u00f3n\u00e1b\u00f3l a
@ -1852,8 +1878,11 @@ message.delete.VPN.gateway=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod
message.desc.advanced.zone=\u00d6sszetettebb h\u00e1l\u00f3zati topol\u00f3gi\u00e1khoz. Ez a h\u00e1l\u00f3zat modell biztos\u00edtja a legnagyobb rugalmass\u00e1got a vend\u00e9g h\u00e1l\u00f3zatok fel\u00e9p\u00edt\u00e9s\u00e9ben \u00e9s olyan h\u00e1l\u00f3zati aj\u00e1nlatokat tesz lehet\u0151v\u00e9, mint a t\u0171zfalak, VPN vagy terhel\u00e9seloszt\u00f3k.
message.desc.basic.zone=Adj meg egy h\u00e1l\u00f3zatot, amelyen minden egyes VM p\u00e9ld\u00e1ny k\u00f6zvetlen\u00fcl a h\u00e1l\u00f3zatt\u00f3l kap IP c\u00edmet. A vend\u00e9g rendszerek izol\u00e1ci\u00f3j\u00e1t 3. r\u00e9teg-b\u00e9li megold\u00e1sokkal, mint p\u00e9ld\u00e1ul biztons\u00e1gi csoportokkal (IP c\u00edm filterez\u00e9s) oldhat\u00f3 meg.
message.desc.cluster=Minden pod-nak tartalmaznia kell egy vagy t\u00f6bb f\u00fcrt\u00f6t \u00e9s most l\u00e9trehozzuk az els\u0151 f\u00fcrt\u00f6t. A f\u00fcrt csoportos\u00edtja a kiszolg\u00e1l\u00f3kat. Egy f\u00fcrtben tal\u00e1lhat\u00f3 kiszolg\u00e1l\u00f3k ugyanolyan hardverrel rendelkeznek, ugyanolyan hipervizort futtatnak \u00e9s ugyanahhoz az els\u0151dleges t\u00e1rol\u00f3hoz f\u00e9rnek hozz\u00e1. Minden f\u00fcrt egy vagy t\u00f6bb kiszolg\u00e1l\u00f3t \u00e9s els\u0151dleges t\u00e1r szervert tartalmaz.
message.desc.created.ssh.key.pair=Az SSH kulcsp\u00e1r l\u00e9trej\u00f6tt.
message.desc.create.ssh.key.pair=Add meg a k\u00f6vetkez\u0151 adatokat az ssh kulcs bejegyz\u00e9s\u00e9hez\!<br><br> (1) Ha publikus kulcsot adsz meg, a CloudStack elt\u00e1rolja \u00e9s a priv\u00e1t kulcsoddal haszn\u00e1lhatod. <br><br> (2) Ha nem adsz meg publikus kulcsot, a CloudStack k\u00e9sz\u00edt neked egyet. M\u00e1sold le \u00e9s mentsd el a priv\u00e1t kulcsot, a CloudStack nem tartja meg.<br>
message.desc.host=Minden f\u00fcrtnek legal\u00e1bb egy kiszolg\u00e1l\u00f3t kell tartalmaznia, amelyen a VM-ek futhatnak. Most vegy\u00fck fel az els\u0151 kiszolg\u00e1l\u00f3t\! Hogy a kiszolg\u00e1l\u00f3 m\u0171k\u00f6dhessen, hipervizor szoftvert kell r\u00e1 telep\u00edteni, IP c\u00edmet rendelni hozz\u00e1 \u00e9s biztos\u00edtani a kapcsolatot a CloudStack vez\u00e9rl\u0151 szerverrel. <br/><br/> Add meg a kiszolg\u00e1l\u00f3 DNS vagy IP c\u00edm\u00e9t, a felhaszn\u00e1l\u00f3 nev\u00e9t (\u00e1ltal\u00e1ban root) \u00e9s jelszav\u00e1t, valamint a kiszolg\u00e1l\u00f3 kategoriz\u00e1l\u00e1s\u00e1ra szolg\u00e1l\u00f3 c\u00edmk\u00e9ket.
message.desc.primary.storage=Minden f\u00fcrt tartalmaz egy vagy t\u00f6bb els\u0151dleges t\u00e1r szervert \u00e9s most l\u00e9trehozzuk az els\u0151t. Az els\u0151dleges t\u00e1r tartalmazza a f\u00fcrt kiszolg\u00e1l\u00f3in fut\u00f3 \u00f6sszes VM virtu\u00e1lis merevlemezeit.
message.desc.reset.ssh.key.pair=Adj meg egy ssh kulcsp\u00e1rt, amelyet fel szeretn\u00e9l venni ehhez a VM-hez\! A root jelsz\u00f3 megv\u00e1ltozik, ha a jelsz\u00f3 enged\u00e9lyezett.
message.desc.secondary.storage=Minden z\u00f3n\u00e1nak rendelkeznie kell legal\u00e1bb egy NFS vagy m\u00e1sodlagos t\u00e1r szervert \u00e9s most l\u00e9trehozzuk az els\u0151t. A m\u00e1sodlagos t\u00e1r t\u00e1rolja a VM sablonok, ISO f\u00e1jlok \u00e9s pillanatfelv\u00e9telek adatait. Ennek a szervernek minden kiszolg\u00e1l\u00f3 sz\u00e1m\u00e1ra hozz\u00e1f\u00e9rhet\u0151nek kell lennie.<br/><br/> Add meg az IP c\u00edmet \u00e9s az \u00fatvonalat\!
message.desc.zone=A z\u00f3na a CloudStack legnagyobb egys\u00e9ge \u00e9s \u00e1ltal\u00e1ban egy adatk\u00f6zpontnak felel meg. A z\u00f3n\u00e1k fizikai izol\u00e1ci\u00f3t adnak. Egy z\u00f3na egy vagy t\u00f6bb pod-b\u00f3l \u00e1ll (amelyek kiszolg\u00e1l\u00f3kat \u00e9s els\u0151dleges t\u00e1rol\u00f3kat tartalmaznak) \u00e9s egy m\u00e1sodlagos t\u00e1rb\u00f3l, amelyet az \u00f6sszes pod haszn\u00e1l.
message.detach.disk=Biztosan la akarod v\u00e1lasztani a merevlemezt?
@ -1878,8 +1907,8 @@ message.enable.account=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni ezt a sz
message.enabled.vpn=A t\u00e1voli hozz\u00e1f\u00e9r\u00e9s\u0171 VPN jelenleg be van kapcsolva \u00e9s hozz\u00e1f\u00e9rhet\u0151 az IP c\u00edmmel
message.enabled.vpn.ip.sec=Your IPSec pre-shared key is
message.enable.user=Er\u0151s\u00edtsd meg, hogy be akarod kapcsolni ezt a felhaszn\u00e1l\u00f3t\!
message.enable.vpn.access=VPN is currently disabled for this IP Address. Would you like to enable VPN access?
message.enable.vpn=Please confirm that you want Remote Access VPN enabled for this IP address.
message.enable.vpn.access=A VPN jelenleg ki van kapcsolva erre az IP c\u00edmre. Szeretn\u00e9d bekapcsolni a VPN hozz\u00e1f\u00e9r\u00e9st?
message.enable.vpn=Er\u0151s\u00edtsd meg, hogy be szeretn\u00e9d kapcsolni a t\u00e1voli hozz\u00e1f\u00e9r\u00e9s\u0171 VPN-t ehhez az IP c\u00edmhez\!
message.enabling.network.offering=H\u00e1l\u00f3zat aj\u00e1nlat bekapcsol\u00e1sa
message.enabling.security.group.provider=Biztons\u00e1gi csoport szolg\u00e1ltat\u00f3 bekapcsol\u00e1sa
message.enabling.vpc.offering=VPC aj\u00e1nlat bekapcsol\u00e1sa
@ -1930,21 +1959,21 @@ message.installWizard.tooltip.configureGuestTraffic.guestStartIp=The range of IP
message.installWizard.tooltip.configureGuestTraffic.name=A h\u00e1l\u00f3zat neve
message.instance.scaled.up.confirm=T\u00e9nyleg nagyobbra akarod m\u00e9retezni a p\u00e9ld\u00e1nyt?
message.instanceWizard.noTemplates=You do not have any templates available; please add a compatible template, and re-launch the instance wizard.
message.ip.address.changed=Your IP addresses may have changed; would you like to refresh the listing? Note that in this case the details pane will close.
message.iso.desc=Disc image containing data or bootable media for OS
message.join.project=You have now joined a project. Please switch to Project view to see the project.
message.launch.vm.on.private.network=Do you wish to launch your instance on your own private dedicated network?
message.ip.address.changed=Az IP c\u00edmid megv\u00e1ltzhattak, szeretn\u00e9d friss\u00edteni a list\u00e1t? Ebben az esetben a r\u00e9szletek f\u00fcl be fog z\u00e1rulni.
message.iso.desc=A merevlemez k\u00e9p, amely az ind\u00edthat\u00f3 oper\u00e1ci\u00f3s rendszert tartalmazza
message.join.project=Csatlakozt\u00e1l egy projekthez. V\u00e1lts a projekt n\u00e9zetre\!
message.launch.vm.on.private.network=Szeretn\u00e9d a saj\u00e1t dedik\u00e1lt h\u00e1l\u00f3zatodon ind\u00edtani a p\u00e9ld\u00e1nyt?
message.launch.zone=A z\u00f3na k\u00e9szen \u00e1ll az ind\u00edt\u00e1sra, folytasd a k\u00f6vetkez\u0151 l\u00e9p\u00e9ssel
message.listView.subselect.multi=(Ctrl/Cmd-kattint\u00e1s)
message.lock.account=Please confirm that you want to lock this account. By locking the account, all users for this account will no longer be able to manage their cloud resources. Existing resources can still be accessed.
message.lock.account=Er\u0151s\u00edtsd meg, hogy z\u00e1rolni akarod ezt a sz\u00e1ml\u00e1t. A sz\u00e1mla z\u00e1rol\u00e1s\u00e1val a sz\u00e1mla felhaszn\u00e1l\u00f3i nem lesznek k\u00e9pesek a felh\u0151 er\u0151forr\u00e1saikat vez\u00e9relni. A l\u00e9tez\u0151 er\u0151forr\u00e1sok tov\u00e1bbra is hozz\u00e1f\u00e9rhet\u0151ek lesznek.
message.migrate.instance.confirm=Er\u0151s\u00edtsd meg a kiszolg\u00e1l\u00f3 v\u00e1laszt\u00e1st, ahova a virtu\u00e1lis g\u00e9pet mozgatn\u00e1d\!
message.migrate.instance.to.host=Er\u0151s\u00edtsd meg, hogy m\u00e1sik kiszolg\u00e1l\u00f3ra akarod mozgatni a p\u00e9ld\u00e1nyt\!
message.migrate.instance.to.ps=Please confirm that you want to migrate instance to another primary storage.
message.migrate.router.confirm=Please confirm the host you wish to migrate the router to\:
message.migrate.systemvm.confirm=Please confirm the host you wish to migrate the system VM to\:
message.migrate.instance.to.ps=Er\u0151s\u00edtsd meg, hogy a p\u00e9ld\u00e1nyt m\u00e1sik els\u0151dleges t\u00e1rra szeretn\u00e9d mozgatni\!
message.migrate.router.confirm=Er\u0151s\u00edtsd meg, hogy a routert mozgatni szeretn\u00e9d a k\u00f6vetkez\u0151 c\u00e9lpontra\:
message.migrate.systemvm.confirm=Er\u0151s\u00edtsd meg, hogy a rendszer VM-et a k\u00f6vetkez\u0151 c\u00e9lpontra szeretn\u00e9d mozgatni\:
message.migrate.volume=Er\u0151s\u00edtsd meg, hogy m\u00e1sik els\u0151dleges t\u00e1rra akarod mozgatni a k\u00f6tetet
message.network.addVM.desc=Please specify the network that you would like to add this VM to. A new NIC will be added for this network.
message.network.addVMNIC=Please confirm that you would like to add a new VM NIC for this network.
message.network.addVMNIC=Er\u0151s\u00edtsd meg, hogy szeretn\u00e9l egy \u00faj VM NIC-et ehhez a h\u00e1l\u00f3zathoz\!
message.new.user=A k\u00f6vetkez\u0151ket adja meg \u00faj sz\u00e1mla l\u00e9trehoz\u00e1s\u00e1hoz
message.no.affinity.groups=Nincsenek affin\u00edt\u00e1si csoportaid. K\u00e9rlek folytasd a k\u00f6vetkez\u0151 l\u00e9p\u00e9ssel\!
message.no.host.available=Nincs el\u00e9rhet\u0151 kiszolg\u00e1l\u00f3 az \u00e1tk\u00f6lt\u00f6ztet\u00e9shez
@ -1957,50 +1986,53 @@ message.number.hosts=<h2>Kiszolg\u00e1l\u00f3k <span>sz\u00e1ma</span></h2>
message.number.pods=<h2>Pods-ok <span>sz\u00e1ma</span></h2>
message.number.storage=<h2>Els\u0151dleges t\u00e1r k\u00f6tetek<span>sz\u00e1ma</span></h2>
message.number.zones=<h2>Z\u00f3n\u00e1k <span>sz\u00e1ma</span></h2>
message.password.has.been.reset.to=A jelsz\u00f3 \u00fajrabe\u00e1ll\u00edtva\:
message.password.of.the.vm.has.been.reset.to=A VM jelszava \u00fajrabe\u00e1ll\u00edtva\:
message.pending.projects.1=Projekt megh\u00edv\u00f3k v\u00e1rnak r\u00e1d\:
message.pending.projects.2=A megtekint\u00e9shez menj a projektek szekci\u00f3hoz \u00e9s v\u00e1laszd a megh\u00edv\u00f3kat a leg\u00f6rd\u00fcl\u0151 men\u00fcb\u0151l\!
message.please.add.at.lease.one.traffic.range=Please add at least one traffic range.
message.please.proceed=Please proceed to the next step.
message.please.select.a.configuration.for.your.zone=Please select a configuration for your zone.
message.please.add.at.lease.one.traffic.range=Adj meg legal\u00e1bb egy forgalom tartom\u00e1nyt\!
message.please.confirm.remove.ssh.key.pair=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod ezt az SSH kulcsp\u00e1rt\!
message.please.proceed=Menj tov\u00e1bb a k\u00f6vetkez\u0151 l\u00e9p\u00e9shez\!
message.please.select.a.configuration.for.your.zone=V\u00e1lassz konfigur\u00e1ci\u00f3t a z\u00f3n\u00e1dnak\!
message.please.select.a.different.public.and.management.network.before.removing=Please select a different public and management network before removing
message.please.select.networks=Please select networks for your virtual machine.
message.please.wait.while.zone.is.being.created=Please wait while your zone is being created; this may take a while...
message.please.select.networks=V\u00e1lassz h\u00e1l\u00f3zatokat a virtu\u00e1lis g\u00e9pedhez\!
message.please.wait.while.zone.is.being.created=K\u00e9rlek v\u00e1rj, am\u00edg a z\u00f3n\u00e1d l\u00e9trej\u00f6n. Ez eltarthat egy ideig...
message.pod.dedication.released=Pod dedik\u00e1ci\u00f3 elengedve
message.portable.ip.delete.confirm=Please confirm you want to delete Portable IP Range
message.project.invite.sent=Invite sent to user; they will be added to the project once they accept the invitation
message.portable.ip.delete.confirm=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a hordozhat\u00f3 IP tartom\u00e1nyt\!
message.project.invite.sent=Megh\u00edv\u00f3 elk\u00fcldve a felhaszn\u00e1l\u00f3nak. A felhaszn\u00e1l\u00f3 akkor ker\u00fcl a projektbe, amikor elfogadja a megh\u00edv\u00f3t.
message.public.traffic.in.advanced.zone=Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.<br/><br/>Provide at least one range of IP addresses for internet traffic.
message.public.traffic.in.basic.zone=Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire additional IPs to implement static NAT between their instances and the public IP.
message.read.admin.guide.scaling.up=Please read the dynamic scaling section in the admin guide before scaling up.
message.public.traffic.in.basic.zone=A publikus forgalom akkor keletkezik, amikor a felh\u0151 virtu\u00e1lis g\u00e9pei hozz\u00e1f\u00e9rnek az internethez vagy az interneten szolg\u00e1ltat\u00e1sokat biztos\u00edtanak. Publikusan el\u00e9rhet\u0151 IP c\u00edmeket kell erre a c\u00e9lra elk\u00fcl\u00f6n\u00edteni. Amikor l\u00e9trej\u00f6n egy p\u00e9ld\u00e1ny, ezekb\u0151l a publikus IP c\u00edmekb\u0151l kap egyet a p\u00e9ld\u00e1ny a vend\u00e9g IP c\u00edmen k\u00edv\u00fcl. Statikus 1-1 NAT lesz be\u00e1ll\u0167va a publikus \u00e9s a vend\u00e9g IP c\u00edmek k\u00f6z\u00f6tt. V\u00e9gfelhaszn\u00e1l\u00f3k haszn\u00e1lhatj\u00e1k a CloudStack fel\u00fcletet is \u00faj IP c\u00edmek beszerz\u00e9s\u00e9hez \u00e9s statikus NAT be\u00e1ll\u00edt\u00e1s\u00e1hoz.
message.read.admin.guide.scaling.up=Olvasd el az adminisztr\u00e1torok \u00fatmutat\u00f3j\u00e1ban a dinamikus m\u00e9retez\u00e9sre vonatkoz\u00f3 r\u00e9szt miel\u0151tt folytatod\!
message.recover.vm=Er\u0151s\u00edtsd meg, hogy helyre akarod \u00e1ll\u00edtani a VM-et.
message.redirecting.region=Redirecting to region...
message.redirecting.region=\u00c1tir\u00e1ny\u00edt\u00e1s r\u00e9gi\u00f3ba...
message.reinstall.vm=Figyelmeztet\u00e9s\: \u00d3vatosan\! Ha folytatod, a VM \u00fajra lesz telep\u00edtve a sablon alapj\u00e1n, a f\u0151 lemez\u00e9n tal\u00e1lhat\u00f3 adat elveszik. Amennyiben vannak tov\u00e1bbi merevlemezek, azok \u00e9rintetlenek maradnak.
message.remove.ldap=Biztosan t\u00f6r\u00f6lni akarod az LDAP konfigur\u00e1ci\u00f3t?
message.remove.region=Are you sure you want to remove this region from this management server?
message.remove.vpc=Please confirm that you want to remove the VPC
message.remove.vpn.access=Please confirm that you want to remove VPN access from the following user.
message.remove.region=Biztosan t\u00f6r\u00f6lni akarod ezt a r\u00e9gi\u00f3t err\u0151l a vez\u00e9rl\u0151 szerverr\u0151l?
message.remove.vpc=Er\u0151s\u00edtsd meg, hoy el akarod t\u00e1vol\u00edtani ezt a VPC-t\!
message.remove.vpn.access=Er\u0151s\u00edtsd meg, hogy t\u00f6r\u00f6lni akarod a k\u00f6vetkez\u0151 felhaszn\u00e1l\u00f3 VPN hozz\u00e1f\u00e9r\u00e9s\u00e9t\!
message.reset.password.warning.notPasswordEnabled=A p\u00e9ld\u00e1ny sablonja jelsz\u00f3 bekapcsol\u00e1sa n\u00e9lk\u00fcl lett l\u00e9trehozva
message.reset.password.warning.notStopped=A p\u00e9ld\u00e1nyt le kell \u00e1ll\u00edtanod, miel\u0151tt megpr\u00f3b\u00e1ln\u00e1l jelsz\u00f3t be\u00e1ll\u00edtani.
message.reset.VPN.connection=Please confirm that you want to reset VPN connection
message.restart.mgmt.server=Please restart your management server(s) for your new settings to take effect.
message.reset.VPN.connection=Er\u0151s\u00edtsd meg, hogy alaphelyzetbe akarod \u00e1ll\u00edtani a VPN kapcsolatot\!
message.restart.mgmt.server=Ind\u00edtsd \u00fajra a vez\u00e9rl\u0151 szervert (szervereket) ahhoz, hogy az \u00faj be\u00e1ll\u00edt\u00e1s hat\u00e1lyba l\u00e9pjen\!
message.restart.mgmt.usage.server=Please restart your management server(s) and usage server(s) for your new settings to take effect.
message.restart.network=All services provided by this network will be interrupted. Please confirm that you want to restart this network.
message.restart.vpc=Please confirm that you want to restart the VPC
message.restart.network=Megszakad minden szolg\u00e1ltat\u00e1s, amit a h\u00e1l\u00f3zat biztos\u00edt. Er\u0151s\u00edtsd meg, hogy \u00fajra akarod ind\u00edtani a h\u00e1l\u00f3zatot\!
message.restart.vpc=Er\u0151s\u00edtsd meg, hogy \u00fajra akarod ind\u00edtani a VPC-t\!
message.restart.vpc.remark=Er\u0151s\u00edtsd meg, hogy \u00fajra akarod ind\u00edtani a VPC-t\! <p><small><i>Megjegyz\u00e9s\: egy nem redund\u00e1ns VPC redund\u00e1nss\u00e1 t\u00e9tele takar\u00edt\u00e1st tesz sz\u00fcks\u00e9gess\u00e9. A h\u00e1l\u00f3zatok nem lesznek el\u00e9rhet\u0151ek egy p\u00e1r percig.</i>.</small></p>
message.restoreVM=Helyre akarod \u00e1ll\u00edtani a VM-et?
message.security.group.usage=(A <strong>Ctrl-kattint\u00e1s</strong> haszn\u00e1lat\u00e1val tudod az \u00f6sszes alkalmazhat\u00f3 biztons\u00e1gi csoportot kiv\u00e1lasztani)
message.select.affinity.groups=V\u00e1lasszd ki azokat az affinit\u00e1si csoportokat, amelyekhez a VM tartozzon\:
message.select.a.zone=A zone typically corresponds to a single datacenter. Multiple zones help make the cloud more reliable by providing physical isolation and redundancy.
message.select.instance=Please select an instance.
message.select.iso=Please select an ISO for your new virtual instance.
message.select.item=Please select an item.
message.select.a.zone=Egy z\u00f3na tipikusan egy adatk\u00f6zpontnak felel meg. T\u00f6bb z\u00f3na seg\u00edthet a felh\u0151t megb\u00edzhat\u00f3bb\u00e1 tenni fizikai izol\u00e1ci\u00f3val \u00e9s redundanci\u00e1val.
message.select.instance=V\u00e1lassz egy p\u00e9ld\u00e1nyt\!
message.select.iso=V\u00e1lassz egy ISO-t az \u00faj virtu\u00e1lis p\u00e9ld\u00e1nynak\!
message.select.item=V\u00e1lassz egy elemet\!
message.select.security.groups=V\u00e1lassz biztons\u00e1gi csoportokat az \u00faj VM-hez\!
message.select.template=Please select a template for your new virtual instance.
message.select.template=V\u00e1lassz egy sablont az \u00faj virtu\u00e1lis p\u00e9ld\u00e1nynak\!
message.select.tier=V\u00e1lassz egy r\u00e9teget\!
message.set.default.NIC.manual=Please manually update the default NIC on the VM now.
message.set.default.NIC=Please confirm that you would like to make this NIC the default for this VM.
message.setup.physical.network.during.zone.creation.basic=When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.<br/><br/>You may also <strong>drag and drop</strong> other traffic types onto the physical network.
message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.<br/><br/><strong>Drag and drop one or more traffic types</strong> onto each physical network.
message.set.default.NIC=Er\u0151s\u00edtsd meg, hogy alap\u00e9rtelmezett\u00e9 szeretn\u00e9d tenni ezt a NIC-et a VM-ben\!
message.set.default.NIC.manual=Most manu\u00e1lisan m\u00f3dos\u00edtsd apal\u00e9rtelmezett NIC-et a VM-ben\!
message.setup.physical.network.during.zone.creation.basic=Alap z\u00f3na l\u00e9trehoz\u00e1sakor egy fizikai h\u00e1l\u00f3zatot hozhatsz l\u00e9tre amely hiperv\u00edzor h\u00e1l\u00f3zati k\u00e1rty\u00e1j\u00e1nak felel meg.<br/><br/>M\u00e1s forgalom-t\u00edpusokat is <strong>r\u00e1h\u00fazhatsz</strong> a fizikai h\u00e1l\u00f3zatra.
message.setup.physical.network.during.zone.creation=Halad\u00f3 z\u00f3na l\u00e9trehoz\u00e1sakor egy vagy t\u00f6bb fizikai h\u00e1l\u00f3zatot kell konfigur\u00e1lnod. Minden h\u00e1l\u00f3zat egy h\u00e1l\u00f3zati k\u00e1rty\u00e1nak felel meg a hiperv\u00edzoron. Minden fizikai h\u00e1l\u00f3zat egy vagy t\u00f6bb t\u00edpus\u00fa forgalmat bonyol\u00edthat, bizonyos megk\u00f6t\u00e9sekkel arra, hogy azokat hogyan lehet kombin\u00e1lni. <br/><br/><strong>H\u00fazz egy vagy t\u00f6bb forgalom t\u00edpust</strong> minden fizikai h\u00e1l\u00f3zatra.
message.setup.successful=A felh\u0151 be\u00e1ll\u00edt\u00e1sa sikeres\!
message.snapshot.schedule=Az ism\u00e9tl\u0151d\u0151 pillanatfelv\u00e9teleket az al\u00e1bbi opci\u00f3k kiv\u00e1laszt\u00e1s\u00e1val tudod be\u00e1ll\u00edtani
message.specifiy.tag.key.value=Please specify a tag key and value
message.specify.url=K\u00e9rlek adj meg egy URL-t\!
message.step.1.continue=V\u00e1lassz egy sablont vagy ISO-t a folytat\u00e1shoz
@ -2013,7 +2045,7 @@ message.storage.traffic=Traffic between CloudStack\\'s internal resources, inclu
message.suspend.project=Biztosan fel akarod f\u00fcggeszteni ezt a projektet?
message.systems.vms.ready=A rendszer VM-ek elk\u00e9sz\u00fcltek.
message.template.copying=A sablon m\u00e1sol\u00e1s alatt \u00e1ll.
message.template.desc=OS image that can be used to boot VMs
message.template.desc=Oper\u00e1ci\u00f3s rendszer k\u00e9p, amelyet a virtu\u00e1lis g\u00e9pek el tudnak ind\u00edtani
message.tier.required=A r\u00e9teg k\u00f6telez\u0151.
message.tooltip.dns.1=Name of a DNS server for use by VMs in the zone. The public IP addresses for the zone must have a route to this server.
message.tooltip.dns.2=A second DNS server name for use by VMs in the zone. The public IP addresses for the zone must have a route to this server.
@ -2025,7 +2057,7 @@ message.tooltip.reserved.system.gateway=Az \u00e1tj\u00e1r\u00f3 a pod kiszolg\u
message.tooltip.reserved.system.netmask=The network prefix that defines the pod subnet. Uses CIDR notation.
message.tooltip.zone.name=N\u00e9v a z\u00f3n\u00e1nak.
message.update.os.preference=Hat\u00e1rozz meg egy OS preferenci\u00e1t a kiszolg\u00e1l\u00f3hoz. Minden p\u00e9ld\u00e1ny, aminek hasonl\u00f3 preferenci\u00e1i vannak el\u0151sz\u00f6r ezen a kiszolg\u00e1l\u00f3n indul el.
message.update.resource.count=Please confirm that you want to update resource counts for this account.
message.update.resource.count=Er\u0151s\u00edtsd meg, hogy m\u00f3dos\u00edtani akarod a sz\u00e1mla er\u0151forr\u00e1sainak sz\u00e1m\u00e1t\!
message.update.ssl.failed=Nem siker\u00fclt az SSL tan\u00fas\u00edtv\u00e1nyt m\u00f3dos\u00edtani
message.update.ssl=Please submit a new X.509 compliant SSL certificate chain to be updated to each console proxy and secondary storage virtual instance\:
message.update.ssl.succeeded=Az SSL tan\u00fas\u00edtv\u00e1nyok m\u00f3dos\u00edt\u00e1sa sikeres
@ -2038,7 +2070,7 @@ message.validate.email.address=Adj meg egy \u00e9rv\u00e9nyes e-mail c\u00edmet\
message.validate.equalto=\u00cdrd be ugyanazt az \u00e9rt\u00e9ket \u00fajra\!
message.validate.fieldrequired=Ez a mez\u0151 k\u00f6telez\u0151.
message.validate.fixfield=Jav\u00edtsd ki ez a mez\u0151t\!
message.validate.instance.name=Instance name can not be longer than 63 characters. Only ASCII letters a~z, A~Z, digits 0~9, hyphen are allowed. Must start with a letter and end with a letter or a digit.
message.validate.instance.name=A p\u00e9ld\u00e1ny neve nem lehet hosszabb 63 karaktern\u00e9l. Csak ASCII karakterek a-z \u00e9s A-Z, sz\u00e1mok 0-9 \u00e9s k\u00f6t\u0151jelek enged\u00e9lyezettek. Bet\u0171vel kell kezd\u0151dnie \u00e9s bet\u0171vel vagy sz\u00e1mmal kell v\u00e9gz\u0151dnie[
message.validate.invalid.characters=\u00c9rv\u00e9nytelen karakter; k\u00e9rlek jav\u00edtsd\!
message.validate.max=Adj meg egy \u00e9rt\u00e9ket, ami legfeljebb {0}\!
message.validate.maxlength=Legfeljebb {0} karaktert adj meg\!
@ -2050,8 +2082,8 @@ message.validate.URL=Adj meg egy \u00e9rv\u00e9nyes URL-t\!
message.virtual.network.desc=A dedicated virtualized network for your account. The broadcast domain is contained within a VLAN and all public network access is routed out by a virtual router.
message.vm.create.template.confirm=Sablon l\u00e9trehoz\u00e1sa automatikusan \u00fajraind\u00edtja a VM-et\!
message.vm.review.launch=Please review the following information and confirm that your virtual instance is correct before launch.
message.vnmc.available.list=VNMC is not available from provider list.
message.vnmc.not.available.list=VNMC is not available from provider list.
message.vnmc.available.list=VNMC nem el\u00e9rhet\u0151 a szolg\u00e1ltat\u00f3 list\u00e1r\u00f3l.
message.vnmc.not.available.list=VNMC nem el\u00e9rhet\u0151 a szolg\u00e1ltat\u00f3 list\u00e1r\u00f3l.
message.volume.create.template.confirm=Please confirm that you wish to create a template for this disk volume. Creation of the template can range from several minutes to longer depending on the size of the volume.
message.waiting.for.builtin.templates.to.load=V\u00e1rakoz\u00e1s a be\u00e9p\u00edtett sablonk bet\u00f6lt\u00e9s\u00e9re...
message.XSTools61plus.update.failed=Failed to update Original XS Version is 6.1\\+ field. Error\:
@ -2059,11 +2091,11 @@ message.you.must.have.at.least.one.physical.network=Sz\u00fcks\u00e9ged van lega
message.your.cloudstack.is.ready=A CloudStack k\u00e9szen \u00e1ll\!
message.Zone.creation.complete=A z\u00f3na l\u00e9trehoz\u00e1sa befejez\u0151d\u00f6tt
message.zone.creation.complete.would.you.like.to.enable.this.zone=A z\u00f3na l\u00e9trehoz\u00e1sa befejez\u0151d\u00f6tt. Szeretn\u00e9d bekapcsolni a z\u00f3n\u00e1t?
message.zone.no.network.selection=The zone you selected does not have any choices for network selection.
message.zone.step.1.desc=Please select a network model for your zone.
message.zone.step.2.desc=Please enter the following info to add a new zone
message.zone.step.3.desc=Please enter the following info to add a new pod
message.zoneWizard.enable.local.storage=WARNING\: If you enable local storage for this zone, you must do the following, depending on where you would like your system VMs to launch\:<br/><br/>1. If system VMs need to be launched in shared primary storage, shared primary storage needs to be added to the zone after creation. You must also start the zone in a disabled state.<br/><br/>2. If system VMs need to be launched in local primary storage, system.vm.use.local.storage needs to be set to true before you enable the zone.<br/><br/><br/>Would you like to continue?
message.zone.no.network.selection=A kiv\u00e1lasztott z\u00f3n\u00e1ban nem v\u00e1laszthat\u00f3 ki h\u00e1l\u00f3zat.
message.zone.step.1.desc=V\u00e1lassz h\u00e1l\u00f3zat modellt a z\u00f3n\u00e1dnak\!
message.zone.step.2.desc=Add meg a k\u00f6vetkez\u0151 inform\u00e1ci\u00f3kat az \u00faj z\u00f3n\u00e1hoz
message.zone.step.3.desc=Add meg a k\u00f6vetkez\u0151 inform\u00e1ci\u00f3kat az \u00faj pod-hoz
message.zoneWizard.enable.local.storage=Figyelmeztet\u00e9s\: Ha bekapcsolod a helyi t\u00e1rat ebben a z\u00f3n\u00e1ban, akkor a k\u00f6vetkez\u0151t kell tenned att\u00f3l f\u00fcgg\u0151en, hogy hol szeretn\u00e9d elind\u00edtani a rendszer VM-eket\: <br/><br/>1. Ha a rendszer VM-eknek osztott els\u0151dleges t\u00e1ron kell futnia, akkor egy elosztott t\u00e1rat kell l\u00e9trehoznod a z\u00f3na l\u00e9trej\u00f6tte ut\u00e1n. A z\u00f3n\u00e1t kikapcsolt \u00e1llapotban kell elind\u00edtanod.<br/><br/>2. Ha a rendszer VM-eknek helyi els\u0151dleges t\u00e1ron kell futni, akkor a system.vm.use.local.storage \u00e9rt\u00e9k\u00e9t true-ra kell \u00e1ll\u00edtani miel\u00f6tt a z\u00f3n\u00e1t bekapcsolod.<br/><br/><br/>Szeretn\u00e9d folytatni?
messgae.validate.min=Adj meg egy \u00e9rt\u00e9ket, ami legal\u00e1bb {0}\!
mode=M\u00f3d
network.rate=H\u00e1l\u00f3zati r\u00e1ta

View File

@ -542,8 +542,6 @@ 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.setup=Installazione
label.setup.network=Configurazione Rete
label.setup.zone=Configurazione Zona
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

File diff suppressed because it is too large Load Diff

View File

@ -930,10 +930,8 @@ label.service.capabilities=\uc11c\ube44\uc2a4 \uae30\ub2a5
label.service.offering=\uc11c\ube44\uc2a4\uc81c\uacf5
label.service.state=\uc11c\ube44\uc2a4
label.session.expired=\uc138\uc158 \uc720\ud6a8\uae30\uac04\uc774 \ub04a\uc5b4\uc9d0
label.setup.network=\ub124\ud2b8\uc6cc\ud06c \uc124\uc815
label.setup=\uc124\uc815
label.set.up.zone.type=Zone \uc885\ub958 \uc124\uc815
label.setup.zone=Zone \uc124\uc815
label.SharedMountPoint=SharedMountPoint
label.shared=\uacf5\uc720
label.show.ingress.rule=\uc218\uc2e0 \uaddc\uce59 \ud45c\uc2dc
@ -943,7 +941,7 @@ label.size=\ud06c\uae30
label.skip.guide=CloudStack \uc0ac\uc6a9 \uac00\uc774\ub4dc \uac74\ub108\ub6f0\uae30
label.snapshot.limits=\uc2a4\ub0c5\uc0f7 \uc81c\ud55c
label.snapshot.name=\uc2a4\ub0c5\uc0f7 \uc774\ub984
label.snapshot.schedule=\uc815\uae30 \uc2a4\ub0c5\uc0f7 \uc124\uc815
label.snapshot.s=\uc2a4\ub0c5\uc0f7
label.snapshots=\uc2a4\ub0c5\uc0f7
label.snapshot=\uc2a4\ub0c5\uc0f7
label.source.nat=\uc804\uc1a1\uc6d0 NAT
@ -1397,7 +1395,6 @@ message.select.template=\uc0c8\ub85c\uc6b4 \uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4
message.setup.physical.network.during.zone.creation.basic=\uae30\ubcf8 Zone\uc744 \ucd94\uac00\ud560 \ub54c\ub294 \ud558\uc774\ud37c \ubc14\uc774\uc800\uc0c1\uc758 \ub124\ud2b8\uc6cd\uce74\ub4dc(NIC)\uc5d0 \ub300\uc751\ud558\ub294 \ud55c \uac00\uc9c0 \ubb3c\ub9ac \ub124\ud2b8\uc6cc\ud06c\ub97c \uc124\uc815 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub124\ud2b8\uc6cc\ud06c\ub294 \uba87 \uac00\uc9c0 \uc885\ub958\uc758 \ud2b8\ub798\ud53d\uc744 \uc804\uc1a1\ud569\ub2c8\ub2e4. <br/><br/>\ubb3c\ub9ac \ub124\ud2b8\uc6cc\ud06c\uc5d0 \ub2e4\ub978 \ud2b8\ub798\ud53d\uc758 \uc885\ub958\ub97c<strong>\ub4dc\ub798\uadf8 \uc564 \ub4dc\ub86d</strong> \ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
message.setup.physical.network.during.zone.creation=\ud655\uc7a5 Zone\uc744 \ucd94\uac00\ud560 \ub54c\ub294 \ud55c \uac1c \uc774\uc0c1 \ubb3c\ub9ac \ub124\ud2b8\uc6cc\ud06c\ub97c \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uac01 \ub124\ud2b8\uc6cc\ud06c\ub294 \ud558\uc774\ud37c \ubc14\uc774\uc800\uc0c1 \ud55c \uac00\uc9c0 \ub124\ud2b8\uc6cc\ud06c \uce74\ub4dc(NIC)\uc5d0 \ub300\uc751\ud569\ub2c8\ub2e4. \uac01 \ubb3c\ub9ac \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c\ub294 \uad6c\uc131\uc5d0 \uc81c\ud55c\uc774 \uc788\uc73c\ub098, \ud55c \uac00\uc9c0 \uc885\ub958 \uc774\uc0c1 \ud2b8\ub798\ud53d\uc744 \ud1b5\uc2e0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <br/><br/>\uac01 \ubb3c\ub9ac \ub124\ud2b8\uc6cc\ud06c\uc5d0 \ub300\ud574\uc11c<strong>\ud2b8\ub798\ud53d \uc885\ub958\ub97c \ub4dc\ub798\uadf8 \uc564 \ub4dc\ub86d</strong>\ud574 \uc8fc\uc2ed\uc2dc\uc624.
message.setup.successful=\ud074\ub77c\uc6b0\ub4dc\uac00 \uc124\uc815 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
message.snapshot.schedule=\ub2e4\uc74c \uc635\uc158\uc5d0\uc11c \uc120\ud0dd\ud55c \uc815\ucc45 \uae30\ubcf8 \uc124\uc815\uc744 \uc801\uc6a9\ud558\uc5ec \uc815\uae30 \uc2a4\ub0c5\uc0f7 \uc2a4\ucf00\uc904\uc744 \uc124\uc815 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
message.specify.url=URL\ub97c \uc9c0\uc815\ud574 \uc8fc\uc2ed\uc2dc\uc624
message.step.1.continue=\uc2e4\ud589\ud558\ub824\uba74 \ud15c\ud50c\ub9bf \ub610\ub294 ISO\ub97c \uc120\ud0dd\ud574 \uc8fc\uc2ed\uc2dc\uc624.
message.step.1.desc=\uc0c8\ub85c\uc6b4 \uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4\uc6a9 \ud15c\ud50c\ub9bf\uc744 \uc120\ud0dd\ud574 \uc8fc\uc2ed\uc2dc\uc624.ISO\ub97c \uc124\uce58 \ud560 \uc218 \uc788\ub294 \uacf5\ubc31 \ud15c\ud50c\ub9bf\uc744 \uc120\ud0dd\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.

File diff suppressed because it is too large Load Diff

View File

@ -1203,8 +1203,6 @@ label.session.expired=Sessie Verlopen
label.set.default.NIC=Stel standaard NIC in
label.settings=Instellingen
label.setup=Instellen
label.setup.network=Stel Netwerk in
label.setup.zone=Stel Zone in
label.set.up.zone.type=Stel zone type in
label.shared=Gedeeld
label.SharedMountPoint=SharedMountPoint
@ -1219,8 +1217,8 @@ label.smb.password=SMB Wachtwoord
label.smb.username=SMB Gebruikersnaam
label.snapshot.limits=Snapshot Limieten
label.snapshot.name=Snapshot Naam
label.snapshot.schedule=Stel herhalende Snapshot in
label.snapshot=Snapshot
label.snapshot.s=Snapshots
label.snapshots=Snapshots
label.SNMP.community=SNMP Community
label.SNMP.port=SNMP Poort
@ -1577,7 +1575,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.
@ -1817,7 +1815,6 @@ message.set.default.NIC.manual=U dient nu manueel de netwerk interface op de VM
message.setup.physical.network.during.zone.creation.basic=Wanneer u een basis zone toevoegt bevat deze een fysiek netwerk welke correspondeert met de netwerkkaart op de hypervisor. Op dit netwerk zullen meerdere verkeerstypen gebruikt worden. <br/><br/> U kunt via drag & drop andere verkeerstypen toevoegen aan het fysieke netwerk.
message.setup.physical.network.during.zone.creation=Wanneer u een geavanceerde zone toevoegt, dient u meerdere fysiek netwerken te configureren. Een netwerk correspondeert met een netwerkkaart op de hypervisor. Elk fysiek netwerk kan een of meerdere traffic types bevatten, met bepaald geldende restricties hoe deze gecombineerd mogen worden. Drag & Drop een of meerdere verkeerstypen op het fysieke netwerk.
message.setup.successful=Cloud installatie is succesvol verlopen\!
message.snapshot.schedule=U kunt terugkerende snapshots schema&\#39s aanmaken door een van de beschikbare opties hieronder te selecteren.
message.specifiy.tag.key.value=Gelieve een tag sleutel en waarde te specificeren
message.specify.url=Gelieve een URL te specificeren
message.step.1.continue=Gelieve een template of ISO te selecteren om door te gaan

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -29,6 +29,7 @@ getSPMetadata=15
listIdps=15
authorizeSamlSso=7
listSamlAuthorization=7
listAndSwitchSamlAccount=15
### Account commands
createAccount=7
@ -82,8 +83,8 @@ scaleVirtualMachine=15
assignVirtualMachine=7
migrateVirtualMachine=1
migrateVirtualMachineWithVolume=1
recoverVirtualMachine=7
expungeVirtualMachine=7
recoverVirtualMachine=15
expungeVirtualMachine=15
getVirtualMachineUserData=15
#### snapshot commands
@ -770,6 +771,7 @@ deleteLdapConfiguration=3
listLdapUsers=3
ldapCreateAccount=3
importLdapUsers=3
linkDomainToLdap=3
#### juniper-contrail commands

View File

@ -1,64 +0,0 @@
//
// 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.agent.api;
public class AttachVolumeAnswer extends Answer {
private Long deviceId;
private String vdiUuid;
private String chainInfo;
public AttachVolumeAnswer(AttachVolumeCommand cmd, String result) {
super(cmd, false, result);
this.deviceId = null;
}
public AttachVolumeAnswer(AttachVolumeCommand cmd, Long deviceId) {
super(cmd);
this.deviceId = deviceId;
this.vdiUuid = "";
}
public AttachVolumeAnswer(AttachVolumeCommand cmd, Long deviceId, String vdiUuid) {
super(cmd);
this.deviceId = deviceId;
this.vdiUuid = vdiUuid;
}
public AttachVolumeAnswer(AttachVolumeCommand cmd) {
super(cmd);
this.deviceId = null;
}
public Long getDeviceId() {
return deviceId;
}
public String getVdiUuid() {
return vdiUuid;
}
public void setChainInfo(String chainInfo) {
this.chainInfo = chainInfo;
}
public String getChainInfo() {
return chainInfo;
}
}

View File

@ -1,216 +0,0 @@
//
// 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.agent.api;
import com.cloud.storage.Storage.StoragePoolType;
public class AttachVolumeCommand extends Command {
private boolean attach;
private boolean _managed;
private String vmName;
private StoragePoolType pooltype;
private String volumePath;
private String volumeName;
private Long volumeSize;
private Long deviceId;
private String chainInfo;
private String poolUuid;
private String _storageHost;
private int _storagePort;
private String _iScsiName;
private String _chapInitiatorUsername;
private String _chapInitiatorPassword;
private String _chapTargetUsername;
private String _chapTargetPassword;
private Long bytesReadRate;
private Long bytesWriteRate;
private Long iopsReadRate;
private Long iopsWriteRate;
private String cacheMode;
protected AttachVolumeCommand() {
}
public AttachVolumeCommand(boolean attach, boolean managed, String vmName, StoragePoolType pooltype, String volumePath, String volumeName, Long volumeSize,
Long deviceId, String chainInfo) {
this.attach = attach;
this._managed = managed;
this.vmName = vmName;
this.pooltype = pooltype;
this.volumePath = volumePath;
this.volumeName = volumeName;
this.volumeSize = volumeSize;
this.deviceId = deviceId;
this.chainInfo = chainInfo;
}
@Override
public boolean executeInSequence() {
return true;
}
public boolean getAttach() {
return attach;
}
public String getVmName() {
return vmName;
}
public StoragePoolType getPooltype() {
return pooltype;
}
public void setPooltype(StoragePoolType pooltype) {
this.pooltype = pooltype;
}
public String getVolumePath() {
return volumePath;
}
public String getVolumeName() {
return volumeName;
}
public Long getVolumeSize() {
return volumeSize;
}
public Long getDeviceId() {
return deviceId;
}
public void setDeviceId(Long deviceId) {
this.deviceId = deviceId;
}
public String getPoolUuid() {
return poolUuid;
}
public void setPoolUuid(String poolUuid) {
this.poolUuid = poolUuid;
}
public String getChainInfo() {
return chainInfo;
}
public void setStorageHost(String storageHost) {
_storageHost = storageHost;
}
public String getStorageHost() {
return _storageHost;
}
public void setStoragePort(int storagePort) {
_storagePort = storagePort;
}
public int getStoragePort() {
return _storagePort;
}
public boolean isManaged() {
return _managed;
}
public void set_iScsiName(String iScsiName) {
this._iScsiName = iScsiName;
}
public String get_iScsiName() {
return _iScsiName;
}
public void setChapInitiatorUsername(String chapInitiatorUsername) {
_chapInitiatorUsername = chapInitiatorUsername;
}
public String getChapInitiatorUsername() {
return _chapInitiatorUsername;
}
public void setChapInitiatorPassword(String chapInitiatorPassword) {
_chapInitiatorPassword = chapInitiatorPassword;
}
public String getChapInitiatorPassword() {
return _chapInitiatorPassword;
}
public void setChapTargetUsername(String chapTargetUsername) {
_chapTargetUsername = chapTargetUsername;
}
public String getChapTargetUsername() {
return _chapTargetUsername;
}
public void setChapTargetPassword(String chapTargetPassword) {
_chapTargetPassword = chapTargetPassword;
}
public String getChapTargetPassword() {
return _chapTargetPassword;
}
public void setBytesReadRate(Long bytesReadRate) {
this.bytesReadRate = bytesReadRate;
}
public Long getBytesReadRate() {
return bytesReadRate;
}
public void setBytesWriteRate(Long bytesWriteRate) {
this.bytesWriteRate = bytesWriteRate;
}
public Long getBytesWriteRate() {
return bytesWriteRate;
}
public void setIopsReadRate(Long iopsReadRate) {
this.iopsReadRate = iopsReadRate;
}
public Long getIopsReadRate() {
return iopsReadRate;
}
public void setIopsWriteRate(Long iopsWriteRate) {
this.iopsWriteRate = iopsWriteRate;
}
public Long getIopsWriteRate() {
return iopsWriteRate;
}
public void setCacheMode(String cacheMode) {
this.cacheMode = cacheMode;
}
public String getCacheMode() {
return cacheMode;
}
}

View File

@ -25,8 +25,14 @@ import org.apache.cloudstack.storage.to.VolumeObjectTO;
public class CreateVMSnapshotCommand extends VMSnapshotBaseCommand {
private String vmUuid;
public CreateVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType) {
public CreateVMSnapshotCommand(String vmName, String vmUuid, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType) {
super(vmName, snapshot, volumeTOs, guestOSType);
this.vmUuid = vmUuid;
}
public String getVmUuid() {
return vmUuid;
}
}

View File

@ -26,6 +26,7 @@ import com.cloud.storage.template.TemplateProp;
public class ModifyStoragePoolAnswer extends Answer {
StoragePoolInfo poolInfo;
Map<String, TemplateProp> templateInfo;
String localDatastoreName = null;
protected ModifyStoragePoolAnswer() {
}
@ -55,4 +56,12 @@ public class ModifyStoragePoolAnswer extends Answer {
this.templateInfo = templateInfo;
}
public String getLocalDatastoreName() {
return localDatastoreName;
}
public void setLocalDatastoreName(String localDatastoreName) {
this.localDatastoreName = localDatastoreName;
}
}

View File

@ -25,16 +25,18 @@ import org.apache.cloudstack.storage.to.VolumeObjectTO;
public class RevertToVMSnapshotCommand extends VMSnapshotBaseCommand {
public RevertToVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType) {
public RevertToVMSnapshotCommand(String vmName, String vmUuid, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType) {
super(vmName, snapshot, volumeTOs, guestOSType);
this.vmUuid = vmUuid;
}
public RevertToVMSnapshotCommand(String vmName, VMSnapshotTO snapshot, List<VolumeObjectTO> volumeTOs, String guestOSType, boolean reloadVm) {
this(vmName, snapshot, volumeTOs, guestOSType);
public RevertToVMSnapshotCommand(String vmName, String vmUuid, VMSnapshotTO snapshot, List<VolumeObjectTO> 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 class RevertToVMSnapshotCommand extends VMSnapshotBaseCommand {
public void setReloadVm(boolean reloadVm) {
this.reloadVm = reloadVm;
}
public String getVmUuid() {
return vmUuid;
}
}

View File

@ -24,6 +24,7 @@ import com.cloud.agent.api.Command;
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 class MigrateVolumeAnswer extends Answer {
public String getVolumePath() {
return volumePath;
}
public void setVolumeChainInfo(String chainInfo) {
this.volumeChain = chainInfo;
}
public String getVolumeChainInfo() {
return volumeChain;
}
}

View File

@ -123,6 +123,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T
try {
fic.close();
} catch (IOException e) {
s_logger.info("[ignore] error while closing file input channel.");
}
}
@ -130,6 +131,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T
try {
foc.close();
} catch (IOException e) {
s_logger.info("[ignore] error while closing file output channel.");
}
}
@ -137,6 +139,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T
try {
fis.close();
} catch (IOException e) {
s_logger.info("[ignore] error while closing file input stream.");
}
}
@ -144,6 +147,7 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T
try {
fos.close();
} catch (IOException e) {
s_logger.info("[ignore] error while closing file output stream.");
}
}
@ -155,16 +159,4 @@ public class LocalTemplateDownloader extends TemplateDownloaderBase implements T
}
}
}
public static void main(String[] args) {
String url = "file:///home/ahuang/Download/E3921_P5N7A-VM_manual.zip";
TemplateDownloader td = new LocalTemplateDownloader(null, url, "/tmp/mysql", TemplateDownloader.DEFAULT_MAX_TEMPLATE_SIZE_IN_BYTES, null);
long bytes = td.download(true, null);
if (bytes > 0) {
System.out.println("Downloaded (" + bytes + " bytes)" + " in " + td.getDownloadTime() / 1000 + " secs");
} else {
System.out.println("Failed download");
}
}
}

View File

@ -91,7 +91,8 @@ public class OVAProcessor extends AdapterBase implements Processor {
long size = getTemplateVirtualSize(file.getParent(), file.getName());
return size;
} catch (Exception e) {
s_logger.info("[ignored]"
+ "failed to get virtual template size for ova: " + e.getLocalizedMessage());
}
return file.length();
}

View File

@ -27,6 +27,8 @@ import java.io.IOException;
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.ProgressEvent;
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.S3Utils;
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 S3TO s3to;
private long remoteSize = 0;
private long downloadTime = 0;
private long totalBytes;
private long maxTemplateSizeInByte;
private boolean resume = false;
private boolean inited = true;
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;
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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
Pair<String, Integer> 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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
@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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
});
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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
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 class S3TemplateDownloader extends ManagedContextRunnable implements Temp
return 0;
}
return (int)(100.0 * totalBytes / remoteSize);
return (int) (100.0 * totalBytes / remoteSize);
}
@Override
@ -417,4 +449,11 @@ public class S3TemplateDownloader extends ManagedContextRunnable implements Temp
return resourceType;
}
}
public long getTotalBytes() {
return totalBytes;
}
public String getFileExtension() {
return fileExtension;
}
}

View File

@ -94,17 +94,10 @@ public class TemplateLocation {
}
public boolean load() throws IOException {
FileInputStream strm = null;
try {
strm = new FileInputStream(_file);
try (FileInputStream strm = new FileInputStream(_file);) {
_props.load(strm);
} finally {
if (strm != null) {
try {
strm.close();
} catch (IOException e) {
}
}
} catch (IOException e) {
s_logger.warn("Unable to load the template properties", e);
}
for (ImageFormat format : ImageFormat.values()) {
@ -142,20 +135,11 @@ public class TemplateLocation {
_props.setProperty(info.format.getFileExtension() + ".size", Long.toString(info.size));
_props.setProperty(info.format.getFileExtension() + ".virtualsize", Long.toString(info.virtualSize));
}
FileOutputStream strm = null;
try {
strm = new FileOutputStream(_file);
try (FileOutputStream strm = new FileOutputStream(_file);) {
_props.store(strm, "");
} catch (IOException e) {
s_logger.warn("Unable to save the template properties ", e);
return false;
} finally {
if (strm != null) {
try {
strm.close();
} catch (IOException e) {
}
}
}
return true;
}

View File

@ -77,7 +77,8 @@ public class VmdkProcessor extends AdapterBase implements Processor {
long size = getTemplateVirtualSize(file.getParent(), file.getName());
return size;
} catch (Exception e) {
s_logger.info("[ignored]"
+ "failed to get template virtual size for vmdk: " + e.getLocalizedMessage());
}
return file.length();
}
@ -86,9 +87,10 @@ public class VmdkProcessor extends AdapterBase implements Processor {
long virtualSize = 0;
String templateFileFullPath = templatePath.endsWith(File.separator) ? templatePath : templatePath + File.separator;
templateFileFullPath += templateName.endsWith(ImageFormat.VMDK.getFileExtension()) ? templateName : templateName + "." + ImageFormat.VMDK.getFileExtension();
try {
FileReader fileReader = new FileReader(templateFileFullPath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
try (
FileReader fileReader = new FileReader(templateFileFullPath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
) {
Pattern regex = Pattern.compile("(RW|RDONLY|NOACCESS) (\\d+) (FLAT|SPARSE|ZERO|VMFS|VMFSSPARSE|VMFSDRM|VMFSRAW)");
String line = null;
while((line = bufferedReader.readLine()) != null) {
@ -99,7 +101,6 @@ public class VmdkProcessor extends AdapterBase implements Processor {
break;
}
}
bufferedReader.close();
} catch(FileNotFoundException ex) {
String msg = "Unable to open file '" + templateFileFullPath + "' " + ex.toString();
s_logger.error(msg);

View File

@ -0,0 +1,49 @@
/*
* 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.storage.command;
import org.apache.cloudstack.storage.to.SnapshotObjectTO;
public final class RevertSnapshotCommand extends StorageSubSystemCommand {
private SnapshotObjectTO data;
private boolean _executeInSequence = false;
public RevertSnapshotCommand(SnapshotObjectTO data) {
super();
this.data = data;
}
protected RevertSnapshotCommand() {
super();
}
public SnapshotObjectTO getData() {
return this.data;
}
@Override
public void setExecuteInSequence(final boolean executeInSequence) {
_executeInSequence = executeInSequence;
}
@Override
public boolean executeInSequence() {
return _executeInSequence;
}
}

View File

@ -0,0 +1,41 @@
//
// 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.storage.template;
import static org.junit.Assert.fail;
import java.io.File;
import org.junit.Test;
public class LocalTemplateDownloaderTest {
@Test
public void localTemplateDownloaderTest() {
String url = "file://" + new File("pom.xml").getAbsolutePath();
TemplateDownloader td = new LocalTemplateDownloader(null, url, "/tmp", TemplateDownloader.DEFAULT_MAX_TEMPLATE_SIZE_IN_BYTES, null);
long bytes = td.download(true, null);
if (!(bytes > 0)) {
fail("Failed download");
}
}
}

View File

@ -1,66 +0,0 @@
//
// 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.agent.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.cloud.agent.api.AttachVolumeAnswer;
import com.cloud.agent.api.AttachVolumeCommand;
import com.cloud.storage.Storage.StoragePoolType;
public class AttachVolumeAnswerTest {
AttachVolumeCommand avc = new AttachVolumeCommand(true, false, "vmname", StoragePoolType.Filesystem, "vPath", "vName", 1073741824L, 123456789L, "chainInfo");
AttachVolumeAnswer ava1 = new AttachVolumeAnswer(avc);
String results = "";
AttachVolumeAnswer ava2 = new AttachVolumeAnswer(avc, results);
Long deviceId = 10L;
AttachVolumeAnswer ava3 = new AttachVolumeAnswer(avc, deviceId);
@Test
public void testGetDeviceId() {
Long dId = ava1.getDeviceId();
assertTrue(dId == null);
dId = ava2.getDeviceId();
assertTrue(dId == null);
dId = ava3.getDeviceId();
Long expected = 10L;
assertEquals(expected, dId);
}
@Test
public void testGetChainInfo() {
ava1.setChainInfo("chainInfo");
String chainInfo = ava1.getChainInfo();
assertTrue(chainInfo.equals("chainInfo"));
ava2.setChainInfo("chainInfo");
chainInfo = ava2.getChainInfo();
assertTrue(chainInfo.equals("chainInfo"));
ava3.setChainInfo("chainInfo");
chainInfo = ava3.getChainInfo();
assertTrue(chainInfo.equals("chainInfo"));
}
}

View File

@ -1,115 +0,0 @@
//
// 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.agent.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.cloud.agent.api.AttachVolumeCommand;
import com.cloud.storage.Storage.StoragePoolType;
public class AttachVolumeCommandTest {
AttachVolumeCommand avc = new AttachVolumeCommand(true, false, "vmname", StoragePoolType.Filesystem, "vPath", "vName", 1073741824L, 123456789L, "chainInfo");
@Test
public void testExecuteInSequence() {
boolean b = avc.executeInSequence();
assertTrue(b);
}
@Test
public void testGetAttach() {
boolean b = avc.getAttach();
assertTrue(b);
}
@Test
public void testGetVmName() {
String vmName = avc.getVmName();
assertTrue(vmName.equals("vmname"));
}
@Test
public void testGetPooltype() {
StoragePoolType pt = avc.getPooltype();
assertTrue(pt.equals(StoragePoolType.Filesystem));
avc.setPooltype(StoragePoolType.NetworkFilesystem);
pt = avc.getPooltype();
assertTrue(pt.equals(StoragePoolType.NetworkFilesystem));
avc.setPooltype(StoragePoolType.IscsiLUN);
pt = avc.getPooltype();
assertTrue(pt.equals(StoragePoolType.IscsiLUN));
avc.setPooltype(StoragePoolType.Iscsi);
pt = avc.getPooltype();
assertTrue(pt.equals(StoragePoolType.Iscsi));
}
@Test
public void testGetVolumePath() {
String vPath = avc.getVolumePath();
assertTrue(vPath.equals("vPath"));
}
@Test
public void testGetVolumeName() {
String vName = avc.getVolumeName();
assertTrue(vName.equals("vName"));
}
@Test
public void testGetDeviceId() {
Long dId = avc.getDeviceId();
Long expected = 123456789L;
assertEquals(expected, dId);
avc.setDeviceId(5L);
dId = avc.getDeviceId();
expected = 5L;
assertEquals(expected, dId);
avc.setDeviceId(0L);
dId = avc.getDeviceId();
expected = 0L;
assertEquals(expected, dId);
avc.setDeviceId(-5L);
dId = avc.getDeviceId();
expected = -5L;
assertEquals(expected, dId);
}
@Test
public void testGetPoolUuid() {
avc.setPoolUuid("420fa39c-4ef1-a83c-fd93-46dc1ff515ae");
String pUuid = avc.getPoolUuid();
assertTrue(pUuid.equals("420fa39c-4ef1-a83c-fd93-46dc1ff515ae"));
}
@Test
public void testGetWait() {
String cInfo = avc.getChainInfo();
assertTrue(cInfo.equals("chainInfo"));
}
}

2
debian/changelog vendored
View File

@ -6,7 +6,7 @@ cloudstack (4.6.0-SNAPSHOT) unstable; urgency=low
[ Rafael da Fonseca ]
* Switch to dpkg-source 3.0 (native) format
-- Rafael da Fonseca <rsafonseca@gmail.com> Fri, 22 May 2015 16:03:55 +0200
-- the Apache CloudStack project <dev@cloudstack.apache.org> Thu, 18 Jun 2015 11:17:09 +0200
cloudstack (4.5.0-snapshot) unstable; urgency=low

View File

@ -24,6 +24,7 @@
/usr/share/cloudstack-common/scripts/vm/systemvm/*
/usr/share/cloudstack-common/scripts/vm/pingtest.sh
/usr/share/cloudstack-common/scripts/vm/hypervisor/kvm/*
/usr/share/cloudstack-common/scripts/vm/hypervisor/update_host_passwd.sh
/usr/share/cloudstack-common/scripts/vm/hypervisor/versions.sh
/usr/share/cloudstack-common/scripts/vm/hypervisor/xenserver/*
/usr/share/cloudstack-common/lib/*

10
debian/control vendored
View File

@ -2,8 +2,8 @@ Source: cloudstack
Section: libs
Priority: extra
Maintainer: Wido den Hollander <wido@widodh.nl>
Build-Depends: debhelper (>= 7), openjdk-7-jdk | openjdk-8-jdk, genisoimage,
python-mysqldb, maven (>= 3) | maven3, python (>= 2.6.6-3~)
Build-Depends: debhelper (>= 9), openjdk-8-jdk | openjdk-7-jdk, genisoimage,
python-mysqldb, maven (>= 3) | maven3, python (>= 2.7)
Standards-Version: 3.8.1
Homepage: http://www.cloudstack.org/
@ -15,14 +15,14 @@ Description: A common package which contains files which are shared by several C
Package: cloudstack-management
Architecture: all
Depends: ${misc:Depends}, ${python:Depends}, cloudstack-common (= ${source:Version}), tomcat6 | tomcat7 | tomcat8, sudo, jsvc, python-mysqldb, libmysql-java, python-paramiko, augeas-tools, mysql-client, adduser
Depends: ${misc:Depends}, ${python:Depends}, cloudstack-common (= ${source:Version}), tomcat8 | tomcat7 | tomcat6, sudo, jsvc, python-mysqldb, libmysql-java, augeas-tools, mysql-client, adduser
Conflicts: cloud-server, cloud-client, cloud-client-ui
Description: CloudStack server library
The CloudStack management server
Package: cloudstack-agent
Architecture: all
Depends: ${misc:Depends}, ${python:Depends}, openjdk-7-jre-headless | openjdk-8-jre-headless, cloudstack-common (= ${source:Version}), lsb-base (>= 3.2), libcommons-daemon-java, openssh-client, libvirt0, qemu-system-x86 | qemu-kvm, libvirt-bin, uuid-runtime, rsync, iproute, perl-modules, ebtables, vlan, wget, jsvc, ipset, python-libvirt, ethtool, iptables
Depends: ${misc:Depends}, ${python:Depends}, openjdk-8-jre-headless | openjdk-7-jre-headless, cloudstack-common (= ${source:Version}), lsb-base (>= 4.0), libcommons-daemon-java, openssh-client, qemu-kvm (>= 1.0), libvirt-bin (>= 0.9.8), uuid-runtime, iproute, ebtables, vlan, jsvc, ipset, python-libvirt, ethtool, iptables
Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts
Description: CloudStack agent
The CloudStack agent is in charge of managing shared computing resources in
@ -31,7 +31,7 @@ Description: CloudStack agent
Package: cloudstack-usage
Architecture: all
Depends: ${misc:Depends}, openjdk-7-jre-headless | openjdk-8-jre-headless, cloudstack-common (= ${source:Version}), jsvc, libmysql-java
Depends: ${misc:Depends}, openjdk-8-jre-headless | openjdk-7-jre-headless, cloudstack-common (= ${source:Version}), jsvc, libmysql-java
Description: CloudStack usage monitor
The CloudStack usage monitor provides usage accounting across the entire cloud for
cloud operators to charge based on usage parameters.

2
debian/rules vendored
View File

@ -1,6 +1,6 @@
#!/usr/bin/make -f
# -*- makefile -*-
VERSION := $(shell mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v "\[")
VERSION := $(shell grep '^ <version>' pom.xml| cut -d'>' -f2 |cut -d'<' -f1)
PACKAGE = $(shell dh_listpackages|head -n 1|cut -d '-' -f 1)
SYSCONFDIR = "/etc"
DESTDIR = "debian/tmp"

View File

@ -18,8 +18,10 @@
*/
package org.apache.cloudstack.engine.subsystem.api.storage;
import com.cloud.exception.StorageConflictException;
public interface HypervisorHostListener {
boolean hostConnect(long hostId, long poolId);
boolean hostConnect(long hostId, long poolId) throws StorageConflictException;
boolean hostDisconnected(long hostId, long poolId);
}

View File

@ -48,5 +48,5 @@ public interface PrimaryDataStoreDriver extends DataStoreDriver {
public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CreateCmdResult> callback);
public void revertSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CommandResult> callback);
public void revertSnapshot(SnapshotInfo snapshotOnImageStore, SnapshotInfo snapshotOnPrimaryStore, AsyncCompletionCallback<CommandResult> callback);
}

View File

@ -24,7 +24,7 @@ public interface SnapshotService {
boolean deleteSnapshot(SnapshotInfo snapshot);
boolean revertSnapshot(Long snapshotId);
boolean revertSnapshot(SnapshotInfo snapshot);
void syncVolumeSnapshotsToRegionStore(long volumeId, DataStore store);

View File

@ -29,7 +29,7 @@ public interface SnapshotStrategy {
boolean deleteSnapshot(Long snapshotId);
boolean revertSnapshot(Long snapshotId);
boolean revertSnapshot(SnapshotInfo snapshot);
StrategyPriority canHandle(Snapshot snapshot, SnapshotOperation op);
}

View File

@ -103,6 +103,8 @@ import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.exception.HypervisorVersionChangedException;
import com.cloud.utils.exception.NioConnectionException;
import com.cloud.utils.exception.TaskExecutionException;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.utils.fsm.StateMachine2;
import com.cloud.utils.nio.HandlerFactory;
@ -593,7 +595,11 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
startDirectlyConnectedHosts();
if (_connection != null) {
_connection.start();
try {
_connection.start();
} catch (final NioConnectionException e) {
s_logger.error("Error when connecting to the NioServer!", e);
}
}
_monitorExecutor.scheduleWithFixedDelay(new MonitorTask(), PingInterval.value(), PingInterval.value(), TimeUnit.SECONDS);
@ -824,25 +830,30 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
/* OK, we are going to the bad status, let's see what happened */
s_logger.info("Investigating why host " + hostId + " has disconnected with event " + event);
final Status determinedState = investigate(attache);
Status determinedState = investigate(attache);
// if state cannot be determined do nothing and bail out
if (determinedState == null) {
s_logger.warn("Agent state cannot be determined, do nothing");
return false;
if ((System.currentTimeMillis() >> 10) - host.getLastPinged() > AlertWait.value()) {
s_logger.warn("Agent " + hostId + " state cannot be determined for more than " + AlertWait + "(" + AlertWait.value() + ") seconds, will go to Alert state");
determinedState = Status.Alert;
} else {
s_logger.warn("Agent " + hostId + " state cannot be determined, do nothing");
return false;
}
}
final Status currentStatus = host.getStatus();
s_logger.info("The state determined is " + determinedState);
s_logger.info("The agent " + hostId + " state determined is " + determinedState);
if (determinedState == Status.Down) {
s_logger.error("Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs");
final String message = "Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs";
s_logger.error(message);
if (host.getType() != Host.Type.SecondaryStorage && host.getType() != Host.Type.ConsoleProxy) {
_alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host disconnected, " + host.getId(),
"Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs");
_alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host down, " + host.getId(), message);
}
event = Status.Event.HostDown;
} else if (determinedState == Status.Up) {
/* Got ping response from host, bring it back*/
/* Got ping response from host, bring it back */
s_logger.info("Agent is determined to be up and running");
agentStatusTransitTo(host, Status.Event.Ping, _nodeId);
return false;
@ -850,10 +861,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
s_logger.warn("Agent is disconnected but the host is still up: " + host.getId() + "-" + host.getName());
if (currentStatus == Status.Disconnected) {
if ((System.currentTimeMillis() >> 10) - host.getLastPinged() > AlertWait.value()) {
s_logger.warn("Host " + host.getId() + " has been disconnected pass the time it should be disconnected.");
s_logger.warn("Host " + host.getId() + " has been disconnected past the wait time it should be disconnected.");
event = Status.Event.WaitedTooLong;
} else {
s_logger.debug("Host has been determined to be disconnected but it hasn't passed the wait time yet.");
s_logger.debug("Host " + host.getId() + " has been determined to be disconnected but it hasn't passed the wait time yet.");
return false;
}
} else if (currentStatus == Status.Up) {
@ -862,7 +873,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName();
if (host.getType() != Host.Type.SecondaryStorage && host.getType() != Host.Type.ConsoleProxy) {
_alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host disconnected, " + hostDesc,
"If the agent for host [" + hostDesc + "] is not restarted within " + AlertWait + " seconds, HA will begin on the VMs");
"If the agent for host [" + hostDesc + "] is not restarted within " + AlertWait + " seconds, host will go to Alert state");
}
event = Status.Event.AgentDisconnected;
}
@ -872,11 +883,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
final HostPodVO podVO = _podDao.findById(host.getPodId());
final String hostDesc = "name: " + host.getName() + " (id:" + host.getId() + "), availability zone: " + dcVO.getName() + ", pod: " + podVO.getName();
_alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, host.getDataCenterId(), host.getPodId(), "Host in ALERT state, " + hostDesc,
"In availability zone " + host.getDataCenterId() + ", " + host.getId() + "-" + host.getName()
+ " disconnect due to event " + event + ", ms can't determine the host status" );
"In availability zone " + host.getDataCenterId() + ", host is in alert state: " + host.getId() + "-" + host.getName());
}
} else {
s_logger.debug("The next status of Agent " + host.getId() + " is not Alert, no need to investigate what happened");
s_logger.debug("The next status of agent " + host.getId() + " is not Alert, no need to investigate what happened");
}
}
handleDisconnectWithoutInvestigation(attache, event, true, true);
@ -1295,7 +1305,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
}
@Override
protected void doTask(final Task task) throws Exception {
protected void doTask(final Task task) throws TaskExecutionException {
final TransactionLegacy txn = TransactionLegacy.open(TransactionLegacy.CLOUD_DB);
try {
final Type type = task.getType();
@ -1311,6 +1321,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
} catch (final UnsupportedVersionException e) {
s_logger.warn(e.getMessage());
// upgradeAgent(task.getLink(), data, e.getReason());
} catch (final ClassNotFoundException e) {
final String message = String.format("Exception occured when executing taks! Error '%s'", e.getMessage());
s_logger.error(message);
throw new TaskExecutionException(message, e);
}
} else if (type == Task.Type.CONNECT) {
} else if (type == Task.Type.DISCONNECT) {

View File

@ -4297,7 +4297,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
workJob = new VmWorkJobVO(context.getContextId());
workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
workJob.setCmd(VmWorkMigrate.class.getName());
workJob.setCmd(VmWorkMigrateWithStorage.class.getName());
workJob.setAccountId(account.getId());
workJob.setUserId(user.getId());
@ -4340,7 +4340,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
workJob = new VmWorkJobVO(context.getContextId());
workJob.setDispatcher(VmWorkConstants.VM_WORK_JOB_DISPATCHER);
workJob.setCmd(VmWorkMigrate.class.getName());
workJob.setCmd(VmWorkMigrateForScale.class.getName());
workJob.setAccountId(account.getId());
workJob.setUserId(user.getId());

View File

@ -18,30 +18,18 @@ package com.cloud.vm;
import com.cloud.deploy.DeployDestination;
public class VmWorkMigrateForScale extends VmWork {
public class VmWorkMigrateForScale extends VmWorkMigrate {
private static final long serialVersionUID = 6854870395568389613L;
long srcHostId;
DeployDestination deployDestination;
Long newSvcOfferingId;
public VmWorkMigrateForScale(long userId, long accountId, long vmId, String handlerName, long srcHostId,
DeployDestination dest, Long newSvcOfferingId) {
super(userId, accountId, vmId, handlerName);
this.srcHostId = srcHostId;
deployDestination = dest;
super(userId, accountId, vmId, handlerName, srcHostId, dest);
this.newSvcOfferingId = newSvcOfferingId;
}
public long getSrcHostId() {
return srcHostId;
}
public DeployDestination getDeployDestination() {
return deployDestination;
}
public Long getNewServiceOfferringId() {
return newSvcOfferingId;
}

View File

@ -611,7 +611,10 @@ public class EngineHostDaoImpl extends GenericDaoBase<EngineHostVO, Long> implem
l.add(info);
}
} catch (SQLException e) {
s_logger.error("sql exception while getting running hosts: " + e.getLocalizedMessage());
} catch (Throwable e) {
s_logger.info("[ignored]"
+ "caught something while getting running hosts: " + e.getLocalizedMessage());
}
return l;
}

View File

@ -37,9 +37,6 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import com.cloud.network.Networks;
import org.apache.log4j.Logger;
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.engine.cloud.entity.api.db.VMNetworkMapVO;
@ -47,13 +44,14 @@ import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMNetworkMapDao;
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
import org.apache.cloudstack.framework.config.ConfigDepot;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.Configurable;
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.Configurable;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.framework.messagebus.PublishScope;
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
import org.apache.cloudstack.region.PortableIpDao;
import org.apache.log4j.Logger;
import com.cloud.agent.AgentManager;
import com.cloud.agent.Listener;
@ -111,6 +109,7 @@ import com.cloud.network.NetworkMigrationResponder;
import com.cloud.network.NetworkModel;
import com.cloud.network.NetworkProfile;
import com.cloud.network.NetworkStateListener;
import com.cloud.network.Networks;
import com.cloud.network.Networks.BroadcastDomainType;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetwork;
@ -839,7 +838,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
vo.setDefaultNic(profile.isDefaultNic());
vo.setIp4Address(profile.getIp4Address());
vo.setIPv4Address(profile.getIPv4Address());
vo.setAddressFormat(profile.getFormat());
if (profile.getMacAddress() != null) {
@ -847,8 +846,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
}
vo.setMode(profile.getMode());
vo.setNetmask(profile.getNetmask());
vo.setGateway(profile.getGateway());
vo.setIPv4Netmask(profile.getIPv4Netmask());
vo.setIPv4Gateway(profile.getIPv4Gateway());
if (profile.getBroadCastUri() != null) {
vo.setBroadcastUri(profile.getBroadCastUri());
@ -860,25 +859,25 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
vo.setState(Nic.State.Allocated);
vo.setIp6Address(profile.getIp6Address());
vo.setIp6Gateway(profile.getIp6Gateway());
vo.setIp6Cidr(profile.getIp6Cidr());
vo.setIPv6Address(profile.getIPv6Address());
vo.setIPv6Gateway(profile.getIPv6Gateway());
vo.setIPv6Cidr(profile.getIPv6Cidr());
return deviceId;
}
protected void applyProfileToNicForRelease(NicVO vo, NicProfile profile) {
vo.setGateway(profile.getGateway());
vo.setIPv4Gateway(profile.getIPv4Gateway());
vo.setAddressFormat(profile.getFormat());
vo.setIp4Address(profile.getIp4Address());
vo.setIp6Address(profile.getIp6Address());
vo.setIPv4Address(profile.getIPv4Address());
vo.setIPv6Address(profile.getIPv6Address());
vo.setMacAddress(profile.getMacAddress());
if (profile.getReservationStrategy() != null) {
vo.setReservationStrategy(profile.getReservationStrategy());
}
vo.setBroadcastUri(profile.getBroadCastUri());
vo.setIsolationUri(profile.getIsolationUri());
vo.setNetmask(profile.getNetmask());
vo.setIPv4Netmask(profile.getIPv4Netmask());
}
protected void applyProfileToNetwork(NetworkVO network, NetworkProfile profile) {
@ -893,13 +892,13 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
to.setDeviceId(nic.getDeviceId());
to.setBroadcastType(config.getBroadcastDomainType());
to.setType(config.getTrafficType());
to.setIp(nic.getIp4Address());
to.setNetmask(nic.getNetmask());
to.setIp(nic.getIPv4Address());
to.setNetmask(nic.getIPv4Netmask());
to.setMac(nic.getMacAddress());
to.setDns1(profile.getDns1());
to.setDns2(profile.getDns2());
if (nic.getGateway() != null) {
to.setGateway(nic.getGateway());
to.setDns1(profile.getIPv4Dns1());
to.setDns2(profile.getIPv4Dns2());
if (nic.getIPv4Gateway() != null) {
to.setGateway(nic.getIPv4Gateway());
} else {
to.setGateway(config.getGateway());
}
@ -910,8 +909,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
to.setBroadcastUri(nic.getBroadcastUri());
to.setIsolationuri(nic.getIsolationUri());
if (profile != null) {
to.setDns1(profile.getDns1());
to.setDns2(profile.getDns2());
to.setDns1(profile.getIPv4Dns1());
to.setDns2(profile.getIPv4Dns2());
}
Integer networkRate = _networkModel.getNetworkRate(config.getId(), null);
@ -1240,7 +1239,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
DhcpServiceProvider sp = (DhcpServiceProvider)element;
Map<Capability, String> dhcpCapabilities = element.getCapabilities().get(Service.Dhcp);
String supportsMultipleSubnets = dhcpCapabilities.get(Capability.DhcpAccrossMultipleSubnets);
if ((supportsMultipleSubnets != null && Boolean.valueOf(supportsMultipleSubnets)) && profile.getIp6Address() == null) {
if ((supportsMultipleSubnets != null && Boolean.valueOf(supportsMultipleSubnets)) && profile.getIPv6Address() == null) {
if (!sp.configDhcpSupportForSubnet(network, profile, vmProfile, dest, context)) {
return false;
}
@ -1333,19 +1332,19 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network));
guru.reserve(profile, network, vmProfile, dest, context);
nic.setIp4Address(profile.getIp4Address());
nic.setIPv4Address(profile.getIPv4Address());
nic.setAddressFormat(profile.getFormat());
nic.setIp6Address(profile.getIp6Address());
nic.setIPv6Address(profile.getIPv6Address());
nic.setMacAddress(profile.getMacAddress());
nic.setIsolationUri(profile.getIsolationUri());
nic.setBroadcastUri(profile.getBroadCastUri());
nic.setReserver(guru.getName());
nic.setState(Nic.State.Reserved);
nic.setNetmask(profile.getNetmask());
nic.setGateway(profile.getGateway());
nic.setIPv4Netmask(profile.getIPv4Netmask());
nic.setIPv4Gateway(profile.getIPv4Gateway());
if (profile.getStrategy() != null) {
nic.setReservationStrategy(profile.getStrategy());
if (profile.getReservationStrategy() != null) {
nic.setReservationStrategy(profile.getReservationStrategy());
}
updateNic(nic, network.getId(), 1);
@ -1478,9 +1477,9 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
NetworkGuru guru = AdapterBase.getAdapterByName(networkGurus, network.getGuruName());
NicProfile profile = new NicProfile();
profile.setDeviceId(255); //dummyId
profile.setIp4Address(userIp.getAddress().toString());
profile.setNetmask(publicIp.getNetmask());
profile.setGateway(publicIp.getGateway());
profile.setIPv4Address(userIp.getAddress().toString());
profile.setIPv4Netmask(publicIp.getNetmask());
profile.setIPv4Gateway(publicIp.getGateway());
profile.setMacAddress(publicIp.getMacAddress());
profile.setBroadcastType(network.getBroadcastDomainType());
profile.setTrafficType(network.getTrafficType());
@ -1742,7 +1741,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
}
private boolean isLastNicInSubnet(NicVO nic) {
if (_nicDao.listByNetworkIdTypeAndGatewayAndBroadcastUri(nic.getNetworkId(), VirtualMachine.Type.User, nic.getGateway(), nic.getBroadcastUri()).size() > 1) {
if (_nicDao.listByNetworkIdTypeAndGatewayAndBroadcastUri(nic.getNetworkId(), VirtualMachine.Type.User, nic.getIPv4Gateway(), nic.getBroadcastUri()).size() > 1) {
return false;
}
return true;
@ -1754,7 +1753,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
Network network = _networksDao.findById(nic.getNetworkId());
DhcpServiceProvider dhcpServiceProvider = getDhcpServiceProvider(network);
try {
final NicIpAliasVO ipAlias = _nicIpAliasDao.findByGatewayAndNetworkIdAndState(nic.getGateway(), network.getId(), NicIpAlias.state.active);
final NicIpAliasVO ipAlias = _nicIpAliasDao.findByGatewayAndNetworkIdAndState(nic.getIPv4Gateway(), network.getId(), NicIpAlias.state.active);
if (ipAlias != null) {
ipAlias.setState(NicIpAlias.state.revoked);
Transaction.execute(new TransactionCallbackNoReturn() {
@ -3116,10 +3115,10 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
NicProfile nic = null;
if (requested != null && requested.getBroadCastUri() != null) {
String broadcastUri = requested.getBroadCastUri().toString();
String ipAddress = requested.getIp4Address();
String ipAddress = requested.getIPv4Address();
NicVO nicVO = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(network.getId(), vm.getId(), broadcastUri);
if (nicVO != null) {
if (ipAddress == null || nicVO.getIp4Address().equals(ipAddress)) {
if (ipAddress == null || nicVO.getIPv4Address().equals(ipAddress)) {
nic = _networkModel.getNicProfile(vm, network.getId(), broadcastUri);
}
}
@ -3316,8 +3315,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
@Override
public NicVO savePlaceholderNic(Network network, String ip4Address, String ip6Address, Type vmType) {
NicVO nic = new NicVO(null, null, network.getId(), null);
nic.setIp4Address(ip4Address);
nic.setIp6Address(ip6Address);
nic.setIPv4Address(ip4Address);
nic.setIPv6Address(ip6Address);
nic.setReservationStrategy(ReservationStrategy.PlaceHolder);
nic.setState(Nic.State.Reserved);
nic.setVmType(vmType);

View File

@ -17,44 +17,42 @@
package org.apache.cloudstack.engine.orchestration;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import com.cloud.network.Network;
import com.cloud.network.NetworkModel;
import com.cloud.network.Network.GuestType;
import com.cloud.network.Network.Service;
import com.cloud.network.NetworkModel;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkServiceMapDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.element.DhcpServiceProvider;
import com.cloud.network.guru.NetworkGuru;
import com.cloud.vm.Nic;
import com.cloud.vm.NicVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.VirtualMachine.Type;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.NicDao;
import com.cloud.vm.dao.NicIpAliasDao;
import com.cloud.vm.dao.NicSecondaryIpDao;
import junit.framework.TestCase;
/**
* NetworkManagerImpl implements NetworkManager.
*/
@ -106,7 +104,7 @@ public class NetworkOrchestratorTest extends TestCase {
when(testOrchastrator._networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp)).thenReturn(true);
when(network.getTrafficType()).thenReturn(TrafficType.Guest);
when(network.getGuestType()).thenReturn(GuestType.Shared);
when(testOrchastrator._nicDao.listByNetworkIdTypeAndGatewayAndBroadcastUri(nic.getNetworkId(), VirtualMachine.Type.User, nic.getGateway(), nic.getBroadcastUri())).thenReturn(new ArrayList<NicVO>());
when(testOrchastrator._nicDao.listByNetworkIdTypeAndGatewayAndBroadcastUri(nic.getNetworkId(), VirtualMachine.Type.User, nic.getIPv4Gateway(), nic.getBroadcastUri())).thenReturn(new ArrayList<NicVO>());

View File

@ -16,9 +16,6 @@
// under the License.
package com.cloud.certificate.dao;
import java.io.BufferedInputStream;
import java.io.IOException;
import javax.ejb.Local;
import org.apache.log4j.Logger;
@ -41,7 +38,6 @@ public class CertificateDaoImpl extends GenericDaoBase<CertificateVO, Long> impl
@Override
public Long persistCustomCertToDb(String certStr, CertificateVO cert, Long managementServerId) {
BufferedInputStream f = null;
try {
cert.setCertificate(certStr);
cert.setUpdated("Y");
@ -50,12 +46,6 @@ public class CertificateDaoImpl extends GenericDaoBase<CertificateVO, Long> impl
} catch (Exception e) {
s_logger.warn("Unable to read the certificate: " + e);
return new Long(0);
} finally {
if (f != null)
try {
f.close();
} catch (IOException ignored) {
}
}
}
}

View File

@ -116,7 +116,6 @@ public class DataCenterIpAddressDaoImpl extends GenericDaoBase<DataCenterIpAddre
String insertSql = "INSERT INTO `cloud`.`op_dc_ip_address_alloc` (ip_address, data_center_id, pod_id, mac_address) " +
"VALUES (?, ?, ?, (select mac_address from `cloud`.`data_center` where id=?))";
String updateSql = "UPDATE `cloud`.`data_center` set mac_address = mac_address+1 where id=?";
PreparedStatement stmt = null;
long startIP = NetUtils.ip2Long(start);
long endIP = NetUtils.ip2Long(end);
@ -125,17 +124,17 @@ public class DataCenterIpAddressDaoImpl extends GenericDaoBase<DataCenterIpAddre
txn.start();
while (startIP <= endIP) {
stmt = txn.prepareStatement(insertSql);
stmt.setString(1, NetUtils.long2Ip(startIP++));
stmt.setLong(2, dcId);
stmt.setLong(3, podId);
stmt.setLong(4, dcId);
stmt.executeUpdate();
stmt.close();
stmt = txn.prepareStatement(updateSql);
stmt.setLong(1, dcId);
stmt.executeUpdate();
stmt.close();
try(PreparedStatement insertPstmt = txn.prepareStatement(insertSql);) {
insertPstmt.setString(1, NetUtils.long2Ip(startIP++));
insertPstmt.setLong(2, dcId);
insertPstmt.setLong(3, podId);
insertPstmt.setLong(4, dcId);
insertPstmt.executeUpdate();
}
try(PreparedStatement updatePstmt = txn.prepareStatement(updateSql);) {
updatePstmt.setLong(1, dcId);
updatePstmt.executeUpdate();
}
}
txn.commit();
} catch (SQLException ex) {

View File

@ -740,32 +740,21 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
@DB
@Override
public List<HostVO> findLostHosts(long timeout) {
TransactionLegacy txn = TransactionLegacy.currentTxn();
PreparedStatement pstmt = null;
List<HostVO> result = new ArrayList<HostVO>();
ResultSet rs = null;
try {
String sql =
String sql =
"select h.id from host h left join cluster c on h.cluster_id=c.id where h.mgmt_server_id is not null and h.last_ping < ? and h.status in ('Up', 'Updating', 'Disconnected', 'Connecting') and h.type not in ('ExternalFirewall', 'ExternalLoadBalancer', 'TrafficMonitor', 'SecondaryStorage', 'LocalSecondaryStorage', 'L2Networking') and (h.cluster_id is null or c.managed_state = 'Managed') ;";
pstmt = txn.prepareStatement(sql);
try (
TransactionLegacy txn = TransactionLegacy.currentTxn();
PreparedStatement pstmt = txn.prepareStatement(sql);) {
pstmt.setLong(1, timeout);
rs = pstmt.executeQuery();
while (rs.next()) {
long id = rs.getLong(1); //ID column
result.add(findById(id));
try (ResultSet rs = pstmt.executeQuery();) {
while (rs.next()) {
long id = rs.getLong(1); //ID column
result.add(findById(id));
}
}
} catch (Exception e) {
} catch (SQLException e) {
s_logger.warn("Exception: ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
return result;
}

View File

@ -24,7 +24,7 @@ import com.cloud.utils.db.GenericDao;
public interface VpnUserDao extends GenericDao<VpnUserVO, Long> {
List<VpnUserVO> listByAccount(Long accountId);
VpnUserVO findByAccountAndUsername(Long acccountId, String userName);
VpnUserVO findByAccountAndUsername(Long accountId, String userName);
long getVpnUserCount(Long accountId);
}

View File

@ -104,7 +104,7 @@ public class VmRulesetLogDaoImpl extends GenericDaoBase<VmRulesetLogVO, Long> im
try {
Thread.sleep(delayMs);
} catch (InterruptedException ie) {
s_logger.debug("[ignored] interupted while inserting security group rule log.");
}
} else
s_logger.warn("Caught another deadlock exception while retrying inserting security group rule log, giving up");

View File

@ -41,12 +41,12 @@ import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
import com.cloud.utils.db.UpdateBuilder;
import com.cloud.utils.db.JoinBuilder.JoinType;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Func;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.db.UpdateBuilder;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.dao.VMInstanceDao;
@ -208,6 +208,8 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
return rs.getLong(1);
}
} catch (Exception ex) {
s_logger.info("[ignored]"
+ "caught something while getting sec. host id: " + ex.getLocalizedMessage());
}
return null;
}
@ -276,7 +278,7 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
@Override
public List<SnapshotVO> listByInstanceId(long instanceId, Snapshot.State... status) {
SearchCriteria<SnapshotVO> sc = this.InstanceIdSearch.create();
SearchCriteria<SnapshotVO> sc = InstanceIdSearch.create();
if (status != null && status.length != 0) {
sc.setParameters("status", (Object[])status);
@ -289,7 +291,7 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
@Override
public List<SnapshotVO> listByStatus(long volumeId, Snapshot.State... status) {
SearchCriteria<SnapshotVO> sc = this.StatusSearch.create();
SearchCriteria<SnapshotVO> sc = StatusSearch.create();
sc.setParameters("volumeId", volumeId);
sc.setParameters("status", (Object[])status);
return listBy(sc, null);
@ -311,7 +313,7 @@ public class SnapshotDaoImpl extends GenericDaoBase<SnapshotVO, Long> implements
@Override
public List<SnapshotVO> listAllByStatus(Snapshot.State... status) {
SearchCriteria<SnapshotVO> sc = this.StatusSearch.create();
SearchCriteria<SnapshotVO> sc = StatusSearch.create();
sc.setParameters("status", (Object[])status);
return listBy(sc, null);
}

View File

@ -54,8 +54,12 @@ public interface VMTemplateDao extends GenericDao<VMTemplateVO, Long>, StateDao<
public List<VMTemplateVO> listAllInZone(long dataCenterId);
public List<VMTemplateVO> listInZoneByState(long dataCenterId, VirtualMachineTemplate.State... states);
public List<VMTemplateVO> listAllActive();
public List<VMTemplateVO> listByState(VirtualMachineTemplate.State... states);
public List<VMTemplateVO> listByHypervisorType(List<HypervisorType> hyperTypes);
public List<VMTemplateVO> publicIsoSearch(Boolean bootable, boolean listRemoved, Map<String, String> tags);

View File

@ -372,7 +372,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
tmpltZoneSearch.and("zoneId", tmpltZoneSearch.entity().getZoneId(), SearchCriteria.Op.EQ);
TmpltsInZoneSearch = createSearchBuilder();
TmpltsInZoneSearch.and("state", TmpltsInZoneSearch.entity().getState(), SearchCriteria.Op.EQ);
TmpltsInZoneSearch.and("state", TmpltsInZoneSearch.entity().getState(), SearchCriteria.Op.IN);
TmpltsInZoneSearch.and().op("avoidtype", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NEQ);
TmpltsInZoneSearch.or("templateType", TmpltsInZoneSearch.entity().getTemplateType(), SearchCriteria.Op.NULL);
TmpltsInZoneSearch.cp();
@ -381,7 +381,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
TmpltsInZoneSearch.done();
ActiveTmpltSearch = createSearchBuilder();
ActiveTmpltSearch.and("state", ActiveTmpltSearch.entity().getState(), SearchCriteria.Op.EQ);
ActiveTmpltSearch.and("state", ActiveTmpltSearch.entity().getState(), SearchCriteria.Op.IN);
CountTemplatesByAccount = createSearchBuilder(Long.class);
CountTemplatesByAccount.select(null, Func.COUNT, null);
@ -792,6 +792,15 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
return listBy(sc);
}
@Override
public List<VMTemplateVO> listInZoneByState(long dataCenterId, VirtualMachineTemplate.State... states) {
SearchCriteria<VMTemplateVO> sc = TmpltsInZoneSearch.create();
sc.setParameters("avoidtype", TemplateType.PERHOST.toString());
sc.setParameters("state", (Object[])states);
sc.setJoinParameters("tmpltzone", "zoneId", dataCenterId);
return listBy(sc);
}
@Override
public List<VMTemplateVO> listAllActive() {
SearchCriteria<VMTemplateVO> sc = ActiveTmpltSearch.create();
@ -799,6 +808,13 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
return listBy(sc);
}
@Override
public List<VMTemplateVO> listByState(VirtualMachineTemplate.State... states) {
SearchCriteria<VMTemplateVO> sc = ActiveTmpltSearch.create();
sc.setParameters("state", (Object[])states);
return listBy(sc);
}
@Override
public List<VMTemplateVO> listDefaultBuiltinTemplates() {
SearchCriteria<VMTemplateVO> sc = tmpltTypeSearch.create();

View File

@ -0,0 +1,42 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.upgrade.dao;
import org.apache.log4j.Logger;
public abstract class LegacyDbUpgrade implements DbUpgrade{
final static Logger s_logger = Logger.getLogger(LegacyDbUpgrade.class);
public LegacyDbUpgrade() {
super();
}
/**
* @param closable
*/
protected void closeAutoCloseable(AutoCloseable closable) {
if (closable != null) {
try {
closable.close();
} catch (Exception e) {
s_logger.info("[ignored]",e);
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -411,6 +411,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
pstmt.close();
}
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
s_logger.debug("Done encrypting Config values");
@ -861,6 +862,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
TransactionLegacy.closePstmts(pstmt2Close);
}
@ -1000,6 +1002,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
TransactionLegacy.closePstmts(pstmt2Close);
}
@ -1053,6 +1056,7 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
pstmt.close();
}
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
}
@ -1151,11 +1155,10 @@ public class Upgrade2214to30 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to switch networks to the new network offering", e);
} finally {
try {
pstmt = conn.prepareStatement("DROP TABLE `cloud`.`network_offerings2`");
pstmt.executeUpdate();
pstmt.close();
try (PreparedStatement dropStatement = conn.prepareStatement("DROP TABLE `cloud`.`network_offerings2`");){
dropStatement.executeUpdate();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
TransactionLegacy.closePstmts(pstmt2Close);
}

View File

@ -207,18 +207,21 @@ public class Upgrade222to224 implements DbUpgrade {
try {
pstmtUpdate.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
@ -406,18 +409,21 @@ public class Upgrade222to224 implements DbUpgrade {
try {
pstmtUpdate.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}

View File

@ -68,41 +68,29 @@ public class Upgrade229to2210 implements DbUpgrade {
}
private void updateSnapshots(Connection conn) {
PreparedStatement pstmt = null;
ResultSet rs = null;
long currentSnapshotId = 0;
try {
pstmt =
conn.prepareStatement("select id, prev_snap_id from snapshots where sechost_id is NULL and prev_snap_id is not NULL and status=\"BackedUp\" and removed is NULL order by id");
rs = pstmt.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("select id, prev_snap_id from snapshots where sechost_id is NULL and prev_snap_id is not NULL and status=\"BackedUp\" and removed is NULL order by id");
ResultSet rs = pstmt.executeQuery();
PreparedStatement pstmt2 = conn.prepareStatement("select sechost_id from snapshots where id=? and sechost_id is not NULL");
PreparedStatement updateSnapshotStatement = conn.prepareStatement("update snapshots set sechost_id=? where id=?");
){
while (rs.next()) {
long id = rs.getLong(1);
long preSnapId = rs.getLong(2);
currentSnapshotId = id;
pstmt = conn.prepareStatement("select sechost_id from snapshots where id=? and sechost_id is not NULL");
pstmt.setLong(1, preSnapId);
ResultSet sechost = pstmt.executeQuery();
if (sechost.next()) {
long secHostId = sechost.getLong(1);
pstmt = conn.prepareStatement("update snapshots set sechost_id=? where id=?");
pstmt.setLong(1, secHostId);
pstmt.setLong(2, id);
pstmt.executeUpdate();
pstmt2.setLong(1, preSnapId);
try (ResultSet sechost = pstmt2.executeQuery();) {
if (sechost.next()) {
long secHostId = sechost.getLong(1);
updateSnapshotStatement.setLong(1, secHostId);
updateSnapshotStatement.setLong(2, id);
updateSnapshotStatement.executeUpdate();
}
}
}
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to update snapshots id=" + currentSnapshotId, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
@ -192,6 +180,7 @@ public class Upgrade229to2210 implements DbUpgrade {
pstmt.close();
}
} catch (SQLException e) {
s_logger.info("[ignored]",e);
}
}
}

View File

@ -31,7 +31,7 @@ import org.apache.log4j.Logger;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade301to302 implements DbUpgrade {
public class Upgrade301to302 extends LegacyDbUpgrade {
final static Logger s_logger = Logger.getLogger(Upgrade301to302.class);
@Override
@ -150,18 +150,9 @@ public class Upgrade301to302 implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to update shared networks due to exception while executing query " + pstmt, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (rs1 != null) {
rs1.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(rs1);
closeAutoCloseable(pstmt);
}
}
@ -177,55 +168,34 @@ public class Upgrade301to302 implements DbUpgrade {
DbUpgradeUtils.dropKeysIfExist(conn, "cloud.vm_instance", keys, true);
DbUpgradeUtils.dropKeysIfExist(conn, "cloud.vm_instance", keys, false);
PreparedStatement pstmt = null;
try {
pstmt =
try (
PreparedStatement pstmt =
conn.prepareStatement("ALTER TABLE `cloud`.`vm_instance` ADD CONSTRAINT `fk_vm_instance__last_host_id` FOREIGN KEY (`last_host_id`) REFERENCES `host` (`id`)");
){
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to insert foreign key in vm_instance table ", e);
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
private void changeEngine(Connection conn) {
s_logger.debug("Fixing engine and row_format for op_lock and op_nwgrp_work tables");
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`op_lock` ENGINE=MEMORY, ROW_FORMAT = FIXED");
String sqlOpLock = "ALTER TABLE `cloud`.`op_lock` ENGINE=MEMORY, ROW_FORMAT = FIXED";
try (
PreparedStatement pstmt = conn.prepareStatement(sqlOpLock);
) {
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
s_logger.debug("Failed do execute the statement " + pstmt + ", moving on as it's not critical fix");
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
s_logger.debug("Failed do execute the statement " + sqlOpLock + ", moving on as it's not critical fix");
}
try {
pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`op_nwgrp_work` ENGINE=MEMORY, ROW_FORMAT = FIXED");
String sqlOpNwgrpWork = "ALTER TABLE `cloud`.`op_nwgrp_work` ENGINE=MEMORY, ROW_FORMAT = FIXED";
try (
PreparedStatement pstmt = conn.prepareStatement(sqlOpNwgrpWork);
) {
pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
s_logger.debug("Failed do execute the statement " + pstmt + ", moving on as it's not critical fix");
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
s_logger.debug("Failed do execute the statement " + sqlOpNwgrpWork + ", moving on as it's not critical fix");
}
}

View File

@ -36,7 +36,7 @@ import com.cloud.utils.crypt.DBEncryptionUtil;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade302to303 implements DbUpgrade {
public class Upgrade302to303 extends LegacyDbUpgrade {
final static Logger s_logger = Logger.getLogger(Upgrade302to303.class);
@Override
@ -133,23 +133,10 @@ public class Upgrade302to303 implements DbUpgrade {
}
}
}
if (zoneResults != null) {
try {
zoneResults.close();
} catch (SQLException e) {
}
}
if (zoneSearchStmt != null) {
try {
zoneSearchStmt.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(zoneResults);
closeAutoCloseable(zoneSearchStmt);
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
}
}
@ -176,12 +163,7 @@ public class Upgrade302to303 implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding F5 load balancer device", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmtUpdate);
}
}
@ -206,12 +188,7 @@ public class Upgrade302to303 implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding SRX firewall device ", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmtUpdate);
}
}
@ -235,12 +212,7 @@ public class Upgrade302to303 implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider F5BigIp", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmtUpdate);
}
}
@ -264,12 +236,7 @@ public class Upgrade302to303 implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider JuniperSRX", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmtUpdate);
}
}
@ -299,16 +266,8 @@ public class Upgrade302to303 implements DbUpgrade {
} catch (UnsupportedEncodingException e) {
throw new CloudRuntimeException("Unable encrypt configuration values ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.debug("Done encrypting Config values");
}

View File

@ -34,7 +34,7 @@ import com.cloud.utils.crypt.DBEncryptionUtil;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
public class Upgrade302to40 extends Upgrade30xBase {
final static Logger s_logger = Logger.getLogger(Upgrade302to40.class);
@Override
@ -138,33 +138,10 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while correcting Virtual Router Entries", e);
} finally {
if (rsVR != null) {
try {
rsVR.close();
} catch (SQLException e) {
}
}
if (pstmtVR != null) {
try {
pstmtVR.close();
} catch (SQLException e) {
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(rsVR);
closeAutoCloseable(pstmtVR);
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
}
@ -398,33 +375,10 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while correcting PhysicalNetwork setup", e);
} finally {
if (rsZone != null) {
try {
rsZone.close();
} catch (SQLException e) {
}
}
if (pstmtZone != null) {
try {
pstmtZone.close();
} catch (SQLException e) {
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(rsZone);
closeAutoCloseable(pstmtZone);
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
}
@ -510,29 +464,23 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while cloning NetworkOffering", e);
} finally {
closeAutoCloseable(rs);
try {
pstmt = conn.prepareStatement("DROP TEMPORARY TABLE `cloud`.`network_offerings2`");
pstmt.executeUpdate();
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
s_logger.info("[ignored] ",e);
}
closeAutoCloseable(pstmt);
}
}
private void addHostDetailsUniqueKey(Connection conn) {
s_logger.debug("Checking if host_details unique key exists, if not we will add it");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("SHOW INDEX FROM `cloud`.`host_details` WHERE KEY_NAME = 'uk_host_id_name'");
rs = pstmt.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("SHOW INDEX FROM `cloud`.`host_details` WHERE KEY_NAME = 'uk_host_id_name'");
ResultSet rs = pstmt.executeQuery();
) {
if (rs.next()) {
s_logger.debug("Unique key already exists on host_details - not adding new one");
} else {
@ -545,17 +493,6 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
}
} catch (SQLException e) {
throw new CloudRuntimeException("Failed to check/update the host_details unique key ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
@ -602,16 +539,8 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable add VPC physical network service provider ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.debug("Done adding VPC physical network service providers to all physical networks");
}
@ -619,46 +548,33 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
private void updateRouterNetworkRef(Connection conn) {
//Encrypt config params and change category to Hidden
s_logger.debug("Updating router network ref");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("SELECT d.id, d.network_id FROM `cloud`.`domain_router` d, `cloud`.`vm_instance` v " + "WHERE d.id=v.id AND v.removed is NULL");
rs = pstmt.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("SELECT d.id, d.network_id FROM `cloud`.`domain_router` d, `cloud`.`vm_instance` v " + "WHERE d.id=v.id AND v.removed is NULL");
PreparedStatement pstmt1 = conn.prepareStatement("SELECT guest_type from `cloud`.`networks` where id=?");
PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO `cloud`.`router_network_ref` (router_id, network_id, guest_type) " + "VALUES (?, ?, ?)");
ResultSet rs = pstmt.executeQuery();
){
while (rs.next()) {
Long routerId = rs.getLong(1);
Long networkId = rs.getLong(2);
//get the network type
pstmt = conn.prepareStatement("SELECT guest_type from `cloud`.`networks` where id=?");
pstmt.setLong(1, networkId);
ResultSet rs1 = pstmt.executeQuery();
rs1.next();
String networkType = rs1.getString(1);
//insert the reference
pstmt = conn.prepareStatement("INSERT INTO `cloud`.`router_network_ref` (router_id, network_id, guest_type) " + "VALUES (?, ?, ?)");
pstmt.setLong(1, routerId);
pstmt.setLong(2, networkId);
pstmt.setString(3, networkType);
pstmt.executeUpdate();
pstmt1.setLong(1, networkId);
try (ResultSet rs1 = pstmt1.executeQuery();) {
rs1.next();
String networkType = rs1.getString(1);
//insert the reference
pstmt2.setLong(1, routerId);
pstmt2.setLong(2, networkId);
pstmt2.setString(3, networkType);
pstmt2.executeUpdate();
}
s_logger.debug("Added reference for router id=" + routerId + " and network id=" + networkId);
}
} catch (SQLException e) {
throw new CloudRuntimeException("Failed to update the router/network reference ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Done updating router/network references");
}
@ -768,33 +684,19 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
}
}
if (zoneResults != null) {
try {
zoneResults.close();
} catch (SQLException e) {
}
}
if (zoneSearchStmt != null) {
try {
zoneSearchStmt.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(zoneResults);
closeAutoCloseable(zoneSearchStmt);
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
}
}
private void addF5LoadBalancer(Connection conn, long hostId, long physicalNetworkId) {
PreparedStatement pstmtUpdate = null;
try {
s_logger.debug("Adding F5 Big IP load balancer with host id " + hostId + " in to physical network" + physicalNetworkId);
String insertF5 =
"INSERT INTO `cloud`.`external_load_balancer_devices` (physical_network_id, host_id, provider_name, "
+ "device_name, capacity, is_dedicated, device_state, allocation_state, is_inline, is_managed, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
pstmtUpdate = conn.prepareStatement(insertF5);
s_logger.debug("Adding F5 Big IP load balancer with host id " + hostId + " in to physical network" + physicalNetworkId);
String insertF5 =
"INSERT INTO `cloud`.`external_load_balancer_devices` (physical_network_id, host_id, provider_name, "
+ "device_name, capacity, is_dedicated, device_state, allocation_state, is_inline, is_managed, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertF5);) {
pstmtUpdate.setLong(1, physicalNetworkId);
pstmtUpdate.setLong(2, hostId);
pstmtUpdate.setString(3, "F5BigIp");
@ -809,24 +711,15 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
pstmtUpdate.executeUpdate();
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding F5 load balancer device", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
}
}
private void addSrxFirewall(Connection conn, long hostId, long physicalNetworkId) {
PreparedStatement pstmtUpdate = null;
try {
s_logger.debug("Adding SRX firewall device with host id " + hostId + " in to physical network" + physicalNetworkId);
String insertSrx =
"INSERT INTO `cloud`.`external_firewall_devices` (physical_network_id, host_id, provider_name, "
+ "device_name, capacity, is_dedicated, device_state, allocation_state, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?)";
pstmtUpdate = conn.prepareStatement(insertSrx);
s_logger.debug("Adding SRX firewall device with host id " + hostId + " in to physical network" + physicalNetworkId);
String insertSrx =
"INSERT INTO `cloud`.`external_firewall_devices` (physical_network_id, host_id, provider_name, "
+ "device_name, capacity, is_dedicated, device_state, allocation_state, uuid) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertSrx);) {
pstmtUpdate.setLong(1, physicalNetworkId);
pstmtUpdate.setLong(2, hostId);
pstmtUpdate.setString(3, "JuniperSRX");
@ -839,28 +732,18 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
pstmtUpdate.executeUpdate();
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding SRX firewall device ", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
}
}
private void addF5ServiceProvider(Connection conn, long physicalNetworkId, long zoneId) {
PreparedStatement pstmtUpdate = null;
try {
// add physical network service provider - F5BigIp
s_logger.debug("Adding PhysicalNetworkServiceProvider F5BigIp" + " in to physical network" + physicalNetworkId);
String insertPNSP =
"INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ,"
+ "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`,"
+ "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`,"
+ "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,0,0,0,1,0,0,0,0)";
pstmtUpdate = conn.prepareStatement(insertPNSP);
// add physical network service provider - F5BigIp
s_logger.debug("Adding PhysicalNetworkServiceProvider F5BigIp" + " in to physical network" + physicalNetworkId);
String insertPNSP =
"INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ,"
+ "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`,"
+ "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`,"
+ "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,0,0,0,1,0,0,0,0)";
try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertPNSP);) {
pstmtUpdate.setString(1, UUID.randomUUID().toString());
pstmtUpdate.setLong(2, physicalNetworkId);
pstmtUpdate.setString(3, "F5BigIp");
@ -868,28 +751,18 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
pstmtUpdate.executeUpdate();
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider F5BigIp", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
}
}
private void addSrxServiceProvider(Connection conn, long physicalNetworkId, long zoneId) {
PreparedStatement pstmtUpdate = null;
try {
// add physical network service provider - JuniperSRX
s_logger.debug("Adding PhysicalNetworkServiceProvider JuniperSRX");
String insertPNSP =
"INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ,"
+ "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`,"
+ "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`,"
+ "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,1,1,1,0,1,1,0,0)";
pstmtUpdate = conn.prepareStatement(insertPNSP);
// add physical network service provider - JuniperSRX
s_logger.debug("Adding PhysicalNetworkServiceProvider JuniperSRX");
String insertPNSP =
"INSERT INTO `cloud`.`physical_network_service_providers` (`uuid`, `physical_network_id` , `provider_name`, `state` ,"
+ "`destination_physical_network_id`, `vpn_service_provided`, `dhcp_service_provided`, `dns_service_provided`, `gateway_service_provided`,"
+ "`firewall_service_provided`, `source_nat_service_provided`, `load_balance_service_provided`, `static_nat_service_provided`,"
+ "`port_forwarding_service_provided`, `user_data_service_provided`, `security_group_service_provided`) VALUES (?,?,?,?,0,0,0,0,1,1,1,0,1,1,0,0)";
try (PreparedStatement pstmtUpdate = conn.prepareStatement(insertPNSP);) {
pstmtUpdate.setString(1, UUID.randomUUID().toString());
pstmtUpdate.setLong(2, physicalNetworkId);
pstmtUpdate.setString(3, "JuniperSRX");
@ -897,13 +770,6 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
pstmtUpdate.executeUpdate();
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworkServiceProvider JuniperSRX", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
}
}
@ -1045,15 +911,8 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable create a mapping for the networks in network_external_lb_device_map and network_external_firewall_device_map", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.info("Successfully upgraded networks using F5 and SRX devices to have a entry in the network_external_lb_device_map and network_external_firewall_device_map");
}
@ -1062,12 +921,11 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
private void encryptConfig(Connection conn) {
//Encrypt config params and change category to Hidden
s_logger.debug("Encrypting Config values");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt =
conn.prepareStatement("select name, value from `cloud`.`configuration` where name in ('router.ram.size', 'secondary.storage.vm', 'security.hash.key') and category <> 'Hidden'");
rs = pstmt.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("select name, value from `cloud`.`configuration` where name in ('router.ram.size', 'secondary.storage.vm', 'security.hash.key') and category <> 'Hidden'");
PreparedStatement pstmt1 = conn.prepareStatement("update `cloud`.`configuration` set value=?, category = 'Hidden' where name=?");
ResultSet rs = pstmt.executeQuery();
) {
while (rs.next()) {
String name = rs.getString(1);
String value = rs.getString(2);
@ -1075,37 +933,25 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
continue;
}
String encryptedValue = DBEncryptionUtil.encrypt(value);
pstmt = conn.prepareStatement("update `cloud`.`configuration` set value=?, category = 'Hidden' where name=?");
pstmt.setBytes(1, encryptedValue.getBytes("UTF-8"));
pstmt.setString(2, name);
pstmt.executeUpdate();
pstmt1.setBytes(1, encryptedValue.getBytes("UTF-8"));
pstmt1.setString(2, name);
pstmt1.executeUpdate();
}
} catch (SQLException e) {
throw new CloudRuntimeException("Unable encrypt configuration values ", e);
} catch (UnsupportedEncodingException e) {
throw new CloudRuntimeException("Unable encrypt configuration values ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Done encrypting Config values");
}
private void encryptClusterDetails(Connection conn) {
s_logger.debug("Encrypting cluster details");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("select id, value from `cloud`.`cluster_details` where name = 'password'");
rs = pstmt.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("select id, value from `cloud`.`cluster_details` where name = 'password'");
PreparedStatement pstmt1 = conn.prepareStatement("update `cloud`.`cluster_details` set value=? where id=?");
ResultSet rs = pstmt.executeQuery();
) {
while (rs.next()) {
long id = rs.getLong(1);
String value = rs.getString(2);
@ -1113,26 +959,14 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
continue;
}
String encryptedValue = DBEncryptionUtil.encrypt(value);
pstmt = conn.prepareStatement("update `cloud`.`cluster_details` set value=? where id=?");
pstmt.setBytes(1, encryptedValue.getBytes("UTF-8"));
pstmt.setLong(2, id);
pstmt.executeUpdate();
pstmt1.setBytes(1, encryptedValue.getBytes("UTF-8"));
pstmt1.setLong(2, id);
pstmt1.executeUpdate();
}
} catch (SQLException e) {
throw new CloudRuntimeException("Unable encrypt cluster_details values ", e);
} catch (UnsupportedEncodingException e) {
throw new CloudRuntimeException("Unable encrypt cluster_details values ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Done encrypting cluster_details");
}

View File

@ -33,7 +33,7 @@ import com.cloud.utils.crypt.DBEncryptionUtil;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade {
public class Upgrade304to305 extends Upgrade30xBase {
final static Logger s_logger = Logger.getLogger(Upgrade304to305.class);
@Override
@ -173,16 +173,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable add VPC physical network service provider ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.debug("Done adding VPC physical network service providers to all physical networks");
}
@ -220,16 +212,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Failed to update the router/network reference ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.debug("Done updating router/network references");
}
@ -254,16 +238,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Failed to check/update the host_details unique key ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
}
@ -407,15 +383,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable create a mapping for the networks in network_external_lb_device_map and network_external_firewall_device_map", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.info("Successfully upgraded network using F5 and SRX devices to have a entry in the network_external_lb_device_map and network_external_firewall_device_map");
}
@ -487,16 +456,8 @@ public class Upgrade304to305 extends Upgrade30xBase implements DbUpgrade {
} catch (UnsupportedEncodingException e) {
throw new CloudRuntimeException("Unable encrypt cluster_details values ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
s_logger.debug("Done encrypting cluster_details");
}

View File

@ -31,7 +31,7 @@ import org.apache.log4j.Logger;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade {
public class Upgrade305to306 extends Upgrade30xBase {
final static Logger s_logger = Logger.getLogger(Upgrade305to306.class);
@Override
@ -82,55 +82,33 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade {
DbUpgradeUtils.dropKeysIfExist(conn, "alert", indexList, false);
//Now add index.
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`alert` ADD INDEX `i_alert__last_sent`(`last_sent`)");
try (PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`alert` ADD INDEX `i_alert__last_sent`(`last_sent`)");) {
pstmt.executeUpdate();
s_logger.debug("Added index i_alert__last_sent for table alert");
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to add index i_alert__last_sent to alert table for the column last_sent", e);
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
private void upgradeEIPNetworkOfferings(Connection conn) {
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'");
rs = pstmt.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'");
PreparedStatement pstmt1 = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?");
ResultSet rs = pstmt.executeQuery();
){
while (rs.next()) {
long id = rs.getLong(1);
// check if elastic IP service is enabled for network offering
if (rs.getLong(2) != 0) {
//update network offering with eip_associate_public_ip set to true
pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?");
pstmt.setBoolean(1, true);
pstmt.setLong(2, id);
pstmt.executeUpdate();
pstmt1.setBoolean(1, true);
pstmt1.setLong(2, id);
pstmt1.executeUpdate();
}
}
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to set eip_associate_public_ip for network offerings with EIP service enabled.", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
@ -143,20 +121,11 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade {
DbUpgradeUtils.dropKeysIfExist(conn, "host_details", indexList, false);
//Now add index.
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`host_details` ADD INDEX `fk_host_details__host_id`(`host_id`)");
try (PreparedStatement pstmt = conn.prepareStatement("ALTER TABLE `cloud`.`host_details` ADD INDEX `fk_host_details__host_id`(`host_id`)");) {
pstmt.executeUpdate();
s_logger.debug("Added index fk_host_details__host_id for table host_details");
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to add index fk_host_details__host_id to host_details table for the column host_id", e);
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
@ -218,15 +187,8 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to set egress firewall rules ", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
}
@ -247,16 +209,8 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to remove Firewall service for SG shared network offering.", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
}
@ -288,16 +242,8 @@ public class Upgrade305to306 extends Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to update backup id for KVM snapshots", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(pstmt);
}
}

View File

@ -28,7 +28,7 @@ import org.apache.log4j.Logger;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade306to307 extends Upgrade30xBase implements DbUpgrade {
public class Upgrade306to307 extends Upgrade30xBase {
final static Logger s_logger = Logger.getLogger(Upgrade306to307.class);
@Override
@ -97,20 +97,11 @@ public class Upgrade306to307 extends Upgrade30xBase implements DbUpgrade {
pstmt = conn.prepareStatement("drop table `cloud`.`network_details`");
pstmt.executeUpdate();
} catch (SQLException e) {
s_logger.info("[ignored] error during network offering update:" + e.getLocalizedMessage(), e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (rs1 != null) {
rs1.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(rs1);
closeAutoCloseable(pstmt);
}
}

View File

@ -69,23 +69,14 @@ public class Upgrade307to410 implements DbUpgrade {
if (regionId != null) {
region_id = Integer.parseInt(regionId);
}
PreparedStatement pstmt = null;
try {
try (PreparedStatement pstmt = conn.prepareStatement("update `cloud`.`region` set id = ?");){
//Update regionId in region table
s_logger.debug("Updating region table with Id: " + region_id);
pstmt = conn.prepareStatement("update `cloud`.`region` set id = ?");
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
} catch (SQLException e) {
throw new CloudRuntimeException("Error while updating region entries", e);
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}

View File

@ -28,7 +28,7 @@ import com.cloud.configuration.Resource.ResourceType;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
public class Upgrade30to301 implements DbUpgrade {
public class Upgrade30to301 extends LegacyDbUpgrade {
final static Logger s_logger = Logger.getLogger(Upgrade30to301.class);
@Override
@ -100,20 +100,9 @@ public class Upgrade30to301 implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to update network resource count for account id=" + accountId, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (rs1 != null) {
rs1.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
closeAutoCloseable(rs);
closeAutoCloseable(rs1);
closeAutoCloseable(pstmt);
}
}

View File

@ -27,37 +27,22 @@ import org.apache.log4j.Logger;
import com.cloud.utils.exception.CloudRuntimeException;
public abstract class Upgrade30xBase implements DbUpgrade {
public abstract class Upgrade30xBase extends LegacyDbUpgrade {
final static Logger s_logger = Logger.getLogger(Upgrade30xBase.class);
protected String getNetworkLabelFromConfig(Connection conn, String name) {
String sql = "SELECT value FROM `cloud`.`configuration` where name = ?";
String networkLabel = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(sql);
try (PreparedStatement pstmt = conn.prepareStatement(sql);) {
pstmt.setString(1,name);
rs = pstmt.executeQuery();
if (rs.next()) {
networkLabel = rs.getString(1);
try (ResultSet rs = pstmt.executeQuery();) {
if (rs.next()) {
networkLabel = rs.getString(1);
}
}
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to fetch network label from configuration", e);
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
}
}
}
return networkLabel;
}
@ -117,19 +102,8 @@ public abstract class Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
if (pstmt2 != null) {
try {
pstmt2.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmt2);
closeAutoCloseable(pstmtUpdate);
}
}
@ -152,12 +126,7 @@ public abstract class Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmtUpdate);
}
}
@ -204,18 +173,8 @@ public abstract class Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding default Security Group Provider", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
if (pstmt2 != null) {
try {
pstmt2.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmt2);
closeAutoCloseable(pstmtUpdate);
}
}
@ -261,18 +220,8 @@ public abstract class Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
if (pstmt2 != null) {
try {
pstmt2.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmt2);
closeAutoCloseable(pstmtUpdate);
}
}
@ -299,12 +248,7 @@ public abstract class Upgrade30xBase implements DbUpgrade {
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
if (pstmtUpdate != null) {
try {
pstmtUpdate.close();
} catch (SQLException e) {
}
}
closeAutoCloseable(pstmtUpdate);
}
}

View File

@ -82,23 +82,14 @@ public class Upgrade40to41 implements DbUpgrade {
if (regionId != null) {
region_id = Integer.parseInt(regionId);
}
PreparedStatement pstmt = null;
try {
try (PreparedStatement pstmt = conn.prepareStatement("update `cloud`.`region` set id = ?");) {
//Update regionId in region table
s_logger.debug("Updating region table with Id: " + region_id);
pstmt = conn.prepareStatement("update `cloud`.`region` set id = ?");
pstmt.setInt(1, region_id);
pstmt.executeUpdate();
} catch (SQLException e) {
throw new CloudRuntimeException("Error while updating region entries", e);
} finally {
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}

View File

@ -33,7 +33,6 @@ import java.util.Map;
import java.util.UUID;
import org.apache.log4j.Logger;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
@ -563,74 +562,47 @@ public class Upgrade410to420 implements DbUpgrade {
//update the cluster_details table with default overcommit ratios.
private void updateOverCommitRatioClusterDetails(Connection conn) {
PreparedStatement pstmt = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
PreparedStatement pstmt3 = null;
ResultSet rs1 = null;
ResultSet rscpu_global = null;
ResultSet rsmem_global = null;
try {
pstmt = conn.prepareStatement("select id, hypervisor_type from `cloud`.`cluster` WHERE removed IS NULL");
pstmt1 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'cpuOvercommitRatio', ?)");
pstmt2 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'memoryOvercommitRatio', ?)");
pstmt3 = conn.prepareStatement("select value from `cloud`.`configuration` where name=?");
pstmt3.setString(1, "cpu.overprovisioning.factor");
rscpu_global = pstmt3.executeQuery();
try (
PreparedStatement pstmt = conn.prepareStatement("select id, hypervisor_type from `cloud`.`cluster` WHERE removed IS NULL");
PreparedStatement pstmt1 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'cpuOvercommitRatio', ?)");
PreparedStatement pstmt2 = conn.prepareStatement("INSERT INTO `cloud`.`cluster_details` (cluster_id, name, value) VALUES(?, 'memoryOvercommitRatio', ?)");
PreparedStatement pstmt3 = conn.prepareStatement("select value from `cloud`.`configuration` where name=?");) {
String global_cpu_overprovisioning_factor = "1";
if (rscpu_global.next())
global_cpu_overprovisioning_factor = rscpu_global.getString(1);
pstmt3.setString(1, "mem.overprovisioning.factor");
rsmem_global = pstmt3.executeQuery();
String global_mem_overprovisioning_factor = "1";
if (rsmem_global.next())
global_mem_overprovisioning_factor = rsmem_global.getString(1);
rs1 = pstmt.executeQuery();
while (rs1.next()) {
long id = rs1.getLong(1);
String hypervisor_type = rs1.getString(2);
if (HypervisorType.VMware.toString().equalsIgnoreCase(hypervisor_type)) {
pstmt1.setLong(1, id);
pstmt1.setString(2, global_cpu_overprovisioning_factor);
pstmt1.execute();
pstmt2.setLong(1, id);
pstmt2.setString(2, global_mem_overprovisioning_factor);
pstmt2.execute();
} else {
//update cluster_details table with the default overcommit ratios.
pstmt1.setLong(1,id);
pstmt1.setString(2,global_cpu_overprovisioning_factor);
pstmt1.execute();
pstmt2.setLong(1, id);
pstmt2.setString(2, "1");
pstmt2.execute();
pstmt3.setString(1, "cpu.overprovisioning.factor");
try (ResultSet rscpu_global = pstmt3.executeQuery();) {
if (rscpu_global.next())
global_cpu_overprovisioning_factor = rscpu_global.getString(1);
}
pstmt3.setString(1, "mem.overprovisioning.factor");
try (ResultSet rsmem_global = pstmt3.executeQuery();) {
if (rsmem_global.next())
global_mem_overprovisioning_factor = rsmem_global.getString(1);
}
try (ResultSet rs1 = pstmt.executeQuery();) {
while (rs1.next()) {
long id = rs1.getLong(1);
String hypervisor_type = rs1.getString(2);
if (HypervisorType.VMware.toString().equalsIgnoreCase(hypervisor_type)) {
pstmt1.setLong(1, id);
pstmt1.setString(2, global_cpu_overprovisioning_factor);
pstmt1.execute();
pstmt2.setLong(1, id);
pstmt2.setString(2, global_mem_overprovisioning_factor);
pstmt2.execute();
} else {
//update cluster_details table with the default overcommit ratios.
pstmt1.setLong(1, id);
pstmt1.setString(2, global_cpu_overprovisioning_factor);
pstmt1.execute();
pstmt2.setLong(1, id);
pstmt2.setString(2, "1");
pstmt2.execute();
}
}
}
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to update cluster_details with default overcommit ratios.", e);
} finally {
try {
if (rs1 != null) {
rs1.close();
}
if (rsmem_global != null) {
rsmem_global.close();
}
if (rscpu_global != null) {
rscpu_global.close();
}
if (pstmt != null) {
pstmt.close();
}
if (pstmt2 != null) {
pstmt2.close();
}
if (pstmt3 != null) {
pstmt3.close();
}
} catch (SQLException e) {
}
}
}
@ -846,94 +818,75 @@ public class Upgrade410to420 implements DbUpgrade {
}
private void updateNonLegacyZones(Connection conn, List<Long> zones) {
PreparedStatement clustersQuery = null;
PreparedStatement clusterDetailsQuery = null;
PreparedStatement pstmt = null;
ResultSet clusters = null;
ResultSet clusterDetails = null;
ResultSet dcInfo = null;
try {
for (Long zoneId : zones) {
s_logger.debug("Discovered non-legacy zone " + zoneId + ". Processing the zone to associate with VMware datacenter.");
// All clusters in a non legacy zone will belong to the same VMware DC, hence pick the first cluster
clustersQuery = conn.prepareStatement("select id from `cloud`.`cluster` where removed is NULL AND data_center_id=?");
clustersQuery.setLong(1, zoneId);
clusters = clustersQuery.executeQuery();
clusters.next();
Long clusterId = clusters.getLong("id");
try (PreparedStatement clustersQuery = conn.prepareStatement("select id from `cloud`.`cluster` where removed is NULL AND data_center_id=?");) {
clustersQuery.setLong(1, zoneId);
try (ResultSet clusters = clustersQuery.executeQuery();) {
clusters.next();
Long clusterId = clusters.getLong("id");
// Get VMware datacenter details from cluster_details table
String user = null;
String password = null;
String url = null;
clusterDetailsQuery = conn.prepareStatement("select name, value from `cloud`.`cluster_details` where cluster_id=?");
clusterDetailsQuery.setLong(1, clusterId);
clusterDetails = clusterDetailsQuery.executeQuery();
while (clusterDetails.next()) {
String key = clusterDetails.getString(1);
String value = clusterDetails.getString(2);
if (key.equalsIgnoreCase("username")) {
user = value;
} else if (key.equalsIgnoreCase("password")) {
password = value;
} else if (key.equalsIgnoreCase("url")) {
url = value;
// Get VMware datacenter details from cluster_details table
String user = null;
String password = null;
String url = null;
try (PreparedStatement clusterDetailsQuery = conn.prepareStatement("select name, value from `cloud`.`cluster_details` where cluster_id=?");) {
clusterDetailsQuery.setLong(1, clusterId);
try (ResultSet clusterDetails = clusterDetailsQuery.executeQuery();) {
while (clusterDetails.next()) {
String key = clusterDetails.getString(1);
String value = clusterDetails.getString(2);
if (key.equalsIgnoreCase("username")) {
user = value;
} else if (key.equalsIgnoreCase("password")) {
password = value;
} else if (key.equalsIgnoreCase("url")) {
url = value;
}
}
String[] tokens = url.split("/"); // url format - http://vcenter/dc/cluster
String vc = tokens[2];
String dcName = tokens[3];
String guid = dcName + "@" + vc;
try (PreparedStatement insertVmWareDC = conn
.prepareStatement("INSERT INTO `cloud`.`vmware_data_center` (uuid, name, guid, vcenter_host, username, password) values(?, ?, ?, ?, ?, ?)");) {
insertVmWareDC.setString(1, UUID.randomUUID().toString());
insertVmWareDC.setString(2, dcName);
insertVmWareDC.setString(3, guid);
insertVmWareDC.setString(4, vc);
insertVmWareDC.setString(5, user);
insertVmWareDC.setString(6, password);
insertVmWareDC.executeUpdate();
}
try (PreparedStatement selectVmWareDC = conn.prepareStatement("SELECT id FROM `cloud`.`vmware_data_center` where guid=?");) {
selectVmWareDC.setString(1, guid);
try (ResultSet vmWareDcInfo = selectVmWareDC.executeQuery();) {
Long vmwareDcId = -1L;
if (vmWareDcInfo.next()) {
vmwareDcId = vmWareDcInfo.getLong("id");
}
try (PreparedStatement insertMapping = conn
.prepareStatement("INSERT INTO `cloud`.`vmware_data_center_zone_map` (zone_id, vmware_data_center_id) values(?, ?)");) {
insertMapping.setLong(1, zoneId);
insertMapping.setLong(2, vmwareDcId);
insertMapping.executeUpdate();
}
}
}
}
}
}
}
String[] tokens = url.split("/"); // url format - http://vcenter/dc/cluster
String vc = tokens[2];
String dcName = tokens[3];
String guid = dcName + "@" + vc;
pstmt = conn.prepareStatement("INSERT INTO `cloud`.`vmware_data_center` (uuid, name, guid, vcenter_host, username, password) values(?, ?, ?, ?, ?, ?)");
pstmt.setString(1, UUID.randomUUID().toString());
pstmt.setString(2, dcName);
pstmt.setString(3, guid);
pstmt.setString(4, vc);
pstmt.setString(5, user);
pstmt.setString(6, password);
pstmt.executeUpdate();
pstmt = conn.prepareStatement("SELECT id FROM `cloud`.`vmware_data_center` where guid=?");
pstmt.setString(1, guid);
dcInfo = pstmt.executeQuery();
Long vmwareDcId = -1L;
if (dcInfo.next()) {
vmwareDcId = dcInfo.getLong("id");
}
pstmt = conn.prepareStatement("INSERT INTO `cloud`.`vmware_data_center_zone_map` (zone_id, vmware_data_center_id) values(?, ?)");
pstmt.setLong(1, zoneId);
pstmt.setLong(2, vmwareDcId);
pstmt.executeUpdate();
}
} catch (SQLException e) {
String msg = "Unable to update non legacy zones." + e.getMessage();
s_logger.error(msg);
throw new CloudRuntimeException(msg, e);
} finally {
try {
if (clustersQuery != null) {
clustersQuery.close();
}
if (clusterDetails != null) {
clusterDetails.close();
}
if (clusterDetailsQuery != null) {
clusterDetailsQuery.close();
}
if (clusters != null) {
clusters.close();
}
if (dcInfo != null) {
dcInfo.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
@ -1086,129 +1039,131 @@ public class Upgrade410to420 implements DbUpgrade {
s_logger.debug("Updating network ACLs");
PreparedStatement pstmt = null;
PreparedStatement pstmtDelete = null;
ResultSet rs = null;
ResultSet rsAcls = null;
ResultSet rsCidr = null;
//1,2 are default acl Ids, start acl Ids from 3
long nextAclId = 3;
String sqlSelectNetworkIds = "SELECT id, vpc_id, uuid FROM `cloud`.`networks` where vpc_id is not null and removed is null";
String sqlSelectFirewallRules = "SELECT id, uuid, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type FROM `cloud`.`firewall_rules` where network_id = ? and purpose = 'NetworkACL'";
String sqlInsertNetworkAcl = "INSERT INTO `cloud`.`network_acl` (id, uuid, vpc_id, description, name) values (?, UUID(), ? , ?, ?)";
String sqlSelectFirewallCidrs = "SELECT id, source_cidr FROM `cloud`.`firewall_rules_cidrs` where firewall_rule_id = ?";
String sqlDeleteFirewallCidr = "DELETE FROM `cloud`.`firewall_rules_cidrs` where id = ?";
String sqlInsertNetworkAclItem = "INSERT INTO `cloud`.`network_acl_item` (uuid, acl_id, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type, cidr, number, action) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
String sqlDeleteFirewallRules = "DELETE FROM `cloud`.`firewall_rules` where id = ?";
String sqlUpdateNetworks = "UPDATE `cloud`.`networks` set network_acl_id=? where id=?";
try {
try (
PreparedStatement pstmtSelectNetworkIds = conn.prepareStatement(sqlSelectNetworkIds);
PreparedStatement pstmtUpdate = conn.prepareStatement(sqlUpdateNetworks);
PreparedStatement pstmtInsertNetworkAclItem = conn.prepareStatement(sqlInsertNetworkAclItem);
PreparedStatement pstmtSelectFirewallRules = conn.prepareStatement(sqlSelectFirewallRules);
PreparedStatement pstmtInsertNetworkAcl = conn.prepareStatement(sqlInsertNetworkAcl);
PreparedStatement pstmtSelectFirewallCidrs = conn.prepareStatement(sqlSelectFirewallCidrs);
PreparedStatement pstmtDeleteFirewallCidr = conn.prepareStatement(sqlDeleteFirewallCidr);
PreparedStatement pstmtDeleteFirewallRules = conn.prepareStatement(sqlDeleteFirewallRules);
ResultSet rsNetworkIds = pstmtSelectNetworkIds.executeQuery();) {
//Get all VPC tiers
pstmt = conn.prepareStatement("SELECT id, vpc_id, uuid FROM `cloud`.`networks` where vpc_id is not null and removed is null");
rs = pstmt.executeQuery();
while (rs.next()) {
Long networkId = rs.getLong(1);
while (rsNetworkIds.next()) {
Long networkId = rsNetworkIds.getLong(1);
s_logger.debug("Updating network ACLs for network: " + networkId);
Long vpcId = rs.getLong(2);
String tierUuid = rs.getString(3);
pstmt =
conn.prepareStatement("SELECT id, uuid, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type FROM `cloud`.`firewall_rules` where network_id = ? and purpose = 'NetworkACL'");
pstmt.setLong(1, networkId);
rsAcls = pstmt.executeQuery();
Long vpcId = rsNetworkIds.getLong(2);
String tierUuid = rsNetworkIds.getString(3);
pstmtSelectFirewallRules.setLong(1, networkId);
boolean hasAcls = false;
Long aclId = null;
int number = 1;
while (rsAcls.next()) {
if (!hasAcls) {
hasAcls = true;
aclId = nextAclId++;
//create ACL for the tier
s_logger.debug("Creating network ACL for tier: " + tierUuid);
pstmt = conn.prepareStatement("INSERT INTO `cloud`.`network_acl` (id, uuid, vpc_id, description, name) values (?, UUID(), ? , ?, ?)");
pstmt.setLong(1, aclId);
pstmt.setLong(2, vpcId);
pstmt.setString(3, "ACL for tier " + tierUuid);
pstmt.setString(4, "tier_" + tierUuid);
pstmt.executeUpdate();
}
Long fwRuleId = rsAcls.getLong(1);
String cidr = null;
//get cidr from firewall_rules_cidrs
pstmt = conn.prepareStatement("SELECT id, source_cidr FROM `cloud`.`firewall_rules_cidrs` where firewall_rule_id = ?");
pstmt.setLong(1, fwRuleId);
rsCidr = pstmt.executeQuery();
while (rsCidr.next()) {
Long cidrId = rsCidr.getLong(1);
String sourceCidr = rsCidr.getString(2);
if (cidr == null) {
cidr = sourceCidr;
} else {
cidr += "," + sourceCidr;
try (ResultSet rsAcls = pstmtSelectFirewallRules.executeQuery();) {
while (rsAcls.next()) {
if (!hasAcls) {
hasAcls = true;
aclId = nextAclId++;
//create ACL for the tier
s_logger.debug("Creating network ACL for tier: " + tierUuid);
pstmtInsertNetworkAcl.setLong(1, aclId);
pstmtInsertNetworkAcl.setLong(2, vpcId);
pstmtInsertNetworkAcl.setString(3, "ACL for tier " + tierUuid);
pstmtInsertNetworkAcl.setString(4, "tier_" + tierUuid);
pstmtInsertNetworkAcl.executeUpdate();
}
//Delete cidr entry
pstmtDelete = conn.prepareStatement("DELETE FROM `cloud`.`firewall_rules_cidrs` where id = ?");
pstmtDelete.setLong(1, cidrId);
pstmtDelete.executeUpdate();
}
String aclItemUuid = rsAcls.getString(2);
//Move acl to network_acl_item table
s_logger.debug("Moving firewall rule: " + aclItemUuid);
pstmt =
conn.prepareStatement("INSERT INTO `cloud`.`network_acl_item` (uuid, acl_id, start_port, end_port, state, protocol, icmp_code, icmp_type, created, traffic_type, cidr, number, action) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )");
//uuid
pstmt.setString(1, aclItemUuid);
//aclId
pstmt.setLong(2, aclId);
//Start port
Integer startPort = rsAcls.getInt(3);
if (rsAcls.wasNull()) {
pstmt.setNull(3, Types.INTEGER);
} else {
pstmt.setLong(3, startPort);
}
//End port
Integer endPort = rsAcls.getInt(4);
if (rsAcls.wasNull()) {
pstmt.setNull(4, Types.INTEGER);
} else {
pstmt.setLong(4, endPort);
}
//State
String state = rsAcls.getString(5);
pstmt.setString(5, state);
//protocol
String protocol = rsAcls.getString(6);
pstmt.setString(6, protocol);
//icmp_code
Integer icmpCode = rsAcls.getInt(7);
if (rsAcls.wasNull()) {
pstmt.setNull(7, Types.INTEGER);
} else {
pstmt.setLong(7, icmpCode);
}
Long fwRuleId = rsAcls.getLong(1);
String cidr = null;
//get cidr from firewall_rules_cidrs
pstmtSelectFirewallCidrs.setLong(1, fwRuleId);
try (ResultSet rsCidr = pstmtSelectFirewallCidrs.executeQuery();) {
while (rsCidr.next()) {
Long cidrId = rsCidr.getLong(1);
String sourceCidr = rsCidr.getString(2);
if (cidr == null) {
cidr = sourceCidr;
} else {
cidr += "," + sourceCidr;
}
//Delete cidr entry
pstmtDeleteFirewallCidr.setLong(1, cidrId);
pstmtDeleteFirewallCidr.executeUpdate();
}
}
String aclItemUuid = rsAcls.getString(2);
//Move acl to network_acl_item table
s_logger.debug("Moving firewall rule: " + aclItemUuid);
//uuid
pstmtInsertNetworkAclItem.setString(1, aclItemUuid);
//aclId
pstmtInsertNetworkAclItem.setLong(2, aclId);
//Start port
Integer startPort = rsAcls.getInt(3);
if (rsAcls.wasNull()) {
pstmtInsertNetworkAclItem.setNull(3, Types.INTEGER);
} else {
pstmtInsertNetworkAclItem.setLong(3, startPort);
}
//End port
Integer endPort = rsAcls.getInt(4);
if (rsAcls.wasNull()) {
pstmtInsertNetworkAclItem.setNull(4, Types.INTEGER);
} else {
pstmtInsertNetworkAclItem.setLong(4, endPort);
}
//State
String state = rsAcls.getString(5);
pstmtInsertNetworkAclItem.setString(5, state);
//protocol
String protocol = rsAcls.getString(6);
pstmtInsertNetworkAclItem.setString(6, protocol);
//icmp_code
Integer icmpCode = rsAcls.getInt(7);
if (rsAcls.wasNull()) {
pstmtInsertNetworkAclItem.setNull(7, Types.INTEGER);
} else {
pstmtInsertNetworkAclItem.setLong(7, icmpCode);
}
//icmp_type
Integer icmpType = rsAcls.getInt(8);
if (rsAcls.wasNull()) {
pstmt.setNull(8, Types.INTEGER);
} else {
pstmt.setLong(8, icmpType);
//icmp_type
Integer icmpType = rsAcls.getInt(8);
if (rsAcls.wasNull()) {
pstmtInsertNetworkAclItem.setNull(8, Types.INTEGER);
} else {
pstmtInsertNetworkAclItem.setLong(8, icmpType);
}
//created
Date created = rsAcls.getDate(9);
pstmtInsertNetworkAclItem.setDate(9, created);
//traffic type
String trafficType = rsAcls.getString(10);
pstmtInsertNetworkAclItem.setString(10, trafficType);
//cidr
pstmtInsertNetworkAclItem.setString(11, cidr);
//number
pstmtInsertNetworkAclItem.setInt(12, number++);
//action
pstmtInsertNetworkAclItem.setString(13, "Allow");
pstmtInsertNetworkAclItem.executeUpdate();
//Delete firewall rule
pstmtDeleteFirewallRules.setLong(1, fwRuleId);
pstmtDeleteFirewallRules.executeUpdate();
}
//created
Date created = rsAcls.getDate(9);
pstmt.setDate(9, created);
//traffic type
String trafficType = rsAcls.getString(10);
pstmt.setString(10, trafficType);
//cidr
pstmt.setString(11, cidr);
//number
pstmt.setInt(12, number++);
//action
pstmt.setString(13, "Allow");
pstmt.executeUpdate();
//Delete firewall rule
pstmtDelete = conn.prepareStatement("DELETE FROM `cloud`.`firewall_rules` where id = ?");
pstmtDelete.setLong(1, fwRuleId);
pstmtDelete.executeUpdate();
}
if (!hasAcls) {
//no network ACls for this network.
@ -1216,30 +1171,13 @@ public class Upgrade410to420 implements DbUpgrade {
aclId = NetworkACL.DEFAULT_DENY;
}
//Assign acl to network
pstmt = conn.prepareStatement("UPDATE `cloud`.`networks` set network_acl_id=? where id=?");
pstmt.setLong(1, aclId);
pstmt.setLong(2, networkId);
pstmt.executeUpdate();
pstmtUpdate.setLong(1, aclId);
pstmtUpdate.setLong(2, networkId);
pstmtUpdate.executeUpdate();
}
s_logger.debug("Done updating network ACLs ");
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to move network acls from firewall rules table to network_acl_item table", e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (rsAcls != null) {
rsAcls.close();
}
if (rsCidr != null) {
rsCidr.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
}
@ -1457,12 +1395,13 @@ public class Upgrade410to420 implements DbUpgrade {
// Corrects upgrade for deployment with F5 and SRX devices (pre 3.0) to network offering &
// network service provider paradigm
private void correctExternalNetworkDevicesSetup(Connection conn) {
PreparedStatement zoneSearchStmt = null, pNetworkStmt = null, f5DevicesStmt = null, srxDevicesStmt = null;
ResultSet zoneResults = null, pNetworksResults = null, f5DevicesResult = null, srxDevicesResult = null;
PreparedStatement pNetworkStmt = null, f5DevicesStmt = null, srxDevicesStmt = null;
ResultSet pNetworksResults = null, f5DevicesResult = null, srxDevicesResult = null;
try {
zoneSearchStmt = conn.prepareStatement("SELECT id, networktype FROM `cloud`.`data_center`");
zoneResults = zoneSearchStmt.executeQuery();
try (
PreparedStatement zoneSearchStmt = conn.prepareStatement("SELECT id, networktype FROM `cloud`.`data_center`");
ResultSet zoneResults = zoneSearchStmt.executeQuery();
){
while (zoneResults.next()) {
long zoneId = zoneResults.getLong(1);
String networkType = zoneResults.getString(2);
@ -1499,12 +1438,13 @@ public class Upgrade410to420 implements DbUpgrade {
}
}
PreparedStatement fetchSRXNspStmt =
boolean hasSrxNsp = false;
try (PreparedStatement fetchSRXNspStmt =
conn.prepareStatement("SELECT id from `cloud`.`physical_network_service_providers` where physical_network_id=" + physicalNetworkId +
" and provider_name = 'JuniperSRX'");
ResultSet rsSRXNSP = fetchSRXNspStmt.executeQuery();
boolean hasSrxNsp = rsSRXNSP.next();
fetchSRXNspStmt.close();
ResultSet rsSRXNSP = fetchSRXNspStmt.executeQuery();) {
hasSrxNsp = rsSRXNSP.next();
}
// if there is no 'JuniperSRX' physical network service provider added into physical network then
// add 'JuniperSRX' as network service provider and add the entry in 'external_firewall_devices'
@ -1527,24 +1467,8 @@ public class Upgrade410to420 implements DbUpgrade {
// not the network service provider has been provisioned in to physical network, mark all guest network
// to be using network offering 'Isolated with external providers'
fixZoneUsingExternalDevices(conn);
if (zoneResults != null) {
try {
zoneResults.close();
} catch (SQLException e) {
}
}
if (zoneSearchStmt != null) {
try {
zoneSearchStmt.close();
} catch (SQLException e) {
}
}
} catch (SQLException e) {
throw new CloudRuntimeException("Exception while adding PhysicalNetworks", e);
} finally {
}
}
@ -1823,39 +1747,37 @@ public class Upgrade410to420 implements DbUpgrade {
// migrate secondary storages NFS from host tables to image_store table
private void migrateSecondaryStorageToImageStore(Connection conn) {
PreparedStatement storeInsert = null;
PreparedStatement storeDetailInsert = null;
PreparedStatement nfsQuery = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
ResultSet storeInfo = null;
String sqlSelectS3Count = "select count(*) from `cloud`.`s3`";
String sqlSelectSwiftCount = "select count(*) from `cloud`.`swift`";
String sqlInsertStoreDetail = "INSERT INTO `cloud`.`image_store_details` (store_id, name, value) values(?, ?, ?)";
String sqlUpdateHostAsRemoved = "UPDATE `cloud`.`host` SET removed = now() WHERE type = 'SecondaryStorage' and removed is null";
s_logger.debug("Migrating secondary storage to image store");
boolean hasS3orSwift = false;
try {
try (
PreparedStatement pstmtSelectS3Count = conn.prepareStatement(sqlSelectS3Count);
PreparedStatement pstmtSelectSwiftCount = conn.prepareStatement(sqlSelectSwiftCount);
PreparedStatement storeDetailInsert = conn.prepareStatement(sqlInsertStoreDetail);
PreparedStatement storeInsert =
conn.prepareStatement("INSERT INTO `cloud`.`image_store` (id, uuid, name, image_provider_name, protocol, url, data_center_id, scope, role, parent, total_size, created) values(?, ?, ?, 'NFS', 'nfs', ?, ?, 'ZONE', ?, ?, ?, ?)");
PreparedStatement nfsQuery =
conn.prepareStatement("select id, uuid, url, data_center_id, parent, total_size, created from `cloud`.`host` where type = 'SecondaryStorage' and removed is null");
PreparedStatement pstmtUpdateHostAsRemoved = conn.prepareStatement(sqlUpdateHostAsRemoved);
ResultSet rsSelectS3Count = pstmtSelectS3Count.executeQuery();
ResultSet rsSelectSwiftCount = pstmtSelectSwiftCount.executeQuery();
ResultSet rsNfs = nfsQuery.executeQuery();
) {
s_logger.debug("Checking if we need to migrate NFS secondary storage to image store or staging store");
int numRows = 0;
pstmt = conn.prepareStatement("select count(*) from `cloud`.`s3`");
rs = pstmt.executeQuery();
if (rs.next()) {
numRows = rs.getInt(1);
if (rsSelectS3Count.next()) {
numRows = rsSelectS3Count.getInt(1);
}
// check if there is swift storage
if (rsSelectSwiftCount.next()) {
numRows += rsSelectSwiftCount.getInt(1);
}
rs.close();
pstmt.close();
if (numRows > 0) {
hasS3orSwift = true;
} else {
// check if there is swift storage
pstmt = conn.prepareStatement("select count(*) from `cloud`.`swift`");
rs = pstmt.executeQuery();
if (rs.next()) {
numRows = rs.getInt(1);
}
rs.close();
pstmt.close();
if (numRows > 0) {
hasS3orSwift = true;
}
}
String store_role = "Image";
@ -1865,23 +1787,15 @@ public class Upgrade410to420 implements DbUpgrade {
s_logger.debug("Migrating NFS secondary storage to " + store_role + " store");
storeDetailInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store_details` (store_id, name, value) values(?, ?, ?)");
// migrate NFS secondary storage, for nfs, keep previous host_id as the store_id
storeInsert =
conn.prepareStatement("INSERT INTO `cloud`.`image_store` (id, uuid, name, image_provider_name, protocol, url, data_center_id, scope, role, parent, total_size, created) values(?, ?, ?, 'NFS', 'nfs', ?, ?, 'ZONE', ?, ?, ?, ?)");
nfsQuery =
conn.prepareStatement("select id, uuid, url, data_center_id, parent, total_size, created from `cloud`.`host` where type = 'SecondaryStorage' and removed is null");
rs = nfsQuery.executeQuery();
while (rs.next()) {
Long nfs_id = rs.getLong("id");
String nfs_uuid = rs.getString("uuid");
String nfs_url = rs.getString("url");
String nfs_parent = rs.getString("parent");
int nfs_dcid = rs.getInt("data_center_id");
Long nfs_totalsize = rs.getObject("total_size") != null ? rs.getLong("total_size") : null;
Date nfs_created = rs.getDate("created");
while (rsNfs.next()) {
Long nfs_id = rsNfs.getLong("id");
String nfs_uuid = rsNfs.getString("uuid");
String nfs_url = rsNfs.getString("url");
String nfs_parent = rsNfs.getString("parent");
int nfs_dcid = rsNfs.getInt("data_center_id");
Long nfs_totalsize = rsNfs.getObject("total_size") != null ? rsNfs.getLong("total_size") : null;
Date nfs_created = rsNfs.getDate("created");
// insert entry in image_store table and image_store_details
// table and store host_id and store_id mapping
@ -1902,36 +1816,11 @@ public class Upgrade410to420 implements DbUpgrade {
}
s_logger.debug("Marking NFS secondary storage in host table as removed");
pstmt = conn.prepareStatement("UPDATE `cloud`.`host` SET removed = now() WHERE type = 'SecondaryStorage' and removed is null");
pstmt.executeUpdate();
pstmt.close();
pstmtUpdateHostAsRemoved.executeUpdate();
} catch (SQLException e) {
String msg = "Unable to migrate secondary storages." + e.getMessage();
s_logger.error(msg);
throw new CloudRuntimeException(msg, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (storeInfo != null) {
storeInfo.close();
}
if (storeInsert != null) {
storeInsert.close();
}
if (storeDetailInsert != null) {
storeDetailInsert.close();
}
if (nfsQuery != null) {
nfsQuery.close();
}
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Completed migrating secondary storage to image store");
}
@ -2008,26 +1897,21 @@ public class Upgrade410to420 implements DbUpgrade {
// migrate secondary storages S3 from s3 tables to image_store table
private void migrateS3ToImageStore(Connection conn) {
PreparedStatement storeInsert = null;
PreparedStatement storeDetailInsert = null;
PreparedStatement storeQuery = null;
PreparedStatement s3Query = null;
ResultSet rs = null;
ResultSet storeInfo = null;
Long storeId = null;
Map<Long, Long> s3_store_id_map = new HashMap<Long, Long>();
s_logger.debug("Migrating S3 to image store");
try {
storeQuery = conn.prepareStatement("select id from `cloud`.`image_store` where uuid = ?");
storeDetailInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store_details` (store_id, name, value) values(?, ?, ?)");
try (
PreparedStatement storeQuery = conn.prepareStatement("select id from `cloud`.`image_store` where uuid = ?");
PreparedStatement storeDetailInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store_details` (store_id, name, value) values(?, ?, ?)");
// migrate S3 to image_store
storeInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store` (uuid, name, image_provider_name, protocol, scope, role, created) " +
"values(?, ?, 'S3', ?, 'REGION', 'Image', ?)");
s3Query = conn.prepareStatement("select id, uuid, access_key, secret_key, end_point, bucket, https, connection_timeout, " +
"max_error_retry, socket_timeout, created from `cloud`.`s3`");
rs = s3Query.executeQuery();
// migrate S3 to image_store
PreparedStatement storeInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store` (uuid, name, image_provider_name, protocol, scope, role, created) " +
"values(?, ?, 'S3', ?, 'REGION', 'Image', ?)");
PreparedStatement s3Query = conn.prepareStatement("select id, uuid, access_key, secret_key, end_point, bucket, https, connection_timeout, " +
"max_error_retry, socket_timeout, created from `cloud`.`s3`");
ResultSet rs = s3Query.executeQuery();
) {
while (rs.next()) {
Long s3_id = rs.getLong("id");
@ -2052,9 +1936,10 @@ public class Upgrade410to420 implements DbUpgrade {
storeInsert.executeUpdate();
storeQuery.setString(1, s3_uuid);
storeInfo = storeQuery.executeQuery();
if (storeInfo.next()) {
storeId = storeInfo.getLong("id");
try (ResultSet storeInfo = storeQuery.executeQuery();) {
if (storeInfo.next()) {
storeId = storeInfo.getLong("id");
}
}
Map<String, String> detailMap = new HashMap<String, String>();
@ -2088,29 +1973,6 @@ public class Upgrade410to420 implements DbUpgrade {
String msg = "Unable to migrate S3 secondary storages." + e.getMessage();
s_logger.error(msg);
throw new CloudRuntimeException(msg, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (storeInfo != null) {
storeInfo.close();
}
if (storeInsert != null) {
storeInsert.close();
}
if (storeDetailInsert != null) {
storeDetailInsert.close();
}
if (storeQuery != null) {
storeQuery.close();
}
if (s3Query != null) {
s3Query.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Migrating template_s3_ref to template_store_ref");
@ -2223,26 +2085,20 @@ public class Upgrade410to420 implements DbUpgrade {
// migrate secondary storages Swift from swift tables to image_store table
private void migrateSwiftToImageStore(Connection conn) {
PreparedStatement storeInsert = null;
PreparedStatement storeDetailInsert = null;
PreparedStatement storeQuery = null;
PreparedStatement swiftQuery = null;
ResultSet rs = null;
ResultSet storeInfo = null;
Long storeId = null;
Map<Long, Long> swift_store_id_map = new HashMap<Long, Long>();
s_logger.debug("Migrating Swift to image store");
try {
storeQuery = conn.prepareStatement("select id from `cloud`.`image_store` where uuid = ?");
storeDetailInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store_details` (store_id, name, value) values(?, ?, ?)");
try (
PreparedStatement storeQuery = conn.prepareStatement("select id from `cloud`.`image_store` where uuid = ?");
PreparedStatement storeDetailInsert = conn.prepareStatement("INSERT INTO `cloud`.`image_store_details` (store_id, name, value) values(?, ?, ?)");
// migrate SWIFT secondary storage
storeInsert =
// migrate SWIFT secondary storage
PreparedStatement storeInsert =
conn.prepareStatement("INSERT INTO `cloud`.`image_store` (uuid, name, image_provider_name, protocol, url, scope, role, created) values(?, ?, 'Swift', 'http', ?, 'REGION', 'Image', ?)");
swiftQuery = conn.prepareStatement("select id, uuid, url, account, username, swift.key, created from `cloud`.`swift`");
rs = swiftQuery.executeQuery();
PreparedStatement swiftQuery = conn.prepareStatement("select id, uuid, url, account, username, swift.key, created from `cloud`.`swift`");
ResultSet rs = swiftQuery.executeQuery();
) {
while (rs.next()) {
Long swift_id = rs.getLong("id");
String swift_uuid = rs.getString("uuid");
@ -2261,9 +2117,10 @@ public class Upgrade410to420 implements DbUpgrade {
storeInsert.executeUpdate();
storeQuery.setString(1, swift_uuid);
storeInfo = storeQuery.executeQuery();
if (storeInfo.next()) {
storeId = storeInfo.getLong("id");
try (ResultSet storeInfo = storeQuery.executeQuery();) {
if (storeInfo.next()) {
storeId = storeInfo.getLong("id");
}
}
Map<String, String> detailMap = new HashMap<String, String>();
@ -2286,29 +2143,6 @@ public class Upgrade410to420 implements DbUpgrade {
String msg = "Unable to migrate swift secondary storages." + e.getMessage();
s_logger.error(msg);
throw new CloudRuntimeException(msg, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (storeInfo != null) {
storeInfo.close();
}
if (storeInsert != null) {
storeInsert.close();
}
if (storeDetailInsert != null) {
storeDetailInsert.close();
}
if (storeQuery != null) {
storeQuery.close();
}
if (swiftQuery != null) {
swiftQuery.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Migrating template_swift_ref to template_store_ref");
@ -2322,16 +2156,13 @@ public class Upgrade410to420 implements DbUpgrade {
// migrate template_s3_ref to template_store_ref
private void migrateTemplateSwiftRef(Connection conn, Map<Long, Long> swiftStoreMap) {
PreparedStatement tmplStoreInsert = null;
PreparedStatement s3Query = null;
ResultSet rs = null;
s_logger.debug("Updating template_store_ref table from template_swift_ref table");
try {
tmplStoreInsert =
try (
PreparedStatement tmplStoreInsert =
conn.prepareStatement("INSERT INTO `cloud`.`template_store_ref` (store_id, template_id, created, download_pct, size, physical_size, download_state, local_path, install_path, update_count, ref_cnt, store_role, state) values(?, ?, ?, 100, ?, ?, 'DOWNLOADED', '?', '?', 0, 0, 'Image', 'Ready')");
s3Query = conn.prepareStatement("select swift_id, template_id, created, path, size, physical_size from `cloud`.`template_swift_ref`");
rs = s3Query.executeQuery();
PreparedStatement s3Query = conn.prepareStatement("select swift_id, template_id, created, path, size, physical_size from `cloud`.`template_swift_ref`");
ResultSet rs = s3Query.executeQuery();
) {
while (rs.next()) {
Long swift_id = rs.getLong("swift_id");
Long tmpl_id = rs.getLong("template_id");
@ -2361,19 +2192,6 @@ public class Upgrade410to420 implements DbUpgrade {
String msg = "Unable to migrate template_swift_ref." + e.getMessage();
s_logger.error(msg);
throw new CloudRuntimeException(msg, e);
} finally {
try {
if (rs != null) {
rs.close();
}
if (tmplStoreInsert != null) {
tmplStoreInsert.close();
}
if (s3Query != null) {
s3Query.close();
}
} catch (SQLException e) {
}
}
s_logger.debug("Completed migrating template_swift_ref table.");
}
@ -2636,10 +2454,10 @@ public class Upgrade410to420 implements DbUpgrade {
private void upgradeResourceCount(Connection conn) {
s_logger.debug("upgradeResourceCount start");
ResultSet rsAccount = null;
try( PreparedStatement sel_dom_pstmt = conn.prepareStatement("select id, domain_id FROM `cloud`.`account` where removed is NULL ");)
{
rsAccount = sel_dom_pstmt.executeQuery();
try(
PreparedStatement sel_dom_pstmt = conn.prepareStatement("select id, domain_id FROM `cloud`.`account` where removed is NULL ");
ResultSet rsAccount = sel_dom_pstmt.executeQuery();
) {
while (rsAccount.next()) {
long account_id = rsAccount.getLong(1);
long domain_id = rsAccount.getLong(2);
@ -2767,13 +2585,6 @@ public class Upgrade410to420 implements DbUpgrade {
s_logger.debug("upgradeResourceCount finish");
} catch (SQLException e) {
throw new CloudRuntimeException("Unable to upgrade resource count (cpu,memory,primary_storage,secondary_storage) ", e);
} finally {
try {
if (rsAccount != null) {
rsAccount.close();
}
} catch (SQLException e) {
}
}
}

Some files were not shown because too many files have changed in this diff Show More