mirror of https://github.com/apache/cloudstack.git
merged from master
This commit is contained in:
commit
7bdddd0726
|
|
@ -81,3 +81,4 @@ debian/*.debhelper
|
|||
replace.properties.tmp
|
||||
build-indep-stamp
|
||||
configure-stamp
|
||||
*_flymake.js
|
||||
19
INSTALL.md
19
INSTALL.md
|
|
@ -1,5 +1,5 @@
|
|||
This document describes how to develop, build, package and install Apache CloudStack
|
||||
(Incubating). For more information please refer to the project's website:
|
||||
This document describes how to develop, build, package and install Apache
|
||||
CloudStack. For more information please refer to:
|
||||
|
||||
http://cloudstack.apache.org
|
||||
|
||||
|
|
@ -10,7 +10,7 @@ Refer to the [wiki](http://cwiki.apache.org/confluence/display/CLOUDSTACK/Index)
|
|||
for the latest information, especially:
|
||||
|
||||
- [Setting up development environment](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Setting+up+CloudStack+Development+Environment) for Apache CloudStack.
|
||||
- [Building](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Building) Apache CloudStack.
|
||||
- [Building](https://cwiki.apache.org/confluence/display/CLOUDSTACK/How+to+build+on+master+branch) Apache CloudStack.
|
||||
|
||||
## Setting up Development Environment
|
||||
|
||||
|
|
@ -21,12 +21,12 @@ Install tools and dependencies used for development:
|
|||
$ yum install git ant ant-devel java-1.6.0-openjdk java-1.6.0-openjdk-devel
|
||||
mysql mysql-server tomcat6 mkisofs gcc python MySQL-python openssh-clients wget
|
||||
|
||||
Set up Maven (3.0.4):
|
||||
Set up Maven (3.0.5):
|
||||
|
||||
$ wget http://www.us.apache.org/dist/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.tar.gz
|
||||
$ wget http://www.us.apache.org/dist/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz
|
||||
$ cd /usr/local/ # or any path
|
||||
$ tar -zxvf apache-maven-3.0.4-bin.tar.gz
|
||||
$ echo export M2_HOME=/usr/local/apache-maven-3.0.4 >> ~/.bashrc # or .zshrc or .profile
|
||||
$ tar -zxvf apache-maven-3.0.5-bin.tar.gz
|
||||
$ echo export M2_HOME=/usr/local/apache-maven-3.0.5 >> ~/.bashrc # or .zshrc or .profile
|
||||
$ echo export PATH=${M2_HOME}/bin:${PATH} >> ~/.bashrc # or .zshrc or .profile
|
||||
|
||||
Note: Tomcat 6.0.35 has some known issue with Apache CloudStack, please use Tomcat
|
||||
|
|
@ -77,10 +77,10 @@ Start the MySQL service:
|
|||
|
||||
You may get the source code from the repository hosted on Apache:
|
||||
|
||||
$ git clone https://git-wip-us.apache.org/repos/asf/cloudstack.git
|
||||
$ git clone git://git.apache.org/cloudstack.git
|
||||
|
||||
Or, you may fork a repository from the official Apache CloudStack mirror by
|
||||
Apache on [Github](https://github.com/apache/incubator-cloudstack)
|
||||
Apache on [Github](https://github.com/apache/cloudstack)
|
||||
|
||||
To keep yourself updated on a branch, do:
|
||||
|
||||
|
|
@ -92,7 +92,6 @@ For example, for master:
|
|||
|
||||
## Building
|
||||
|
||||
|
||||
Clean and build:
|
||||
|
||||
$ mvn clean install -P systemvm,developer
|
||||
|
|
|
|||
|
|
@ -95,6 +95,11 @@ if __name__ == '__main__':
|
|||
parser.add_option("--prvNic", dest="prvNic", help="Private traffic interface")
|
||||
parser.add_option("--guestNic", dest="guestNic", help="Guest traffic interface")
|
||||
|
||||
old_config = configFileOps("@AGENTSYSCONFDIR@/agent.properties")
|
||||
bridgeType = old_config.getEntry("network.bridge.type").lower()
|
||||
if bridgeType:
|
||||
glbEnv.bridgeType = bridgeType
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
if options.auto is None:
|
||||
userInputs = getUserInputs()
|
||||
|
|
@ -104,7 +109,7 @@ if __name__ == '__main__':
|
|||
glbEnv.pod = userInputs[3]
|
||||
glbEnv.cluster = userInputs[4]
|
||||
#generate UUID
|
||||
glbEnv.uuid = configFileOps("@AGENTSYSCONFDIR@/agent.properties").getEntry("guid")
|
||||
glbEnv.uuid = old_config.getEntry("guid")
|
||||
if glbEnv.uuid == "":
|
||||
glbEnv.uuid = bash("uuidgen").getStdout()
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -84,6 +84,11 @@ domr.scripts.dir=scripts/network/domr/kvm
|
|||
# set the hypervisor type, values are: kvm, lxc
|
||||
# hypervisor.type=kvm
|
||||
|
||||
# set the hypervisor URI. Usually there is no need for changing this
|
||||
# For KVM: qemu:///system
|
||||
# For LXC: lxc:///
|
||||
# hypervisor.uri=qemu:///system
|
||||
|
||||
# settings to enable direct networking in libvirt, should not be used
|
||||
# on hosts that run system vms, values for mode are: private, bridge, vepa
|
||||
# libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.DirectVifDriver
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ public class VirtualMachineTO {
|
|||
boolean rebootOnCrash;
|
||||
boolean enableHA;
|
||||
boolean limitCpuUse;
|
||||
boolean enableDynamicallyScaleVm;
|
||||
String vncPassword;
|
||||
String vncAddr;
|
||||
Map<String, String> params;
|
||||
|
|
@ -102,6 +103,14 @@ public class VirtualMachineTO {
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
public boolean isEnableDynamicallyScaleVm() {
|
||||
return enableDynamicallyScaleVm;
|
||||
}
|
||||
|
||||
public void setEnableDynamicallyScaleVm(boolean enableDynamicallyScaleVm) {
|
||||
this.enableDynamicallyScaleVm = enableDynamicallyScaleVm;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ public class EventTypes {
|
|||
public static final String EVENT_NET_IP_ASSIGN = "NET.IPASSIGN";
|
||||
public static final String EVENT_NET_IP_RELEASE = "NET.IPRELEASE";
|
||||
public static final String EVENT_PORTABLE_IP_ASSIGN = "PORTABLE.IPASSIGN";
|
||||
public static final String EVENT_PORTABLE_IP_RELEASE = "PORTABLEIPRELEASE";
|
||||
public static final String EVENT_PORTABLE_IP_RELEASE = "PORTABLE.IPRELEASE";
|
||||
public static final String EVENT_NET_RULE_ADD = "NET.RULEADD";
|
||||
public static final String EVENT_NET_RULE_DELETE = "NET.RULEDELETE";
|
||||
public static final String EVENT_NET_RULE_MODIFY = "NET.RULEMODIFY";
|
||||
|
|
@ -436,6 +436,7 @@ public class EventTypes {
|
|||
|
||||
public static final String EVENT_PORTABLE_IP_RANGE_CREATE = "PORTABLE.IP.RANGE.CREATE";
|
||||
public static final String EVENT_PORTABLE_IP_RANGE_DELETE = "PORTABLE.IP.RANGE.DELETE";
|
||||
public static final String EVENT_PORTABLE_IP_TRANSFER = "PORTABLE.IP.TRANSFER";
|
||||
|
||||
static {
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public interface NetworkService {
|
|||
IpAddress allocatePortableIP(Account ipOwner, int regionId, Long zoneId, Long networkId, Long vpcId) throws ResourceAllocationException,
|
||||
InsufficientAddressCapacityException, ConcurrentOperationException;
|
||||
|
||||
boolean releasePortableIpAddress(long ipAddressId) throws InsufficientAddressCapacityException;
|
||||
boolean releasePortableIpAddress(long ipAddressId);
|
||||
|
||||
Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException,
|
||||
ResourceAllocationException;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public interface RemoteAccessVpnService {
|
|||
|
||||
RemoteAccessVpn createRemoteAccessVpn(long vpnServerAddressId, String ipRange, boolean openFirewall, long networkId)
|
||||
throws NetworkRuleConflictException;
|
||||
void destroyRemoteAccessVpn(long vpnServerAddressId, Account caller) throws ResourceUnavailableException;
|
||||
void destroyRemoteAccessVpnForIp(long vpnServerAddressId, Account caller) throws ResourceUnavailableException;
|
||||
RemoteAccessVpn startRemoteAccessVpn(long vpnServerAddressId, boolean openFirewall) throws ResourceUnavailableException;
|
||||
|
||||
VpnUser addVpnUser(long vpnOwnerId, String userName, String password);
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ public abstract class BaseCmd {
|
|||
return project.getProjectAccountId();
|
||||
} else {
|
||||
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, projectId, "projectId");
|
||||
ex.addProxyObject(project.getUuid(), "projectId");
|
||||
throw ex;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import java.util.ArrayList;
|
|||
import com.cloud.exception.CloudException;
|
||||
import com.cloud.utils.exception.CSExceptionErrorCode;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.exception.ExceptionProxyObject;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class ServerApiException extends CloudRuntimeException {
|
||||
|
|
@ -45,7 +46,7 @@ public class ServerApiException extends CloudRuntimeException {
|
|||
_description = description;
|
||||
if (cause instanceof CloudRuntimeException) {
|
||||
CloudRuntimeException rt = (CloudRuntimeException) cause;
|
||||
ArrayList<String> idList = rt.getIdProxyList();
|
||||
ArrayList<ExceptionProxyObject> idList = rt.getIdProxyList();
|
||||
if (idList != null) {
|
||||
for (int i = 0; i < idList.size(); i++) {
|
||||
addProxyObject(idList.get(i));
|
||||
|
|
|
|||
|
|
@ -25,12 +25,11 @@ import org.apache.cloudstack.api.BaseCmd;
|
|||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.HypervisorCapabilitiesResponse;
|
||||
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
|
||||
|
||||
import com.cloud.hypervisor.HypervisorCapabilities;
|
||||
import com.cloud.user.Account;
|
||||
|
||||
@APICommand(name = "updateHypervisorCapabilities", description="Updates a hypervisor capabilities.", responseObject=ServiceOfferingResponse.class, since="3.0.0")
|
||||
@APICommand(name = "updateHypervisorCapabilities", description="Updates a hypervisor capabilities.", responseObject=HypervisorCapabilitiesResponse.class, since="3.0.0")
|
||||
public class UpdateHypervisorCapabilitiesCmd extends BaseCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(UpdateHypervisorCapabilitiesCmd.class.getName());
|
||||
private static final String s_name = "updatehypervisorcapabilitiesresponse";
|
||||
|
|
@ -86,7 +85,7 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd {
|
|||
if (result != null){
|
||||
HypervisorCapabilitiesResponse response = _responseGenerator.createHypervisorCapabilitiesResponse(result);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update hypervisor capabilities");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd {
|
|||
//verify input parameters
|
||||
if (project == null) {
|
||||
InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find project with specified id");
|
||||
ex.addProxyObject(project, getProjectId(), "projectId");
|
||||
ex.addProxyObject(getProjectId().toString(), "projectId");
|
||||
throw ex;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -211,8 +211,12 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
|
|||
|
||||
@Override
|
||||
public String getEventType() {
|
||||
if (isPortable()) {
|
||||
return EventTypes.EVENT_PORTABLE_IP_ASSIGN;
|
||||
} else {
|
||||
return EventTypes.EVENT_NET_IP_ASSIGN;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
|
|
|
|||
|
|
@ -77,9 +77,9 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd {
|
|||
UserContext.current().setEventDetails("Ip Id: " + getIpAddressId());
|
||||
boolean result = false;
|
||||
if (!isPortable(id)) {
|
||||
_networkService.releaseIpAddress(getIpAddressId());
|
||||
result = _networkService.releaseIpAddress(getIpAddressId());
|
||||
} else {
|
||||
_networkService.releaseIpAddress(getIpAddressId());
|
||||
result = _networkService.releasePortableIpAddress(getIpAddressId());
|
||||
}
|
||||
if (result) {
|
||||
SuccessResponse response = new SuccessResponse(getCommandName());
|
||||
|
|
@ -91,7 +91,11 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd {
|
|||
|
||||
@Override
|
||||
public String getEventType() {
|
||||
if (!isPortable(id)) {
|
||||
return EventTypes.EVENT_NET_IP_RELEASE;
|
||||
} else {
|
||||
return EventTypes.EVENT_PORTABLE_IP_RELEASE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ import org.apache.cloudstack.api.response.ListResponse;
|
|||
|
||||
import com.cloud.network.as.Condition;
|
||||
|
||||
@APICommand(name = "listConditions", description = "List Conditions for the specific user", responseObject = CounterResponse.class)
|
||||
@APICommand(name = "listConditions", description = "List Conditions for the specific user", responseObject = ConditionResponse.class)
|
||||
public class ListConditionsCmd extends BaseListAccountResourcesCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(ListConditionsCmd.class.getName());
|
||||
private static final String s_name = "listconditionsresponse";
|
||||
|
|
@ -70,7 +70,7 @@ public class ListConditionsCmd extends BaseListAccountResourcesCmd {
|
|||
|
||||
response.setResponses(cndnResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
setResponseObject(response);
|
||||
}
|
||||
|
||||
// /////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -199,7 +199,11 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P
|
|||
_firewallService.revokeRelatedFirewallRule(getEntityId(), true);
|
||||
}
|
||||
|
||||
try {
|
||||
_rulesService.revokePortForwardingRule(getEntityId(), true);
|
||||
} catch (Exception ex){
|
||||
//Ignore e.g. failed to apply rules to device error
|
||||
}
|
||||
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to apply port forwarding rule");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import org.apache.cloudstack.api.response.FirewallRuleResponse;
|
|||
import org.apache.cloudstack.api.response.IPAddressResponse;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.api.response.LoadBalancerResponse;
|
||||
import org.apache.cloudstack.api.response.NetworkResponse;
|
||||
import org.apache.cloudstack.api.response.UserVmResponse;
|
||||
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||
|
||||
|
|
@ -64,6 +65,10 @@ public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd {
|
|||
description = "the availability zone ID")
|
||||
private Long zoneId;
|
||||
|
||||
@Parameter(name = ApiConstants.NETWORK_ID, type = CommandType.UUID, entityType = NetworkResponse.class,
|
||||
description = "list by network id the rule belongs to")
|
||||
private Long networkId;
|
||||
|
||||
// ///////////////////////////////////////////////////
|
||||
// ///////////////// Accessors ///////////////////////
|
||||
// ///////////////////////////////////////////////////
|
||||
|
|
@ -88,6 +93,10 @@ public class ListLoadBalancerRulesCmd extends BaseListTaggedResourcesCmd {
|
|||
return zoneId;
|
||||
}
|
||||
|
||||
public Long getNetworkId() {
|
||||
return networkId;
|
||||
}
|
||||
|
||||
// ///////////////////////////////////////////////////
|
||||
// ///////////// API Implementation///////////////////
|
||||
// ///////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
|
|
@ -93,7 +94,15 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd {
|
|||
// ///////////////////////////////////////////////////
|
||||
|
||||
public String getProtocol() {
|
||||
return protocol.trim();
|
||||
String p = protocol.trim();
|
||||
// Deal with ICMP(protocol number 1) specially because it need to be paired with icmp type and code
|
||||
if(StringUtils.isNumeric(p)){
|
||||
int protoNumber = Integer.parseInt(p);
|
||||
if (protoNumber == 1) {
|
||||
p = "icmp";
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
public List<String> getSourceCidrList() {
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ public class CreateSnapshotPolicyCmd extends BaseCmd {
|
|||
Project project = _projectService.findByProjectAccountId(volume.getAccountId());
|
||||
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, project.getId(), "projectId");
|
||||
ex.addProxyObject(project.getUuid(), "projectId");
|
||||
throw ex;
|
||||
}
|
||||
} else if (account.getState() == Account.State.disabled) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ import org.apache.cloudstack.api.Parameter;
|
|||
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.StoragePoolResponse;
|
||||
import org.apache.cloudstack.api.response.TemplateResponse;
|
||||
import org.apache.cloudstack.api.response.UserVmResponse;
|
||||
import org.apache.cloudstack.api.response.VolumeResponse;
|
||||
|
|
@ -47,7 +46,7 @@ import com.cloud.template.VirtualMachineTemplate;
|
|||
import com.cloud.user.Account;
|
||||
import com.cloud.user.UserContext;
|
||||
|
||||
@APICommand(name = "createTemplate", responseObject = StoragePoolResponse.class, description = "Creates a template of a virtual machine. " + "The virtual machine must be in a STOPPED state. "
|
||||
@APICommand(name = "createTemplate", responseObject = TemplateResponse.class, description = "Creates a template of a virtual machine. " + "The virtual machine must be in a STOPPED state. "
|
||||
+ "A template created from this command is automatically designated as a private template visible to the account that created it.")
|
||||
public class CreateTemplateCmd extends BaseAsyncCreateCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(CreateTemplateCmd.class.getName());
|
||||
|
|
@ -210,7 +209,7 @@ import com.cloud.user.UserContext;
|
|||
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, project.getId(), "projectId");
|
||||
ex.addProxyObject(project.getUuid(), "projectId");
|
||||
}
|
||||
} else if (account.getState() == Account.State.disabled) {
|
||||
throw new PermissionDeniedException("The owner of template is disabled: " + account);
|
||||
|
|
@ -235,16 +234,16 @@ import com.cloud.user.UserContext;
|
|||
}
|
||||
|
||||
private boolean isBareMetal() {
|
||||
return (this.getVmId() != null && this.getUrl() != null);
|
||||
return (getVmId() != null && getUrl() != null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create() throws ResourceAllocationException {
|
||||
VirtualMachineTemplate template = null;
|
||||
template = this._templateService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId()));
|
||||
template = _templateService.createPrivateTemplateRecord(this, _accountService.getAccount(getEntityOwnerId()));
|
||||
if (template != null) {
|
||||
this.setEntityId(template.getId());
|
||||
this.setEntityUuid(template.getUuid());
|
||||
setEntityId(template.getId());
|
||||
setEntityUuid(template.getUuid());
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR,
|
||||
"Failed to create a template");
|
||||
|
|
@ -256,7 +255,7 @@ import com.cloud.user.UserContext;
|
|||
public void execute() {
|
||||
UserContext.current().setEventDetails("Template Id: "+getEntityId()+((getSnapshotId() == null) ? " from volume Id: " + getVolumeId() : " from snapshot Id: " + getSnapshotId()));
|
||||
VirtualMachineTemplate template = null;
|
||||
template = this._templateService.createPrivateTemplate(this);
|
||||
template = _templateService.createPrivateTemplate(this);
|
||||
|
||||
if (template != null){
|
||||
List<TemplateResponse> templateResponses;
|
||||
|
|
@ -270,7 +269,7 @@ import com.cloud.user.UserContext;
|
|||
response = templateResponses.get(0);
|
||||
}
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private template");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import com.cloud.user.Account;
|
|||
import com.cloud.user.UserContext;
|
||||
import com.cloud.uservm.UserVm;
|
||||
|
||||
@APICommand(name = "restoreVirtualMachine", description="Restore a VM to original template or new template", responseObject=UserVmResponse.class, since="3.0.0")
|
||||
@APICommand(name = "restoreVirtualMachine", description="Restore a VM to original template/ISO or new template/ISO", responseObject=UserVmResponse.class, since="3.0.0")
|
||||
public class RestoreVMCmd extends BaseAsyncCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(RestoreVMCmd.class);
|
||||
private static final String s_name = "restorevmresponse";
|
||||
|
|
@ -45,9 +45,10 @@ public class RestoreVMCmd extends BaseAsyncCmd {
|
|||
required=true, description="Virtual Machine ID")
|
||||
private Long vmId;
|
||||
|
||||
@Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, description="an optional template Id to restore vm from the new template")
|
||||
@Parameter(name=ApiConstants.TEMPLATE_ID, type=CommandType.UUID, entityType = TemplateResponse.class, description="an optional template Id to restore vm from the new template. This can be an ISO id in case of restore vm deployed using ISO")
|
||||
private Long templateId;
|
||||
|
||||
|
||||
@Override
|
||||
public String getEventType() {
|
||||
return EventTypes.EVENT_VM_RESTORE;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@ import org.apache.cloudstack.api.ApiErrorCode;
|
|||
import org.apache.cloudstack.api.BaseAsyncCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.BaseCmd.CommandType;
|
||||
import org.apache.cloudstack.api.response.DomainResponse;
|
||||
import org.apache.cloudstack.api.response.ProjectResponse;
|
||||
import org.apache.cloudstack.api.response.VolumeResponse;
|
||||
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||
|
||||
|
|
@ -73,6 +75,10 @@ public class UploadVolumeCmd extends BaseAsyncCmd {
|
|||
description="Image store uuid")
|
||||
private String imageStoreUuid;
|
||||
|
||||
@Parameter(name=ApiConstants.PROJECT_ID, type=CommandType.UUID, entityType = ProjectResponse.class,
|
||||
description="Upload volume for the project")
|
||||
private Long projectId;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -136,7 +142,7 @@ public class UploadVolumeCmd extends BaseAsyncCmd {
|
|||
|
||||
@Override
|
||||
public long getEntityOwnerId() {
|
||||
Long accountId = finalyzeAccountId(accountName, domainId, null, true);
|
||||
Long accountId = finalyzeAccountId(accountName, domainId, projectId, true);
|
||||
if (accountId == null) {
|
||||
return UserContext.current().getCaller().getId();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public class DeleteRemoteAccessVpnCmd extends BaseAsyncCmd {
|
|||
|
||||
@Override
|
||||
public void execute() throws ResourceUnavailableException {
|
||||
_ravService.destroyRemoteAccessVpn(publicIpId, UserContext.current().getCaller());
|
||||
_ravService.destroyRemoteAccessVpnForIp(publicIpId, UserContext.current().getCaller());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -17,17 +17,19 @@
|
|||
package org.apache.cloudstack.api.response;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import org.apache.cloudstack.api.BaseResponse;
|
||||
|
||||
import com.cloud.serializer.Param;
|
||||
import com.cloud.utils.exception.ExceptionProxyObject;
|
||||
|
||||
public class ExceptionResponse extends BaseResponse {
|
||||
|
||||
@SerializedName("uuidList") @Param(description="List of uuids associated with this error")
|
||||
private ArrayList<String> idList;
|
||||
private final List<ExceptionProxyObject> idList;
|
||||
|
||||
@SerializedName("errorcode") @Param(description="numeric code associated with this error")
|
||||
private Integer errorCode;
|
||||
|
|
@ -38,6 +40,10 @@ public class ExceptionResponse extends BaseResponse {
|
|||
@SerializedName("errortext") @Param(description="the text associated with this error")
|
||||
private String errorText = "Command failed due to Internal Server Error";
|
||||
|
||||
public ExceptionResponse(){
|
||||
idList = new ArrayList<ExceptionProxyObject>();
|
||||
}
|
||||
|
||||
public Integer getErrorCode() {
|
||||
return errorCode;
|
||||
}
|
||||
|
|
@ -54,17 +60,17 @@ public class ExceptionResponse extends BaseResponse {
|
|||
this.errorText = errorText;
|
||||
}
|
||||
|
||||
public void addProxyObject(String id) {
|
||||
public void addProxyObject(ExceptionProxyObject id) {
|
||||
idList.add(id);
|
||||
return;
|
||||
}
|
||||
|
||||
public ArrayList<String> getIdProxyList() {
|
||||
public List<ExceptionProxyObject> getIdProxyList() {
|
||||
return idList;
|
||||
}
|
||||
|
||||
public void setCSErrorCode(int cserrcode) {
|
||||
this.csErrorCode = cserrcode;
|
||||
csErrorCode = cserrcode;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -59,6 +59,10 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti
|
|||
@Param(description = "the load balancer algorithm (source, roundrobin, leastconn)")
|
||||
private String algorithm;
|
||||
|
||||
@SerializedName(ApiConstants.NETWORK_ID)
|
||||
@Param(description = "the id of the guest network the lb rule belongs to")
|
||||
private String networkId;
|
||||
|
||||
@SerializedName(ApiConstants.CIDR_LIST) @Param(description="the cidr list to forward traffic from")
|
||||
private String cidrList;
|
||||
|
||||
|
|
@ -91,6 +95,7 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti
|
|||
@SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with load balancer", responseObject = ResourceTagResponse.class)
|
||||
private List<ResourceTagResponse> tags;
|
||||
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
|
@ -162,4 +167,8 @@ public class LoadBalancerResponse extends BaseResponse implements ControlledEnti
|
|||
this.tags = tags;
|
||||
}
|
||||
|
||||
public void setNetworkId(String networkId) {
|
||||
this.networkId = networkId;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,9 @@ public class ServiceOfferingResponse extends BaseResponse {
|
|||
@SerializedName("limitcpuuse") @Param(description="restrict the CPU usage to committed service offering")
|
||||
private Boolean limitCpuUse;
|
||||
|
||||
@SerializedName("isvolatile") @Param(description="true if the vm needs to be volatile, i.e., on every reboot of vm from API root disk is discarded and creates a new root disk")
|
||||
private Boolean isVolatile;
|
||||
|
||||
@SerializedName("tags") @Param(description="the tags for the service offering")
|
||||
private String tags;
|
||||
|
||||
|
|
@ -236,4 +239,12 @@ public class ServiceOfferingResponse extends BaseResponse {
|
|||
public void setDeploymentPlanner(String deploymentPlanner) {
|
||||
this.deploymentPlanner = deploymentPlanner;
|
||||
}
|
||||
|
||||
public boolean getVolatileVm() {
|
||||
return isVolatile;
|
||||
}
|
||||
|
||||
public void setVolatileVm(boolean isVolatile) {
|
||||
this.isVolatile = isVolatile;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
package org.apache.cloudstack.jobs;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
public interface Job extends Identity, InternalIdentity {
|
||||
|
||||
|
||||
|
||||
String getType();
|
||||
|
||||
String getDispatcher();
|
||||
|
||||
int getPendingSignals();
|
||||
|
||||
long getUserId();
|
||||
|
||||
long getAccountId();
|
||||
|
||||
String getCmd();
|
||||
|
||||
int getCmdVersion();
|
||||
|
||||
String getCmdInfo();
|
||||
|
||||
int getStatus();
|
||||
|
||||
int getProcessStatus();
|
||||
|
||||
int getResultCode();
|
||||
|
||||
String getResult();
|
||||
|
||||
Long getInitMsid();
|
||||
|
||||
Long getExecutingMsid();
|
||||
|
||||
Long getCompleteMsid();
|
||||
|
||||
Date getCreated();
|
||||
|
||||
Date getLastUpdated();
|
||||
|
||||
Date getLastPolled();
|
||||
|
||||
String getInstanceType();
|
||||
|
||||
Long getInstanceId();
|
||||
}
|
||||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=\u062a\u063a\u064a\u0631 \u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0639\u0646\u0635\u0631
|
||||
confirm.enable.s3=\u0641\u0636\u0644\u0627 \u0642\u0645 \u0628\u062a\u0639\u0628\u0626\u0629 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0642\u0627\u062f\u0645\u0629 \u0644\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062a\u062e\u0632\u064a\u0646 S3 \u0644\u0644\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u062b\u0627\u0646\u0648\u064a\u0629.
|
||||
instances.actions.reboot.label=\u0625\u0639\u0627\u062f\u0629 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c
|
||||
|
|
@ -217,6 +216,7 @@ label.zone.step.3.title=\u0627\u0644\u062e\u0637\u0648\u0629 3 \\\: \u0639\u0644
|
|||
label.zone.step.4.title=\u0627\u0644\u062e\u0637\u0648\u0629 4 \\\: <\u0642\u0648\u064a> \u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 IP <\\\u0642\u0648\u064a>
|
||||
label.zone.wide=\u0645\u0646\u0637\u0642\u0629 \u0648\u0627\u0633\u0639\u0629
|
||||
label.zoneWizard.trafficType.guest=\u0627\u0644\u0636\u064a\u0641 \\\: \u0627\u0644\u062d\u0631\u0643\u0629 \u0628\u064a\u0646 \u0627\u0644\u0623\u062c\u0647\u0632\u0629 \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0629 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0646\u0647\u0627\u0626\u064a.
|
||||
label.zoneWizard.trafficType.management=\u0625\u062f\u0627\u0631\u0629\\\: \u0627\u0644\u062d\u0631\u0643\u0629 \u0628\u064a\u0646 \u0627\u0644\u0645\u0648\u0627\u0631\u062f \u0627\u0644\u062f\u0627\u062e\u0644\u064a\u0629 \u0644 \u0643\u0644\u0627\u0648\u062f \u0633\u062a\u0627\u0643 \u060c \u0645\u062a\u0636\u0645\u0646\u0629 \u0623\u064a \u062c\u0632\u0621 \u064a\u062a\u0635\u0644 \u0628\u062e\u0627\u062f\u0645\\\u0633\u064a\u0631\u0641\u0631 \u0627\u0644\u0625\u062f\u0627\u0631\u0629 \u060c \u0645\u062b\u0644 \u0627\u0644\u0645\u0636\u064a\u0641\u0627\u062a \u0648 \u0623\u0646\u0638\u0645\u0629 \u0643\u0644\u0627\u0648\u062f \u0633\u062a\u0627\u0643 \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a\u0629.
|
||||
label.zoneWizard.trafficType.public=\u0627\u0644\u0639\u0627\u0645\u0629 \\\: \u0627\u0644\u0645\u0631\u0648\u0631 \u0628\u064a\u0646 \u0627\u0644\u0625\u0646\u062a\u0631\u0646\u062a \u0648\u0627\u0644\u0623\u062c\u0647\u0632\u0629 \u0627\u0644\u0638\u0627\u0647\u0631\u064a\u0629 \u0641\u064a \u0627\u0644\u0633\u062d\u0627\u0628\u0629.
|
||||
label.zoneWizard.trafficType.storage=\u0627\u0644\u062a\u062e\u0632\u064a\u0646 \\\: \u0627\u0644\u0645\u0631\u0648\u0631 \u0628\u064a\u0646 \u0645\u0644\u0642\u0645\u0627\u062a \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0627\u0628\u062a\u062f\u0627\u0626\u064a\u0629 \u0648\u0627\u0644\u062b\u0627\u0646\u0648\u064a\u0629\u060c \u0645\u062b\u0644 \u0642\u0648\u0627\u0644\u0628 VM \u0648\u0627\u0644\u0644\u0642\u0637\u0627\u062a
|
||||
message.acquire.new.ip.vpc=\u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u064a\u062f \u0628\u0623\u0646\u0643 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0628\u0648\u0631\u062a\u0648\u0643\u0648\u0644 \u0625\u0646\u062a\u0631\u0646\u062a \u062c\u062f\u064a\u062f \u0644\u0647\u0630\u0627 \u0627\u0644\u062d\u0627\u0633\u0648\u0628 \u0627\u0644\u0625\u0641\u062a\u0631\u0627\u0636\u064a.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
confirm.enable.swift=Si us plau ompliu la seg\u00fcent informaci\u00f3 per habilitar el suport per a Swift
|
||||
error.installWizard.message=Quelcom ha fallat, vost\u00e8 pot tornar enrere i corregir els errors detalls suggerime
|
||||
error.password.not.match=Els camps de contrasenya no coincideixen
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
error.installWizard.message=Ein Fehler ist aufgetreten; Sie k\u00f6nnen zur\u00fcckgehen und den Fehler korregieren
|
||||
error.login=Ihr Benutzername / Passwort stimmt nicht mit uneren unseren Aufzeichnungen \u00fcberein.
|
||||
error.session.expired=Ihre Sitzung ist abgelaufen.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
error.installWizard.message=Algo salio mal, debes ir para atr\u00e1s y corregir los error.
|
||||
error.login=Su nombre de usuario / contrase\u00c3\u00b1a no coincide con nuestros registros.
|
||||
error.mgmt.server.inaccessible=El Servidor de Gesti\u00c3\u00b3n es inaccesible. Por favor, int\u00c3\u00a9ntelo de nuevo m\u00c3\u00a1s tarde.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=Propri\u00e9t\u00e9s de l\\'\u00e9l\u00e9ment modifi\u00e9es
|
||||
confirm.enable.s3=Remplir les informations suivantes pour activer le support de stockage secondaire S3
|
||||
confirm.enable.swift=Remplir les informations suivantes pour activer Swift
|
||||
|
|
@ -93,6 +92,7 @@ label.action.delete.load.balancer=Supprimer la r\u00e8gle de r\u00e9partition de
|
|||
label.action.delete.network.processing=Suppression du r\u00e9seau...
|
||||
label.action.delete.network=Supprimer le r\u00e9seau
|
||||
label.action.delete.nexusVswitch=Supprimer le Nexus 1000v
|
||||
label.action.delete.nic=Supprimer carte NIC
|
||||
label.action.delete.physical.network=Supprimer le r\u00e9seau physique
|
||||
label.action.delete.pod.processing=Suppression du pod...
|
||||
label.action.delete.pod=Supprimer le Pod
|
||||
|
|
@ -1200,6 +1200,7 @@ message.action.delete.ISO.for.all.zones=L\\'ISO est utilis\u00e9 par toutes les
|
|||
message.action.delete.ISO=\u00cates-vous s\u00fbr que vous souhaitez supprimer cette ISO.
|
||||
message.action.delete.network=\u00cates-vous s\u00fbr que vous voulez supprimer ce r\u00e9seau.
|
||||
message.action.delete.nexusVswitch=Confirmer la suppession de ce Nexus 1000v
|
||||
message.action.delete.nic=Veuillez confirmer que vous souhaitez supprimer cette carte NIC, ce qui supprimera \u00e9galement le r\u00e9seau associ\u00e9 sur la machine virtuelle.
|
||||
message.action.delete.physical.network=Confirmer la suppression du r\u00e9seau physique
|
||||
message.action.delete.pod=\u00cates-vous s\u00fbr que vous souhaitez supprimer ce pod.
|
||||
message.action.delete.primary.storage=\u00cates-vous s\u00fbr que vous voulez supprimer ce stockage principal.
|
||||
|
|
@ -1412,6 +1413,7 @@ message.migrate.router.confirm=Confirmer la migration du routeur vers \:
|
|||
message.migrate.systemvm.confirm=Confirmer la migration de la VM syst\u00e8me vers \:
|
||||
message.migrate.volume=Confirmer la migration du volume vers un autre stockage principal.
|
||||
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.network.support.configuration.not.true=Il n\\'y a pas de zone avec la fonction groupe de s\u00e9curit\u00e9 active. D\u00e8s lors, pas de fonction r\u00e9seau suppl\u00e9mentaires disponibles. Continuer \u00e0 l\\'\u00e9tape 5.
|
||||
message.no.network.support=S\u00e9lectionnez l\\'hyperviseur. vSphere, n\\'a pas de fonctionnalit\u00e9s suppl\u00e9mentaires pour le r\u00e9seau. Continuez \u00e0 l\\'\u00e9tape 5.
|
||||
message.no.projects.adminOnly=Vous n\\'avez pas de projet.<br/>Contacter votre administrateur pour ajouter un projet.
|
||||
|
|
@ -1444,6 +1446,7 @@ message.restart.mgmt.usage.server=Red\u00e9marrer le ou les serveur(s) de gestio
|
|||
message.restart.network=Tous les services fournit par ce routeur virtuel vont \u00eatre interrompus. Confirmer le red\u00e9marrage de ce routeur.
|
||||
message.restart.vpc=Confirmer le red\u00e9marrage du VPC
|
||||
message.security.group.usage=(Utilisez <strong>Ctrl-clic</strong> pour s\u00e9lectionner les groupes de s\u00e9curit\u00e9 vis\u00e9s)
|
||||
message.select.affinity.groups=S\u00e9lectionner les groupes d\\'affinit\u00e9 qui appartiendront \u00e0 cette machine virtuelle \:
|
||||
message.select.a.zone=Une zone correspond typiquement \u00e0 un seul centre de donn\u00e9es. Des zones multiples peuvent permettre de rendre votre cloud plus fiable en apportant une isolation physique et de la redondance.
|
||||
message.select.instance=S\u00e9lectionner une instance.
|
||||
message.select.iso=S\u00e9lectionner un ISO pour votre nouvelle instance virtuelle.
|
||||
|
|
|
|||
|
|
@ -15,32 +15,207 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=Elementi delle propriet\u00e0 modificati
|
||||
confirm.enable.s3=Si prega di inserire i valori richiesti per abilitare il supporto per il Secondary Storage di tipo S3
|
||||
confirm.enable.swift=Si prega di inserire i valori richiesti per abilitare il supporto per Swift
|
||||
error.could.not.enable.zone=Impossibile abilitare la zona
|
||||
error.installWizard.message=E\\' stato rilevato un errore\: tornare agli step precedenti e correggere gli errori
|
||||
error.invalid.username.password=Username o Password non valida
|
||||
error.login=Le credenziali fornite per username/password non corrispondono a quelle nei nostri sistemi.
|
||||
error.menu.select=Impossibile effettuare operazioni senza aver selezionato alcun elemento.
|
||||
error.mgmt.server.inaccessible=Impossibile accedere al Management Server. Si prega di riprovare pi\u00f9 tardi.
|
||||
error.password.not.match=I campi password non corrispondono
|
||||
error.please.specify.physical.network.tags=Le offerte di rete non sono disponibili se non si specificano tag per questa rete fisica.
|
||||
error.session.expired=La sessione \u00e8 scaduta.
|
||||
error.something.went.wrong.please.correct.the.following=E\\' stato rilevato un errore; si prega di correggere quanto indicato di seguito
|
||||
error.unable.to.reach.management.server=Impossibile raggiungere il Management Server
|
||||
error.unresolved.internet.name=Il tuo nome internet non pu\u00f2 essere risolto.
|
||||
extractable=Estraibile
|
||||
force.delete.domain.warning=Attenzione\: La scelta di questa opzione provocher\u00e0 la rimozione di tutti i sotto domini e agli account associati e alle loro risorse.
|
||||
force.remove.host.warning=Attenzione\: La scelta di questa opzione provocher\u00e0 l\\'arresto forzato di tutte le virtual machine da parte di CloudStack prima di rimuovere questo host dal cluster.
|
||||
force.stop.instance.warning=Attenzione\: Forzare un arresto su questa instanza dovrebbe essere l\\'ultima opzione. C\\'\u00e8 il rischio di perdita di dati e di un comportamento inconsistente dello stato della virtual machine.
|
||||
ICMP.code=Codice ICMP
|
||||
ICMP.type=Tipo ICMP
|
||||
image.directory=Directory Immagine
|
||||
instances.actions.reboot.label=Riavviare una instanza
|
||||
label.accept.project.invitation=Accettare un invito ad un progetto
|
||||
label.account=Account
|
||||
label.account.and.security.group=Account, Security group
|
||||
label.account.id=ID dell\\'Account
|
||||
label.account.name=Nome Account
|
||||
label.account.specific=Specifico dell\\'Account
|
||||
label.accounts=Utenti
|
||||
label.acquire.new.ip=Acquisizione nuovo indirizzo IP
|
||||
label.action.attach.disk=Collegamento di un Disco
|
||||
label.action.attach.disk.processing=Collegamento Disco in corso...
|
||||
label.action.attach.iso=Collegamento di una immagine ISO
|
||||
label.action.attach.iso.processing=Collegamento immagine ISO in corso...
|
||||
label.action.cancel.maintenance.mode=Annullamento dello stato di Maintenance Mode
|
||||
label.action.cancel.maintenance.mode.processing=Cancellazione dello stato Maintenance Mode in corso...
|
||||
label.action.change.password=Modifica della Password
|
||||
label.action.change.service=Modificare Servizio
|
||||
label.action.change.service.processing=Modifica del Servizio in corso...
|
||||
label.action.copy.ISO=Copia della immagine ISO
|
||||
label.action.copy.ISO.processing=Copia immagine ISO in corso...
|
||||
label.action.copy.template=Copia di un Template
|
||||
label.action.copy.template.processing=Copia Template in corso...
|
||||
label.action.create.template=Creazione Template
|
||||
label.action.create.template.from.vm=Creazione Template da una VM
|
||||
label.action.create.template.from.volume=Creazione Template da un Volume
|
||||
label.action.create.template.processing=Creazione Template in corso...
|
||||
label.action.create.vm=Creazione VM
|
||||
label.action.create.vm.processing=Creazione VM in corso...
|
||||
label.action.create.volume=Creazione Volume
|
||||
label.action.create.volume.processing=Creazione Volume in corso...
|
||||
label.action.delete.account=Cancellazione account
|
||||
label.action.delete.account.processing=Cancellazione account in corso....
|
||||
label.action.delete.cluster=Cancellazione Cluster
|
||||
label.action.delete.cluster.processing=Cancellazione Cluster in corso....
|
||||
label.action.delete.disk.offering=Cancellazione Offerta Disco
|
||||
label.action.delete.disk.offering.processing=Cancellazione Offerta Disco in corso....
|
||||
label.action.delete.domain=Cancellazione Dominio
|
||||
label.action.delete.domain.processing=Cancellazione Dominio in corso....
|
||||
label.action.delete.firewall=Cancellazione regola firewall
|
||||
label.action.delete.firewall.processing=Cancellazione Firewall in corso....
|
||||
label.action.delete.IP.range=Cancellazione intervallo indirizzi IP
|
||||
label.action.delete.IP.range.processing=Cancellazione intervallo indirizzi IP in corso....
|
||||
label.action.delete.ISO=Cancellazione immagine ISO
|
||||
label.action.delete.ISO.processing=Cancellazione immagine ISO in corso....
|
||||
label.action.delete.load.balancer=Cancellazione regola load balancer
|
||||
label.action.delete.load.balancer.processing=Cancellazione Load Balancer in corso....
|
||||
label.action.delete.network=Cancellazione Rete
|
||||
label.action.delete.network.processing=Cancellazione Rete in corso....
|
||||
label.action.delete.nexusVswitch=Cancellare Nexus 1000v
|
||||
label.action.delete.physical.network=Cancellazione di una rete fisica
|
||||
label.action.delete.pod=Cancellazione Pod
|
||||
label.action.delete.pod.processing=Cancellazione Pod in corso....
|
||||
label.action.delete.primary.storage=Cancellazione Storage Primario
|
||||
label.action.delete.primary.storage.processing=Cancellazione Storage Primario in corso....
|
||||
label.action.delete.secondary.storage=Cancellazione Storage Secondario
|
||||
label.action.delete.secondary.storage.processing=Cancellazione Storage Secondario in corso....
|
||||
label.action.delete.security.group=Cancellazione Security Group
|
||||
label.action.delete.security.group.processing=Cancellazione Security Group in corso....
|
||||
label.action.delete.service.offering=Cancellazione Offerta di Servizio
|
||||
label.action.delete.service.offering.processing=Cancellazione Offerta di Servizio in corso....
|
||||
label.action.delete.snapshot=Cancellazione Snapshot
|
||||
label.action.delete.snapshot.processing=Cancellazione Snapshot in corso....
|
||||
label.action.delete.system.service.offering=Cancellare Offerta di Servizio di Sistema
|
||||
label.action.delete.template=Cancellazione Template
|
||||
label.action.delete.template.processing=Cancellazione Template in corso....
|
||||
label.action.delete.user=Cancellazione Utente
|
||||
label.action.delete.user.processing=Cancellazione Utente in corso....
|
||||
label.action.delete.volume=Cancellazione Volume
|
||||
label.action.delete.volume.processing=Cancellazione Volume in corso....
|
||||
label.action.delete.zone=Cancellazione Zona
|
||||
label.action.delete.zone.processing=Cancellazione Zona in corso....
|
||||
label.action.destroy.instance.processing=Rimozione Instanza in corso....
|
||||
label.action.destroy.instance=Rimozione instanza
|
||||
label.action.destroy.systemvm.processing=Rimozione VM di Sistema in corso....
|
||||
label.action.destroy.systemvm=Rimozione VM di sistema
|
||||
label.action.detach.disk.processing=Scollegamento Disco in corso....
|
||||
label.action.detach.disk=Scollegamento di un Disco
|
||||
label.action.detach.iso.processing=Scollegamento immagine ISO in corso....
|
||||
label.action.detach.iso=Scollegamento immagine ISO
|
||||
label.action.disable.account=Disabilitazione account
|
||||
label.action.disable.account.processing=Disabilitazione account in corso....
|
||||
label.action.disable.cluster=Disabilitazione Cluster
|
||||
label.action.disable.cluster.processing=Disabilitazione Cluster in corso....
|
||||
label.action.disable.nexusVswitch=Disabilitare Nexus 1000v
|
||||
label.action.disable.physical.network=Disabilitare la rete fisica
|
||||
label.action.disable.pod=Disabilitazione Pod
|
||||
label.action.disable.pod.processing=Disabilitazione Pod in corso....
|
||||
label.action.disable.static.NAT=Disabilitazione NAT Statico
|
||||
label.action.disable.static.NAT.processing=Disabilitazione NAT Statico in corso....
|
||||
label.action.disable.user=Disabilitazione Utente
|
||||
label.action.disable.user.processing=Disabilitazione Utente in corso....
|
||||
label.action.disable.zone=Disabilitazione Zona
|
||||
label.action.disable.zone.processing=Disabilitazione Zona in corso....
|
||||
label.action.download.ISO=Download immagine ISO
|
||||
label.action.download.template=Download Template
|
||||
label.action.download.volume=Download Volume
|
||||
label.action.download.volume.processing=Download Volume in corso....
|
||||
label.action.edit.account=Modifica account
|
||||
label.action.edit.disk.offering=Modifica Offerta Disco
|
||||
label.action.edit.domain=Modifica Dominio
|
||||
label.action.edit.global.setting=Modifica Impostazioni Globali
|
||||
label.action.edit.host=Modifica Host
|
||||
label.action.edit.instance=Modifica Instanza
|
||||
label.action.edit.ISO=Modifica immagine ISO
|
||||
label.action.edit.network=Modifica Rete
|
||||
label.action.edit.network.offering=Modifica Offerta di Rete
|
||||
label.action.edit.network.processing=Modifica Rete in corso....
|
||||
label.action.edit.pod=Modifica Pod
|
||||
label.action.edit.primary.storage=Modifica Storage Primario
|
||||
label.action.edit.resource.limits=Modifica Limiti delle Risorse
|
||||
label.action.edit.service.offering=Modifica Offerta di Servizio
|
||||
label.action.edit.template=Modifica Template
|
||||
label.action.edit.user=Modifica Utente
|
||||
label.action.edit.zone=Modifica Zona
|
||||
label.action.enable.account=Abilitazione account
|
||||
label.action.enable.account.processing=Abilitazione account in corso....
|
||||
label.action.enable.cluster=Abilitazione Cluster
|
||||
label.action.enable.cluster.processing=Abilitazione Cluster in corso....
|
||||
label.action.enable.maintenance.mode=Abilitazione dello stato Maintenance Mode
|
||||
label.action.enable.maintenance.mode.processing=Abilitazione dello stato Maintenance Mode in corso....
|
||||
label.action.enable.nexusVswitch=Abilitare Nexus 1000v
|
||||
label.action.enable.physical.network=Abilitare la rete fisica
|
||||
label.action.enable.pod=Abilitazione Pod
|
||||
label.action.enable.pod.processing=Abilitazione Pod in corso....
|
||||
label.action.enable.static.NAT=Abilitazione NAT Statico
|
||||
label.action.enable.static.NAT.processing=Abilitazione NAT Statico in corso....
|
||||
label.action.enable.user=Abilitazione Utente
|
||||
label.action.enable.user.processing=Abilitazione Utente in corso....
|
||||
label.action.enable.zone=Abilitazione Zona
|
||||
label.action.enable.zone.processing=Abilitazione Zona in corso....
|
||||
label.action.force.reconnect.processing=Riconnessione in corso....
|
||||
label.action.generate.keys=Generazione Chiavi
|
||||
label.action.generate.keys.processing=Generazione Chiavi in corso....
|
||||
label.action.list.nexusVswitch=Elencare Nexus 1000v
|
||||
label.action.lock.account=Blocco di un account
|
||||
label.action.lock.account.processing=Blocco account in corso....
|
||||
label.action.manage.cluster=Gestione Cluster
|
||||
label.action.manage.cluster.processing=Gestione Cluster in corso....
|
||||
label.action.migrate.instance=Migrazione Instanza
|
||||
label.action.migrate.instance.processing=Migrazione Instanza in corso....
|
||||
label.action.migrate.router=Migrazione Router
|
||||
label.action.migrate.router.processing=Migrazione Router...
|
||||
label.action.migrate.systemvm=Migrazione VM di Systema
|
||||
label.action.migrate.systemvm.processing=Migrazione VM di Sistema in corso....
|
||||
label.action.reboot.instance.processing=Riavvio Instanza in corso....
|
||||
label.action.reboot.instance=Riavvio Instanza
|
||||
label.action.reboot.router.processing=Riavvio Router in corso....
|
||||
label.action.reboot.router=Riavvio Router
|
||||
label.action.reboot.systemvm.processing=Riavvio VM di Sistema in corso....
|
||||
label.action.reboot.systemvm=Riavvio VM di Sistema
|
||||
label.action.register.iso=Registrare una ISO
|
||||
label.action.register.template=Registrare un template
|
||||
label.action.release.ip.processing=Rilascio indirizzo IP in corso....
|
||||
label.action.release.ip=Rilascio indirizzo IP
|
||||
label.action.remove.host.processing=Rimozione Host in corso....
|
||||
label.action.remove.host=Rimozione Host
|
||||
label.action.reset.password.processing=Reset della Password in corso....
|
||||
label.action.reset.password=Reset Password
|
||||
label.action.resize.volume.processing=Ridimensionamento Volume in corso....
|
||||
label.action.resize.volume=Ridimensionamento Volume
|
||||
label.action.restore.instance.processing=Restore dell\\'Instanza in corso....
|
||||
label.action.restore.instance=Restore Instanza
|
||||
label.actions=Azioni
|
||||
label.action.start.instance=Avvio Instanza
|
||||
label.action.start.instance.processing=Avvio Instanza in corso....
|
||||
label.action.start.router=Avvio Router
|
||||
label.action.start.router.processing=Avvio Router in corso....
|
||||
label.action.start.systemvm=Avvio VM di Sistema
|
||||
label.action.start.systemvm.processing=Avvio VM di Sistema in corso....
|
||||
label.action.stop.instance=Arresto Instanza
|
||||
label.action.stop.instance.processing=Arresto Instanza in corso....
|
||||
label.action.stop.router=Arresto Router
|
||||
label.action.stop.router.processing=Arresto Router in corso....
|
||||
label.action.stop.systemvm=Arresto VM di Sistema
|
||||
label.action.stop.systemvm.processing=Arresto VM di Sistema in corso....
|
||||
label.action.update.OS.preference=Aggiornamento Preferenze OS
|
||||
label.action.update.OS.preference.processing=Aggiornamento preferenze OS in corso....
|
||||
label.activate.project=Attivare il Progetto
|
||||
label.active.sessions=Sessioni Attive
|
||||
label.add.accounts=Aggiungere utenti
|
||||
label.add.accounts.to=Aggiungere utenti a
|
||||
label.add.account.to.project=Aggiungere account al progetto
|
||||
|
|
@ -49,6 +224,7 @@ label.add.compute.offering=Aggiungere una offerta computazionale
|
|||
label.add.egress.rule=Aggiungere una regola d\\'uscita
|
||||
label.add.F5.device=Aggiungere device F5
|
||||
label.add.guest.network=Aggiungere una rete guest
|
||||
label.additional.networks=Network Aggiuntivi
|
||||
label.add.netScaler.device=Aggiungere device Netscaler
|
||||
label.add.network.ACL=Aggiungere le ACL di rete
|
||||
label.add.network.offering=Aggiungere offerta di rete
|
||||
|
|
@ -76,22 +252,32 @@ label.add.vpn.customer.gateway=Aggiungere Gateway VPN del Cliente
|
|||
label.add.VPN.gateway=Aggiungere un Gateway VPN
|
||||
label.add.vpn.user=Aggiungere utente VPN
|
||||
label.advanced=Avanzato
|
||||
label.advanced.search=Ricerca Avanzata
|
||||
label.agent.password=Password per l\\'Agent
|
||||
label.agent.username=Username per l\\'Agent
|
||||
label.allocated=Allocato
|
||||
label.apply=Applicare
|
||||
label.associated.network=Rete Associata
|
||||
label.available.public.ips=Indirizzi IP Pubblici Disponibili
|
||||
label.bandwidth=Capacit\u00e0 della banda (Bandwidth)
|
||||
label.basic=Basic
|
||||
label.broadcast.uri=URI di Broadcast
|
||||
label.cancel=Annulla
|
||||
label.certificate=Certificato
|
||||
label.change.service.offering=Modificare offerta di servizio
|
||||
label.character=Carattere
|
||||
label.checksum=Checksum MD5
|
||||
label.cidr=CIDR
|
||||
label.CIDR.list=Lista CIDR
|
||||
label.CIDR.of.destination.network=Valore CIDR della rete di destinazione
|
||||
label.clear.list=Pulizia dell\\'elenco
|
||||
label.cloud.console=Console di Gestione Cloud
|
||||
label.cluster=Cluster
|
||||
label.cluster.name=Nome del Cluster
|
||||
label.clusters=Cluster
|
||||
label.cluster.type=Tipo di Cluster
|
||||
label.clvm=CLVM
|
||||
label.code=Codice
|
||||
label.community=Community
|
||||
label.compute.and.storage=Computazione e Storage
|
||||
label.compute=Compute
|
||||
|
|
@ -107,6 +293,7 @@ label.console.proxy=Proxy di Console
|
|||
label.continue.basic.install=Proseguire con l\\'installazione di base
|
||||
label.continue=Continuare
|
||||
label.corrections.saved=Salvataggio correzioni effettuato
|
||||
label.cpu=CPU
|
||||
label.cpu.mhz=CPU (in MHz)
|
||||
label.created.by.system=Creato dal sistema
|
||||
label.create.project=Creare un progetto
|
||||
|
|
@ -234,6 +421,7 @@ label.max.volumes=Numero max di volumi
|
|||
label.max.vpcs=Numero max di VPC
|
||||
label.may.continue=E\\' ora possibile continuare.
|
||||
label.memory.mb=Memoria (in MB)
|
||||
label.menu.accounts=Utenti
|
||||
label.menu.configuration=Configurazione
|
||||
label.menu.infrastructure=Infrastruttura
|
||||
label.menu.system.service.offerings=Offerte di Sistema
|
||||
|
|
@ -433,6 +621,7 @@ label.zone.name=Nome Zona
|
|||
label.zones=Zone
|
||||
label.zone.type=Tipo di Zona
|
||||
label.zoneWizard.trafficType.guest=Guest\: Traffico di rete tra le virtual machine dell\\'utente finale
|
||||
label.zoneWizard.trafficType.management=Management\: Traffico di rete tra le risorse interne di CloudStack, incluso qualsiasi componente che comunichi con il Management Server, come ad esempio gli host e le VM di Sistema di CloudStack
|
||||
label.zoneWizard.trafficType.public=Public\: Traffico di rete tra la rete internet e le virtual machine nell\\'infrastruttura cloud.
|
||||
label.zoneWizard.trafficType.storage=Storage\: Traffico di rete tra i server di primary e secondary storage, come ad esempio i template delle VM e le operazioni di snapshot
|
||||
message.acquire.new.ip=Si prega di confermare di voler acquisire un nuovo indirizzo IP per questa rete.
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ error.could.not.enable.zone=\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3067\u30
|
|||
error.installWizard.message=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u623b\u3063\u3066\u30a8\u30e9\u30fc\u3092\u4fee\u6b63\u3067\u304d\u307e\u3059\u3002
|
||||
error.invalid.username.password=\u7121\u52b9\u306a\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9
|
||||
error.login=\u30e6\u30fc\u30b6\u30fc\u540d/\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a18\u9332\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002
|
||||
error.menu.select=\u00e3\u0082\u00a2\u00e3\u0082\u00a4\u00e3\u0083\u0086\u00e3\u0083\u00a0\u00e3\u0081\u008c\u00e9\u0081\u00b8\u00e6\u008a\u009e\u00e3\u0081\u0095\u00e3\u0082\u008c\u00e3\u0081\u00a6\u00e3\u0081\u0084\u00e3\u0081\u00aa\u00e3\u0081\u0084\u00e3\u0081\u009f\u00e3\u0082\u0081\u00e3\u0082\u00a2\u00e3\u0082\u00af\u00e3\u0082\u00b7\u00e3\u0083\u00a7\u00e3\u0083\u00b3\u00e3\u0082\u0092\u00e5\u00ae\u009f\u00e8\u00a1\u008c\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u0093\u00e3\u0081\u00a8\u00e3\u0081\u008c\u00e3\u0081\u00a7\u00e3\u0081\u008d\u00e3\u0081\u00be\u00e3\u0081\u009b\u00e3\u0082\u0093
|
||||
error.menu.select=\u9805\u76ee\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u64cd\u4f5c\u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
error.mgmt.server.inaccessible=\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002\u5f8c\u3067\u518d\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
error.password.not.match=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u307e\u305b\u3093
|
||||
error.please.specify.physical.network.tags=\u3053\u306e\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30bf\u30b0\u3092\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
|
|
@ -32,11 +32,11 @@ error.something.went.wrong.please.correct.the.following=\u554f\u984c\u304c\u767a
|
|||
error.unable.to.reach.management.server=\u7ba1\u7406\u30b5\u30fc\u30d0\u30fc\u3068\u901a\u4fe1\u3067\u304d\u307e\u305b\u3093
|
||||
error.unresolved.internet.name=\u3042\u306a\u305f\u306e\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u540d\u306f\u89e3\u6c7a\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
extractable=\u62bd\u51fa\u53ef\u80fd
|
||||
force.delete.domain.warning=\u8b66\u544a\: \u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u5b50\u30c9\u30e1\u30a4\u30f3\u304a\u3088\u3073\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u305d\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002
|
||||
force.delete.domain.warning=\u8b66\u544a: \u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306e\u5b50\u30c9\u30e1\u30a4\u30f3\u304a\u3088\u3073\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u305d\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002
|
||||
force.delete=\u5f37\u5236\u524a\u9664
|
||||
force.remove.host.warning=\u8b66\u544a\: \u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u304c\u5f37\u5236\u7684\u306b\u505c\u6b62\u3055\u308c\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u304b\u3089\u3053\u306e\u30db\u30b9\u30c8\u304c\u5f37\u5236\u7684\u306b\u89e3\u9664\u3055\u308c\u307e\u3059\u3002
|
||||
force.remove.host.warning=\u8b66\u544a: \u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u304c\u5f37\u5236\u7684\u306b\u505c\u6b62\u3055\u308c\u3001\u30af\u30e9\u30b9\u30bf\u30fc\u304b\u3089\u3053\u306e\u30db\u30b9\u30c8\u304c\u5f37\u5236\u7684\u306b\u89e3\u9664\u3055\u308c\u307e\u3059\u3002
|
||||
force.remove=\u5f37\u5236\u89e3\u9664
|
||||
force.stop.instance.warning=\u8b66\u544a\: \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5f37\u5236\u505c\u6b62\u306f\u3001\u6700\u7d42\u624b\u6bb5\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c7\u30fc\u30bf\u3092\u640d\u5931\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u52d5\u4f5c\u304c\u4e00\u8cab\u3057\u306a\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
force.stop.instance.warning=\u8b66\u544a: \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u5f37\u5236\u505c\u6b62\u306f\u3001\u6700\u7d42\u624b\u6bb5\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30c7\u30fc\u30bf\u3092\u640d\u5931\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u52d5\u4f5c\u304c\u4e00\u8cab\u3057\u306a\u304f\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
force.stop=\u5f37\u5236\u505c\u6b62
|
||||
ICMP.code=ICMP \u30b3\u30fc\u30c9
|
||||
ICMP.type=ICMP \u306e\u7a2e\u985e
|
||||
|
|
@ -230,7 +230,7 @@ label.action.update.resource.count.processing=\u30ea\u30bd\u30fc\u30b9\u6570\u30
|
|||
label.action.update.resource.count=\u30ea\u30bd\u30fc\u30b9\u6570\u306e\u66f4\u65b0
|
||||
label.activate.project=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u5316
|
||||
label.active.sessions=\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30bb\u30c3\u30b7\u30e7\u30f3
|
||||
label.add.accounts.to=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0\u5148\:
|
||||
label.add.accounts.to=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0\u5148:
|
||||
label.add.accounts=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0
|
||||
label.add.account.to.project=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u8ffd\u52a0
|
||||
label.add.account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u8ffd\u52a0
|
||||
|
|
@ -456,7 +456,7 @@ label.domain.admin=\u30c9\u30e1\u30a4\u30f3\u7ba1\u7406\u8005
|
|||
label.domain.id=\u30c9\u30e1\u30a4\u30f3 ID
|
||||
label.domain.name=\u30c9\u30e1\u30a4\u30f3\u540d
|
||||
label.domain.router=\u30c9\u30e1\u30a4\u30f3 \u30eb\u30fc\u30bf\u30fc
|
||||
label.domain.suffix=DNS \u30c9\u30e1\u30a4\u30f3 \u30b5\u30d5\u30a3\u30c3\u30af\u30b9 (\u4f8b\: xyz.com)
|
||||
label.domain.suffix=DNS \u30c9\u30e1\u30a4\u30f3 \u30b5\u30d5\u30a3\u30c3\u30af\u30b9 (\u4f8b: xyz.com)
|
||||
label.domain=\u30c9\u30e1\u30a4\u30f3
|
||||
label.done=\u5b8c\u4e86
|
||||
label.double.quotes.are.not.allowed=\u4e8c\u91cd\u5f15\u7528\u7b26\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093
|
||||
|
|
@ -534,7 +534,7 @@ label.host.alerts=\u30db\u30b9\u30c8 \u30a2\u30e9\u30fc\u30c8
|
|||
label.host.MAC=\u30db\u30b9\u30c8\u306e MAC
|
||||
label.host.name=\u30db\u30b9\u30c8\u540d
|
||||
label.hosts=\u30db\u30b9\u30c8
|
||||
label.host.tags=\u00e3\u0083\u009b\u00e3\u0082\u00b9\u00e3\u0083\u0088\u00e3\u0082\u00bf\u00e3\u0082\u00b0
|
||||
label.host.tags=\u30db\u30b9\u30c8 \u30bf\u30b0
|
||||
label.host=\u30db\u30b9\u30c8
|
||||
label.hourly=\u6bce\u6642
|
||||
label.hypervisor.capabilities=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306e\u6a5f\u80fd
|
||||
|
|
@ -563,8 +563,8 @@ label.installWizard.addZoneIntro.subtitle=\u30be\u30fc\u30f3\u306b\u3064\u3044\u
|
|||
label.installWizard.addZoneIntro.title=\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3057\u307e\u3057\u3087\u3046
|
||||
label.installWizard.addZone.title=\u30be\u30fc\u30f3\u306e\u8ffd\u52a0
|
||||
label.installWizard.click.launch=[\u8d77\u52d5] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
label.installWizard.subtitle=\u3053\u306e\u30ac\u30a4\u30c9 \u30c4\u30a2\u30fc\u306f CloudStack&\#8482; \u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u5f79\u7acb\u3061\u307e\u3059
|
||||
label.installWizard.title=CloudStack&\#8482; \u3078\u3088\u3046\u3053\u305d
|
||||
label.installWizard.subtitle=\u3053\u306e\u30ac\u30a4\u30c9 \u30c4\u30a2\u30fc\u306f CloudStack™ \u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u5f79\u7acb\u3061\u307e\u3059
|
||||
label.installWizard.title=CloudStack™ \u3078\u3088\u3046\u3053\u305d
|
||||
label.instance.limits=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5236\u9650
|
||||
label.instance.name=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d
|
||||
label.instances=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9
|
||||
|
|
@ -573,12 +573,12 @@ label.internal.dns.1=\u5185\u90e8 DNS 1
|
|||
label.internal.dns.2=\u5185\u90e8 DNS 2
|
||||
label.internal.name=\u5185\u90e8\u540d
|
||||
label.interval.type=\u9593\u9694\u306e\u7a2e\u985e
|
||||
label.introduction.to.cloudstack=CloudStack&\#8482; \u306e\u7d39\u4ecb
|
||||
label.introduction.to.cloudstack=CloudStack™ \u306e\u7d39\u4ecb
|
||||
label.invalid.integer=\u7121\u52b9\u306a\u6574\u6570
|
||||
label.invalid.number=\u7121\u52b9\u306a\u6570
|
||||
label.invitations=\u62db\u5f85\u72b6
|
||||
label.invited.accounts=\u62db\u5f85\u6e08\u307f\u30a2\u30ab\u30a6\u30f3\u30c8
|
||||
label.invite.to=\u62db\u5f85\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\:
|
||||
label.invite.to=\u62db\u5f85\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8:
|
||||
label.invite=\u62db\u5f85
|
||||
label.ip.address=IP \u30a2\u30c9\u30ec\u30b9
|
||||
label.ipaddress=IP \u30a2\u30c9\u30ec\u30b9
|
||||
|
|
@ -695,9 +695,9 @@ label.menu.virtual.resources=\u4eee\u60f3\u30ea\u30bd\u30fc\u30b9
|
|||
label.menu.volumes=\u30dc\u30ea\u30e5\u30fc\u30e0
|
||||
label.migrate.instance.to.host=\u5225\u306e\u30db\u30b9\u30c8\u3078\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c
|
||||
label.migrate.instance.to.ps=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c
|
||||
label.migrate.instance.to=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c\u5148\:
|
||||
label.migrate.router.to=\u30eb\u30fc\u30bf\u30fc\u306e\u79fb\u884c\u5148\:
|
||||
label.migrate.systemvm.to=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u79fb\u884c\u5148\:
|
||||
label.migrate.instance.to=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u79fb\u884c\u5148:
|
||||
label.migrate.router.to=\u30eb\u30fc\u30bf\u30fc\u306e\u79fb\u884c\u5148:
|
||||
label.migrate.systemvm.to=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u79fb\u884c\u5148:
|
||||
label.migrate.to.host=\u30db\u30b9\u30c8\u3078\u79fb\u884c
|
||||
label.migrate.to.storage=\u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u79fb\u884c
|
||||
label.migrate.volume=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u79fb\u884c
|
||||
|
|
@ -785,7 +785,7 @@ label.os.preference=OS \u57fa\u672c\u8a2d\u5b9a
|
|||
label.os.type=OS \u306e\u7a2e\u985e
|
||||
label.owned.public.ips=\u6240\u6709\u3059\u308b\u30d1\u30d6\u30ea\u30c3\u30af IP \u30a2\u30c9\u30ec\u30b9
|
||||
label.owner.account=\u6240\u6709\u8005\u30a2\u30ab\u30a6\u30f3\u30c8
|
||||
label.owner.domain=\u00e6\u0089\u0080\u00e6\u009c\u0089\u00e8\u0080
|
||||
label.owner.domain=\u6240\u6709\u8005\u30c9\u30e1\u30a4\u30f3
|
||||
label.parent.domain=\u89aa\u30c9\u30e1\u30a4\u30f3
|
||||
label.password.enabled=\u30d1\u30b9\u30ef\u30fc\u30c9\u7ba1\u7406\u6709\u52b9
|
||||
label.password=\u30d1\u30b9\u30ef\u30fc\u30c9
|
||||
|
|
@ -817,7 +817,7 @@ label.private.interface=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30a4\u30f3\u30bf\
|
|||
label.private.ip.range=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2
|
||||
label.private.ips=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9
|
||||
label.private.ip=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 IP \u30a2\u30c9\u30ec\u30b9
|
||||
label.privatekey=PKC\#8 \u79d8\u5bc6\u30ad\u30fc
|
||||
label.privatekey=PKC#8 \u79d8\u5bc6\u30ad\u30fc
|
||||
label.private.network=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af
|
||||
label.private.port=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30dd\u30fc\u30c8
|
||||
label.private.zone=\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8 \u30be\u30fc\u30f3
|
||||
|
|
@ -951,7 +951,7 @@ label.start.reserved.system.IP=\u4e88\u7d04\u6e08\u307f\u958b\u59cb\u30b7\u30b9\
|
|||
label.start.vlan=\u958b\u59cb VLAN
|
||||
label.state=\u72b6\u614b
|
||||
label.static.nat.enabled=\u9759\u7684 NAT \u6709\u52b9
|
||||
label.static.nat.to=\u9759\u7684 NAT \u306e\u8a2d\u5b9a\u5148\:
|
||||
label.static.nat.to=\u9759\u7684 NAT \u306e\u8a2d\u5b9a\u5148:
|
||||
label.static.nat=\u9759\u7684 NAT
|
||||
label.static.nat.vm.details=\u9759\u7684 NAT VM \u306e\u8a73\u7d30
|
||||
label.statistics=\u7d71\u8a08
|
||||
|
|
@ -960,7 +960,7 @@ label.step.1.title=\u624b\u9806 1. <strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\
|
|||
label.step.1=\u624b\u9806 1
|
||||
label.step.2.title=\u624b\u9806 2. <strong>\u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0</strong>
|
||||
label.step.2=\u624b\u9806 2
|
||||
label.step.3.title=\u624b\u9806 3. <strong id\="step3_label">\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u9078\u629e</strong>
|
||||
label.step.3.title=\u624b\u9806 3. <strong id="step3_label">\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u306e\u9078\u629e</strong>
|
||||
label.step.3=\u624b\u9806 3
|
||||
label.step.4.title=\u624b\u9806 4. <strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af</strong>
|
||||
label.step.4=\u624b\u9806 4
|
||||
|
|
@ -986,7 +986,7 @@ label.storage.traffic=\u30b9\u30c8\u30ec\u30fc\u30b8 \u30c8\u30e9\u30d5\u30a3\u3
|
|||
label.storage.type=\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u7a2e\u985e
|
||||
label.storage=\u30b9\u30c8\u30ec\u30fc\u30b8
|
||||
label.subdomain.access=\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3 \u30a2\u30af\u30bb\u30b9
|
||||
label.submitted.by=[\u9001\u4fe1\u30e6\u30fc\u30b6\u30fc\: <span id\="submitted_by"></span>]
|
||||
label.submitted.by=[\u9001\u4fe1\u30e6\u30fc\u30b6\u30fc: <span id="submitted_by"></span>]
|
||||
label.submit=\u9001\u4fe1
|
||||
label.succeeded=\u6210\u529f
|
||||
label.sunday=\u65e5\u66dc\u65e5
|
||||
|
|
@ -1061,7 +1061,7 @@ label.vcipaddress=vCenter IP \u30a2\u30c9\u30ec\u30b9
|
|||
label.version=\u30d0\u30fc\u30b8\u30e7\u30f3
|
||||
label.view.all=\u3059\u3079\u3066\u8868\u793a
|
||||
label.view.console=\u30b3\u30f3\u30bd\u30fc\u30eb\u306e\u8868\u793a
|
||||
label.viewing=\u8868\u793a\u9805\u76ee\:
|
||||
label.viewing=\u8868\u793a\u9805\u76ee:
|
||||
label.view.more=\u8a73\u7d30\u8868\u793a
|
||||
label.view=\u8868\u793a -
|
||||
label.virtual.appliances=\u4eee\u60f3\u30a2\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9
|
||||
|
|
@ -1110,7 +1110,7 @@ label.wednesday=\u6c34\u66dc\u65e5
|
|||
label.weekly=\u6bce\u9031
|
||||
label.welcome.cloud.console=\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb\u3078\u3088\u3046\u3053\u305d
|
||||
label.welcome=\u3088\u3046\u3053\u305d
|
||||
label.what.is.cloudstack=CloudStack&\#8482; \u306b\u3064\u3044\u3066
|
||||
label.what.is.cloudstack=CloudStack™ \u306b\u3064\u3044\u3066
|
||||
label.xen.traffic.label=XenServer \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u30e9\u30d9\u30eb
|
||||
label.yes=\u306f\u3044
|
||||
label.zone.details=\u30be\u30fc\u30f3\u306e\u8a73\u7d30
|
||||
|
|
@ -1124,9 +1124,9 @@ label.zones=\u30be\u30fc\u30f3
|
|||
label.zone.type=\u30be\u30fc\u30f3\u306e\u7a2e\u985e
|
||||
label.zone=\u30be\u30fc\u30f3
|
||||
label.zone.wide=\u30be\u30fc\u30f3\u5168\u4f53
|
||||
label.zoneWizard.trafficType.guest=\u30b2\u30b9\u30c8\: \u30a8\u30f3\u30c9\u30e6\u30fc\u30b6\u30fc\u4eee\u60f3\u30de\u30b7\u30f3\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af
|
||||
label.zoneWizard.trafficType.public=\u30d1\u30d6\u30ea\u30c3\u30af\: \u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3068\u30af\u30e9\u30a6\u30c9\u5185\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af
|
||||
label.zoneWizard.trafficType.storage=\u30b9\u30c8\u30ec\u30fc\u30b8\: VM\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u3088\u3046\u306a\u3001\u30d7\u30e9\u30a4\u30de\u30ea\u3068\u30bb\u30ab\u30f3\u30c0\u30ea\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3002
|
||||
label.zoneWizard.trafficType.guest=\u30b2\u30b9\u30c8: \u30a8\u30f3\u30c9\u30e6\u30fc\u30b6\u30fc\u4eee\u60f3\u30de\u30b7\u30f3\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af
|
||||
label.zoneWizard.trafficType.public=\u30d1\u30d6\u30ea\u30c3\u30af: \u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3068\u30af\u30e9\u30a6\u30c9\u5185\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af
|
||||
label.zoneWizard.trafficType.storage=\u30b9\u30c8\u30ec\u30fc\u30b8: VM\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u3088\u3046\u306a\u3001\u30d7\u30e9\u30a4\u30de\u30ea\u3068\u30bb\u30ab\u30f3\u30c0\u30ea\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u30b5\u30fc\u30d0\u30fc\u9593\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3002
|
||||
managed.state=\u7ba1\u7406\u5bfe\u8c61\u72b6\u614b
|
||||
message.acquire.new.ip=\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u65b0\u3057\u3044 IP \u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.acquire.new.ip.vpc=VPC\u306e\u65b0\u3057\u3044IP\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
|
|
@ -1138,8 +1138,8 @@ message.action.change.service.warning.for.router=\u73fe\u5728\u306e\u30b5\u30fc\
|
|||
message.action.delete.cluster=\u3053\u306e\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.delete.disk.offering=\u3053\u306e\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.delete.domain=\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.delete.external.firewall=\u3053\u306e\u5916\u90e8\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u8b66\u544a\: \u540c\u3058\u5916\u90e8\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u518d\u5ea6\u8ffd\u52a0\u3059\u308b\u4e88\u5b9a\u3067\u3042\u308b\u5834\u5408\u306f\u3001\u30c7\u30d0\u30a4\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30c7\u30fc\u30bf\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.action.delete.external.load.balancer=\u3053\u306e\u5916\u90e8\u8ca0\u8377\u5206\u6563\u88c5\u7f6e\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u8b66\u544a\: \u540c\u3058\u5916\u90e8\u8ca0\u8377\u5206\u6563\u88c5\u7f6e\u3092\u518d\u5ea6\u8ffd\u52a0\u3059\u308b\u4e88\u5b9a\u3067\u3042\u308b\u5834\u5408\u306f\u3001\u30c7\u30d0\u30a4\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30c7\u30fc\u30bf\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.action.delete.external.firewall=\u3053\u306e\u5916\u90e8\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u8b66\u544a: \u540c\u3058\u5916\u90e8\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u518d\u5ea6\u8ffd\u52a0\u3059\u308b\u4e88\u5b9a\u3067\u3042\u308b\u5834\u5408\u306f\u3001\u30c7\u30d0\u30a4\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30c7\u30fc\u30bf\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.action.delete.external.load.balancer=\u3053\u306e\u5916\u90e8\u8ca0\u8377\u5206\u6563\u88c5\u7f6e\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u8b66\u544a: \u540c\u3058\u5916\u90e8\u8ca0\u8377\u5206\u6563\u88c5\u7f6e\u3092\u518d\u5ea6\u8ffd\u52a0\u3059\u308b\u4e88\u5b9a\u3067\u3042\u308b\u5834\u5408\u306f\u3001\u30c7\u30d0\u30a4\u30b9\u306e\u4f7f\u7528\u72b6\u6cc1\u30c7\u30fc\u30bf\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.action.delete.ingress.rule=\u3053\u306e\u53d7\u4fe1\u898f\u5247\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.delete.ISO.for.all.zones=\u305d\u306e ISO \u306f\u3059\u3079\u3066\u306e\u30be\u30fc\u30f3\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3059\u3079\u3066\u306e\u30be\u30fc\u30f3\u304b\u3089\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.delete.ISO=\u3053\u306e ISO \u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
|
|
@ -1175,9 +1175,9 @@ message.action.enable.pod=\u3053\u306e\u30dd\u30c3\u30c9\u3092\u6709\u52b9\u306b
|
|||
message.action.enable.zone=\u3053\u306e\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.force.reconnect=\u30db\u30b9\u30c8\u306f\u5f37\u5236\u7684\u306b\u518d\u63a5\u7d9a\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u51e6\u7406\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.action.host.enable.maintenance.mode=\u4fdd\u5b88\u30e2\u30fc\u30c9\u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001\u3053\u306e\u30db\u30b9\u30c8\u3067\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u307b\u304b\u306e\u4f7f\u7528\u3067\u304d\u308b\u30db\u30b9\u30c8\u306b\u30e9\u30a4\u30d6 \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3055\u308c\u307e\u3059\u3002
|
||||
message.action.instance.reset.password=\u00e3\u0081\u0093\u00e3\u0081\u00ae\u00e4\u00bb\u00ae\u00e6\u0083\u00b3\u00e3\u0083\u009e\u00e3\u0082\u00b7\u00e3\u0083\u00b3\u00e3\u0081\u00ae\u00e3\u0083\u00ab\u00e3\u0083\u00bc\u00e3\u0083\u0088\u00e3\u0083\u0091\u00e3\u0082\u00b9\u00e3\u0083\u00af\u00e3\u0083\u00bc\u00e3\u0083\u0089\u00e3\u0082\u0092\u00e5\u00a4\u0089\u00e6\u009b\u00b4\u00e3\u0081\u0097\u00e3\u0081\u00a6\u00e3\u0082\u0082\u00e3\u0082\u0088\u00e3\u0082\u008d\u00e3\u0081\u0097\u00e3\u0081\u0084\u00e3\u0081\u00a7\u00e3\u0081\u0099\u00e3\u0081\u008b?
|
||||
message.action.instance.reset.password=\u3053\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u30eb\u30fc\u30c8 \u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.manage.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u7ba1\u7406\u5bfe\u8c61\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.primarystorage.enable.maintenance.mode=\u8b66\u544a\: \u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4fdd\u5b88\u30e2\u30fc\u30c9\u306b\u3059\u308b\u3068\u3001\u305d\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u4e0a\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3059\u3079\u3066\u306e VM \u304c\u505c\u6b62\u3057\u307e\u3059\u3002\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.primarystorage.enable.maintenance.mode=\u8b66\u544a: \u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4fdd\u5b88\u30e2\u30fc\u30c9\u306b\u3059\u308b\u3068\u3001\u305d\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u4e0a\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3059\u3079\u3066\u306e VM \u304c\u505c\u6b62\u3057\u307e\u3059\u3002\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.reboot.instance=\u3053\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.reboot.router=\u3053\u306e\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u3067\u63d0\u4f9b\u3059\u308b\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4e2d\u65ad\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30eb\u30fc\u30bf\u30fc\u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.reboot.systemvm=\u3053\u306e\u30b7\u30b9\u30c6\u30e0 VM \u3092\u518d\u8d77\u52d5\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
|
|
@ -1195,8 +1195,8 @@ message.action.stop.systemvm=\u3053\u306e\u30b7\u30b9\u30c6\u30e0 VM \u3092\u505
|
|||
message.action.take.snapshot=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.action.unmanage.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u975e\u7ba1\u7406\u5bfe\u8c61\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.activate.project=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.add.cluster=\u30be\u30fc\u30f3 <b><span id\="zone_name"></span></b> \u306e\u30dd\u30c3\u30c9 <b><span id\="pod_name"></span></b> \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.cluster.zone=\u30be\u30fc\u30f3 <b><span id\="zone_name"></span></b> \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.cluster=\u30be\u30fc\u30f3 <b><span id="zone_name"></span></b> \u306e\u30dd\u30c3\u30c9 <b><span id="pod_name"></span></b> \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.cluster.zone=\u30be\u30fc\u30f3 <b><span id="zone_name"></span></b> \u306b\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3067\u7ba1\u7406\u3055\u308c\u308b\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.disk.offering=\u65b0\u3057\u3044\u30c7\u30a3\u30b9\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.domain=\u3053\u306e\u30c9\u30e1\u30a4\u30f3\u306b\u4f5c\u6210\u3059\u308b\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.firewall=\u30be\u30fc\u30f3\u306b\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
|
|
@ -1205,18 +1205,18 @@ message.add.host=\u65b0\u3057\u3044\u30db\u30b9\u30c8\u3092\u8ffd\u52a0\u3059\u3
|
|||
message.adding.host=\u30db\u30b9\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059
|
||||
message.adding.Netscaler.device=Netscaler \u30c7\u30d0\u30a4\u30b9\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059
|
||||
message.adding.Netscaler.provider=Netscaler \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059
|
||||
message.add.ip.range.direct.network=\u30be\u30fc\u30f3 <b><span id\="zone_name"></span></b> \u306e\u76f4\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af <b><span id\="directnetwork_name"></span></b> \u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.ip.range.to.pod=<p>\u30dd\u30c3\u30c9 <b><span id\="pod_name_label"></span></b> \u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059</p>
|
||||
message.add.ip.range.direct.network=\u30be\u30fc\u30f3 <b><span id="zone_name"></span></b> \u306e\u76f4\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af <b><span id="directnetwork_name"></span></b> \u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.ip.range.to.pod=<p>\u30dd\u30c3\u30c9 <b><span id="pod_name_label"></span></b> \u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059</p>
|
||||
message.add.ip.range=\u30be\u30fc\u30f3\u306e\u30d1\u30d6\u30ea\u30c3\u30af \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.additional.networks.desc=\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u63a5\u7d9a\u3059\u308b\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.load.balancer=\u30be\u30fc\u30f3\u306b\u8ca0\u8377\u5206\u6563\u88c5\u7f6e\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.load.balancer.under.ip=\u8ca0\u8377\u5206\u6563\u898f\u5247\u304c\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3057\u3066\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\:
|
||||
message.add.network=\u30be\u30fc\u30f3 <b><span id\="zone_name"></span></b> \u306b\u65b0\u3057\u3044\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.load.balancer.under.ip=\u8ca0\u8377\u5206\u6563\u898f\u5247\u304c\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3057\u3066\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f:
|
||||
message.add.network=\u30be\u30fc\u30f3 <b><span id="zone_name"></span></b> \u306b\u65b0\u3057\u3044\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.new.gateway.to.vpc=\u3053\u306e VPC \u306b\u65b0\u3057\u3044\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.pod=\u30be\u30fc\u30f3 <b><span id\="add_pod_zone_name"></span></b> \u306b\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.primary.storage=\u30be\u30fc\u30f3 <b><span id\="zone_name"></span></b> \u306e\u30dd\u30c3\u30c9 <b><span id\="pod_name"></span></b> \u306b\u65b0\u3057\u3044\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.pod=\u30be\u30fc\u30f3 <b><span id="add_pod_zone_name"></span></b> \u306b\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.primary.storage=\u30be\u30fc\u30f3 <b><span id="zone_name"></span></b> \u306e\u30dd\u30c3\u30c9 <b><span id="pod_name"></span></b> \u306b\u65b0\u3057\u3044\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.primary=\u65b0\u3057\u3044\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.secondary.storage=\u30be\u30fc\u30f3 <b><span id\="zone_name"></span></b> \u306b\u65b0\u3057\u3044\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.secondary.storage=\u30be\u30fc\u30f3 <b><span id="zone_name"></span></b> \u306b\u65b0\u3057\u3044\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u8ffd\u52a0\u3057\u307e\u3059
|
||||
message.add.service.offering=\u65b0\u3057\u3044\u30b3\u30f3\u30d4\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.system.service.offering=\u65b0\u3057\u3044\u30b7\u30b9\u30c6\u30e0 \u30b5\u30fc\u30d3\u30b9 \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.add.template=\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
|
|
@ -1225,8 +1225,8 @@ message.add.VPN.gateway=VPN \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u8ffd\u52
|
|||
message.advanced.mode.desc=VLAN \u30b5\u30dd\u30fc\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e2\u30c7\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30e2\u30c7\u30eb\u3067\u306f\u6700\u3082\u67d4\u8edf\u306b\u30ab\u30b9\u30bf\u30e0 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30aa\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u63d0\u4f9b\u3067\u304d\u3001\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u3001VPN\u3001\u8ca0\u8377\u5206\u6563\u88c5\u7f6e\u306e\u30b5\u30dd\u30fc\u30c8\u306e\u307b\u304b\u306b\u3001\u76f4\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3082\u6709\u52b9\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
|
||||
message.advanced.security.group=\u30b2\u30b9\u30c8 VM \u3092\u5206\u96e2\u3059\u308b\u305f\u3081\u306b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.advanced.virtual=\u30b2\u30b9\u30c8 VM \u3092\u5206\u96e2\u3059\u308b\u305f\u3081\u306b\u30be\u30fc\u30f3\u5168\u4f53\u306e VLAN \u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.after.enable.s3=S3\u57fa\u76e4\u30bb\u30ab\u30f3\u30c0\u30ea\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002 \u30ce\u30fc\u30c8\:\u3053\u306e\u30da\u30fc\u30b8\u3092\u9589\u3058\u308b\u3068S3\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
message.after.enable.swift=Swift \u304c\u69cb\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u6ce8\: \u3053\u306e\u30da\u30fc\u30b8\u3092\u9589\u3058\u308b\u3068\u3001Swift \u3092\u518d\u69cb\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
message.after.enable.s3=S3\u57fa\u76e4\u30bb\u30ab\u30f3\u30c0\u30ea\u30b9\u30c8\u30ec\u30fc\u30b8\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002 \u30ce\u30fc\u30c8:\u3053\u306e\u30da\u30fc\u30b8\u3092\u9589\u3058\u308b\u3068S3\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
message.after.enable.swift=Swift \u304c\u69cb\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u6ce8: \u3053\u306e\u30da\u30fc\u30b8\u3092\u9589\u3058\u308b\u3068\u3001Swift \u3092\u518d\u69cb\u6210\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
message.alert.state.detected=\u30a2\u30e9\u30fc\u30c8\u72b6\u614b\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f
|
||||
message.allow.vpn.access=VPN \u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.apply.snapshot.policy=\u73fe\u5728\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 \u30dd\u30ea\u30b7\u30fc\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002
|
||||
|
|
@ -1251,10 +1251,10 @@ message.confirm.join.project=\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3
|
|||
message.confirm.remove.IP.range=\u3053\u306e IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.confirm.shutdown.provider=\u3053\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3092\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.copy.iso.confirm=ISO \u3092\u6b21\u306e\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.copy.template=\u30be\u30fc\u30f3 <b id\="copy_template_source_zone_text"></b> \u304b\u3089\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 <b id\="copy_template_name_text">XXX</b> \u3092\u6b21\u306e\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\:
|
||||
message.copy.template=\u30be\u30fc\u30f3 <b id="copy_template_source_zone_text"></b> \u304b\u3089\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 <b id="copy_template_name_text">XXX</b> \u3092\u6b21\u306e\u5834\u6240\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059:
|
||||
message.create.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.create.template.vm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 <b id\="p_name"></b> \u304b\u3089 VM \u3092\u4f5c\u6210\u3057\u307e\u3059
|
||||
message.create.template.volume=\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0 <b><span id\="volume_name"></span></b> \u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u524d\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30dc\u30ea\u30e5\u30fc\u30e0 \u30b5\u30a4\u30ba\u306b\u3088\u3063\u3066\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210\u306b\u306f\u6570\u5206\u4ee5\u4e0a\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.create.template.vm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 <b id="p_name"></b> \u304b\u3089 VM \u3092\u4f5c\u6210\u3057\u307e\u3059
|
||||
message.create.template.volume=\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0 <b><span id="volume_name"></span></b> \u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u524d\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30dc\u30ea\u30e5\u30fc\u30e0 \u30b5\u30a4\u30ba\u306b\u3088\u3063\u3066\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210\u306b\u306f\u6570\u5206\u4ee5\u4e0a\u304b\u304b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.creating.cluster=\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059
|
||||
message.creating.guest.network=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059
|
||||
message.creating.physical.networks=\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059
|
||||
|
|
@ -1278,21 +1278,21 @@ message.desc.secondary.storage=\u5404\u30be\u30fc\u30f3\u306b\u306f\u5c11\u306a\
|
|||
message.desc.zone=\u30be\u30fc\u30f3\u306f CloudStack \u74b0\u5883\u5185\u306e\u6700\u5927\u306e\u7d44\u7e54\u5358\u4f4d\u3067\u3001\u901a\u5e38\u3001\u5358\u4e00\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002\u30be\u30fc\u30f3\u306b\u3088\u3063\u3066\u7269\u7406\u7684\u306a\u5206\u96e2\u3068\u5197\u9577\u6027\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u30be\u30fc\u30f3\u306f 1 \u3064\u4ee5\u4e0a\u306e\u30dd\u30c3\u30c9 (\u5404\u30dd\u30c3\u30c9\u306f\u30db\u30b9\u30c8\u3068\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30b5\u30fc\u30d0\u30fc\u304b\u3089\u69cb\u6210\u3055\u308c\u307e\u3059) \u3068\u3001\u30be\u30fc\u30f3\u5185\u306e\u3059\u3079\u3066\u306e\u30dd\u30c3\u30c9\u3067\u5171\u6709\u3055\u308c\u308b\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8 \u30b5\u30fc\u30d0\u30fc\u304b\u3089\u69cb\u6210\u3055\u308c\u307e\u3059\u3002
|
||||
message.detach.disk=\u3053\u306e\u30c7\u30a3\u30b9\u30af\u3092\u30c7\u30bf\u30c3\u30c1\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.detach.iso.confirm=\u3053\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089 ISO \u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30bf\u30c3\u30c1\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.disable.account=\u00e3\u0081\u0093\u00e3\u0081\u00ae\u00e3\u0082\u00a2\u00e3\u0082\u00ab\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u0088\u00e3\u0082\u0092\u00e7\u0084\u00a1\u00e5\u008a\u00b9\u00e3\u0081\u00ab\u00e3\u0081\u0097\u00e3\u0081\u00a6\u00e3\u0082\u0082\u00e3\u0082\u0088\u00e3\u0082\u008d\u00e3\u0081\u0097\u00e3\u0081\u0084\u00e3\u0081\u00a7\u00e3\u0081\u0099\u00e3\u0081\u008b? \u00e3\u0082\u00a2\u00e3\u0082\u00ab\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u0088\u00e3\u0082\u0092\u00e7\u0084\u00a1\u00e5\u008a\u00b9\u00e3\u0081\u00ab\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u0093\u00e3\u0081\u00a8\u00e3\u0081\u00ab\u00e3\u0082\u0088\u00e3\u0082\u008a\u00e3\u0080\u0081\u00e3\u0081\u0093\u00e3\u0081\u00ae\u00e3\u0082\u00a2\u00e3\u0082\u00ab\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u0088\u00e3\u0081\u00ae\u00e3\u0081\u0099\u00e3\u0081\u00b9\u00e3\u0081\u00a6\u00e3\u0081\u00ae\u00e3\u0083\u00a6\u00e3\u0083\u00bc\u00e3\u0082\u00b6\u00e3\u0083\u00bc\u00e3\u0081\u00af\u00e3\u0082\u00af\u00e3\u0083\u00a9\u00e3\u0082\u00a6\u00e3\u0083\u0089\u00e3\u0083\u00aa\u00e3\u0082\u00bd\u00e3\u0083\u00bc\u00e3\u0082\u00b9\u00e3\u0081\u00ab\u00e3\u0082\u00a2\u00e3\u0082\u00af\u00e3\u0082\u00bb\u00e3\u0082\u00b9\u00e3\u0081\u00a7\u00e3\u0081\u008d\u00e3\u0081\u00aa\u00e3\u0081\u008f\u00e3\u0081\u00aa\u00e3\u0082\u008a\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0080\u0082\u00e5\u00ae\u009f\u00e8\u00a1\u008c\u00e4\u00b8\u00ad\u00e3\u0081\u00ae\u00e3\u0081\u0099\u00e3\u0081\u00b9\u00e3\u0081\u00a6\u00e3\u0081\u00ae\u00e4\u00bb\u00ae\u00e6\u0083\u00b3\u00e3\u0083\u009e\u00e3\u0082\u00b7\u00e3\u0083\u00b3\u00e3\u0081\u00af\u00e3\u0081\u0099\u00e3\u0081\u0090\u00e3\u0081\u00ab\u00e3\u0082\u00b7\u00e3\u0083\u00a3\u00e3\u0083\u0083\u00e3\u0083\u0088\u00e3\u0083\u0080\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0081\u0095\u00e3\u0082\u008c\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0080\u0082
|
||||
message.disable.account=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b? \u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u30af\u30e9\u30a6\u30c9 \u30ea\u30bd\u30fc\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u5b9f\u884c\u4e2d\u306e\u3059\u3079\u3066\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u306f\u4eca\u3059\u3050\u306b\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3055\u308c\u307e\u3059\u3002
|
||||
message.disable.snapshot.policy=\u73fe\u5728\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 \u30dd\u30ea\u30b7\u30fc\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f\u3002
|
||||
message.disable.user=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.disable.vpn.access=VPN \u30a2\u30af\u30bb\u30b9\u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.disable.vpn=VPN \u3092\u7121\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.download.ISO=ISO\u00e3\u0082\u0092\u00e3\u0083\u0080\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u00ad\u00e3\u0083\u00bc\u00e3\u0083\u0089\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u009f\u00e3\u0082\u0081\u00e3\u0081\u00ab<a href\="\#">00000</a>\u00e3\u0082\u0092\u00e3\u0082\u00af\u00e3\u0083\u00aa\u00e3\u0083\u0083\u00e3\u0082\u00af\u00e3\u0081\u0097\u00e3\u0081\u00a6\u00e3\u0081\u008f\u00e3\u0081\u00a0\u00e3\u0081\u0095\u00e3\u0081\u0084\u00e3\u0080\u0082
|
||||
message.download.template=\u00e3\u0083\u0086\u00e3\u0083\u00b3\u00e3\u0083\u0097\u00e3\u0083\u00ac\u00e3\u0083\u00bc\u00e3\u0083\u0088\u00e3\u0082\u0092\u00e3\u0083\u0080\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u00ad\u00e3\u0083\u00bc\u00e3\u0083\u0089\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u009f\u00e3\u0082\u0081\u00e3\u0081\u00ab<a href\="\#">00000</a>\u00e3\u0082\u0092\u00e3\u0082\u00af\u00e3\u0083\u00aa\u00e3\u0083\u0083\u00e3\u0082\u00af\u00e3\u0081\u0097\u00e3\u0081\u00a6\u00e3\u0081\u008f\u00e3\u0081\u00a0\u00e3\u0081\u0095\u00e3\u0081\u0084\u00e3\u0080\u0082
|
||||
message.download.ISO=ISO \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f <a href="#">00000</a> \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
|
||||
message.download.template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f <a href="#">00000</a> \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
|
||||
message.download.volume.confirm=\u3053\u306e\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.download.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f <a href\="\#">00000</a> \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
|
||||
message.download.volume=\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u306b\u306f <a href="#">00000</a> \u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059
|
||||
message.edit.account=\u7de8\u96c6 ("-1" \u306f\u3001\u30ea\u30bd\u30fc\u30b9\u4f5c\u6210\u306e\u91cf\u306b\u5236\u9650\u304c\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u307e\u3059)
|
||||
message.edit.confirm=[\u4fdd\u5b58] \u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u524d\u306b\u5909\u66f4\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.edit.limits=\u6b21\u306e\u30ea\u30bd\u30fc\u30b9\u306b\u5236\u9650\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300c-1\u300d\u306f\u3001\u30ea\u30bd\u30fc\u30b9\u4f5c\u6210\u306b\u5236\u9650\u304c\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002
|
||||
message.edit.traffic.type=\u3053\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u7a2e\u985e\u306b\u95a2\u9023\u4ed8\u3051\u308b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af \u30e9\u30d9\u30eb\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.enable.account=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.enabled.vpn.ip.sec=IPSec \u4e8b\u524d\u5171\u6709\u30ad\u30fc\:
|
||||
message.enabled.vpn.ip.sec=IPSec \u4e8b\u524d\u5171\u6709\u30ad\u30fc:
|
||||
message.enabled.vpn=\u73fe\u5728\u3001VPN \u30a2\u30af\u30bb\u30b9\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u6b21\u306e IP \u30a2\u30c9\u30ec\u30b9\u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002
|
||||
message.enable.user=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.enable.vpn.access=\u73fe\u5728\u3053\u306e IP \u30a2\u30c9\u30ec\u30b9\u306b\u5bfe\u3059\u308b VPN \u306f\u7121\u52b9\u3067\u3059\u3002VPN \u30a2\u30af\u30bb\u30b9\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
|
|
@ -1304,8 +1304,8 @@ message.generate.keys=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u65b0\u3057\u30
|
|||
message.guest.traffic.in.advanced.zone=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306f\u3001\u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u9593\u306e\u901a\u4fe1\u3067\u3059\u3002\u5404\u7269\u7406\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30b2\u30b9\u30c8 \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u901a\u4fe1\u3059\u308b\u305f\u3081\u306e VLAN ID \u306e\u7bc4\u56f2\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.guest.traffic.in.basic.zone=\u30b2\u30b9\u30c8 \u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306f\u3001\u30a8\u30f3\u30c9 \u30e6\u30fc\u30b6\u30fc\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u9593\u306e\u901a\u4fe1\u3067\u3059\u3002CloudStack \u3067\u30b2\u30b9\u30c8 VM \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u308b IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u7bc4\u56f2\u304c\u4e88\u7d04\u6e08\u307f\u306e\u30b7\u30b9\u30c6\u30e0 IP \u30a2\u30c9\u30ec\u30b9\u306e\u7bc4\u56f2\u3068\u91cd\u8907\u3057\u306a\u3044\u3088\u3046\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.installWizard.click.retry=\u8d77\u52d5\u3092\u518d\u8a66\u884c\u3059\u308b\u306b\u306f\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.installWizard.copy.whatIsAPod=\u901a\u5e38\u30011 \u3064\u306e\u30dd\u30c3\u30c9\u306f\u5358\u4e00\u306e\u30e9\u30c3\u30af\u3092\u8868\u3057\u307e\u3059\u3002\u540c\u3058\u30dd\u30c3\u30c9\u5185\u306e\u30db\u30b9\u30c8\u306f\u540c\u3058\u30b5\u30d6\u30cd\u30c3\u30c8\u306b\u542b\u307e\u308c\u307e\u3059\u3002 <br/><br/>\u30dd\u30c3\u30c9\u306f CloudStack&\#8482; \u74b0\u5883\u5185\u306e 2 \u756a\u76ee\u306b\u5927\u304d\u306a\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u3002\u30dd\u30c3\u30c9\u306f\u30be\u30fc\u30f3\u306b\u542b\u307e\u308c\u307e\u3059\u3002\u5404\u30be\u30fc\u30f3\u306f 1 \u3064\u4ee5\u4e0a\u306e\u30dd\u30c3\u30c9\u3092\u542b\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u57fa\u672c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u3001\u30be\u30fc\u30f3\u5185\u306e\u30dd\u30c3\u30c9\u306f 1 \u3064\u3067\u3059\u3002
|
||||
message.installWizard.copy.whatIsAZone=\u30be\u30fc\u30f3\u306f CloudStack&\#8482; \u74b0\u5883\u5185\u306e\u6700\u5927\u306e\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u30021 \u3064\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u5185\u306b\u8907\u6570\u306e\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001\u901a\u5e38\u3001\u30be\u30fc\u30f3\u306f\u5358\u4e00\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u30be\u30fc\u30f3\u306b\u7d44\u7e54\u5316\u3059\u308b\u3068\u3001\u30be\u30fc\u30f3\u3092\u7269\u7406\u7684\u306b\u5206\u96e2\u3057\u3066\u5197\u9577\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001\u5404\u30be\u30fc\u30f3\u306b\u96fb\u6e90\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30a2\u30c3\u30d7\u30ea\u30f3\u30af\u3092\u914d\u5099\u3057\u307e\u3059\u3002\u5fc5\u9808\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30be\u30fc\u30f3\u306f\u9060\u9694\u5730\u306b\u5206\u6563\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
|
||||
message.installWizard.copy.whatIsAPod=\u901a\u5e38\u30011 \u3064\u306e\u30dd\u30c3\u30c9\u306f\u5358\u4e00\u306e\u30e9\u30c3\u30af\u3092\u8868\u3057\u307e\u3059\u3002\u540c\u3058\u30dd\u30c3\u30c9\u5185\u306e\u30db\u30b9\u30c8\u306f\u540c\u3058\u30b5\u30d6\u30cd\u30c3\u30c8\u306b\u542b\u307e\u308c\u307e\u3059\u3002 <br/><br/>\u30dd\u30c3\u30c9\u306f CloudStack™ \u74b0\u5883\u5185\u306e 2 \u756a\u76ee\u306b\u5927\u304d\u306a\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u3002\u30dd\u30c3\u30c9\u306f\u30be\u30fc\u30f3\u306b\u542b\u307e\u308c\u307e\u3059\u3002\u5404\u30be\u30fc\u30f3\u306f 1 \u3064\u4ee5\u4e0a\u306e\u30dd\u30c3\u30c9\u3092\u542b\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u57fa\u672c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u3001\u30be\u30fc\u30f3\u5185\u306e\u30dd\u30c3\u30c9\u306f 1 \u3064\u3067\u3059\u3002
|
||||
message.installWizard.copy.whatIsAZone=\u30be\u30fc\u30f3\u306f CloudStack™ \u74b0\u5883\u5185\u306e\u6700\u5927\u306e\u7d44\u7e54\u5358\u4f4d\u3067\u3059\u30021 \u3064\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u5185\u306b\u8907\u6570\u306e\u30be\u30fc\u30f3\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304c\u3001\u901a\u5e38\u3001\u30be\u30fc\u30f3\u306f\u5358\u4e00\u306e\u30c7\u30fc\u30bf\u30bb\u30f3\u30bf\u30fc\u306b\u76f8\u5f53\u3057\u307e\u3059\u3002\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u3092\u30be\u30fc\u30f3\u306b\u7d44\u7e54\u5316\u3059\u308b\u3068\u3001\u30be\u30fc\u30f3\u3092\u7269\u7406\u7684\u306b\u5206\u96e2\u3057\u3066\u5197\u9577\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001\u5404\u30be\u30fc\u30f3\u306b\u96fb\u6e90\u3068\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30a2\u30c3\u30d7\u30ea\u30f3\u30af\u3092\u914d\u5099\u3057\u307e\u3059\u3002\u5fc5\u9808\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30be\u30fc\u30f3\u306f\u9060\u9694\u5730\u306b\u5206\u6563\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
|
||||
message.installWizard.copy.whatIsSecondaryStorage=\u30bb\u30ab\u30f3\u30c0\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306f\u30be\u30fc\u30f3\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3001\u6b21\u306e\u9805\u76ee\u3092\u683c\u7d0d\u3057\u307e\u3059\u3002<ul><li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - VM \u306e\u8d77\u52d5\u306b\u4f7f\u7528\u3067\u304d\u308b OS \u30a4\u30e1\u30fc\u30b8\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306a\u3069\u8ffd\u52a0\u306e\u69cb\u6210\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002</li><li>ISO \u30a4\u30e1\u30fc\u30b8 - \u8d77\u52d5\u53ef\u80fd\u307e\u305f\u306f\u8d77\u52d5\u4e0d\u53ef\u306e OS \u30a4\u30e1\u30fc\u30b8\u3067\u3059\u3002</li><li>\u30c7\u30a3\u30b9\u30af \u30dc\u30ea\u30e5\u30fc\u30e0\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8 - VM \u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\u30b3\u30d4\u30fc\u3067\u3059\u3002\u30c7\u30fc\u30bf\u306e\u5fa9\u5143\u307e\u305f\u306f\u65b0\u3057\u3044\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002</ul>
|
||||
message.installWizard.tooltip.addCluster.name=\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u540d\u524d\u3067\u3059\u3002CloudStack \u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u306a\u3044\u3001\u4efb\u610f\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002
|
||||
message.installWizard.tooltip.addHost.hostname=\u30db\u30b9\u30c8\u306e DNS \u540d\u307e\u305f\u306f IP \u30a2\u30c9\u30ec\u30b9\u3067\u3059\u3002
|
||||
|
|
@ -1344,7 +1344,7 @@ message.migrate.instance.to.ps=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9
|
|||
message.migrate.router.confirm=\u30eb\u30fc\u30bf\u30fc\u306e\u79fb\u884c\u5148\u306f\u6b21\u306e\u30db\u30b9\u30c8\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.migrate.systemvm.confirm=\u30b7\u30b9\u30c6\u30e0 VM \u306e\u79fb\u884c\u5148\u306f\u6b21\u306e\u30db\u30b9\u30c8\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.migrate.volume=\u5225\u306e\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u30dc\u30ea\u30e5\u30fc\u30e0\u3092\u79fb\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.new.user=\u00e3\u0082\u00a2\u00e3\u0082\u00ab\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u0088\u00e3\u0081\u00ab\u00e6\u0096\u00b0\u00e3\u0081\u0097\u00e3\u0081\u0084\u00e3\u0083\u00a6\u00e3\u0083\u00bc\u00e3\u0082\u00b6\u00e3\u0083\u00bc\u00e3\u0082\u0092\u00e8\u00bf\u00bd\u00e5\u008a\u00a0\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u009f\u00e3\u0082\u0081\u00e3\u0081\u00ab\u00e3\u0080\u0081\u00e6\u00ac\u00a1\u00e3\u0081\u00ae\u00e6\u0083
|
||||
message.new.user=\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.no.network.support.configuration.not.true=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3 \u30b0\u30eb\u30fc\u30d7\u304c\u6709\u52b9\u306a\u30be\u30fc\u30f3\u304c\u7121\u3044\u305f\u3081\u3001\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u6a5f\u80fd\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u624b\u9806 5. \u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002
|
||||
message.no.network.support=\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u3068\u3057\u3066 vSphere \u3092\u9078\u629e\u3057\u307e\u3057\u305f\u304c\u3001\u3053\u306e\u30cf\u30a4\u30d1\u30fc\u30d0\u30a4\u30b6\u30fc\u306b\u8ffd\u52a0\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u6a5f\u80fd\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u624b\u9806 5. \u306b\u9032\u3093\u3067\u304f\u3060\u3055\u3044\u3002
|
||||
message.no.projects.adminOnly=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u3042\u308a\u307e\u305b\u3093\u3002<br/>\u7ba1\u7406\u8005\u306b\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3092\u4f9d\u983c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
|
|
@ -1407,7 +1407,7 @@ message.tooltip.reserved.system.netmask=\u30dd\u30c3\u30c9\u306e\u30b5\u30d6\u30
|
|||
message.tooltip.zone.name=\u30be\u30fc\u30f3\u306e\u540d\u524d\u3067\u3059\u3002
|
||||
message.update.os.preference=\u3053\u306e\u30db\u30b9\u30c8\u306e OS \u57fa\u672c\u8a2d\u5b9a\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u540c\u69d8\u306e\u57fa\u672c\u8a2d\u5b9a\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306f\u3001\u5225\u306e\u30db\u30b9\u30c8\u3092\u9078\u629e\u3059\u308b\u524d\u306b\u307e\u305a\u3053\u306e\u30db\u30b9\u30c8\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
|
||||
message.update.resource.count=\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ea\u30bd\u30fc\u30b9\u6570\u3092\u66f4\u65b0\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.update.ssl=\u5404\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u66f4\u65b0\u3059\u308b\u3001X.509 \u6e96\u62e0\u306e\u65b0\u3057\u3044 SSL \u8a3c\u660e\u66f8\u3092\u9001\u4fe1\u3057\u3066\u304f\u3060\u3055\u3044\:
|
||||
message.update.ssl=\u5404\u30b3\u30f3\u30bd\u30fc\u30eb \u30d7\u30ed\u30ad\u30b7\u306e\u4eee\u60f3\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u66f4\u65b0\u3059\u308b\u3001X.509 \u6e96\u62e0\u306e\u65b0\u3057\u3044 SSL \u8a3c\u660e\u66f8\u3092\u9001\u4fe1\u3057\u3066\u304f\u3060\u3055\u3044:
|
||||
message.validate.instance.name=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u306f 63 \u6587\u5b57\u4ee5\u5185\u3067\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002ASCII \u6587\u5b57\u306e a\uff5ez\u3001A\uff5eZ\u3001\u6570\u5b57\u306e 0\uff5e9\u3001\u304a\u3088\u3073\u30cf\u30a4\u30d5\u30f3\u306e\u307f\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u6587\u5b57\u3067\u59cb\u307e\u308a\u3001\u6587\u5b57\u307e\u305f\u306f\u6570\u5b57\u3067\u7d42\u308f\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
|
||||
message.virtual.network.desc=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u5c02\u7528\u4eee\u60f3\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u3059\u3002\u30d6\u30ed\u30fc\u30c9\u30ad\u30e3\u30b9\u30c8 \u30c9\u30e1\u30a4\u30f3\u306f VLAN \u5185\u306b\u914d\u7f6e\u3055\u308c\u3001\u30d1\u30d6\u30ea\u30c3\u30af \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u3059\u3079\u3066\u4eee\u60f3\u30eb\u30fc\u30bf\u30fc\u306b\u3088\u3063\u3066\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002
|
||||
message.vm.create.template.confirm=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3068 VM \u304c\u81ea\u52d5\u7684\u306b\u518d\u8d77\u52d5\u3055\u308c\u307e\u3059\u3002
|
||||
|
|
@ -1418,9 +1418,9 @@ message.Zone.creation.complete=\u30be\u30fc\u30f3\u304c\u4f5c\u6210\u3055\u308c\
|
|||
message.zone.creation.complete.would.you.like.to.enable.this.zone=\u30be\u30fc\u30f3\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.zone.no.network.selection=\u9078\u629e\u3057\u305f\u30be\u30fc\u30f3\u3067\u306f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u9078\u629e\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
message.zone.step.1.desc=\u30be\u30fc\u30f3\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af \u30e2\u30c7\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.zone.step.2.desc=\u00e6\u0096\u00b0\u00e3\u0081\u0097\u00e3\u0081\u0084Zone\u00e3\u0082\u0092\u00e8\u00bf\u00bd\u00e5\u008a\u00a0\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u009f\u00e3\u0082\u0081\u00e3\u0081\u00ab\u00e3\u0080\u0081\u00e6\u00ac\u00a1\u00e3\u0081\u00ae\u00e6\u0083
|
||||
message.zone.step.3.desc=\u00e6\u0096\u00b0\u00e3\u0081\u0097\u00e3\u0081\u0084Pod\u00e3\u0082\u0092\u00e8\u00bf\u00bd\u00e5\u008a\u00a0\u00e3\u0081\u0099\u00e3\u0082\u008b\u00e3\u0081\u009f\u00e3\u0082\u0081\u00e3\u0081\u00ab\u00e3\u0080\u0081\u00e6\u00ac\u00a1\u00e3\u0081\u00ae\u00e6\u0083
|
||||
message.zoneWizard.enable.local.storage=\u8b66\u544a\: \u3053\u306e\u30be\u30fc\u30f3\u306e\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u306b\u3059\u308b\u5834\u5408\u306f\u3001\u30b7\u30b9\u30c6\u30e0 VM \u306e\u8d77\u52d5\u5834\u6240\u306b\u5fdc\u3058\u3066\u6b21\u306e\u64cd\u4f5c\u304c\u5fc5\u8981\u3067\u3059\u3002<br/><br/>1. \u30b7\u30b9\u30c6\u30e0 VM \u3092\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u305f\u5f8c\u3067\u30be\u30fc\u30f3\u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u7121\u52b9\u72b6\u614b\u306e\u30be\u30fc\u30f3\u3092\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u3082\u3042\u308a\u307e\u3059\u3002<br/><br/>2. \u30b7\u30b9\u30c6\u30e0 VM \u3092\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001system.vm.use.local.storage \u3092 true \u306b\u8a2d\u5b9a\u3057\u3066\u304b\u3089\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br/><br/><br/>\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
message.zone.step.2.desc=\u65b0\u3057\u3044\u30be\u30fc\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.zone.step.3.desc=\u65b0\u3057\u3044\u30dd\u30c3\u30c9\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
message.zoneWizard.enable.local.storage=\u8b66\u544a: \u3053\u306e\u30be\u30fc\u30f3\u306e\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u6709\u52b9\u306b\u3059\u308b\u5834\u5408\u306f\u3001\u30b7\u30b9\u30c6\u30e0 VM \u306e\u8d77\u52d5\u5834\u6240\u306b\u5fdc\u3058\u3066\u6b21\u306e\u64cd\u4f5c\u304c\u5fc5\u8981\u3067\u3059\u3002<br/><br/>1. \u30b7\u30b9\u30c6\u30e0 VM \u3092\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u30d7\u30e9\u30a4\u30de\u30ea \u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f5c\u6210\u3057\u305f\u5f8c\u3067\u30be\u30fc\u30f3\u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u307e\u305f\u3001\u7121\u52b9\u72b6\u614b\u306e\u30be\u30fc\u30f3\u3092\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u3082\u3042\u308a\u307e\u3059\u3002<br/><br/>2. \u30b7\u30b9\u30c6\u30e0 VM \u3092\u30ed\u30fc\u30ab\u30eb \u30b9\u30c8\u30ec\u30fc\u30b8\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001system.vm.use.local.storage \u3092 true \u306b\u8a2d\u5b9a\u3057\u3066\u304b\u3089\u30be\u30fc\u30f3\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br/><br/><br/>\u7d9a\u884c\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
|
||||
mode=\u30e2\u30fc\u30c9
|
||||
network.rate=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901f\u5ea6
|
||||
notification.reboot.instance=\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u518d\u8d77\u52d5
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=\ud56d\ubaa9 \uc18d\uc131 \ubcc0\uacbd
|
||||
confirm.enable.swift=Swift \uae30\uc220 \uc9c0\uc6d0\ub97c \uc0ac\uc6a9 \ud558\ub824\uba74 \ub2e4\uc74c \uc815\ubcf4\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
error.could.not.enable.zone=Zone\uc744 \uc0ac\uc6a9 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
|
||||
|
|
@ -1194,6 +1193,7 @@ message.add.load.balancer.under.ip=\ub2e4\uc74c IP \uc8fc\uc18c\uc5d0 \ub300\ud5
|
|||
message.add.load.balancer=Zone\uc5d0 \ub124\ud2b8\uc6cc\ud06c \ub85c\ub4dc \uacf5\uc720 \uc7a5\uce58\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.
|
||||
message.add.network=Zone <b><span id\="zone_name"></span></b>\uc5d0 \uc0c8\ub85c\uc6b4 \ub124\ud2b8\uc6cc\ud06c\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.
|
||||
message.add.new.gateway.to.vpc=\ud604\uc7ac VPC\uc5d0 \uc0c8\ub85c\uc6b4 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \ucd94\uac00\ud558\uae30 \uc704\ud55c \uc815\ubcf4\ub97c \uc9c0\uc815\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.add.pod.during.zone.creation=\uac01 Zone\uc5d0\ub294 \ud55c \uac1c \uc774\uc0c1 Pod\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c0\uae08 \uc5ec\uae30\uc11c \uccab\ubc88\uc9f8 Pod\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. Pod\ub294 \ud638\uc2a4\ud2b8\uc640 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0 \uc11c\ubc84\uc5d0\uc11c \uad6c\uc131\ud569\ub2c8\ub2e4\ub9cc \uc774\ub294 \ub2e4\uc74c \uc21c\uc11c\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub9e8 \ucc98\uc74c CloudStack \ub0b4\ubd80 \uad00\ub9ac \ud2b8\ub798\ud53d\uc744 \uc704\ud574\uc11c IP \uc8fc\uc18c \ubc94\uc704\ub97c \uc608\uc57d\ud569\ub2c8\ub2e4. IP \uc8fc\uc18c \ubc94\uc704\ub294 \ud074\ub77c\uc6b0\ub4dc \ub0b4\ubd80 \uac01 Zone\uc5d0\uc11c \uc911\ubcf5 \ud558\uc9c0 \uc54a\uac8c \uc608\uc57d\ud560 \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.
|
||||
message.add.pod=Zone <b><span id\="add_pod_zone_name"></span></b>\uc5d0 \uc0c8\ub85c\uc6b4 Pod\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.
|
||||
message.add.primary.storage=Zone <b><span id\="zone_name"></span></b> Pod <b><span id\="pod_name"></span></b>\uc5d0 \uc0c8\ub85c\uc6b4 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.
|
||||
message.add.primary=\uc0c8\ub85c\uc6b4 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \ucd94\uac00\ud558\uae30 \uc704\ud574 \uc544\ub798 \ud30c\ub77c\ubbf8\ud130\ub97c \uc9c0\uc815\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
|
|
@ -1253,6 +1253,7 @@ message.delete.VPN.gateway=\ud604\uc7ac VPN \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c
|
|||
message.desc.advanced.zone=\ubcf4\ub2e4 \uc138\ub828\ub41c \ub124\ud2b8\uc6cc\ud06c \uae30\uc220\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774 \ub124\ud2b8\uc6cc\ud06c \ubaa8\ub378\uc744 \uc120\ud0dd\ud558\uba74, \ubcf4\ub2e4 \uc720\uc5f0\ud558\uac8c \uac8c\uc2a4\ud2b8 \ub124\ud2b8\uc6cc\ud06c\ub97c \uc815\ud558\uace0 \ubc29\ud654\ubcbd(fire wall), VPN, \ub124\ud2b8\uc6cc\ud06c \ub85c\ub4dc \uacf5\uc720 \uc7a5\uce58 \uae30\uc220 \uc9c0\uc6d0\uc640 \uac19\uc740 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ud55c \ub124\ud2b8\uc6cc\ud06c \uc81c\uacf5\uc744 \uc81c\uacf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
|
||||
message.desc.basic.zone=\uac01 VM \uc778\uc2a4\ud134\uc2a4\uc5d0 IP \uc8fc\uc18c\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \uc9c1\uc811 \ud560\ub2f9\ud560 \uc218 \uc788\ub294 \ub2e8\uc77c \ub124\ud2b8\uc6cc\ud06c\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \ubcf4\uc548 \uadf8\ub8f9 (\uc804\uc1a1\uc6d0 IP \uc8fc\uc18c \ud544\ud130)\uacfc \uac19\uc740 \uce35 \uc138 \uac00\uc9c0 \ub808\ubca8 \ubc29\ubc95\uc73c\ub85c \uac8c\uc2a4\ud2b8\ub97c \ubd84\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
|
||||
message.desc.cluster=\uac01 Pod\uc5d0\ub294 \ud55c \uac1c \uc774\uc0c1 \ud074\ub7ec\uc2a4\ud130\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c0\uae08 \uc5ec\uae30\uc11c \ucd5c\ucd08 \ud074\ub7ec\uc2a4\ud130\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \ud074\ub7ec\uc2a4\ud130\ub294 \ud638\uc2a4\ud2b8\ub97c \uadf8\ub8f9\ud654 \ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. \ud55c \ud074\ub7ec\uc2a4\ud130 \ub0b4\ubd80 \ud638\uc2a4\ud2b8\ub294 \ubaa8\ub450 \ub3d9\uc77c\ud55c \ud558\ub4dc\uc6e8\uc5b4\uc5d0\uc11c \uad6c\uc131\ub418\uc5b4 \uac19\uc740 \ud558\uc774\ud37c \ubc14\uc774\uc800\ub97c \uc2e4\ud589\ud558\uace0 \uac19\uc740 \uc11c\ube0c \ub124\ud2b8\uc6cc\ud06c\uc0c1\uc5d0 \uc788\uc5b4 \uac19\uc740 \uacf5\uc720 \uc2a4\ud1a0\ub9ac\uc9c0\uc5d0 \uc811\uadfc \ud569\ub2c8\ub2e4. \uac01 \ud074\ub7ec\uc2a4\ud130\ub294 \ud55c \uac1c \uc774\uc0c1 \ud638\uc2a4\ud2b8\uc640 \ud55c \uac1c \uc774\uc0c1 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0 \uc11c\ubc84\uc5d0\uc11c \uad6c\uc131\ub429\ub2c8\ub2e4.
|
||||
message.desc.host=\uac01 \ud074\ub7ec\uc2a4\ud130\uc5d0\ub294 \uc801\uc5b4\ub3c4 \ud55c \uac1c \uc774\uc0c1 \uac8c\uc2a4\ud2b8 VM\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud55c \ud638\uc2a4\ud2b8 (\ucef4\ud4e8\ud130)\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c0\uae08 \uc5ec\uae30\uc11c \uccab\ubc88\uc9f8 \ud638\uc2a4\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. CloudStack\uc73c\ub85c \ud638\uc2a4\ud2b8\ub97c \ub3d9\uc791\ud558\ub824\uba74 \ud638\uc2a4\ud2b8\uc5d0\uac8c \ud558\uc774\ud37c \ubc14\uc774\uc800\ub97c \uc124\uce58\ud558\uace0 IP \uc8fc\uc18c\ub97c \ud560\ub2f9\ud574 \ud638\uc2a4\ud2b8\uac00 CloudStack \uad00\ub9ac \uc11c\ubc84\uc5d0 \uc811\uc18d\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4. <br/><br/>\ud638\uc2a4\ud2b8 DNS \uba85 \ub610\ub294 IP \uc8fc\uc18c, \uc0ac\uc6a9\uc790\uba85(\uc6d0\ub798 root)\uacfc \uc554\ud638 \ubc0f \ud638\uc2a4\ud2b8 \ubd84\ub958\uc5d0 \uc0ac\uc6a9\ud558\ub294 \ub77c\ubca8\uc744 \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.desc.primary.storage=\uac01 \ud074\ub7ec\uc2a4\ud130\uc5d0\ub294 \uc801\uc5b4\ub3c4 \ud55c \uac1c \uc774\uc0c1\uc758 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0 \uc11c\ubc84\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c0\uae08 \uc5ec\uae30\uc11c \uccab\ubc88\uc9f8 \uc11c\ubc84\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0\ub294 \ud074\ub7ec\uc2a4\ud130 \ub0b4 \ubd80 \ud638\uc2a4\ud2b8\uc0c1\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \ubaa8\ub4e0 VM \ub514\uc2a4\ud06c \ubcfc\ub968\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \ud558\uc774\ud37c \ubc14\uc774\uc800\uc5d0\uc11c \uae30\uc220 \uc9c0\uc6d0\ub418\ub294 \ud45c\uc900\uc5d0 \uc900\uac70\ud55c \ud504\ub85c\ud1a0\ucf5c\uc744 \uc0ac\uc6a9\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.desc.secondary.storage=\uac01 Zone\uc5d0\ub294 \uc801\uc5b4\ub3c4 \ud55c \uac1c \uc774\uc0c1\uc758 NFS \uc989 2\ucc28 \uc2a4\ud1a0\ub9ac\uc9c0 \uc11c\ubc84\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c0\uae08 \uc5ec\uae30\uc11c \uccab\ubc88\uc9f8 \uc11c\ubc84\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. 2\ucc28 \uc2a4\ud1a0\ub9ac\uc9c0\ub294 VM \ud15c\ud50c\ub9bf, ISO \uc774\ubbf8\uc9c0 \ubc0f VM \ub514\uc2a4\ud06c \ubcfc\ub968 \uc2a4\ub0c5\uc0f7\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4. \uc774 \uc11c\ubc84\ub294 Zone\ub0b4 \ubaa8\ub4e0 \ud638\uc2a4\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. <br/><br/>IP \uc8fc\uc18c\uc640 \ub0b4\ubcf4\ub0b4\ub0bc \uacbd\ub85c\ub97c \uc785\ub825\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.desc.zone=Zone\uc740 CloudStack \ud658\uacbd\ub0b4 \ucd5c\ub300 \uc870\uc9c1 \ub2e8\uc704\ub85c \uc6d0\ub798 \ub2e8\uc77c \ub370\uc774\ud130 \uc13c\ud130\uc5d0 \ud574\ub2f9\ud569\ub2c8\ub2e4. Zone\uc5d0 \ud574\uc11c \ubb3c\ub9ac\uc801\uc778 \ubd84\ub9ac\uc640 \uc911\ubcf5\uc131\uc774 \uc81c\uacf5\ub429\ub2c8\ub2e4. Zone\uc740 \ud55c \uac1c \uc774\uc0c1 Pod( \uac01 Pod\ub294 \ud638\uc2a4\ud2b8\uc640 \uae30\ubcf8 \uc2a4\ud1a0\ub9ac\uc9c0 \uc11c\ubc84\uc5d0\uc11c \uad6c\uc131)\uc640 Zone\ub0b4 \ubaa8\ub4e0 Pod\ub85c \uacf5\uc720\ub418\ub294 2\ucc28 \uc2a4\ud1a0\ub9ac\uc9c0 \uc11c\ubc84\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4.
|
||||
|
|
@ -1380,6 +1381,7 @@ message.step.3.continue=\uc2e4\ud589\ud558\ub824\uba74 \ub514\uc2a4\ud06c\uc81c\
|
|||
message.step.3.desc=
|
||||
message.step.4.continue=\uc2e4\ud589\ud558\ub824\uba74 \ub124\ud2b8\uc6cc\ud06c\ub97c \uc801\uc5b4\ub3c4 \ud55c \uac1c \uc774\uc0c1 \uc120\ud0dd\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.step.4.desc=\uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4\uac00 \uc811\uc18d\ud558\ub294 \uae30\ubcf8 \ub124\ud2b8\uc6cc\ud06c\ub97c \uc120\ud0dd\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.storage.traffic=\ud638\uc2a4\ud2b8\ub098 CloudStack \uc2dc\uc2a4\ud15c VM \ub4f1 \uad00\ub9ac \uc11c\ubc84\uc640 \ud1b5\uc2e0\ud558\ub294 CloudStack \ub0b4\ubd80 \uc790\uc6d0\uac04 \ud2b8\ub798\ud53d\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc11c \uc2a4\ud1a0\ub9ac\uc9c0 \ud2b8\ub798\ud53d\uc744 \uad6c\uc131\ud574 \uc8fc\uc2ed\uc2dc\uc624.
|
||||
message.suspend.project=\ud604\uc7ac \ud504\ub85c\uc81d\ud2b8\ub97c \uc77c\uc2dc\uc815\uc9c0\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
|
||||
message.template.desc=VM\uc758 \uc2dc\uc791\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 OS \uc774\ubbf8\uc9c0
|
||||
message.tooltip.dns.1=Zone\ub0b4 VM \ub85c \uc0ac\uc6a9\ud558\ub294 DNS \uc11c\ubc84 \uc774\ub984\uc785\ub2c8\ub2e4. Zone \uacf5\uac1c IP \uc8fc\uc18c\uc5d0\uc11c \uc774 \uc11c\ubc84\uc5d0 \ud1b5\uc2e0\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=Endrede egenskaper
|
||||
error.could.not.enable.zone=Kunne ikke aktivere sonen
|
||||
error.installWizard.message=Noe gikk galt. G\u00e5 tilbake og korriger feilene.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=Alteradas propriedades do item
|
||||
confirm.enable.s3=Por favor preencha as informa\u00e7\u00f5es abaixo para habilitar suporte a storage secund\u00e1ria fornecida por S3
|
||||
confirm.enable.swift=Por favor preencha as informa\u00e7\u00f5es abaixo para habilitar suporte ao Swift
|
||||
|
|
@ -1113,6 +1112,7 @@ label.zones=Zonas
|
|||
label.zone.type=Tipo de Zona
|
||||
label.zone.wide=Zone-Wide
|
||||
label.zoneWizard.trafficType.guest=H\u00f3spede\: tr\u00e1fego entre m\u00e1quinas virtuais de usu\u00e1rios finais
|
||||
label.zoneWizard.trafficType.management=Ger\u00eancia\: tr\u00e1fego entre recursos internos do CloudStack, incluindo quaisquer componentes que se comunicam com o servidor de gerenciamento, tais como hosts e m\u00e1quinas virtuais de sistema do CloudStack
|
||||
label.zoneWizard.trafficType.public=P\u00fablico\: tr\u00e1fego entre a internet e m\u00e1quinas virtuais na nuvem.
|
||||
label.zoneWizard.trafficType.storage=Storage\: tr\u00e1fego entre servidores de storage prim\u00e1ria e secund\u00e1ria, tais como templates de m\u00e1quinas virtuais e snapshots
|
||||
label.zone=Zona
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b
|
||||
confirm.enable.swift=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043d\u0438\u0436\u0435\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438 Swift
|
||||
error.could.not.enable.zone=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443
|
||||
|
|
@ -1131,6 +1130,7 @@ message.additional.networks.desc=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u044
|
|||
message.add.load.balancer=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0437\u043e\u043d\u0443
|
||||
message.add.load.balancer.under.ip=\u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 IP\:
|
||||
message.add.network=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0434\u043b\u044f \u0437\u043e\u043d\u044b\: <b><span id\="zone_name"></span></b>
|
||||
message.add.pod.during.zone.creation=\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0435\u043d\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043f\u0435\u0440\u0432\u044b\u043c. \u0421\u0442\u0435\u043d\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u0437\u043b\u044b \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0448\u0430\u0433\u0435. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 IP \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0435\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0445 IP \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u044b \u043e\u0431\u043b\u0430\u043a\u0430.
|
||||
message.add.pod=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u0434\u043b\u044f \u0437\u043e\u043d\u044b <b><span id\="add_pod_zone_name"></span></b>
|
||||
message.add.primary.storage=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0437\u043e\u043d\u044b <b><span id\="zone_name"></span></b>, \u0441\u0442\u0435\u043d\u0434\u0430 <b><span id\="pod_name"></span></b>
|
||||
message.add.primary=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430
|
||||
|
|
@ -1185,6 +1185,7 @@ message.delete.user=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442
|
|||
message.desc.advanced.zone=\u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0439. \u042d\u0442\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u0443\u0433, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u043c\u0435\u0436\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u044d\u043a\u0440\u0430\u043d, VPN, \u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.
|
||||
message.desc.basic.zone=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0434\u0438\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0412\u041c \u0438\u043c\u0435\u0435\u0442 \u00ab\u0431\u0435\u043b\u044b\u0439\u00bb IP-\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0442\u0438. \u0418\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0433\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0435\u0442\u0438 3-\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0440\u0443\u043f\u043f\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 (\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f IP-\u0432\u0434\u0440\u0435\u0441\u043e\u0432)
|
||||
message.desc.cluster=\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435. \u041a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443 \u0443\u0437\u043b\u043e\u0432. \u0423\u0437\u043b\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0443\u0437\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0435\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449.
|
||||
message.desc.host=\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b (\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440) \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0412\u041c, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0441\u0435\u0439\u0447\u0430\u0441. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0437\u043b\u0430 \u0432 CloudStack \u0432\u0430\u0436\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430 \u043d\u0430 \u0443\u0437\u0435\u043b, \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 IP \u043a \u0443\u0437\u043b\u0443 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f CloudStack.<br/><br/>\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f DNS \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 IP, \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u043a \u041e\u0421 (\u043e\u0431\u044b\u0447\u043d\u043e root), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u043a\u0438 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432.
|
||||
message.desc.primary.storage=\u041a\u0430\u0436\u0434\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0433\u0438\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430.
|
||||
message.desc.secondary.storage=\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c NFS \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0438 \u0438\u0445 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0412\u041c, \u043e\u0431\u0440\u0430\u0437\u043e\u0432 ISO \u0438 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0412\u041c. \u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 \u0437\u043e\u043d\u044b.<br/><br/>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u0443\u0442\u044c.
|
||||
message.desc.zone=layer 3
|
||||
|
|
@ -1309,6 +1310,7 @@ message.step.3.continue=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\
|
|||
message.step.3.desc=
|
||||
message.step.4.continue=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0443 \u0441\u0435\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f.
|
||||
message.step.4.desc=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0435\u0442\u044c, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0430.
|
||||
message.storage.traffic=\u0422\u0440\u0430\u0444\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438 CloudStack, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0445\u043e\u0441\u0442\u044b \u0438 CloudStack \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0442\u0440\u0430\u0444\u0438\u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c.
|
||||
message.suspend.project=\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442?
|
||||
message.template.desc=\u041e\u0431\u0440\u0430\u0437 \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0432 \u0412\u041c
|
||||
message.tooltip.dns.1=\u0418\u043c\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 DNS \u0434\u043b\u044f \u0412\u041c \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b. \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u0442\u043e\u0439 \u0437\u043e\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
changed.item.properties=\u66f4\u6539\u9879\u76ee\u5c5e\u6027
|
||||
confirm.enable.s3=\u8bf7\u586b\u5199\u4e0b\u5217\u4fe1\u606f\u4ee5\u542f\u7528\u652f\u6301S3\u7684\u4e8c\u7ea7\u5b58\u50a8
|
||||
confirm.enable.swift=\u8bf7\u586b\u5199\u4ee5\u4e0b\u4fe1\u606f\u4ee5\u542f\u7528\u5bf9 SWIFT \u7684\u652f\u6301
|
||||
|
|
@ -622,12 +621,17 @@ label.keyboard.type=\u952e\u76d8\u7c7b\u578b
|
|||
label.key=\u5bc6\u94a5
|
||||
label.kvm.traffic.label=KVM \u6d41\u91cf\u6807\u7b7e
|
||||
label.label=\u6807\u7b7e
|
||||
label.lang.arabic=\u963f\u62c9\u4f2f\u8bed
|
||||
label.lang.brportugese=\u5df4\u897f\u8461\u8404\u7259\u8bed
|
||||
label.lang.catalan=\u52a0\u6cf0\u7f57\u5c3c\u4e9a\u8bed
|
||||
label.lang.chinese=\u7b80\u4f53\u4e2d\u6587
|
||||
label.lang.english=\u82f1\u8bed
|
||||
label.lang.french=\u6cd5\u8bed
|
||||
label.lang.german=\u5fb7\u8bed
|
||||
label.lang.italian=\u610f\u5927\u5229\u8bed
|
||||
label.lang.japanese=\u65e5\u8bed
|
||||
label.lang.korean=\u97e9\u56fd\u8bed
|
||||
label.lang.norwegian=\u632a\u5a01\u8bed
|
||||
label.lang.russian=\u4fc4\u8bed
|
||||
label.lang.spanish=\u897f\u73ed\u7259\u8bed
|
||||
label.last.disconnected=\u4e0a\u6b21\u65ad\u5f00\u8fde\u63a5\u65f6\u95f4
|
||||
|
|
@ -1165,6 +1169,7 @@ label.zone.type=\u533a\u57df\u7c7b\u578b
|
|||
label.zone=\u533a\u57df
|
||||
label.zone.wide=\u6574\u4e2a\u533a\u57df
|
||||
label.zoneWizard.trafficType.guest=\u6765\u5bbe\u7f51\u7edc\: \u5ba2\u6237\u865a\u62df\u673a\u4e4b\u95f4\u7684\u7f51\u7edc\u6d41\u91cf
|
||||
label.zoneWizard.trafficType.management=\u7ba1\u7406\u7f51\: CloudStack\u5185\u90e8\u8d44\u6e90\u4e4b\u95f4\u7684\u7f51\u7edc\u6d41\u91cf, \u5305\u62ec\u4e0e\u7ba1\u7406\u670d\u52a1\u5668\u4ea4\u4e92\u7684\u4efb\u4f55\u7ec4\u4ef6, \u6bd4\u5982\u4e3b\u673a\u548cCloudStack\u7cfb\u7edf\u865a\u62df\u673a
|
||||
label.zoneWizard.trafficType.public=\u516c\u5171\u7f51\u7edc\: \u4e91\u73af\u5883\u4e2d\u865a\u62df\u673a\u4e0e\u56e0\u7279\u7f51\u4e4b\u95f4\u7684\u7f51\u7edc\u6d41\u91cf.
|
||||
label.zoneWizard.trafficType.storage=\u5b58\u50a8\u7f51\: \u4e3b\u5b58\u50a8\u4e0e\u4e8c\u7ea7\u5b58\u50a8\u670d\u52a1\u5668\u4e4b\u95f4\u7684\u6d41\u91cf, \u6bd4\u5982\u865a\u673a\u6a21\u677f\u548c\u5feb\u7167
|
||||
managed.state=\u6258\u7ba1\u72b6\u6001
|
||||
|
|
@ -1255,6 +1260,7 @@ message.add.load.balancer=\u5411\u533a\u57df\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u8d1f
|
|||
message.add.load.balancer.under.ip=\u5df2\u5728\u4ee5\u4e0b IP \u4e0b\u6dfb\u52a0\u8d1f\u8f7d\u5e73\u8861\u5668\u89c4\u5219\:
|
||||
message.add.network=\u4e3a\u533a\u57df\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7f51\u7edc\: <b><span id\="zone_name"></span></b>
|
||||
message.add.new.gateway.to.vpc=\u8bf7\u6307\u5b9a\u5c06\u65b0\u7f51\u5173\u6dfb\u52a0\u5230\u6b64 VPC \u6240\u9700\u7684\u4fe1\u606f\u3002
|
||||
message.add.pod.during.zone.creation=\u6bcf\u4e2a\u533a\u57df\u4e2d\u5fc5\u987b\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u63d0\u4f9b\u70b9\uff0c\u73b0\u5728\u6211\u4eec\u5c06\u6dfb\u52a0\u7b2c\u4e00\u4e2a\u63d0\u4f9b\u70b9\u3002\u63d0\u4f9b\u70b9\u4e2d\u5305\u542b\u4e3b\u673a\u548c\u4e3b\u5b58\u50a8\u670d\u52a1\u5668\uff0c\u60a8\u5c06\u5728\u968f\u540e\u7684\u67d0\u4e2a\u6b65\u9aa4\u4e2d\u6dfb\u52a0\u8fd9\u4e9b\u4e3b\u673a\u548c\u670d\u52a1\u5668\u3002\u9996\u5148\uff0c\u8bf7\u4e3a CloudStack \u7684\u5185\u90e8\u7ba1\u7406\u6d41\u91cf\u914d\u7f6e\u4e00\u4e2a\u9884\u7559 IP \u5730\u5740\u8303\u56f4\u3002\u9884\u7559\u7684 IP \u8303\u56f4\u5bf9\u4e91\u4e2d\u7684\u6bcf\u4e2a\u533a\u57df\u6765\u8bf4\u5fc5\u987b\u552f\u4e00\u3002
|
||||
message.add.pod=\u4e3a\u533a\u57df <b><span id\="add_pod_zone_name"></span></b> \u6dfb\u52a0\u4e00\u4e2a\u65b0\u63d0\u4f9b\u70b9
|
||||
message.add.primary.storage=\u4e3a\u533a\u57df <b><span id\="zone_name"></span></b>\u3001\u63d0\u4f9b\u70b9 <b><span id\="pod_name"></span></b> \u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u4e3b\u5b58\u50a8
|
||||
message.add.primary=\u8bf7\u6307\u5b9a\u4ee5\u4e0b\u53c2\u6570\u4ee5\u6dfb\u52a0\u4e00\u4e2a\u65b0\u4e3b\u5b58\u50a8
|
||||
|
|
@ -1316,6 +1322,7 @@ message.delete.VPN.gateway=\u8bf7\u786e\u8ba4\u60a8\u786e\u5b9e\u8981\u5220\u966
|
|||
message.desc.advanced.zone=\u9002\u7528\u4e8e\u66f4\u52a0\u590d\u6742\u7684\u7f51\u7edc\u62d3\u6251\u3002\u6b64\u7f51\u7edc\u6a21\u5f0f\u5728\u5b9a\u4e49\u6765\u5bbe\u7f51\u7edc\u5e76\u63d0\u4f9b\u9632\u706b\u5899\u3001VPN \u6216\u8d1f\u8f7d\u5e73\u8861\u5668\u652f\u6301\u7b49\u81ea\u5b9a\u4e49\u7f51\u7edc\u65b9\u6848\u65b9\u9762\u63d0\u4f9b\u4e86\u6700\u5927\u7684\u7075\u6d3b\u6027\u3002
|
||||
message.desc.basic.zone=\u63d0\u4f9b\u4e00\u4e2a\u7f51\u7edc\uff0c\u5c06\u76f4\u63a5\u4ece\u6b64\u7f51\u7edc\u4e2d\u4e3a\u6bcf\u4e2a VM \u5b9e\u4f8b\u5206\u914d\u4e00\u4e2a IP\u3002\u53ef\u4ee5\u901a\u8fc7\u5b89\u5168\u7ec4\u7b49\u7b2c 3 \u5c42\u65b9\u5f0f\u63d0\u4f9b\u6765\u5bbe\u9694\u79bb(IP \u5730\u5740\u6e90\u8fc7\u6ee4)\u3002
|
||||
message.desc.cluster=\u6bcf\u4e2a\u63d0\u4f9b\u70b9\u4e2d\u5fc5\u987b\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u7fa4\u96c6\uff0c\u73b0\u5728\u6211\u4eec\u5c06\u6dfb\u52a0\u7b2c\u4e00\u4e2a\u7fa4\u96c6\u3002\u7fa4\u96c6\u63d0\u4f9b\u4e86\u4e00\u79cd\u7f16\u7ec4\u4e3b\u673a\u7684\u65b9\u6cd5\u3002\u7fa4\u96c6\u4e2d\u7684\u6240\u6709\u4e3b\u673a\u90fd\u5177\u6709\u76f8\u540c\u7684\u786c\u4ef6\uff0c\u8fd0\u884c\u76f8\u540c\u7684\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\uff0c\u4f4d\u4e8e\u76f8\u540c\u7684\u5b50\u7f51\u4e2d\uff0c\u5e76\u8bbf\u95ee\u76f8\u540c\u7684\u5171\u4eab\u5b58\u50a8\u3002\u6bcf\u4e2a\u7fa4\u96c6\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u4e3b\u673a\u4ee5\u53ca\u4e00\u4e2a\u6216\u591a\u4e2a\u4e3b\u5b58\u50a8\u670d\u52a1\u5668\u7ec4\u6210\u3002
|
||||
message.desc.host=\u6bcf\u4e2a\u7fa4\u96c6\u4e2d\u5fc5\u987b\u81f3\u5c11\u5305\u542b\u4e00\u4e2a\u4e3b\u673a\u4ee5\u4f9b\u6765\u5bbe VM \u5728\u4e0a\u9762\u8fd0\u884c\uff0c\u73b0\u5728\u6211\u4eec\u5c06\u6dfb\u52a0\u7b2c\u4e00\u4e2a\u4e3b\u673a\u3002\u8981\u4f7f\u4e3b\u673a\u5728 CloudStack \u4e2d\u8fd0\u884c\uff0c\u5fc5\u987b\u5728\u6b64\u4e3b\u673a\u4e0a\u5b89\u88c5\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u8f6f\u4ef6\uff0c\u4e3a\u5176\u5206\u914d\u4e00\u4e2a IP \u5730\u5740\uff0c\u5e76\u786e\u4fdd\u5c06\u5176\u8fde\u63a5\u5230 CloudStack \u7ba1\u7406\u670d\u52a1\u5668\u3002<br/><br/>\u8bf7\u63d0\u4f9b\u4e3b\u673a\u7684 DNS \u6216 IP \u5730\u5740\u3001\u7528\u6237\u540d(\u901a\u5e38\u4e3a root)\u548c\u5bc6\u7801\uff0c\u4ee5\u53ca\u7528\u4e8e\u5bf9\u4e3b\u673a\u8fdb\u884c\u5206\u7c7b\u7684\u4efb\u4f55\u6807\u7b7e\u3002
|
||||
message.desc.primary.storage=\u6bcf\u4e2a\u7fa4\u96c6\u4e2d\u5fc5\u987b\u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a\u4e3b\u5b58\u50a8\u670d\u52a1\u5668\uff0c\u73b0\u5728\u6211\u4eec\u5c06\u6dfb\u52a0\u7b2c\u4e00\u4e2a\u4e3b\u5b58\u50a8\u670d\u52a1\u5668\u3002\u4e3b\u5b58\u50a8\u4e2d\u5305\u542b\u5728\u7fa4\u96c6\u4e2d\u7684\u4e3b\u673a\u4e0a\u8fd0\u884c\u7684\u6240\u6709 VM \u7684\u78c1\u76d8\u5377\u3002\u8bf7\u4f7f\u7528\u5e95\u5c42\u865a\u62df\u673a\u7ba1\u7406\u7a0b\u5e8f\u652f\u6301\u7684\u7b26\u5408\u6807\u51c6\u7684\u534f\u8bae\u3002
|
||||
message.desc.secondary.storage=\u6bcf\u4e2a\u533a\u57df\u4e2d\u5fc5\u987b\u81f3\u5c11\u5305\u542b\u4e00\u4e2a NFS \u6216\u8f85\u52a9\u5b58\u50a8\u670d\u52a1\u5668\uff0c\u73b0\u5728\u6211\u4eec\u5c06\u6dfb\u52a0\u7b2c\u4e00\u4e2a NFS \u6216\u8f85\u52a9\u5b58\u50a8\u670d\u52a1\u5668\u3002\u8f85\u52a9\u5b58\u50a8\u7528\u4e8e\u5b58\u50a8 VM \u6a21\u677f\u3001ISO \u6620\u50cf\u548c VM \u78c1\u76d8\u5377\u5feb\u7167\u3002\u6b64\u670d\u52a1\u5668\u5fc5\u987b\u5bf9\u533a\u57df\u4e2d\u7684\u6240\u6709\u670d\u52a1\u5668\u53ef\u7528\u3002<br/><br/>\u8bf7\u63d0\u4f9b IP \u5730\u5740\u548c\u5bfc\u51fa\u8def\u5f84\u3002
|
||||
message.desc.zone=\u533a\u57df\u662f CloudStack \u4e2d\u6700\u5927\u7684\u7ec4\u7ec7\u5355\u4f4d\uff0c\u4e00\u4e2a\u533a\u57df\u901a\u5e38\u4e0e\u4e00\u4e2a\u6570\u636e\u4e2d\u5fc3\u76f8\u5bf9\u5e94\u3002\u533a\u57df\u53ef\u63d0\u4f9b\u7269\u7406\u9694\u79bb\u548c\u5197\u4f59\u3002\u4e00\u4e2a\u533a\u57df\u7531\u4e00\u4e2a\u6216\u591a\u4e2a\u63d0\u4f9b\u70b9\u4ee5\u53ca\u7531\u533a\u57df\u4e2d\u7684\u6240\u6709\u63d0\u4f9b\u70b9\u5171\u4eab\u7684\u4e00\u4e2a\u8f85\u52a9\u5b58\u50a8\u670d\u52a1\u5668\u7ec4\u6210\uff0c\u5176\u4e2d\u6bcf\u4e2a\u63d0\u4f9b\u70b9\u4e2d\u5305\u542b\u591a\u4e2a\u4e3b\u673a\u548c\u4e3b\u5b58\u50a8\u670d\u52a1\u5668\u3002
|
||||
|
|
@ -1445,6 +1452,7 @@ message.step.3.continue=\u8bf7\u9009\u62e9\u4e00\u79cd\u78c1\u76d8\u65b9\u6848\u
|
|||
message.step.3.desc=
|
||||
message.step.4.continue=\u8bf7\u81f3\u5c11\u9009\u62e9\u4e00\u4e2a\u7f51\u7edc\u4ee5\u7ee7\u7eed
|
||||
message.step.4.desc=\u8bf7\u9009\u62e9\u865a\u62df\u5b9e\u4f8b\u8981\u8fde\u63a5\u5230\u7684\u4e3b\u7f51\u7edc\u3002
|
||||
message.storage.traffic=CloudStack \u5185\u90e8\u8d44\u6e90(\u5305\u62ec\u4e0e\u7ba1\u7406\u670d\u52a1\u5668\u901a\u4fe1\u7684\u4efb\u4f55\u7ec4\u4ef6\uff0c\u4f8b\u5982\u4e3b\u673a\u548c CloudStack \u7cfb\u7edf VM)\u4e4b\u95f4\u7684\u6d41\u91cf\u3002\u8bf7\u5728\u6b64\u5904\u914d\u7f6e\u5b58\u50a8\u6d41\u91cf\u3002
|
||||
message.suspend.project=\u662f\u5426\u786e\u5b9e\u8981\u6682\u505c\u6b64\u9879\u76ee?
|
||||
message.template.desc=\u53ef\u7528\u4e8e\u542f\u52a8 VM \u7684\u64cd\u4f5c\u7cfb\u7edf\u6620\u50cf
|
||||
message.tooltip.dns.1=\u4f9b\u533a\u57df\u4e2d\u7684 VM \u4f7f\u7528\u7684 DNS \u670d\u52a1\u5668\u540d\u79f0\u3002\u533a\u57df\u7684\u516c\u7528 IP \u5730\u5740\u5fc5\u987b\u8def\u7531\u5230\u6b64\u670d\u52a1\u5668\u3002
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@
|
|||
<ref bean="FirstFitPlanner" />
|
||||
<ref bean="UserDispersingPlanner" />
|
||||
<ref bean="UserConcentratedPodPlanner" />
|
||||
|
||||
<ref bean="ImplicitDedicationPlanner" />
|
||||
<!--
|
||||
<ref bean="BareMetalPlanner" />
|
||||
-->
|
||||
|
|
|
|||
|
|
@ -250,6 +250,13 @@ public class HttpTemplateDownloader implements TemplateDownloader {
|
|||
}
|
||||
} else {
|
||||
remoteSize2 = Long.parseLong(contentLengthHeader.getValue());
|
||||
if ( remoteSize2 == 0 ) {
|
||||
status = TemplateDownloader.Status.DOWNLOAD_FINISHED;
|
||||
String downloaded = "(download complete remote=" + remoteSize + "bytes)";
|
||||
errorString = "Downloaded " + totalBytes + " bytes " + downloaded;
|
||||
downloadTime = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (remoteSize == 0) {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,28 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
/etc/cloudstack/management/*
|
||||
/etc/cloudstack/management/catalina.policy
|
||||
/etc/cloudstack/management/catalina.properties
|
||||
/etc/cloudstack/management/cloudmanagementserver.keystore
|
||||
/etc/cloudstack/management/logging.properties
|
||||
/etc/cloudstack/management/commands.properties
|
||||
/etc/cloudstack/management/ehcache.xml
|
||||
/etc/cloudstack/management/componentContext.xml
|
||||
/etc/cloudstack/management/applicationContext.xml
|
||||
/etc/cloudstack/management/server-ssl.xml
|
||||
/etc/cloudstack/management/server-nonssl.xml
|
||||
/etc/cloudstack/management/server.xml
|
||||
/etc/cloudstack/management/classpath.conf
|
||||
/etc/cloudstack/management/db.properties
|
||||
/etc/cloudstack/management/tomcat6-ssl.conf
|
||||
/etc/cloudstack/management/tomcat6-nonssl.conf
|
||||
/etc/cloudstack/management/tomcat6.conf
|
||||
/etc/cloudstack/management/web.xml
|
||||
/etc/cloudstack/management/environment.properties
|
||||
/etc/cloudstack/management/nonossComponentContext.xml
|
||||
/etc/cloudstack/management/log4j-cloud.xml
|
||||
/etc/cloudstack/management/tomcat-users.xml
|
||||
/etc/cloudstack/management/context.xml
|
||||
/etc/init.d/cloudstack-management
|
||||
/etc/security/limits.d/cloudstack-limits.conf
|
||||
/etc/sudoers.d/cloudstack
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ Homepage: http://www.cloudstack.org/
|
|||
|
||||
Package: cloudstack-common
|
||||
Architecture: all
|
||||
Depends: bash, genisoimage
|
||||
Depends: bash, genisoimage, nfs-common
|
||||
Conflicts: cloud-scripts, cloud-utils, cloud-system-iso, cloud-console-proxy, cloud-daemonize, cloud-deps, cloud-python, cloud-setup
|
||||
Description: A common package which contains files which are shared by several CloudStack packages
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ build: build-indep
|
|||
build-indep: build-indep-stamp
|
||||
|
||||
build-indep-stamp: configure
|
||||
mvn package -Pawsapi -DskipTests -Dsystemvm \
|
||||
mvn clean package -Pawsapi -DskipTests -Dsystemvm \
|
||||
-Dcs.replace.properties=replace.properties.tmp \
|
||||
${ACS_BUILD_OPTS}
|
||||
touch $@
|
||||
|
|
@ -69,8 +69,8 @@ install:
|
|||
install -D plugins/hypervisors/kvm/target/cloud-plugin-hypervisor-kvm-$(VERSION)-SNAPSHOT.jar $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/
|
||||
install -D plugins/hypervisors/kvm/target/dependencies/* $(DESTDIR)/usr/share/$(PACKAGE)-agent/lib/
|
||||
install -D packaging/debian/init/cloud-agent $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-agent
|
||||
install -D agent/bindir/cloud-setup-agent.in $(DESTDIR)/usr/bin/cloudstack-setup-agent
|
||||
install -D agent/bindir/cloud-ssh.in $(DESTDIR)/usr/bin/cloudstack-ssh
|
||||
install -D agent/target/transformed/cloud-setup-agent $(DESTDIR)/usr/bin/cloudstack-setup-agent
|
||||
install -D agent/target/transformed/cloud-ssh $(DESTDIR)/usr/bin/cloudstack-ssh
|
||||
install -D agent/target/transformed/* $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/agent
|
||||
|
||||
# cloudstack-management
|
||||
|
|
@ -102,7 +102,7 @@ install:
|
|||
ln -s tomcat6-nonssl.conf $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/tomcat6.conf
|
||||
ln -s server-nonssl.xml $(DESTDIR)/$(SYSCONFDIR)/$(PACKAGE)/management/server.xml
|
||||
install -D packaging/debian/init/cloud-management $(DESTDIR)/$(SYSCONFDIR)/init.d/$(PACKAGE)-management
|
||||
install -D client/bindir/cloud-update-xenserver-licenses.in $(DESTDIR)/usr/bin/cloudstack-update-xenserver-licenses
|
||||
install -D client/target/utilities/bin/cloud-update-xenserver-licenses $(DESTDIR)/usr/bin/cloudstack-update-xenserver-licenses
|
||||
ln -s /usr/share/tomcat6/bin $(DESTDIR)/usr/share/$(PACKAGE)-management/bin
|
||||
# Remove configuration in /ur/share/cloudstack-management/webapps/client/WEB-INF
|
||||
# This should all be in /etc/cloudstack/management
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
</bookinfo>
|
||||
<xi:include href="plugin-niciranvp-about.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
<xi:include href="plugin-niciranvp-usage.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
<xi:include href="plugin-niciranvp-vpc.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-troubleshooting.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
<xi:include href="plugin-niciranvp-revisions.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
</book>
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@ under the License.
|
|||
will find instruction in the <ulink
|
||||
url="http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.0.1-incubating/html/API_Developers_Guide/index.html"
|
||||
>&PRODUCT; API Developer's Guide</ulink></para>
|
||||
<para>If you find any errors or problems in this guide, please see <xref linkend="feedback"/>. We hope you enjoy
|
||||
working with &PRODUCT;!</para>
|
||||
<para>If you find any errors or problems in this guide, please see <xref linkend="feedback"/>.
|
||||
We hope you enjoy working with &PRODUCT;!</para>
|
||||
</chapter>
|
||||
<chapter id="version-4.1">
|
||||
<title>Version 4.1.0</title>
|
||||
|
|
@ -4396,6 +4396,13 @@ under the License.
|
|||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-2709"
|
||||
>CLOUDSTACK-2709</ulink></para></entry>
|
||||
<entry>
|
||||
<para>Egress rules are are not supported on shared networks. </para>
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-1747"
|
||||
>CLOUDSTACK-1747</ulink></para></entry>
|
||||
|
|
@ -4648,9 +4655,12 @@ under the License.
|
|||
<filename>components.xml</filename> to be on the safe side.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>After upgrading to 4.1, API clients are expected to send plain text passwords for login and user creation, instead of MD5 hash. Incase, api client changes are not acceptable, following changes are to be made for backward compatibility:</para>
|
||||
<para>Modify componentsContext.xml, and make PlainTextUserAuthenticator as the default authenticator (1st entry in the userAuthenticators adapter list is default)</para>
|
||||
<programlisting language="XML">
|
||||
<para>After upgrading to 4.1, API clients are expected to send plain text passwords for
|
||||
login and user creation, instead of MD5 hash. Incase, api client changes are not
|
||||
acceptable, following changes are to be made for backward compatibility:</para>
|
||||
<para>Modify componentsContext.xml, and make PlainTextUserAuthenticator as the default
|
||||
authenticator (1st entry in the userAuthenticators adapter list is default)</para>
|
||||
<programlisting language="XML">
|
||||
<!-- Security adapters -->
|
||||
<bean id="userAuthenticators" class="com.cloud.utils.component.AdapterList">
|
||||
<property name="Adapters">
|
||||
|
|
@ -4662,7 +4672,8 @@ under the License.
|
|||
</property>
|
||||
</bean>
|
||||
</programlisting>
|
||||
<para>PlainTextUserAuthenticator works the same way MD5UserAuthenticator worked prior to 4.1.</para>
|
||||
<para>PlainTextUserAuthenticator works the same way MD5UserAuthenticator worked prior to
|
||||
4.1.</para>
|
||||
</listitem>
|
||||
<listitem id="upgrade-deb-packages">
|
||||
<para>If you are using Ubuntu, follow this procedure to upgrade your packages. If not,
|
||||
|
|
@ -5128,9 +5139,12 @@ service cloudstack-agent start
|
|||
</note>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>After upgrading to 4.1, API clients are expected to send plain text passwords for login and user creation, instead of MD5 hash. Incase, api client changes are not acceptable, following changes are to be made for backward compatibility:</para>
|
||||
<para>Modify componentsContext.xml, and make PlainTextUserAuthenticator as the default authenticator (1st entry in the userAuthenticators adapter list is default)</para>
|
||||
<programlisting language="XML">
|
||||
<para>After upgrading to 4.1, API clients are expected to send plain text passwords for
|
||||
login and user creation, instead of MD5 hash. Incase, api client changes are not
|
||||
acceptable, following changes are to be made for backward compatibility:</para>
|
||||
<para>Modify componentsContext.xml, and make PlainTextUserAuthenticator as the default
|
||||
authenticator (1st entry in the userAuthenticators adapter list is default)</para>
|
||||
<programlisting language="XML">
|
||||
<!-- Security adapters -->
|
||||
<bean id="userAuthenticators" class="com.cloud.utils.component.AdapterList">
|
||||
<property name="Adapters">
|
||||
|
|
@ -5142,7 +5156,8 @@ service cloudstack-agent start
|
|||
</property>
|
||||
</bean>
|
||||
</programlisting>
|
||||
<para>PlainTextUserAuthenticator works the same way MD5UserAuthenticator worked prior to 4.1.</para>
|
||||
<para>PlainTextUserAuthenticator works the same way MD5UserAuthenticator worked prior to
|
||||
4.1.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Start the first Management Server. Do not start any other Management Server nodes
|
||||
|
|
@ -5723,9 +5738,12 @@ service cloudstack-agent start
|
|||
</orderedlist>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>After upgrading to 4.1, API clients are expected to send plain text passwords for login and user creation, instead of MD5 hash. Incase, api client changes are not acceptable, following changes are to be made for backward compatibility:</para>
|
||||
<para>Modify componentsContext.xml, and make PlainTextUserAuthenticator as the default authenticator (1st entry in the userAuthenticators adapter list is default)</para>
|
||||
<programlisting language="XML">
|
||||
<para>After upgrading to 4.1, API clients are expected to send plain text passwords for
|
||||
login and user creation, instead of MD5 hash. Incase, api client changes are not
|
||||
acceptable, following changes are to be made for backward compatibility:</para>
|
||||
<para>Modify componentsContext.xml, and make PlainTextUserAuthenticator as the default
|
||||
authenticator (1st entry in the userAuthenticators adapter list is default)</para>
|
||||
<programlisting language="XML">
|
||||
<!-- Security adapters -->
|
||||
<bean id="userAuthenticators" class="com.cloud.utils.component.AdapterList">
|
||||
<property name="Adapters">
|
||||
|
|
@ -5737,7 +5755,8 @@ service cloudstack-agent start
|
|||
</property>
|
||||
</bean>
|
||||
</programlisting>
|
||||
<para>PlainTextUserAuthenticator works the same way MD5UserAuthenticator worked prior to 4.1.</para>
|
||||
<para>PlainTextUserAuthenticator works the same way MD5UserAuthenticator worked prior to
|
||||
4.1.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>If you have made changes to your existing copy of the
|
||||
|
|
|
|||
|
|
@ -23,13 +23,15 @@
|
|||
<note>
|
||||
<para>The egress firewall rules are supported only on virtual routers.</para>
|
||||
</note>
|
||||
<para/>
|
||||
<para>The egress traffic originates from a private network to a public network, such as the
|
||||
Internet. By default, the egress traffic is blocked, so no outgoing traffic is allowed from a
|
||||
guest network to the Internet. However, you can control the egress traffic in an Advanced zone
|
||||
by creating egress firewall rules. When an egress firewall rule is applied, the traffic specific
|
||||
to the rule is allowed and the remaining traffic is blocked. When all the firewall rules are
|
||||
removed the default policy, Block, is applied.</para>
|
||||
<note>
|
||||
<para>The egress firewall rules are not supported on shared networks.</para>
|
||||
</note>
|
||||
<para>Consider the following scenarios to apply egress firewall rules:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 102 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
|
|
@ -24,8 +24,7 @@
|
|||
<para>&PRODUCT; now provides you the ability to associate multiple private IP addresses per guest
|
||||
VM NIC. This feature is supported on all the network configurations—Basic, Advanced, and
|
||||
VPC. Security Groups, Static NAT and Port forwarding services are supported on these additional
|
||||
IPs. In addition to the primary IP, you can assign additional IPs to the guest VM NIC. Up to 256
|
||||
IP addresses are allowed per NIC.</para>
|
||||
IPs. In addition to the primary IP, you can assign additional IPs to the guest VM NIC.</para>
|
||||
<para>As always, you can specify an IP from the guest subnet; if not specified, an IP is
|
||||
automatically picked up from the guest VM subnet. You can view the IPs associated with for each
|
||||
guest VM NICs on the UI. You can apply NAT on these additional guest IPs by using firewall
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
|
|
|
|||
|
|
@ -21,27 +21,15 @@
|
|||
under the License.
|
||||
-->
|
||||
<section id="Device-management">
|
||||
<title>Device-management</title>
|
||||
<para>In &PRODUCT; 4.0.x each Nicira NVP setup is considered a "device" that can be added and removed from a physical network. To complete the configuration of the Nicira NVP plugin a device needs to be added to the physical network using the "addNiciraNVPDevice" API call. The plugin is now enabled on the physical network and any guest networks created on that network will be provisioned using the Nicira NVP Controller.</para>
|
||||
<para>The plugin introduces a set of new API calls to manage the devices, see below or refer to the API reference.</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>addNiciraNvpDevice</para></listitem>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>physicalnetworkid: the UUID of the physical network on which the device is configured</para></listitem>
|
||||
<listitem><para>hostname: the IP address of the NVP controller</para></listitem>
|
||||
<listitem><para>username: the username for access to the NVP API</para></listitem>
|
||||
<listitem><para>password: the password for access to the NVP API</para></listitem>
|
||||
<listitem><para>transportzoneuuid: the UUID of the transportzone</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
<listitem><para>deleteNiciraNVPDevice</para></listitem>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>nvpdeviceid: the UUID of the device</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
<listitem><para>listNiciraNVPDevices</para></listitem>
|
||||
</itemizedlist>
|
||||
<title>Device Management</title>
|
||||
<para>In &PRODUCT; a Nicira NVP setup is considered a "device" that can be added and removed from a physical network. To complete the configuration of the Nicira NVP plugin a device needs to be added to the physical network. Press the "Add NVP Controller" button on the provider panel and enter the configuration details.</para>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="./images/nvp-add-controller.png" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>nvp-physical-network-stt.png: a screenshot of the device configuration popup.</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -22,12 +22,63 @@
|
|||
-->
|
||||
<section id="Features-of-the-Nicira-NVP-Plugin">
|
||||
<title>Features of the Nicira NVP Plugin</title>
|
||||
<para>In &PRODUCT; release 4.0.0-incubating this plugin supports the Connectivity service. This service is responsible for creating Layer 2 networks supporting the networks created by Guests. In other words when an tenant creates a new network, instead of the traditional VLAN a logical network will be created by sending the appropriate calls to the Nicira NVP Controller.</para>
|
||||
<para>The plugin has been tested with Nicira NVP versions 2.1.0, 2.2.0 and 2.2.1</para>
|
||||
<note><para>In &PRODUCT; 4.0.0-incubating only the XenServer hypervisor is supported for use in
|
||||
combination with Nicira NVP.</para>
|
||||
<para>In &PRODUCT; 4.1.0-incubating both KVM and XenServer hypervisors are
|
||||
supported.</para></note>
|
||||
<note><para>In &PRODUCT; 4.0.0-incubating the UI components for this plugin are not complete,
|
||||
configuration is done by sending commands to the API.</para></note>
|
||||
<para>The following table lists the CloudStack network services provided by the Nicira NVP Plugin.</para>
|
||||
<table>
|
||||
<title>Supported Services</title>
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Network Service</entry>
|
||||
<entry>CloudStack version</entry>
|
||||
<entry>NVP version</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>Virtual Networking</entry>
|
||||
<entry>>= 4.0</entry>
|
||||
<entry>>= 2.2.1</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Source NAT</entry>
|
||||
<entry>>= 4.1</entry>
|
||||
<entry>>= 3.0.1</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Static NAT</entry>
|
||||
<entry>>= 4.1</entry>
|
||||
<entry>>= 3.0.1</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Port Forwarding</entry>
|
||||
<entry>>= 4.1</entry>
|
||||
<entry>>= 3.0.1</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<note><para>The Virtual Networking service was originally called 'Connectivity' in CloudStack 4.0</para></note>
|
||||
<para>The following hypervisors are supported by the Nicira NVP Plugin.</para>
|
||||
<table>
|
||||
<title>Supported Hypervisors</title>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Hypervisor</entry>
|
||||
<entry>CloudStack version</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>XenServer</entry>
|
||||
<entry>>= 4.0</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>KVM</entry>
|
||||
<entry>>= 4.1</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<note><para>Please refer to the Nicira NVP configuration guide on how to prepare the hypervisors for Nicira NVP integration.</para></note>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -22,5 +22,8 @@
|
|||
-->
|
||||
<section id="Introduction-to-the-Nicira-NVP-Plugin">
|
||||
<title>Introduction to the Nicira NVP Plugin</title>
|
||||
<para>The Nicira NVP plugin allows CloudStack to use the Nicira solution for virtualized network as a provider for CloudStack networks and services.</para>
|
||||
<para>The Nicira NVP plugin adds Nicira NVP as one of the available SDN implementations in
|
||||
CloudStack. With the plugin an exisiting Nicira NVP setup can be used by CloudStack to
|
||||
implement isolated guest networks and to provide additional services like routing and
|
||||
NAT.</para>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
%xinclude;
|
||||
]>
|
||||
<!-- 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.
|
||||
-->
|
||||
<section id="network-offerings">
|
||||
<title>Network Offerings</title>
|
||||
<para>Using the Nicira NVP plugin requires a network offering with Virtual Networking enabled and configured to use the NiciraNvp element. Typical use cases combine services from the Virtual Router appliance and the Nicira NVP plugin.</para>
|
||||
<table>
|
||||
<title>Isolated network offering with regular services from the Virtual Router.</title>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Service</entry>
|
||||
<entry>Provider</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>VPN</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>DHCP</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>DNS</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Firewall</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Load Balancer</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>User Data</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Source NAT</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Static NAT</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Post Forwarding</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Virtual Networking</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="./images/nvp-network-offering.png" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>nvp-physical-network-stt.png: a screenshot of a network offering.</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
<note><para>The tag in the network offering should be set to the name of the physical network with the NVP provider.</para></note>
|
||||
<para>Isolated network with network services. The virtual router is still required to provide network services like dns and dhcp.</para>
|
||||
<table>
|
||||
<title>Isolated network offering with network services</title>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Service</entry>
|
||||
<entry>Provider</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>DHCP</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>DNS</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>User Data</entry>
|
||||
<entry>VirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Source NAT</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Static NAT</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Post Forwarding</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Virtual Networking</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</section>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
%xinclude;
|
||||
]>
|
||||
<!-- 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.
|
||||
-->
|
||||
<section id="zone-configuration">
|
||||
<title>Zone Configuration</title>
|
||||
<para>&PRODUCT; needs to have at least one physical network with the isolation method set to "STT". This network should be enabled for the Guest traffic type.</para>
|
||||
<note><para>The Guest traffic type should be configured with the traffic label that matches the name of
|
||||
the Integration Bridge on the hypervisor. See the Nicira NVP User Guide for more details
|
||||
on how to set this up in XenServer or KVM.</para></note>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="./images/nvp-physical-network-stt.png" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>nvp-physical-network-stt.png: a screenshot of a physical network with the STT isolation type</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
</section>
|
||||
|
|
@ -22,17 +22,16 @@
|
|||
-->
|
||||
<section id="Prerequisites">
|
||||
<title>Prerequisites</title>
|
||||
<para>Before enabling the Nicira NVP plugin the NVP Controller needs to be configured. Please review the NVP User Guide on how to do that. </para>
|
||||
<para>&PRODUCT; needs to have at least one physical network with the isolation method set to "STT". This network should be enabled for the Guest traffic type.</para>
|
||||
<note><para>The Guest traffic type should be configured with the traffic label that matches the name of
|
||||
the Integration Bridge on the hypervisor. See the Nicira NVP User Guide for more details
|
||||
on how to set this up in XenServer or KVM.</para></note>
|
||||
<para>Before enabling the Nicira NVP plugin the NVP Controller needs to be configured. Please review the NVP User Guide on how to do that.</para>
|
||||
<para>Make sure you have the following information ready:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>The IP address of the NVP Controller</para></listitem>
|
||||
<listitem><para>The username to access the API</para></listitem>
|
||||
<listitem><para>The password to access the API</para></listitem>
|
||||
<listitem><para>The UUID of the Transport Zone that contains the hypervisors in this Zone</para></listitem>
|
||||
<listitem><para>The UUID of the Physical Network that will be used for the Guest networks</para></listitem>
|
||||
<listitem>
|
||||
<para>The UUID of the Gateway Service used to provide router and NAT services.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<note><para>The gateway service uuid is optional and is used for Layer 3 services only (SourceNat, StaticNat and PortForwarding)</para></note>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -22,21 +22,15 @@
|
|||
-->
|
||||
<section id="Enabling-the-service-provider">
|
||||
<title>Enabling the service provider</title>
|
||||
<para>To allow CloudStack to use the Nicira NVP Plugin the network service provider needs to be enabled on the physical network. The following sequence of API calls will enable the network service provider</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>addNetworkServiceProvider</para></listitem>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>name = "NiciraNvp"</para></listitem>
|
||||
<listitem><para>physicalnetworkid = <the uuid of the physical network></para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
<listitem><para>updateNetworkServiceProvider</para></listitem>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>id = <the provider uuid returned by the previous call></para></listitem>
|
||||
<listitem><para>state = "Enabled"</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>The Nicira NVP provider is disabled by default. Navigate to the "Network Service Providers" configuration of the physical network with the STT isolation type. Navigate to the Nicira NVP provider and press the "Enable Provider" button.</para>
|
||||
<note><para>CloudStack 4.0 does not have the UI interface to configure the Nicira NVP plugin. Configuration needs to be done using the API directly.</para></note>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="./images/nvp-enable-provider.png" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>nvp-physical-network-stt.png: a screenshot of an enabled Nicira NVP provider</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
|
||||
</section>
|
||||
|
|
@ -40,6 +40,20 @@
|
|||
</simplelist>
|
||||
</revdescription>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>1-0</revnumber>
|
||||
<date>Wed May 22 2013</date>
|
||||
<author>
|
||||
<firstname>Hugo</firstname>
|
||||
<surname>Trippaers</surname>
|
||||
<email>hugo@apache.org</email>
|
||||
</author>
|
||||
<revdescription>
|
||||
<simplelist>
|
||||
<member>Documentation updated for &PRODUCT; 4.1.0</member>
|
||||
</simplelist>
|
||||
</revdescription>
|
||||
</revision>
|
||||
</revhistory>
|
||||
</simpara>
|
||||
</appendix>
|
||||
|
|
|
|||
|
|
@ -23,29 +23,84 @@
|
|||
<section id="Database-tables">
|
||||
<title>Database tables</title>
|
||||
<para>The following tables are added to the cloud database for the Nicira NVP Plugin</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>nicira_nvp_nic_map, contains a mapping from nic to logical switch port</para></listitem>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>id</para></listitem>
|
||||
<listitem><para>logicalswitch, uuid of the logical switch this port is connected to</para></listitem>
|
||||
<listitem><para>logicalswitchport, uuid of the logical switch port for this nic</para></listitem>
|
||||
<listitem><para>nic, the CloudStack uuid for this nic, reference to the nics table</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<itemizedlist>
|
||||
<listitem><para>external_nicira_nvp_devices, contains all configured devices</para></listitem>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>id</para></listitem>
|
||||
<listitem><para>uuid</para></listitem>
|
||||
<listitem><para>physical_network_id, the physical network this device is configured on</para></listitem>
|
||||
<listitem><para>provider_name, set to "NiciraNvp"</para></listitem>
|
||||
<listitem><para>device_name, display name for this device</para></listitem>
|
||||
<listitem><para>host_id, reference to the host table with the device configuration</para></listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<table>
|
||||
<title>nicira_nvp_nic_map</title>
|
||||
<tgroup cols="2">
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>id</entry>
|
||||
<entry>auto incrementing id</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>logicalswitch</entry>
|
||||
<entry>uuid of the logical switch this port is connected to</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>logicalswitchport</entry>
|
||||
<entry>uuid of the logical switch port for this nic</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>nic</entry>
|
||||
<entry>the &PRODUCT; uuid for this nic, reference to the nics table</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<title>external_nicira_nvp_devices</title>
|
||||
<tgroup cols="2">
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>id</entry>
|
||||
<entry>auto incrementing id</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>uuid</entry>
|
||||
<entry>UUID identifying this device</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>physical_network_id</entry>
|
||||
<entry>the physical network this device is configured on</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>provider_name</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>device_name</entry>
|
||||
<entry>display name for this device</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>host_id</entry>
|
||||
<entry>reference to the host table with the device configuration</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<title>nicira_nvp_router_map</title>
|
||||
<tgroup cols="2">
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>id</entry>
|
||||
<entry>auto incrementing id</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>logicalrouter_uuid</entry>
|
||||
<entry>uuid of the logical router</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>network_id</entry>
|
||||
<entry>id of the network this router is linked to</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<note>
|
||||
<para>nicira_nvp_router_map is only available in &PRODUCT; 4.1 and above</para>
|
||||
</note>
|
||||
|
||||
</section>
|
||||
|
|
@ -21,10 +21,13 @@
|
|||
under the License.
|
||||
-->
|
||||
<chapter id="Using-the-Nicira-NVP-Plugin" >
|
||||
<title>Using the Nicira NVP Plugin</title>
|
||||
<title>Configuring the Nicira NVP Plugin</title>
|
||||
|
||||
<xi:include href="plugin-niciranvp-preparations.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-ui.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-provider.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-devicemanagement.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-physicalnet.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-provider.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||
<xi:include href="plugin-niciranvp-devicemanagement.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||
<xi:include href="plugin-niciranvp-networkofferings.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||
</chapter>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
<?xml version='1.0' encoding='utf-8' ?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
%xinclude;
|
||||
]>
|
||||
|
||||
<!-- 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
|
||||
|
|
@ -13,9 +12,7 @@
|
|||
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
|
||||
|
||||
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
|
||||
|
|
@ -23,9 +20,11 @@
|
|||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
<chapter id="niciranvp-plugin-guide">
|
||||
<title>Plugin Guide for the Nicira NVP Plugin</title>
|
||||
<xi:include href="plugin-niciranvp-about.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
<xi:include href="plugin-niciranvp-usage.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
<xi:include href="plugin-niciranvp-troubleshooting.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
<chapter id="Using-the-Nicira-NVP-Plugin-With_VPC" >
|
||||
<title>Using the Nicira NVP plugin with VPC</title>
|
||||
|
||||
<xi:include href="plugin-niciranvp-vpcfeatures.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-vpcoffering.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
<xi:include href="plugin-niciranvp-vpcnetworkoffering.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
%xinclude;
|
||||
]>
|
||||
<!-- 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.
|
||||
-->
|
||||
<section id="vpc-features">
|
||||
<title>Supported VPC features</title>
|
||||
<para>The Nicira NVP plugin supports &PRODUCT; VPC to a certain extent. Starting with &PRODUCT; version 4.1 VPCs can be deployed using NVP isolated networks.</para>
|
||||
<para>It is not possible to use a Nicira NVP Logical Router for as a VPC Router</para>
|
||||
<para>It is not possible to connect a private gateway using a Nicira NVP Logical Switch</para>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
%xinclude;
|
||||
]>
|
||||
<!-- 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.
|
||||
-->
|
||||
<section id="nvp-vpc-network-offering">
|
||||
<title>VPC Network Offerings</title>
|
||||
<para>The VPC needs specific network offerings with the VPC flag enabled. Otherwise these network offerings are identical to regular network offerings. To allow VPC networks with a Nicira NVP isolated network the offerings need to support the Virtual Networking service with the NiciraNVP provider.</para>
|
||||
<para>In a typical configuration two network offerings need to be created. One with the loadbalancing service enabled and one without loadbalancing.</para>
|
||||
<table>
|
||||
<title>VPC Network Offering with Loadbalancing</title>
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Service</entry>
|
||||
<entry>Provider</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>VPN</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>DHCP</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>DNS</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Load Balancer</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>User Data</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Source NAT</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Static NAT</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Post Forwarding</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>NetworkACL</entry>
|
||||
<entry>VpcVirtualRouter</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>Virtual Networking</entry>
|
||||
<entry>NiciraNVP</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</section>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
|
||||
%BOOK_ENTITIES;
|
||||
<!ENTITY % xinclude SYSTEM "http://www.docbook.org/xml/4.4/xinclude.mod">
|
||||
%xinclude;
|
||||
]>
|
||||
<!-- 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.
|
||||
-->
|
||||
<section id="nvp-vpc-offering">
|
||||
<title>VPC Offering with Nicira NVP</title>
|
||||
<para>To allow a VPC to use the Nicira NVP plugin to provision networks, a new VPC offering needs to be created which allows the Virtual Networking service to be implemented by NiciraNVP.</para>
|
||||
<para>This is not currently possible with the UI. The API does provide the proper calls to create a VPC offering with Virtual Networking enabled. However due to a limitation in the 4.1 API it is not possible to select the provider for this network service. To configure the VPC offering with the NiciraNVP provider edit the database table 'vpc_offering_service_map' and change the provider to NiciraNvp for the service 'Connectivity'</para>
|
||||
<para>It is also possible to update the default VPC offering by adding a row to the
|
||||
'vpc_offering_service_map' with service 'Connectivity' and provider 'NiciraNvp'</para>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="./images/nvp-vpc-offering-edit.png" />
|
||||
</imageobject>
|
||||
<textobject>
|
||||
<phrase>nvp-physical-network-stt.png: a screenshot of the mysql table.</phrase>
|
||||
</textobject>
|
||||
</mediaobject>
|
||||
<note><para>When creating a new VPC offering please note that the UI does not allow you to select a VPC offering yet. The VPC needs to be created using the API with the offering UUID.</para></note>
|
||||
</section>
|
||||
|
|
@ -266,6 +266,11 @@ public interface NetworkManager {
|
|||
IPAddressVO associateIPToGuestNetwork(long ipAddrId, long networkId, boolean releaseOnFailure) throws ResourceAllocationException, ResourceUnavailableException,
|
||||
InsufficientAddressCapacityException, ConcurrentOperationException;
|
||||
|
||||
IpAddress allocatePortableIp(Account ipOwner, Account caller, long dcId, Long networkId, Long vpcID)
|
||||
throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException;
|
||||
|
||||
boolean releasePortableIpAddress(long addrId);
|
||||
|
||||
IPAddressVO associatePortableIPToGuestNetwork(long ipAddrId, long networkId, boolean releaseOnFailure) throws ResourceAllocationException, ResourceUnavailableException,
|
||||
InsufficientAddressCapacityException, ConcurrentOperationException;
|
||||
|
||||
|
|
@ -312,9 +317,6 @@ public interface NetworkManager {
|
|||
InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException;
|
||||
|
||||
|
||||
PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException;
|
||||
|
||||
|
||||
/**
|
||||
* @param addr
|
||||
*/
|
||||
|
|
@ -341,9 +343,6 @@ public interface NetworkManager {
|
|||
int getNetworkLockTimeout();
|
||||
|
||||
|
||||
boolean cleanupIpResources(long addrId, long userId, Account caller);
|
||||
|
||||
|
||||
boolean restartNetwork(Long networkId, Account callerAccount,
|
||||
User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
|
||||
|
||||
|
|
@ -360,33 +359,26 @@ public interface NetworkManager {
|
|||
IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerId,
|
||||
DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException;
|
||||
|
||||
|
||||
IpAddress allocatePortableIp(Account ipOwner, Account caller, long dcId, Long networkId, Long vpcID)
|
||||
throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException;
|
||||
|
||||
Map<String, String> finalizeServicesAndProvidersForNetwork(NetworkOffering offering,
|
||||
Long physicalNetworkId);
|
||||
|
||||
|
||||
List<Provider> getProvidersForServiceInNetwork(Network network, Service service);
|
||||
|
||||
StaticNatServiceProvider getStaticNatProviderForNetwork(Network network);
|
||||
|
||||
boolean isNetworkInlineMode(Network network);
|
||||
|
||||
int getRuleCountForIp(Long addressId, FirewallRule.Purpose purpose, FirewallRule.State state);
|
||||
|
||||
LoadBalancingServiceProvider getLoadBalancingProviderForNetwork(Network network, Scheme lbScheme);
|
||||
|
||||
|
||||
boolean isSecondaryIpSetForNic(long nicId);
|
||||
|
||||
public String allocateGuestIP(Account ipOwner, boolean isSystem, long zoneId, Long networkId, String requestedIp)
|
||||
throws InsufficientAddressCapacityException;
|
||||
|
||||
public String allocateGuestIP(Account ipOwner, boolean isSystem, long zoneId, Long networkId, String requestedIp) throws InsufficientAddressCapacityException;
|
||||
|
||||
List<? extends Nic> listVmNics(Long vmId, Long nicId);
|
||||
|
||||
String allocatePublicIpForGuestNic(Long networkId, DataCenter dc, Pod pod, Account caller, String requestedIp) throws InsufficientAddressCapacityException;
|
||||
boolean removeVmSecondaryIpsOfNic(long nicId);
|
||||
|
||||
NicVO savePlaceholderNic(Network network, String ip4Address, Type vmType);
|
||||
|
||||
|
|
|
|||
|
|
@ -261,7 +261,10 @@ public class DatabaseUpgradeChecker implements SystemIntegrityChecker {
|
|||
}
|
||||
|
||||
txn.commit();
|
||||
} finally {
|
||||
} catch (CloudRuntimeException e){
|
||||
s_logger.error("Unable to upgrade the database", e);
|
||||
throw new CloudRuntimeException("Unable to upgrade the database", e);
|
||||
}finally {
|
||||
txn.close();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
package com.cloud.upgrade.dao;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
|
|
@ -72,6 +73,7 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
|
|||
fixForeignKeys(conn);
|
||||
setupExternalNetworkDevices(conn);
|
||||
fixZoneUsingExternalDevices(conn);
|
||||
encryptConfig(conn);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -1079,4 +1081,43 @@ public class Upgrade302to40 extends Upgrade30xBase implements DbUpgrade {
|
|||
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");
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
while (rs.next()) {
|
||||
String name = rs.getString(1);
|
||||
String value = rs.getString(2);
|
||||
if (value == null) {
|
||||
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();
|
||||
}
|
||||
} 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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ import java.sql.PreparedStatement;
|
|||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import com.cloud.network.vpc.NetworkACL;
|
||||
|
||||
|
|
@ -75,6 +77,36 @@ public class Upgrade410to420 implements DbUpgrade {
|
|||
updateNetworkACLs(conn);
|
||||
addHostDetailsIndex(conn);
|
||||
updateNetworksForPrivateGateways(conn);
|
||||
removeFirewallServiceFromSharedNetworkOfferingWithSGService(conn);
|
||||
fix22xKVMSnapshots(conn);
|
||||
addIndexForAlert(conn);
|
||||
}
|
||||
|
||||
private void addIndexForAlert(Connection conn) {
|
||||
|
||||
//First drop if it exists. (Due to patches shipped to customers some will have the index and some wont.)
|
||||
List<String> indexList = new ArrayList<String>();
|
||||
s_logger.debug("Dropping index i_alert__last_sent if it exists");
|
||||
indexList.add("i_alert__last_sent");
|
||||
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`)");
|
||||
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 updateSystemVmTemplates(Connection conn) {
|
||||
|
|
@ -747,4 +779,74 @@ public class Upgrade410to420 implements DbUpgrade {
|
|||
throw new CloudRuntimeException("Failed to update private networks with VPC id.", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeFirewallServiceFromSharedNetworkOfferingWithSGService(Connection conn) {
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
try {
|
||||
pstmt = conn.prepareStatement("select id from `cloud`.`network_offerings` where unique_name='DefaultSharedNetworkOfferingWithSGService'");
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
long id = rs.getLong(1);
|
||||
// remove Firewall service for SG shared network offering
|
||||
pstmt = conn.prepareStatement("DELETE from `cloud`.`ntwk_offering_service_map` where network_offering_id=? and service='Firewall'");
|
||||
pstmt.setLong(1, id);
|
||||
pstmt.executeUpdate();
|
||||
}
|
||||
} 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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void fix22xKVMSnapshots(Connection conn) {
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs = null;
|
||||
s_logger.debug("Updating KVM snapshots");
|
||||
try {
|
||||
pstmt = conn.prepareStatement("select id, backup_snap_id from `cloud`.`snapshots` where hypervisor_type='KVM' and removed is null and backup_snap_id is not null");
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
long id = rs.getLong(1);
|
||||
String backUpPath = rs.getString(2);
|
||||
// Update Backup Path. Remove anything before /snapshots/
|
||||
// e.g 22x Path /mnt/0f14da63-7033-3ca5-bdbe-fa62f4e2f38a/snapshots/1/2/6/i-2-6-VM_ROOT-6_20121219072022
|
||||
// Above path should change to /snapshots/1/2/6/i-2-6-VM_ROOT-6_20121219072022
|
||||
int index = backUpPath.indexOf("snapshots"+File.separator);
|
||||
if (index > 1){
|
||||
String correctedPath = File.separator + backUpPath.substring(index);
|
||||
s_logger.debug("Updating Snapshot with id: "+id+" original backup path: "+backUpPath+ " updated backup path: "+correctedPath);
|
||||
pstmt = conn.prepareStatement("UPDATE `cloud`.`snapshots` set backup_snap_id=? where id = ?");
|
||||
pstmt.setString(1, correctedPath);
|
||||
pstmt.setLong(2, id);
|
||||
pstmt.executeUpdate();
|
||||
}
|
||||
}
|
||||
s_logger.debug("Done updating KVM snapshots");
|
||||
} 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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
// under the License.
|
||||
package com.cloud.usage.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.usage.UsageNetworkVO;
|
||||
|
|
@ -24,4 +25,5 @@ import com.cloud.utils.db.GenericDao;
|
|||
public interface UsageNetworkDao extends GenericDao<UsageNetworkVO, Long> {
|
||||
Map<String, UsageNetworkVO> getRecentNetworkStats();
|
||||
void deleteOldStats(long maxEventTime);
|
||||
void saveUsageNetworks(List<UsageNetworkVO> usageNetworks);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package com.cloud.usage.dao;
|
|||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ejb.Local;
|
||||
|
|
@ -29,6 +30,7 @@ import org.springframework.stereotype.Component;
|
|||
import com.cloud.usage.UsageNetworkVO;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@Component
|
||||
@Local(value={UsageNetworkDao.class})
|
||||
|
|
@ -41,6 +43,8 @@ public class UsageNetworkDaoImpl extends GenericDaoBase<UsageNetworkVO, Long> im
|
|||
") joinnet on u.account_id = joinnet.acct_id and u.zone_id = joinnet.z_id and u.event_time_millis = joinnet.max_date";
|
||||
private static final String DELETE_OLD_STATS = "DELETE FROM cloud_usage.usage_network WHERE event_time_millis < ?";
|
||||
|
||||
private static final String INSERT_USAGE_NETWORK = "INSERT INTO cloud_usage.usage_network (account_id, zone_id, host_id, host_type, network_id, bytes_sent, bytes_received, agg_bytes_received, agg_bytes_sent, event_time_millis) VALUES (?,?,?,?,?,?,?,?,?,?)";
|
||||
|
||||
public UsageNetworkDaoImpl() {
|
||||
}
|
||||
|
||||
|
|
@ -95,4 +99,34 @@ public class UsageNetworkDaoImpl extends GenericDaoBase<UsageNetworkVO, Long> im
|
|||
s_logger.error("error deleting old usage network stats", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveUsageNetworks (List<UsageNetworkVO> usageNetworks) {
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
try {
|
||||
txn.start();
|
||||
String sql = INSERT_USAGE_NETWORK;
|
||||
PreparedStatement pstmt = null;
|
||||
pstmt = txn.prepareAutoCloseStatement(sql); // in reality I just want CLOUD_USAGE dataSource connection
|
||||
for (UsageNetworkVO usageNetwork : usageNetworks) {
|
||||
pstmt.setLong(1, usageNetwork.getAccountId());
|
||||
pstmt.setLong(2, usageNetwork.getZoneId());
|
||||
pstmt.setLong(3, usageNetwork.getHostId());
|
||||
pstmt.setString(4, usageNetwork.getHostType());
|
||||
pstmt.setLong(5, usageNetwork.getNetworkId());
|
||||
pstmt.setLong(6, usageNetwork.getBytesSent());
|
||||
pstmt.setLong(7, usageNetwork.getBytesReceived());
|
||||
pstmt.setLong(8, usageNetwork.getAggBytesReceived());
|
||||
pstmt.setLong(9, usageNetwork.getAggBytesSent());
|
||||
pstmt.setLong(10, usageNetwork.getEventTimeMillis());
|
||||
pstmt.addBatch();
|
||||
}
|
||||
pstmt.executeBatch();
|
||||
txn.commit();
|
||||
} catch (Exception ex) {
|
||||
txn.rollback();
|
||||
s_logger.error("error saving usage_network to cloud_usage db", ex);
|
||||
throw new CloudRuntimeException(ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -167,12 +167,6 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement
|
|||
return false;
|
||||
}
|
||||
|
||||
DiskOfferingVO diskOffering = _diskOfferingDao.findById(dskCh.getDiskOfferingId());
|
||||
if (diskOffering.getSystemUse() && pool.getPoolType() == StoragePoolType.RBD) {
|
||||
s_logger.debug("Skipping RBD pool " + pool.getName() + " as a suitable pool. RBD is not supported for System VM's");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Long clusterId = pool.getClusterId();
|
||||
ClusterVO cluster = _clusterDao.findById(clusterId);
|
||||
|
|
|
|||
|
|
@ -31,5 +31,7 @@ public interface AsyncJobDao extends GenericDao<AsyncJobVO, Long> {
|
|||
void cleanupPseduoJobs(long msid);
|
||||
|
||||
List<AsyncJobVO> getExpiredJobs(Date cutTime, int limit);
|
||||
List<AsyncJobVO> getExpiredUnfinishedJobs(Date cutTime, int limit);
|
||||
void resetJobProcess(long msid, int jobResultCode, String jobResultMessage);
|
||||
List<AsyncJobVO> getExpiredCompletedJobs(Date cutTime, int limit);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,41 +31,57 @@ import com.cloud.utils.db.Filter;
|
|||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
|
||||
public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements AsyncJobDao {
|
||||
private static final Logger s_logger = Logger.getLogger(AsyncJobDaoImpl.class.getName());
|
||||
|
||||
private final SearchBuilder<AsyncJobVO> pendingAsyncJobSearch;
|
||||
private final SearchBuilder<AsyncJobVO> pendingAsyncJobsSearch;
|
||||
private final SearchBuilder<AsyncJobVO> expiringAsyncJobSearch;
|
||||
private final SearchBuilder<AsyncJobVO> pendingAsyncJobSearch;
|
||||
private final SearchBuilder<AsyncJobVO> pendingAsyncJobsSearch;
|
||||
private final SearchBuilder<AsyncJobVO> expiringAsyncJobSearch;
|
||||
private final SearchBuilder<AsyncJobVO> pseudoJobSearch;
|
||||
private final SearchBuilder<AsyncJobVO> pseudoJobCleanupSearch;
|
||||
private final SearchBuilder<AsyncJobVO> expiringUnfinishedAsyncJobSearch;
|
||||
private final SearchBuilder<AsyncJobVO> expiringCompletedAsyncJobSearch;
|
||||
|
||||
|
||||
public AsyncJobDaoImpl() {
|
||||
pendingAsyncJobSearch = createSearchBuilder();
|
||||
pendingAsyncJobSearch.and("instanceType", pendingAsyncJobSearch.entity().getInstanceType(),
|
||||
pendingAsyncJobSearch.and("instanceType", pendingAsyncJobSearch.entity().getInstanceType(),
|
||||
SearchCriteria.Op.EQ);
|
||||
pendingAsyncJobSearch.and("instanceId", pendingAsyncJobSearch.entity().getInstanceId(),
|
||||
pendingAsyncJobSearch.and("instanceId", pendingAsyncJobSearch.entity().getInstanceId(),
|
||||
SearchCriteria.Op.EQ);
|
||||
pendingAsyncJobSearch.and("status", pendingAsyncJobSearch.entity().getStatus(),
|
||||
pendingAsyncJobSearch.and("status", pendingAsyncJobSearch.entity().getStatus(),
|
||||
SearchCriteria.Op.EQ);
|
||||
pendingAsyncJobSearch.done();
|
||||
|
||||
expiringAsyncJobSearch = createSearchBuilder();
|
||||
expiringAsyncJobSearch.and("created", expiringAsyncJobSearch.entity().getCreated(), SearchCriteria.Op.LTEQ);
|
||||
expiringAsyncJobSearch.done();
|
||||
|
||||
pendingAsyncJobsSearch = createSearchBuilder();
|
||||
pendingAsyncJobsSearch.and("instanceType", pendingAsyncJobsSearch.entity().getInstanceType(),
|
||||
pendingAsyncJobsSearch.and("instanceType", pendingAsyncJobsSearch.entity().getInstanceType(),
|
||||
SearchCriteria.Op.EQ);
|
||||
pendingAsyncJobsSearch.and("accountId", pendingAsyncJobsSearch.entity().getAccountId(),
|
||||
pendingAsyncJobsSearch.and("accountId", pendingAsyncJobsSearch.entity().getAccountId(),
|
||||
SearchCriteria.Op.EQ);
|
||||
pendingAsyncJobsSearch.and("status", pendingAsyncJobsSearch.entity().getStatus(),
|
||||
pendingAsyncJobsSearch.and("status", pendingAsyncJobsSearch.entity().getStatus(),
|
||||
SearchCriteria.Op.EQ);
|
||||
pendingAsyncJobsSearch.done();
|
||||
|
||||
expiringAsyncJobSearch = createSearchBuilder();
|
||||
expiringAsyncJobSearch.and("created", expiringAsyncJobSearch.entity().getCreated(),
|
||||
expiringUnfinishedAsyncJobSearch = createSearchBuilder();
|
||||
expiringUnfinishedAsyncJobSearch.and("created", expiringUnfinishedAsyncJobSearch.entity().getCreated(),
|
||||
SearchCriteria.Op.LTEQ);
|
||||
expiringAsyncJobSearch.done();
|
||||
expiringUnfinishedAsyncJobSearch.and("completeMsId", expiringUnfinishedAsyncJobSearch.entity().getCompleteMsid(), SearchCriteria.Op.NULL);
|
||||
expiringUnfinishedAsyncJobSearch.and("jobStatus", expiringUnfinishedAsyncJobSearch.entity().getStatus(), SearchCriteria.Op.EQ);
|
||||
expiringUnfinishedAsyncJobSearch.done();
|
||||
|
||||
expiringCompletedAsyncJobSearch = createSearchBuilder();
|
||||
expiringCompletedAsyncJobSearch.and("created", expiringCompletedAsyncJobSearch.entity().getCreated(),
|
||||
SearchCriteria.Op.LTEQ);
|
||||
expiringCompletedAsyncJobSearch.and("completeMsId", expiringCompletedAsyncJobSearch.entity().getCompleteMsid(), SearchCriteria.Op.NNULL);
|
||||
expiringCompletedAsyncJobSearch.and("jobStatus", expiringCompletedAsyncJobSearch.entity().getStatus(), SearchCriteria.Op.NEQ);
|
||||
expiringCompletedAsyncJobSearch.done();
|
||||
|
||||
pseudoJobSearch = createSearchBuilder();
|
||||
pseudoJobSearch.and("jobDispatcher", pseudoJobSearch.entity().getDispatcher(), Op.EQ);
|
||||
|
|
@ -76,9 +92,11 @@ public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements
|
|||
pseudoJobCleanupSearch = createSearchBuilder();
|
||||
pseudoJobCleanupSearch.and("initMsid", pseudoJobCleanupSearch.entity().getInitMsid(), Op.EQ);
|
||||
pseudoJobCleanupSearch.done();
|
||||
|
||||
}
|
||||
|
||||
public AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId) {
|
||||
@Override
|
||||
public AsyncJobVO findInstancePendingAsyncJob(String instanceType, long instanceId) {
|
||||
SearchCriteria<AsyncJobVO> sc = pendingAsyncJobSearch.create();
|
||||
sc.setParameters("instanceType", instanceType);
|
||||
sc.setParameters("instanceId", instanceId);
|
||||
|
|
@ -95,7 +113,8 @@ public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements
|
|||
return null;
|
||||
}
|
||||
|
||||
public List<AsyncJobVO> findInstancePendingAsyncJobs(String instanceType, Long accountId) {
|
||||
@Override
|
||||
public List<AsyncJobVO> findInstancePendingAsyncJobs(String instanceType, Long accountId) {
|
||||
SearchCriteria<AsyncJobVO> sc = pendingAsyncJobsSearch.create();
|
||||
sc.setParameters("instanceType", instanceType);
|
||||
|
||||
|
|
@ -107,7 +126,8 @@ public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements
|
|||
return listBy(sc);
|
||||
}
|
||||
|
||||
public AsyncJobVO findPseudoJob(long threadId, long msid) {
|
||||
@Override
|
||||
public AsyncJobVO findPseudoJob(long threadId, long msid) {
|
||||
SearchCriteria<AsyncJobVO> sc = pseudoJobSearch.create();
|
||||
sc.setParameters("jobDispatcher", AsyncJobConstants.JOB_DISPATCHER_PSEUDO);
|
||||
sc.setParameters("instanceType", AsyncJobConstants.PSEUDO_JOB_INSTANCE_TYPE);
|
||||
|
|
@ -122,22 +142,43 @@ public class AsyncJobDaoImpl extends GenericDaoBase<AsyncJobVO, Long> implements
|
|||
return null;
|
||||
}
|
||||
|
||||
public void cleanupPseduoJobs(long msid) {
|
||||
@Override
|
||||
public void cleanupPseduoJobs(long msid) {
|
||||
SearchCriteria<AsyncJobVO> sc = pseudoJobCleanupSearch.create();
|
||||
sc.setParameters("initMsid", msid);
|
||||
this.expunge(sc);
|
||||
}
|
||||
|
||||
public List<AsyncJobVO> getExpiredJobs(Date cutTime, int limit) {
|
||||
SearchCriteria<AsyncJobVO> sc = expiringAsyncJobSearch.create();
|
||||
@Override
|
||||
public List<AsyncJobVO> getExpiredJobs(Date cutTime, int limit) {
|
||||
SearchCriteria<AsyncJobVO> sc = expiringAsyncJobSearch.create();
|
||||
sc.setParameters("created", cutTime);
|
||||
Filter filter = new Filter(AsyncJobVO.class, "created", true, 0L, (long)limit);
|
||||
return listIncludingRemovedBy(sc, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AsyncJobVO> getExpiredUnfinishedJobs(Date cutTime, int limit) {
|
||||
SearchCriteria<AsyncJobVO> sc = expiringUnfinishedAsyncJobSearch.create();
|
||||
sc.setParameters("created", cutTime);
|
||||
sc.setParameters("jobStatus", 0);
|
||||
Filter filter = new Filter(AsyncJobVO.class, "created", true, 0L, (long)limit);
|
||||
return listIncludingRemovedBy(sc, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AsyncJobVO> getExpiredCompletedJobs(Date cutTime, int limit) {
|
||||
SearchCriteria<AsyncJobVO> sc = expiringCompletedAsyncJobSearch.create();
|
||||
sc.setParameters("created", cutTime);
|
||||
sc.setParameters("jobStatus", 0);
|
||||
Filter filter = new Filter(AsyncJobVO.class, "created", true, 0L, (long)limit);
|
||||
return listIncludingRemovedBy(sc, filter);
|
||||
}
|
||||
|
||||
@DB
|
||||
@Override
|
||||
@DB
|
||||
public void resetJobProcess(long msid, int jobResultCode, String jobResultMessage) {
|
||||
String sql = "UPDATE async_job SET job_status=" + AsyncJobConstants.STATUS_FAILED + ", job_result_code=" + jobResultCode
|
||||
String sql = "UPDATE async_job SET job_status=" + AsyncJobConstants.STATUS_FAILED + ", job_result_code=" + jobResultCode
|
||||
+ ", job_result='" + jobResultMessage + "' where job_status=0 AND (job_complete_msid=? OR (job_complete_msid IS NULL AND job_init_msid=?))";
|
||||
|
||||
Transaction txn = Transaction.currentTxn();
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@ PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
|
|||
# Fix haproxy directory issue
|
||||
mkdir -p /var/lib/haproxy
|
||||
|
||||
# Clear boot up flag, it would be created by rc.local after boot up done
|
||||
rm /var/cache/cloud/boot_up_done
|
||||
|
||||
[ -x /sbin/ifup ] || exit 0
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
|
|
|||
|
|
@ -13,3 +13,6 @@ do
|
|||
logger -t cloud "Stopping $svc"
|
||||
service $svc stop
|
||||
done
|
||||
|
||||
date > /var/cache/cloud/boot_up_done
|
||||
logger -t cloud "Boot up process done"
|
||||
|
|
|
|||
|
|
@ -16,5 +16,31 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# As the last command send to router before any rules operation, wait until boot up done
|
||||
|
||||
__TIMEOUT=60
|
||||
__FLAGFILE=/var/cache/cloud/boot_up_done
|
||||
done=0
|
||||
for i in `seq 1 $(($__TIMEOUT * 10))`
|
||||
do
|
||||
if [ -e $__FLAGFILE ]
|
||||
then
|
||||
done=1
|
||||
break
|
||||
fi
|
||||
sleep 0.1
|
||||
if [ $((i % 10)) -eq 0 ]
|
||||
then
|
||||
logger -t cloud "Waiting for VM boot up done for one second"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z $done ]
|
||||
then
|
||||
# declare we failed booting process
|
||||
echo "Waited 60 seconds but boot up haven't been completed"
|
||||
exit
|
||||
fi
|
||||
|
||||
echo -n `cat /etc/cloudstack-release`'&'
|
||||
cat /var/cache/cloud/cloud-scripts-signature
|
||||
|
|
|
|||
|
|
@ -227,7 +227,8 @@ add_first_ip() {
|
|||
if [ $if_keep_state -ne 1 -o $old_state -ne 0 ]
|
||||
then
|
||||
sudo ip link set $ethDev up
|
||||
sudo arping -c 3 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
|
||||
sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
|
||||
sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
|
||||
fi
|
||||
add_routing $1
|
||||
|
||||
|
|
@ -273,7 +274,8 @@ add_an_ip () {
|
|||
if [ $if_keep_state -ne 1 -o $old_state -ne 0 ]
|
||||
then
|
||||
sudo ip link set $ethDev up
|
||||
sudo arping -c 3 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
|
||||
sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
|
||||
sudo arping -c 1 -I $ethDev -A -U -s $ipNoMask $ipNoMask;
|
||||
fi
|
||||
add_routing $1
|
||||
return $?
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
sleep 1
|
||||
|
||||
source /root/func.sh
|
||||
|
||||
lock="biglock"
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@
|
|||
<id>libvirt-org</id>
|
||||
<url>http://libvirt.org/maven2</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>ceph-com</id>
|
||||
<url>http://ceph.com/maven</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
@ -36,6 +40,11 @@
|
|||
<artifactId>libvirt</artifactId>
|
||||
<version>${cs.libvirt-java.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.ceph</groupId>
|
||||
<artifactId>rados</artifactId>
|
||||
<version>${cs.rados-java.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
|
|
|
|||
|
|
@ -39,11 +39,11 @@ import java.util.Collections;
|
|||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
|
@ -57,10 +57,6 @@ import javax.ejb.Local;
|
|||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImg;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImgFile;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImgException;
|
||||
import org.libvirt.Connect;
|
||||
import org.libvirt.Domain;
|
||||
import org.libvirt.DomainInfo;
|
||||
|
|
@ -69,6 +65,11 @@ import org.libvirt.DomainSnapshot;
|
|||
import org.libvirt.LibvirtException;
|
||||
import org.libvirt.NodeInfo;
|
||||
|
||||
import org.apache.cloudstack.utils.qemu.QemuImg;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImgException;
|
||||
import org.apache.cloudstack.utils.qemu.QemuImgFile;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.AttachIsoCommand;
|
||||
import com.cloud.agent.api.AttachVolumeAnswer;
|
||||
|
|
@ -167,8 +168,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer;
|
|||
import com.cloud.agent.api.storage.DestroyCommand;
|
||||
import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
|
||||
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
|
||||
import com.cloud.agent.api.storage.ResizeVolumeCommand;
|
||||
import com.cloud.agent.api.storage.ResizeVolumeAnswer;
|
||||
import com.cloud.agent.api.storage.ResizeVolumeCommand;
|
||||
import com.cloud.agent.api.to.IpAddressTO;
|
||||
import com.cloud.agent.api.to.NicTO;
|
||||
import com.cloud.agent.api.to.StorageFilerTO;
|
||||
|
|
@ -195,8 +196,8 @@ import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InputDef;
|
|||
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.InterfaceDef.hostNicType;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.SerialDef;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.VirtioSerialDef;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.TermPolicy;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.VirtioSerialDef;
|
||||
import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk;
|
||||
import com.cloud.hypervisor.kvm.storage.KVMStoragePool;
|
||||
import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager;
|
||||
|
|
@ -218,9 +219,9 @@ import com.cloud.storage.template.Processor.FormatInfo;
|
|||
import com.cloud.storage.template.QCOW2Processor;
|
||||
import com.cloud.storage.template.TemplateInfo;
|
||||
import com.cloud.storage.template.TemplateLocation;
|
||||
import com.cloud.utils.FileUtil;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.FileUtil;
|
||||
import com.cloud.utils.PropertiesUtil;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
|
|
@ -985,7 +986,7 @@ ServerResource {
|
|||
|
||||
if (! f.isDirectory()){
|
||||
s_logger.debug("failing to get physical interface from bridge"
|
||||
+ bridgeName + ", does " + f.getAbsolutePath()
|
||||
+ bridgeName + ", does " + f.getAbsolutePath()
|
||||
+ "exist?");
|
||||
return "";
|
||||
}
|
||||
|
|
@ -1055,7 +1056,7 @@ ServerResource {
|
|||
return vnetId;
|
||||
}
|
||||
|
||||
private void passCmdLine(String vmName, String cmdLine)
|
||||
private void passCmdLine(String vmName, String cmdLine)
|
||||
throws InternalErrorException {
|
||||
final Script command = new Script(_patchViaSocketPath, _timeout, s_logger);
|
||||
String result;
|
||||
|
|
@ -1254,6 +1255,13 @@ ServerResource {
|
|||
}
|
||||
|
||||
private CopyVolumeAnswer execute(CopyVolumeCommand cmd) {
|
||||
/**
|
||||
This method is only used for copying files from Primary Storage TO Secondary Storage
|
||||
|
||||
It COULD also do it the other way around, but the code in the ManagementServerImpl shows
|
||||
that it always sets copyToSecondary to true
|
||||
|
||||
*/
|
||||
boolean copyToSecondary = cmd.toSecondaryStorage();
|
||||
String volumePath = cmd.getVolumePath();
|
||||
StorageFilerTO pool = cmd.getPool();
|
||||
|
|
@ -1363,7 +1371,7 @@ ServerResource {
|
|||
disksize = dskch.getSize();
|
||||
|
||||
if (cmd.getTemplateUrl() != null) {
|
||||
if(primaryPool.getType() == StoragePoolType.CLVM) {
|
||||
if(primaryPool.getType() == StoragePoolType.CLVM) {
|
||||
vol = templateToPrimaryDownload(cmd.getTemplateUrl(),primaryPool);
|
||||
} else {
|
||||
BaseVol = primaryPool.getPhysicalDisk(cmd.getTemplateUrl());
|
||||
|
|
@ -1452,7 +1460,7 @@ ServerResource {
|
|||
return null;
|
||||
}
|
||||
|
||||
/* uses a local script now, eventually support for virStorageVolResize() will maybe work on
|
||||
/* uses a local script now, eventually support for virStorageVolResize() will maybe work on
|
||||
qcow2 and lvm and we can do this in libvirt calls */
|
||||
public Answer execute(ResizeVolumeCommand cmd) {
|
||||
String volid = cmd.getPath();
|
||||
|
|
@ -1469,16 +1477,16 @@ ServerResource {
|
|||
String type = getResizeScriptType(pool, vol);
|
||||
|
||||
if (type == null) {
|
||||
return new ResizeVolumeAnswer(cmd, false, "Unsupported volume format: pool type '"
|
||||
return new ResizeVolumeAnswer(cmd, false, "Unsupported volume format: pool type '"
|
||||
+ pool.getType() + "' and volume format '" + vol.getFormat() + "'");
|
||||
} else if (type.equals("QCOW2") && shrinkOk) {
|
||||
return new ResizeVolumeAnswer(cmd, false, "Unable to shrink volumes of type " + type);
|
||||
}
|
||||
|
||||
s_logger.debug("got to the stage where we execute the volume resize, params:"
|
||||
s_logger.debug("got to the stage where we execute the volume resize, params:"
|
||||
+ path + "," + currentSize + "," + newSize + "," + type + "," + vmInstanceName + "," + shrinkOk);
|
||||
final Script resizecmd = new Script(_resizeVolumePath,
|
||||
_cmdsTimeout, s_logger);
|
||||
_cmdsTimeout, s_logger);
|
||||
resizecmd.add("-s",String.valueOf(newSize));
|
||||
resizecmd.add("-c",String.valueOf(currentSize));
|
||||
resizecmd.add("-p",path);
|
||||
|
|
@ -1503,7 +1511,7 @@ ServerResource {
|
|||
return new ResizeVolumeAnswer(cmd, false, error);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public Answer execute(DestroyCommand cmd) {
|
||||
VolumeTO vol = cmd.getVolume();
|
||||
|
|
@ -1529,7 +1537,7 @@ ServerResource {
|
|||
if(pifparts.length == 2) {
|
||||
return pifparts[1];
|
||||
} else {
|
||||
s_logger.debug("failed to get vlan id from bridge " + brName
|
||||
s_logger.debug("failed to get vlan id from bridge " + brName
|
||||
+ "attached to physical interface" + pif);
|
||||
return "";
|
||||
}
|
||||
|
|
@ -1771,7 +1779,7 @@ ServerResource {
|
|||
for (InterfaceDef pluggedNic : pluggedNics) {
|
||||
String pluggedVlanBr = pluggedNic.getBrName();
|
||||
String pluggedVlanId = getVlanIdFromBridge(pluggedVlanBr);
|
||||
if (pubVlan.equalsIgnoreCase(Vlan.UNTAGGED)
|
||||
if (pubVlan.equalsIgnoreCase(Vlan.UNTAGGED)
|
||||
&& pluggedVlanBr.equalsIgnoreCase(_publicBridgeName)) {
|
||||
break;
|
||||
} else if (pluggedVlanBr.equalsIgnoreCase(_linkLocalBridgeName)){
|
||||
|
|
@ -1818,7 +1826,7 @@ ServerResource {
|
|||
for (InterfaceDef pluggedNic : pluggedNics) {
|
||||
String pluggedVlan = pluggedNic.getBrName();
|
||||
if (pluggedVlan.equalsIgnoreCase(_linkLocalBridgeName)) {
|
||||
vlanToNicNum.put("LinkLocal",devNum);
|
||||
vlanToNicNum.put("LinkLocal",devNum);
|
||||
} else if (pluggedVlan.equalsIgnoreCase(_publicBridgeName)
|
||||
|| pluggedVlan.equalsIgnoreCase(_privBridgeName)
|
||||
|| pluggedVlan.equalsIgnoreCase(_guestBridgeName)) {
|
||||
|
|
@ -1864,8 +1872,8 @@ ServerResource {
|
|||
if (nic.getBrName().equalsIgnoreCase(_linkLocalBridgeName)) {
|
||||
vlanAllocatedToVM.put("LinkLocal", nicPos);
|
||||
} else {
|
||||
if (nic.getBrName().equalsIgnoreCase(_publicBridgeName)
|
||||
|| nic.getBrName().equalsIgnoreCase(_privBridgeName)
|
||||
if (nic.getBrName().equalsIgnoreCase(_publicBridgeName)
|
||||
|| nic.getBrName().equalsIgnoreCase(_privBridgeName)
|
||||
|| nic.getBrName().equalsIgnoreCase(_guestBridgeName)) {
|
||||
vlanAllocatedToVM.put(Vlan.UNTAGGED, nicPos);
|
||||
} else {
|
||||
|
|
@ -2623,6 +2631,8 @@ ServerResource {
|
|||
vms = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
PowerState s = convertToState(vms.getInfo().state);
|
||||
// vms = conn.domainLookupByName(vmName);
|
||||
// State s = convertToState(vms.getInfo().state);
|
||||
return s;
|
||||
} catch (final LibvirtException e) {
|
||||
s_logger.warn("Can't get vm state " + vmName + e.getMessage()
|
||||
|
|
@ -2713,8 +2723,7 @@ ServerResource {
|
|||
try {
|
||||
conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
|
||||
ifaces = getInterfaces(conn, vmName);
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
dconn = new Connect("qemu+tcp://" + cmd.getDestinationIp()
|
||||
+ "/system");
|
||||
/*
|
||||
|
|
@ -2729,6 +2738,9 @@ ServerResource {
|
|||
} finally {
|
||||
try {
|
||||
if (dm != null) {
|
||||
if (dm.isPersistent() == 1) {
|
||||
dm.undefine();
|
||||
}
|
||||
dm.free();
|
||||
}
|
||||
if (dconn != null) {
|
||||
|
|
@ -3160,8 +3172,7 @@ ServerResource {
|
|||
protected LibvirtVMDef createVMFromSpec(VirtualMachineTO vmTO) {
|
||||
LibvirtVMDef vm = new LibvirtVMDef();
|
||||
vm.setDomainName(vmTO.getName());
|
||||
vm.setDomUUID(UUID.nameUUIDFromBytes(vmTO.getName().getBytes())
|
||||
.toString());
|
||||
vm.setDomUUID(vmTO.getUuid());
|
||||
vm.setDomDescription(vmTO.getOs());
|
||||
|
||||
GuestDef guest = new GuestDef();
|
||||
|
|
@ -3186,8 +3197,8 @@ ServerResource {
|
|||
|
||||
if (vmTO.getMinRam() != vmTO.getMaxRam()){
|
||||
grd.setMemBalloning(true);
|
||||
grd.setCurrentMem((long)vmTO.getMinRam()/1024);
|
||||
grd.setMemorySize((long)vmTO.getMaxRam()/1024);
|
||||
grd.setCurrentMem(vmTO.getMinRam()/1024);
|
||||
grd.setMemorySize(vmTO.getMaxRam()/1024);
|
||||
}
|
||||
else{
|
||||
grd.setMemorySize(vmTO.getMaxRam() / 1024);
|
||||
|
|
@ -3585,8 +3596,7 @@ ServerResource {
|
|||
KVMStoragePool attachingPool = attachingDisk.getPool();
|
||||
try {
|
||||
if (!attach) {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
|
||||
String xml = dm.getXMLDesc(0);
|
||||
parser.parseDomainXML(xml);
|
||||
|
|
@ -3635,9 +3645,7 @@ ServerResource {
|
|||
InternalErrorException {
|
||||
Domain dm = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes((vmName
|
||||
.getBytes())));
|
||||
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
if (attach) {
|
||||
s_logger.debug("Attaching device: " + xml);
|
||||
dm.attachDevice(xml);
|
||||
|
|
@ -3877,8 +3885,7 @@ ServerResource {
|
|||
for (; i < 5; i++) {
|
||||
try {
|
||||
Connect conn = LibvirtConnection.getConnectionByVmName(vm);
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vm
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vm);
|
||||
DomainInfo.DomainState vps = dm.getInfo().state;
|
||||
if (vps != null
|
||||
&& vps != DomainInfo.DomainState.VIR_DOMAIN_SHUTOFF
|
||||
|
|
@ -3950,19 +3957,23 @@ ServerResource {
|
|||
final HashMap<String, PowerState> vmStates = new HashMap<String, PowerState>();
|
||||
Connect conn = null;
|
||||
|
||||
if (_hypervisorType == HypervisorType.LXC) {
|
||||
try {
|
||||
conn = LibvirtConnection.getConnectionByType(HypervisorType.LXC.toString());
|
||||
vmStates.putAll(getAllVms(conn));
|
||||
} catch (LibvirtException e) {
|
||||
s_logger.debug("Failed to get connection: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (_hypervisorType == HypervisorType.KVM) {
|
||||
try {
|
||||
conn = LibvirtConnection.getConnectionByType(HypervisorType.KVM.toString());
|
||||
vmStates.putAll(getAllVms(conn));
|
||||
} catch (LibvirtException e) {
|
||||
s_logger.debug("Failed to get connection: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return vmStates;
|
||||
}
|
||||
|
|
@ -4015,8 +4026,7 @@ ServerResource {
|
|||
for (int i = 0; i < vms.length; i++) {
|
||||
try {
|
||||
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vms[i]
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vms[i]);
|
||||
|
||||
DomainInfo.DomainState ps = dm.getInfo().state;
|
||||
final PowerState state = convertToState(ps);
|
||||
|
|
@ -4121,8 +4131,7 @@ ServerResource {
|
|||
Domain dm = null;
|
||||
String msg = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
String vmDef = dm.getXMLDesc(0);
|
||||
s_logger.debug(vmDef);
|
||||
msg = stopVM(conn, vmName);
|
||||
|
|
@ -4164,8 +4173,7 @@ ServerResource {
|
|||
/* Retry 3 times, to make sure we can get the vm's status */
|
||||
for (int i = 0; i < 3; i++) {
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
state = dm.getInfo().state;
|
||||
break;
|
||||
} catch (LibvirtException e) {
|
||||
|
|
@ -4201,8 +4209,7 @@ ServerResource {
|
|||
protected String stopVM(Connect conn, String vmName, boolean force) {
|
||||
Domain dm = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
int persist = dm.isPersistent();
|
||||
if (force) {
|
||||
if (dm.isActive() == 1) {
|
||||
|
|
@ -4289,8 +4296,7 @@ ServerResource {
|
|||
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
|
||||
Domain dm = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
String xmlDesc = dm.getXMLDesc(0);
|
||||
parser.parseDomainXML(xmlDesc);
|
||||
return parser.getVncPort();
|
||||
|
|
@ -4335,8 +4341,7 @@ ServerResource {
|
|||
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
|
||||
Domain dm = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
String xmlDesc = dm.getXMLDesc(0);
|
||||
parser.parseDomainXML(xmlDesc);
|
||||
return parser.getDescription();
|
||||
|
|
@ -4434,15 +4439,14 @@ ServerResource {
|
|||
private Domain getDomain(Connect conn, String vmName)
|
||||
throws LibvirtException {
|
||||
return conn
|
||||
.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName.getBytes()));
|
||||
.domainLookupByName(vmName);
|
||||
}
|
||||
|
||||
protected List<InterfaceDef> getInterfaces(Connect conn, String vmName) {
|
||||
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
|
||||
Domain dm = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
parser.parseDomainXML(dm.getXMLDesc(0));
|
||||
return parser.getInterfaces();
|
||||
|
||||
|
|
@ -4464,8 +4468,7 @@ ServerResource {
|
|||
LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser();
|
||||
Domain dm = null;
|
||||
try {
|
||||
dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
|
||||
.getBytes()));
|
||||
dm = conn.domainLookupByName(vmName);
|
||||
parser.parseDomainXML(dm.getXMLDesc(0));
|
||||
return parser.getDisks();
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,9 @@
|
|||
package com.cloud.hypervisor.kvm.storage;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -37,6 +40,12 @@ import org.libvirt.StoragePool;
|
|||
import org.libvirt.StoragePoolInfo;
|
||||
import org.libvirt.StorageVol;
|
||||
import org.libvirt.StoragePoolInfo.StoragePoolState;
|
||||
import com.ceph.rados.Rados;
|
||||
import com.ceph.rados.RadosException;
|
||||
import com.ceph.rados.IoCTX;
|
||||
import com.ceph.rbd.Rbd;
|
||||
import com.ceph.rbd.RbdImage;
|
||||
import com.ceph.rbd.RbdException;
|
||||
|
||||
import com.cloud.agent.api.ManageSnapshotCommand;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtConnection;
|
||||
|
|
@ -63,6 +72,8 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
private String _mountPoint = "/mnt";
|
||||
private String _manageSnapshotPath;
|
||||
|
||||
private String rbdTemplateSnapName = "cloudstack-base-snap";
|
||||
|
||||
public LibvirtStorageAdaptor(StorageLayer storage) {
|
||||
_storageLayer = storage;
|
||||
_manageSnapshotPath = Script.findScript("scripts/storage/qcow2/",
|
||||
|
|
@ -638,6 +649,15 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function copies a physical disk from Secondary Storage to Primary Storage
|
||||
* or from Primary to Primary Storage
|
||||
*
|
||||
* The first time a template is deployed in Primary Storage it will be copied from
|
||||
* Secondary to Primary.
|
||||
*
|
||||
* If it has been created on Primary Storage, it will be copied on the Primary Storage
|
||||
*/
|
||||
@Override
|
||||
public KVMPhysicalDisk createDiskFromTemplate(KVMPhysicalDisk template,
|
||||
String name, PhysicalDiskFormat format, long size, KVMStoragePool destPool) {
|
||||
|
|
@ -690,21 +710,118 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
|
||||
if (srcPool.getType() != StoragePoolType.RBD) {
|
||||
srcFile = new QemuImgFile(template.getPath(), template.getFormat());
|
||||
qemu.convert(srcFile, destFile);
|
||||
} else {
|
||||
template.setFormat(PhysicalDiskFormat.RAW);
|
||||
srcFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(srcPool.getSourceHost(),
|
||||
srcPool.getSourcePort(),
|
||||
srcPool.getAuthUserName(),
|
||||
srcPool.getAuthSecret(),
|
||||
template.getPath()));
|
||||
srcFile.setFormat(template.getFormat());
|
||||
|
||||
/**
|
||||
* We have to find out if the source file is in the same RBD pool and has
|
||||
* RBD format 2 before we can do a layering/clone operation on the RBD image
|
||||
*
|
||||
* This will be the case when the template is already on Primary Storage and
|
||||
* we want to copy it
|
||||
*/
|
||||
|
||||
/* Feature 1<<0 means layering in RBD format 2 */
|
||||
int rbdFeatures = (1<<0);
|
||||
/* Order 0 means 4MB blocks (the default) */
|
||||
int rbdOrder = 0;
|
||||
|
||||
try {
|
||||
if ((srcPool.getSourceHost().equals(destPool.getSourceHost())) && (srcPool.getSourceDir().equals(destPool.getSourceDir()))) {
|
||||
/* We are on the same Ceph cluster, but we require RBD format 2 on the source image */
|
||||
s_logger.debug("Trying to perform a RBD clone (layering) since we are operating in the same storage pool");
|
||||
|
||||
Rados r = new Rados(srcPool.getAuthUserName());
|
||||
r.confSet("mon_host", srcPool.getSourceHost() + ":" + srcPool.getSourcePort());
|
||||
r.confSet("key", srcPool.getAuthSecret());
|
||||
r.connect();
|
||||
s_logger.debug("Succesfully connected to Ceph cluster at " + r.confGet("mon_host"));
|
||||
|
||||
IoCTX io = r.ioCtxCreate(srcPool.getSourceDir());
|
||||
Rbd rbd = new Rbd(io);
|
||||
RbdImage srcImage = rbd.open(template.getName());
|
||||
|
||||
if (srcImage.isOldFormat()) {
|
||||
/* The source image is RBD format 1, we have to do a regular copy */
|
||||
s_logger.debug("The source image " + srcPool.getSourceDir() + "/" + template.getName()
|
||||
+ " is RBD format 1. We have to perform a regular copy (" + template.getVirtualSize() + " bytes)");
|
||||
|
||||
rbd.create(disk.getName(), template.getVirtualSize(), rbdFeatures, rbdOrder);
|
||||
RbdImage destImage = rbd.open(disk.getName());
|
||||
|
||||
s_logger.debug("Starting to copy " + srcImage.getName() + " to " + destImage.getName() + " in Ceph pool " + srcPool.getSourceDir());
|
||||
rbd.copy(srcImage, destImage);
|
||||
|
||||
s_logger.debug("Finished copying " + srcImage.getName() + " to " + destImage.getName() + " in Ceph pool " + srcPool.getSourceDir());
|
||||
rbd.close(destImage);
|
||||
} else {
|
||||
s_logger.debug("The source image " + srcPool.getSourceDir() + "/" + template.getName()
|
||||
+ " is RBD format 2. We will perform a RBD clone using snapshot "
|
||||
+ this.rbdTemplateSnapName);
|
||||
/* The source image is format 2, we can do a RBD snapshot+clone (layering) */
|
||||
rbd.clone(template.getName(), this.rbdTemplateSnapName, io, disk.getName(), rbdFeatures, rbdOrder);
|
||||
s_logger.debug("Succesfully cloned " + template.getName() + "@" + this.rbdTemplateSnapName + " to " + disk.getName());
|
||||
}
|
||||
|
||||
rbd.close(srcImage);
|
||||
r.ioCtxDestroy(io);
|
||||
} else {
|
||||
/* The source pool or host is not the same Ceph cluster, we do a simple copy with Qemu-Img */
|
||||
s_logger.debug("Both the source and destination are RBD, but not the same Ceph cluster. Performing a copy");
|
||||
|
||||
Rados rSrc = new Rados(srcPool.getAuthUserName());
|
||||
rSrc.confSet("mon_host", srcPool.getSourceHost() + ":" + srcPool.getSourcePort());
|
||||
rSrc.confSet("key", srcPool.getAuthSecret());
|
||||
rSrc.connect();
|
||||
s_logger.debug("Succesfully connected to source Ceph cluster at " + rSrc.confGet("mon_host"));
|
||||
|
||||
Rados rDest = new Rados(destPool.getAuthUserName());
|
||||
rDest.confSet("mon_host", destPool.getSourceHost() + ":" + destPool.getSourcePort());
|
||||
rDest.confSet("key", destPool.getAuthSecret());
|
||||
rDest.connect();
|
||||
s_logger.debug("Succesfully connected to source Ceph cluster at " + rDest.confGet("mon_host"));
|
||||
|
||||
IoCTX sIO = rSrc.ioCtxCreate(srcPool.getSourceDir());
|
||||
Rbd sRbd = new Rbd(sIO);
|
||||
|
||||
IoCTX dIO = rDest.ioCtxCreate(destPool.getSourceDir());
|
||||
Rbd dRbd = new Rbd(dIO);
|
||||
|
||||
s_logger.debug("Creating " + disk.getName() + " on the destination cluster " + rDest.confGet("mon_host")
|
||||
+ " in pool " + destPool.getSourceDir());
|
||||
dRbd.create(disk.getName(), template.getVirtualSize(), rbdFeatures, rbdOrder);
|
||||
|
||||
RbdImage srcImage = sRbd.open(template.getName());
|
||||
RbdImage destImage = dRbd.open(disk.getName());
|
||||
|
||||
s_logger.debug("Copying " + template.getName() + " from Ceph cluster " + rSrc.confGet("mon_host") + " to " + disk.getName()
|
||||
+ " on cluster " + rDest.confGet("mon_host"));
|
||||
sRbd.copy(srcImage, destImage);
|
||||
|
||||
sRbd.close(srcImage);
|
||||
dRbd.close(destImage);
|
||||
|
||||
rSrc.ioCtxDestroy(sIO);
|
||||
rDest.ioCtxDestroy(dIO);
|
||||
}
|
||||
} catch (RadosException e) {
|
||||
s_logger.error("Failed to perform a RADOS action on the Ceph cluster, the error was: " + e.getMessage());
|
||||
disk = null;
|
||||
} catch (RbdException e) {
|
||||
s_logger.error("Failed to perform a RBD action on the Ceph cluster, the error was: " + e.getMessage());
|
||||
disk = null;
|
||||
}
|
||||
}
|
||||
qemu.convert(srcFile, destFile);
|
||||
}
|
||||
} catch (QemuImgException e) {
|
||||
s_logger.error("Failed to create " + disk.getPath() +
|
||||
" due to a failed executing of qemu-img: " + e.getMessage());
|
||||
}
|
||||
|
||||
if (disk == null) {
|
||||
throw new CloudRuntimeException("Failed to create " + disk.getPath() + " from template " + template.getName());
|
||||
}
|
||||
|
||||
return disk;
|
||||
}
|
||||
|
||||
|
|
@ -733,17 +850,26 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This copies a volume from Primary Storage to Secondary Storage
|
||||
*
|
||||
* In theory it could also do it the other way around, but the current implementation
|
||||
* in ManagementServerImpl shows that the destPool is always a Secondary Storage Pool
|
||||
*/
|
||||
@Override
|
||||
public KVMPhysicalDisk copyPhysicalDisk(KVMPhysicalDisk disk, String name,
|
||||
KVMStoragePool destPool) {
|
||||
|
||||
/*
|
||||
/**
|
||||
With RBD you can't run qemu-img convert with an existing RBD image as destination
|
||||
qemu-img will exit with the error that the destination already exists.
|
||||
So for RBD we don't create the image, but let qemu-img do that for us.
|
||||
|
||||
We then create a KVMPhysicalDisk object that we can return
|
||||
*/
|
||||
|
||||
It is however very unlikely that the destPool will be RBD, since it isn't supported
|
||||
for Secondary Storage
|
||||
*/
|
||||
|
||||
KVMPhysicalDisk newDisk;
|
||||
if (destPool.getType() != StoragePoolType.RBD) {
|
||||
|
|
@ -785,21 +911,103 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
Script.runSimpleBashScript("cp -f " + sourcePath + " " + destPath);
|
||||
} else {
|
||||
destFile = new QemuImgFile(destPath, destFormat);
|
||||
try {
|
||||
qemu.convert(srcFile, destFile);
|
||||
} catch (QemuImgException e) {
|
||||
s_logger.error("Failed to convert " + srcFile.getFileName() + " to "
|
||||
+ destFile.getFileName() + " the error was: " + e.getMessage());
|
||||
newDisk = null;
|
||||
}
|
||||
}
|
||||
} catch (QemuImgException e) {
|
||||
s_logger.error("Failed to fetch the information of file "
|
||||
+ srcFile.getFileName() + " the error was: " + e.getMessage());
|
||||
newDisk = null;
|
||||
}
|
||||
}
|
||||
} else if ((srcPool.getType() != StoragePoolType.RBD) && (destPool.getType() == StoragePoolType.RBD)) {
|
||||
srcFile = new QemuImgFile(sourcePath, sourceFormat);
|
||||
destFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(destPool.getSourceHost(),
|
||||
destPool.getSourcePort(),
|
||||
destPool.getAuthUserName(),
|
||||
destPool.getAuthSecret(),
|
||||
destPath));
|
||||
destFile.setFormat(destFormat);
|
||||
/**
|
||||
* Qemu doesn't support writing to RBD format 2 directly, so we have to write to a temporary RAW file first
|
||||
* which we then convert to RBD format 2.
|
||||
*
|
||||
* A HUGE performance gain can be achieved here if QCOW2 -> RBD format 2 can be done in one step
|
||||
*/
|
||||
s_logger.debug("The source image is not RBD, but the destination is. We will convert into RBD format 2");
|
||||
String tmpFile = "/tmp/" + name;
|
||||
int rbdFeatures = (1<<0);
|
||||
int rbdOrder = 0;
|
||||
|
||||
try {
|
||||
srcFile = new QemuImgFile(sourcePath, sourceFormat);
|
||||
destFile = new QemuImgFile(tmpFile);
|
||||
s_logger.debug("Converting " + srcFile.getFileName() + " to " + tmpFile + " as a temporary file for RBD conversion");
|
||||
qemu.convert(srcFile, destFile);
|
||||
|
||||
// We now convert the temporary file to a RBD image with format 2
|
||||
Rados r = new Rados(destPool.getAuthUserName());
|
||||
r.confSet("mon_host", destPool.getSourceHost() + ":" + destPool.getSourcePort());
|
||||
r.confSet("key", destPool.getAuthSecret());
|
||||
r.connect();
|
||||
s_logger.debug("Succesfully connected to Ceph cluster at " + r.confGet("mon_host"));
|
||||
|
||||
IoCTX io = r.ioCtxCreate(destPool.getSourceDir());
|
||||
Rbd rbd = new Rbd(io);
|
||||
|
||||
s_logger.debug("Creating RBD image " + name + " in Ceph pool " + destPool.getSourceDir() + " with RBD format 2");
|
||||
rbd.create(name, disk.getVirtualSize(), rbdFeatures, rbdOrder);
|
||||
|
||||
RbdImage image = rbd.open(name);
|
||||
|
||||
// We now read the temporary file and write it to the RBD image
|
||||
File fh = new File(tmpFile);
|
||||
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fh));
|
||||
|
||||
int chunkSize = 4194304;
|
||||
long offset = 0;
|
||||
s_logger.debug("Reading temporary file " + tmpFile + " (" + fh.length() + " bytes) into RBD image " + name + " in chunks of " + chunkSize + " bytes");
|
||||
while(true) {
|
||||
byte[] buf = new byte[chunkSize];
|
||||
|
||||
int bytes = bis.read(buf);
|
||||
if (bytes <= 0) {
|
||||
break;
|
||||
}
|
||||
image.write(buf, offset, bytes);
|
||||
offset += bytes;
|
||||
}
|
||||
s_logger.debug("Completed writing " + tmpFile + " to RBD image " + name + ". Bytes written: " + offset);
|
||||
bis.close();
|
||||
s_logger.debug("Removing temporary file " + tmpFile);
|
||||
fh.delete();
|
||||
|
||||
/* Snapshot the image and protect that snapshot so we can clone (layer) from it */
|
||||
s_logger.debug("Creating RBD snapshot " + this.rbdTemplateSnapName + " on image " + name);
|
||||
image.snapCreate(this.rbdTemplateSnapName);
|
||||
s_logger.debug("Protecting RBD snapshot " + this.rbdTemplateSnapName + " on image " + name);
|
||||
image.snapProtect(this.rbdTemplateSnapName);
|
||||
|
||||
rbd.close(image);
|
||||
r.ioCtxDestroy(io);
|
||||
} catch (QemuImgException e) {
|
||||
s_logger.error("Failed to do a temp convert from " + srcFile.getFileName() + " to "
|
||||
+ destFile.getFileName() + " the error was: " + e.getMessage());
|
||||
newDisk = null;
|
||||
} catch (RadosException e) {
|
||||
s_logger.error("A Ceph RADOS operation failed (" + e.getReturnValue() + "). The error was: " + e.getMessage());
|
||||
newDisk = null;
|
||||
} catch (RbdException e) {
|
||||
s_logger.error("A Ceph RBD operation failed (" + e.getReturnValue() + "). The error was: " + e.getMessage());
|
||||
newDisk = null;
|
||||
} catch (IOException e) {
|
||||
s_logger.error("Failed reading the temporary file during the conversion to RBD: " + e.getMessage());
|
||||
newDisk = null;
|
||||
}
|
||||
|
||||
} else {
|
||||
/**
|
||||
We let Qemu-Img do the work here. Although we could work with librbd and have that do the cloning
|
||||
it doesn't benefit us. It's better to keep the current code in place which works
|
||||
*/
|
||||
srcFile = new QemuImgFile(KVMPhysicalDisk.RBDStringBuilder(srcPool.getSourceHost(),
|
||||
srcPool.getSourcePort(),
|
||||
srcPool.getAuthUserName(),
|
||||
|
|
@ -812,17 +1020,19 @@ public class LibvirtStorageAdaptor implements StorageAdaptor {
|
|||
destPool.getAuthSecret(),
|
||||
destPath));
|
||||
destFile.setFormat(destFormat);
|
||||
}
|
||||
|
||||
if (srcFile != null && destFile != null) {
|
||||
try {
|
||||
qemu.convert(srcFile, destFile);
|
||||
} catch (QemuImgException e) {
|
||||
s_logger.error("Failed to convert " + srcFile.getFileName() + " to "
|
||||
+ destFile.getFileName() + " the error was: " + e.getMessage());
|
||||
newDisk = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (newDisk == null) {
|
||||
throw new CloudRuntimeException("Failed to copy " + disk.getPath() + " to " + name);
|
||||
}
|
||||
|
||||
return newDisk;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ public class LibvirtComputingResourceTest {
|
|||
LibvirtComputingResource lcr = new LibvirtComputingResource();
|
||||
VirtualMachineTO to = new VirtualMachineTO(id, name, VirtualMachine.Type.User, cpus, speed, minRam, maxRam, BootloaderType.HVM, os, false, false, vncPassword);
|
||||
to.setVncAddr(vncAddr);
|
||||
to.setUuid("b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9");
|
||||
|
||||
LibvirtVMDef vm = lcr.createVMFromSpec(to);
|
||||
vm.setHvsType(_hyperVisorType);
|
||||
|
|
@ -135,6 +136,7 @@ public class LibvirtComputingResourceTest {
|
|||
LibvirtComputingResource lcr = new LibvirtComputingResource();
|
||||
VirtualMachineTO to = new VirtualMachineTO(id, name, VirtualMachine.Type.User, cpus, minSpeed, maxSpeed, minRam, maxRam, BootloaderType.HVM, os, false, false, vncPassword);
|
||||
to.setVncAddr(vncAddr);
|
||||
to.setUuid("b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9");
|
||||
|
||||
LibvirtVMDef vm = lcr.createVMFromSpec(to);
|
||||
vm.setHvsType(_hyperVisorType);
|
||||
|
|
@ -181,4 +183,4 @@ public class LibvirtComputingResourceTest {
|
|||
|
||||
assertEquals(vmStr, vm.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -491,6 +491,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
|
|||
hyperHost, volumeId,
|
||||
new DatastoreMO(context, morDatastore),
|
||||
secondaryStorageURL, volumePath);
|
||||
deleteVolumeDirOnSecondaryStorage(volumeId, secondaryStorageURL);
|
||||
}
|
||||
return new CopyVolumeAnswer(cmd, true, null, result.first(), result.second());
|
||||
} catch (Throwable e) {
|
||||
|
|
@ -1438,4 +1439,22 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
|
|||
workingVM = hyperHost.findVmOnHyperHost(uniqueName);
|
||||
return workingVM;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private String deleteVolumeDirOnSecondaryStorage(long volumeId, String secStorageUrl) throws Exception {
|
||||
String secondaryMountPoint = _mountService.getMountPoint(secStorageUrl);
|
||||
String volumeMountRoot = secondaryMountPoint + "/" + getVolumeRelativeDirInSecStroage(volumeId);
|
||||
|
||||
return deleteDir(volumeMountRoot);
|
||||
}
|
||||
|
||||
private String deleteDir(String dir) {
|
||||
synchronized(dir.intern()) {
|
||||
Script command = new Script(false, "rm", _timeout, s_logger);
|
||||
command.add("-rf");
|
||||
command.add(dir);
|
||||
return command.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1528,7 +1528,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
|||
snatArgs += "eth" + ethDeviceNum;
|
||||
|
||||
Pair<Boolean, String> result_gateway = SshHelper.sshExecute(routerIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null,
|
||||
"/opt/cloud/bin/vpc_privateGateway.sh " + args);
|
||||
"/opt/cloud/bin/vpc_privateGateway.sh " + snatArgs);
|
||||
|
||||
if (!result_gateway.first()) {
|
||||
throw new InternalErrorException("Unable to configure source NAT for public IP address.");
|
||||
|
|
|
|||
|
|
@ -17,17 +17,6 @@
|
|||
|
||||
package com.cloud.hypervisor.xen.resource;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.ejb.Local;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.xmlrpc.XmlRpcException;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.NetworkUsageAnswer;
|
||||
|
|
@ -46,14 +35,24 @@ import com.cloud.utils.script.Script;
|
|||
import com.cloud.vm.VirtualMachine;
|
||||
import com.xensource.xenapi.Connection;
|
||||
import com.xensource.xenapi.Types;
|
||||
import com.xensource.xenapi.Types.XenAPIException;
|
||||
import com.xensource.xenapi.VBD;
|
||||
import com.xensource.xenapi.VDI;
|
||||
import com.xensource.xenapi.VM;
|
||||
import com.xensource.xenapi.Types.XenAPIException;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.xmlrpc.XmlRpcException;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Local(value=ServerResource.class)
|
||||
public class XcpOssResource extends CitrixResourceBase {
|
||||
private final static Logger s_logger = Logger.getLogger(XcpServerResource.class);
|
||||
private final static Logger s_logger = Logger.getLogger(XcpOssResource.class);
|
||||
private static final long mem_32m = 33554432L;
|
||||
|
||||
@Override
|
||||
protected List<File> getPatchFiles() {
|
||||
List<File> files = new ArrayList<File>();
|
||||
|
|
@ -167,4 +166,9 @@ public class XcpOssResource extends CitrixResourceBase {
|
|||
}
|
||||
return answer;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setMemory(Connection conn, VM vm, long minMemsize, long maxMemsize) throws XmlRpcException, XenAPIException {
|
||||
vm.setMemoryLimits(conn, mem_32m, maxMemsize, minMemsize, maxMemsize);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ public class XenServer56FP1Resource extends XenServer56Resource {
|
|||
vmr.actionsAfterCrash = Types.OnCrashBehaviour.DESTROY;
|
||||
vmr.actionsAfterShutdown = Types.OnNormalExit.DESTROY;
|
||||
|
||||
if (isDmcEnabled(conn, host)) {
|
||||
if (isDmcEnabled(conn, host) && vmSpec.isEnableDynamicallyScaleVm()) {
|
||||
//scaling is allowed
|
||||
vmr.memoryStaticMin = mem_128m; //128MB
|
||||
//TODO: Remove hardcoded 8GB and assign proportionate to ServiceOffering and mem overcommit ratio
|
||||
|
|
|
|||
|
|
@ -98,6 +98,8 @@ import com.cloud.network.cisco.NetworkAsa1000vMapVO;
|
|||
import com.cloud.network.dao.CiscoAsa1000vDao;
|
||||
import com.cloud.network.dao.CiscoNexusVSMDeviceDao;
|
||||
import com.cloud.network.dao.CiscoVnmcDao;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.IPAddressVO;
|
||||
import com.cloud.network.dao.NetworkAsa1000vMapDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
|
|
@ -149,6 +151,8 @@ public class CiscoVnmcElement extends AdapterBase implements SourceNatServicePro
|
|||
@Inject
|
||||
PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao;
|
||||
@Inject
|
||||
IPAddressDao _ipAddressDao;
|
||||
@Inject
|
||||
HostDetailsDao _hostDetailsDao;
|
||||
@Inject
|
||||
HostDao _hostDao;
|
||||
|
|
@ -342,8 +346,18 @@ public class CiscoVnmcElement extends AdapterBase implements SourceNatServicePro
|
|||
}
|
||||
|
||||
// due to VNMC limitation of not allowing source NAT ip as the outside ip of firewall,
|
||||
// an additional public ip needs to acquired for assigning as firewall outside ip
|
||||
// an additional public ip needs to acquired for assigning as firewall outside ip.
|
||||
// In case there are already additional ip addresses available (network restart) use one
|
||||
// of them such that it is not the source NAT ip
|
||||
IpAddress outsideIp = null;
|
||||
List<IPAddressVO> publicIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null);
|
||||
for (IPAddressVO ip : publicIps) {
|
||||
if (!ip.isSourceNat()) {
|
||||
outsideIp = ip;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (outsideIp == null) { // none available, acquire one
|
||||
try {
|
||||
Account caller = UserContext.current().getCaller();
|
||||
long callerUserId = UserContext.current().getCallerUserId();
|
||||
|
|
@ -359,6 +373,7 @@ public class CiscoVnmcElement extends AdapterBase implements SourceNatServicePro
|
|||
s_logger.error("Unable to assign allocated additional public Ip " + outsideIp.getAddress().addr() + " to network with vlan " + vlanId + ". Exception details " + e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// create logical edge firewall in VNMC
|
||||
String gatewayNetmask = NetUtils.getCidrNetmask(network.getCidr());
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, Junip
|
|||
// Set capabilities for Firewall service
|
||||
Map<Capability, String> firewallCapabilities = new HashMap<Capability, String>();
|
||||
firewallCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp");
|
||||
firewallCapabilities.put(Capability.SupportedEgressProtocols, "tcp,udp,icmp,all");
|
||||
firewallCapabilities.put(Capability.MultipleIps, "true");
|
||||
firewallCapabilities.put(Capability.TrafficStatistics, "per public ip");
|
||||
firewallCapabilities.put(Capability.SupportedTrafficDirection, "ingress, egress");
|
||||
|
|
|
|||
|
|
@ -750,7 +750,7 @@ public class JuniperSrxResource implements ServerResource {
|
|||
s_logger.debug(msg);
|
||||
}
|
||||
|
||||
private void shutdownGuestNetwork(GuestNetworkType type, long accountId, Long publicVlanTag, String sourceNatIpAddress, long privateVlanTag, String privateGateway, String privateSubnet, long privateCidrSize) throws ExecutionException {
|
||||
private void shutdownGuestNetwork(GuestNetworkType type, long accountId, Long publicVlanTag, String sourceNatIpAddress, long privateVlanTag, String privateGateway, String privateSubnet, long privateCidrSize) throws ExecutionException {
|
||||
// Remove static and destination NAT rules for the guest network
|
||||
removeStaticAndDestNatRulesInPrivateVlan(privateVlanTag, privateGateway, privateCidrSize);
|
||||
|
||||
|
|
@ -766,10 +766,10 @@ public class JuniperSrxResource implements ServerResource {
|
|||
manageSourceNatPool(SrxCommand.DELETE, sourceNatIpAddress);
|
||||
manageProxyArp(SrxCommand.DELETE, publicVlanTag, sourceNatIpAddress);
|
||||
manageUsageFilter(SrxCommand.DELETE, _usageFilterIPOutput, privateSubnet, null, genIpFilterTermName(sourceNatIpAddress));
|
||||
manageUsageFilter(SrxCommand.DELETE, _usageFilterIPInput, sourceNatIpAddress, null, genIpFilterTermName(sourceNatIpAddress));
|
||||
manageUsageFilter(SrxCommand.DELETE, _usageFilterIPInput, sourceNatIpAddress, null, genIpFilterTermName(sourceNatIpAddress));
|
||||
} else if (type.equals(GuestNetworkType.INTERFACE_NAT)) {
|
||||
manageUsageFilter(SrxCommand.DELETE, _usageFilterVlanOutput, null, privateVlanTag, null);
|
||||
manageUsageFilter(SrxCommand.DELETE, _usageFilterVlanInput, null, privateVlanTag, null);
|
||||
manageUsageFilter(SrxCommand.DELETE, _usageFilterVlanInput, null, privateVlanTag, null);
|
||||
}
|
||||
|
||||
String msg = "Shut down guest network with type " + type +". Guest VLAN tag: " + privateVlanTag + ", guest gateway: " + privateGateway;
|
||||
|
|
@ -841,21 +841,24 @@ public class JuniperSrxResource implements ServerResource {
|
|||
commitConfiguration();
|
||||
} else {
|
||||
for (FirewallRuleTO rule : rules) {
|
||||
int startPort = 0, endPort = 0;
|
||||
int startPort = NetUtils.PORT_RANGE_MIN, endPort = NetUtils.PORT_RANGE_MAX;
|
||||
if (rule.getSrcPortRange() != null) {
|
||||
startPort = rule.getSrcPortRange()[0];
|
||||
endPort = rule.getSrcPortRange()[1];
|
||||
FirewallFilterTerm term = new FirewallFilterTerm(genIpIdentifier(rule.getSrcIp()) + "-" + String.valueOf(rule.getId()), rule.getSourceCidrList(),
|
||||
rule.getSrcIp(), rule.getProtocol(), startPort, endPort,
|
||||
rule.getIcmpType(), rule.getIcmpCode(), genIpIdentifier(rule.getSrcIp()) + _usageFilterIPInput.getCounterIdentifier());
|
||||
if (!rule.revoked()) {
|
||||
manageFirewallFilter(SrxCommand.ADD, term, _publicZoneInputFilterName);
|
||||
} else {
|
||||
manageFirewallFilter(SrxCommand.DELETE, term, _publicZoneInputFilterName);
|
||||
}
|
||||
}
|
||||
commitConfiguration();
|
||||
|
||||
FirewallFilterTerm term = new FirewallFilterTerm(genIpIdentifier(rule.getSrcIp()) + "-" + String.valueOf(rule.getId()), rule.getSourceCidrList(),
|
||||
rule.getSrcIp(), rule.getProtocol(), startPort, endPort,
|
||||
rule.getIcmpType(), rule.getIcmpCode(), genIpIdentifier(rule.getSrcIp()) + _usageFilterIPInput.getCounterIdentifier());
|
||||
if (!rule.revoked()) {
|
||||
manageProxyArp(SrxCommand.ADD, getVlanTag(rule.getSrcVlanTag()), rule.getSrcIp());
|
||||
manageFirewallFilter(SrxCommand.ADD, term, _publicZoneInputFilterName);
|
||||
} else {
|
||||
manageFirewallFilter(SrxCommand.DELETE, term, _publicZoneInputFilterName);
|
||||
manageProxyArp(SrxCommand.DELETE, getVlanTag(rule.getSrcVlanTag()), rule.getSrcIp());
|
||||
}
|
||||
}
|
||||
commitConfiguration();
|
||||
}
|
||||
|
||||
return new Answer(cmd);
|
||||
|
|
@ -925,7 +928,6 @@ public class JuniperSrxResource implements ServerResource {
|
|||
}
|
||||
|
||||
private void addStaticNatRule(Long publicVlanTag, String publicIp, String privateIp, List<FirewallRuleTO> rules) throws ExecutionException {
|
||||
manageProxyArp(SrxCommand.ADD, publicVlanTag, publicIp);
|
||||
manageStaticNatRule(SrxCommand.ADD, publicIp, privateIp);
|
||||
manageAddressBookEntry(SrxCommand.ADD, _privateZone, privateIp, null);
|
||||
|
||||
|
|
@ -937,7 +939,6 @@ public class JuniperSrxResource implements ServerResource {
|
|||
|
||||
private void removeStaticNatRule(Long publicVlanTag, String publicIp, String privateIp) throws ExecutionException {
|
||||
manageStaticNatRule(SrxCommand.DELETE, publicIp, privateIp);
|
||||
manageProxyArp(SrxCommand.DELETE, publicVlanTag, publicIp);
|
||||
|
||||
// Remove any existing security policy and clean up applications
|
||||
removeSecurityPolicyAndApplications(SecurityPolicyType.STATIC_NAT, privateIp);
|
||||
|
|
@ -1196,8 +1197,7 @@ public class JuniperSrxResource implements ServerResource {
|
|||
}
|
||||
|
||||
private void addDestinationNatRule(Protocol protocol, Long publicVlanTag, String publicIp, String privateIp, int srcPortStart, int srcPortEnd, int destPortStart, int destPortEnd) throws ExecutionException {
|
||||
manageProxyArp(SrxCommand.ADD, publicVlanTag, publicIp);
|
||||
|
||||
|
||||
int offset = 0;
|
||||
for (int srcPort = srcPortStart; srcPort <= srcPortEnd; srcPort++) {
|
||||
int destPort = destPortStart + offset;
|
||||
|
|
@ -1220,7 +1220,6 @@ public class JuniperSrxResource implements ServerResource {
|
|||
private void removeDestinationNatRule(Long publicVlanTag, String publicIp, String privateIp, int srcPort, int destPort) throws ExecutionException {
|
||||
manageDestinationNatRule(SrxCommand.DELETE, publicIp, privateIp, srcPort, destPort);
|
||||
manageDestinationNatPool(SrxCommand.DELETE, privateIp, destPort);
|
||||
manageProxyArp(SrxCommand.DELETE, publicVlanTag, publicIp);
|
||||
|
||||
removeSecurityPolicyAndApplications(SecurityPolicyType.DESTINATION_NAT, privateIp);
|
||||
|
||||
|
|
|
|||
1
pom.xml
1
pom.xml
|
|
@ -83,6 +83,7 @@
|
|||
<cs.java-ipv6.version>0.10</cs.java-ipv6.version>
|
||||
<cs.replace.properties>build/replace.properties</cs.replace.properties>
|
||||
<cs.libvirt-java.version>0.4.9</cs.libvirt-java.version>
|
||||
<cs.rados-java.version>0.1.1</cs.rados-java.version>
|
||||
<cs.target.dir>target</cs.target.dir>
|
||||
<cs.daemon.version>1.0.10</cs.daemon.version>
|
||||
</properties>
|
||||
|
|
|
|||
|
|
@ -40,3 +40,5 @@ class globalEnv:
|
|||
self.privateNet = "cloudbr0"
|
||||
#distribution
|
||||
self.distribution = None
|
||||
# bridgeType
|
||||
self.bridgeType = "native"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from cloudException import CloudRuntimeException, CloudInternalException
|
|||
import logging
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
class networkConfig:
|
||||
class devInfo:
|
||||
|
|
@ -85,15 +86,22 @@ class networkConfig:
|
|||
|
||||
@staticmethod
|
||||
def isNetworkDev(devName):
|
||||
return os.path.exists("/sys/class/net/%s"%devName)
|
||||
return os.path.exists("/sys/class/net/%s" % devName)
|
||||
|
||||
@staticmethod
|
||||
def isBridgePort(devName):
|
||||
return os.path.exists("/sys/class/net/%s/brport"%devName)
|
||||
return os.path.exists("/sys/class/net/%s/brport" % devName)
|
||||
|
||||
@staticmethod
|
||||
def isBridge(devName):
|
||||
return os.path.exists("/sys/class/net/%s/bridge"%devName)
|
||||
return os.path.exists("/sys/class/net/%s/bridge" % devName)
|
||||
|
||||
@staticmethod
|
||||
def isOvsBridge(devName):
|
||||
try:
|
||||
return 0==subprocess.check_call(("ovs-vsctl", "br-exists", devName))
|
||||
except subprocess.CalledProcessError:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def getBridge(devName):
|
||||
|
|
|
|||
|
|
@ -94,8 +94,10 @@ class networkConfigBase:
|
|||
if not self.netcfg.isNetworkDev(br):
|
||||
logging.debug("%s is not a network device, is it down?"%br)
|
||||
return False
|
||||
if not self.netcfg.isBridge(br):
|
||||
raise CloudInternalException("%s is not a bridge"%br)
|
||||
if self.syscfg.env.bridgeType == "openvswitch" and not self.netcfg.isOvsBridge(br):
|
||||
raise CloudInternalException("%s is not an openvswitch bridge" % br)
|
||||
if self.syscfg.env.bridgeType == "native" and not self.netcfg.isBridge(br):
|
||||
raise CloudInternalException("%s is not a bridge" % br)
|
||||
preCfged = True
|
||||
|
||||
return preCfged
|
||||
|
|
@ -153,11 +155,28 @@ class networkConfigUbuntu(serviceCfgBase, networkConfigBase):
|
|||
match = re.match("^ *iface %s.*"%dev.name, line)
|
||||
if match is not None:
|
||||
dev.method = self.getNetworkMethod(match.group(0))
|
||||
bridgeCfg = "\niface %s inet manual\n \
|
||||
auto %s\n \
|
||||
iface %s inet %s\n \
|
||||
bridge_ports %s\n"%(dev.name, br, br, dev.method, dev.name)
|
||||
cfo = configFileOps(self.netCfgFile, self)
|
||||
if self.syscfg.env.bridgeType == "openvswitch":
|
||||
bridgeCfg = "\n".join(("",
|
||||
"iface {device} inet manual",
|
||||
" ovs_type OVSPort",
|
||||
" ovs_bridge {bridge}",
|
||||
"",
|
||||
"auto {bridge}",
|
||||
"allow-ovs {bridge}",
|
||||
"iface {bridge} inet {device_method}",
|
||||
" ovs_type OVSBridge",
|
||||
" ovs_ports {device}",
|
||||
"")).format(bridge=br, device=dev.name, device_method=dev.method)
|
||||
cfo.replace_line("^ *auto %s.*" % dev.name,
|
||||
"allow-{bridge} {device}".format(bridge=br, device=dev.name))
|
||||
elif self.syscfg.env.bridgeType == "native":
|
||||
bridgeCfg = "\niface %s inet manual\n \
|
||||
auto %s\n \
|
||||
iface %s inet %s\n \
|
||||
bridge_ports %s\n"%(dev.name, br, br, dev.method, dev.name)
|
||||
else:
|
||||
raise CloudInternalException("Unknown network.bridge.type %s" % self.syscfg.env.bridgeType)
|
||||
cfo.replace_line("^ *iface %s.*"%dev.name, bridgeCfg)
|
||||
|
||||
def addDev(self, br, dev):
|
||||
|
|
@ -193,8 +212,9 @@ class networkConfigUbuntu(serviceCfgBase, networkConfigBase):
|
|||
self.syscfg.svo.stopService("network-manager")
|
||||
self.syscfg.svo.disableService("network-manager")
|
||||
|
||||
if not bash("ifup %s"%self.brName).isSuccess():
|
||||
raise CloudInternalException("Can't start network:%s"%self.brName, bash.getErrMsg(self))
|
||||
ifup_op = bash("ifup %s"%self.brName)
|
||||
if not ifup_op.isSuccess():
|
||||
raise CloudInternalException("Can't start network:%s %s" % (self.brName, ifup_op.getErrMsg()))
|
||||
|
||||
self.syscfg.env.nics.append(self.brName)
|
||||
self.syscfg.env.nics.append(self.brName)
|
||||
|
|
@ -222,8 +242,8 @@ class networkConfigRedhat(serviceCfgBase, networkConfigBase):
|
|||
networkConfigBase.__init__(self, syscfg)
|
||||
|
||||
def writeToCfgFile(self, brName, dev):
|
||||
self.devCfgFile = "/etc/sysconfig/network-scripts/ifcfg-%s"%dev.name
|
||||
self.brCfgFile = "/etc/sysconfig/network-scripts/ifcfg-%s"%brName
|
||||
self.devCfgFile = "/etc/sysconfig/network-scripts/ifcfg-%s" % dev.name
|
||||
self.brCfgFile = "/etc/sysconfig/network-scripts/ifcfg-%s" % brName
|
||||
|
||||
isDevExist = os.path.exists(self.devCfgFile)
|
||||
isBrExist = os.path.exists(self.brCfgFile)
|
||||
|
|
@ -241,7 +261,7 @@ class networkConfigRedhat(serviceCfgBase, networkConfigBase):
|
|||
|
||||
|
||||
def addBridge(self, brName, dev):
|
||||
bash("ifdown %s"%dev.name)
|
||||
bash("ifdown %s" % dev.name)
|
||||
|
||||
if not os.path.exists(self.brCfgFile):
|
||||
shutil.copy(self.devCfgFile, self.brCfgFile)
|
||||
|
|
@ -250,14 +270,34 @@ class networkConfigRedhat(serviceCfgBase, networkConfigBase):
|
|||
cfo = configFileOps(self.devCfgFile, self)
|
||||
cfo.addEntry("NM_CONTROLLED", "no")
|
||||
cfo.addEntry("ONBOOT", "yes")
|
||||
cfo.addEntry("BRIDGE", brName)
|
||||
if self.syscfg.env.bridgeType == "openvswitch":
|
||||
if cfo.getEntry("IPADDR"):
|
||||
cfo.rmEntry("IPADDR", cfo.getEntry("IPADDR"))
|
||||
cfo.addEntry("DEVICETYPE", "ovs")
|
||||
cfo.addEntry("TYPE", "OVSPort")
|
||||
cfo.addEntry("OVS_BRIDGE", brName)
|
||||
elif self.syscfg.env.bridgeType == "native":
|
||||
cfo.addEntry("BRIDGE", brName)
|
||||
else:
|
||||
raise CloudInternalException("Unknown network.bridge.type %s" % self.syscfg.env.bridgeType)
|
||||
cfo.save()
|
||||
|
||||
cfo = configFileOps(self.brCfgFile, self)
|
||||
cfo.addEntry("NM_CONTROLLED", "no")
|
||||
cfo.addEntry("ONBOOT", "yes")
|
||||
cfo.addEntry("DEVICE", brName)
|
||||
cfo.addEntry("TYPE", "Bridge")
|
||||
if self.syscfg.env.bridgeType == "openvswitch":
|
||||
if cfo.getEntry("HWADDR"):
|
||||
cfo.rmEntry("HWADDR", cfo.getEntry("HWADDR"))
|
||||
if cfo.getEntry("UUID"):
|
||||
cfo.rmEntry("UUID", cfo.getEntry("UUID"))
|
||||
cfo.addEntry("STP", "yes")
|
||||
cfo.addEntry("DEVICETYPE", "ovs")
|
||||
cfo.addEntry("TYPE", "OVSBridge")
|
||||
elif self.syscfg.env.bridgeType == "native":
|
||||
cfo.addEntry("TYPE", "Bridge")
|
||||
else:
|
||||
raise CloudInternalException("Unknown network.bridge.type %s" % self.syscfg.env.bridgeType)
|
||||
cfo.save()
|
||||
|
||||
def config(self):
|
||||
|
|
|
|||
|
|
@ -1,269 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
# $Id: modifyvlan.sh 9132 2010-06-04 20:17:43Z manuel $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/qcow2/modifyvlan.sh $
|
||||
# modifyvlan.sh -- adds and deletes VLANs from a Routing Server
|
||||
# set -x
|
||||
|
||||
usage() {
|
||||
printf "Usage: %s: -o <op> -v <vlan id> -g <vlan gateway> \n"
|
||||
}
|
||||
|
||||
addVlan() {
|
||||
local vlanId=$1
|
||||
|
||||
ifconfig bond1.$vlanId > /dev/null
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
vconfig add bond1 $vlanId
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make ifcfg-bond1.$vlanId
|
||||
rm /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
touch /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
echo "DEVICE=bond1.$vlanId" >> /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
echo "VLAN=yes" >> /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
echo "BRIDGE=xenbr1.$vlanId" >> /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
|
||||
# Try to add xenbr1.$vlanId over bond1.$vlanId, if it does not already exist
|
||||
|
||||
ifconfig xenbr1.$vlanId > /dev/null
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
brctl addbr xenbr1.$vlanId
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
brctl addif xenbr1.$vlanId bond1.$vlanId
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
ifconfig xenbr1.$vlanId up
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Make ifcfg-xenbr1.$vlanId
|
||||
rm /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
touch /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
echo "TYPE=bridge" >> /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
echo "DEVICE=xenbr1.$vlanId" >> /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
deleteVlan() {
|
||||
local vlanId=$1
|
||||
|
||||
# Try to remove xenbr1.$vlanId
|
||||
ifconfig xenbr1.$vlanId down
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
brctl delbr xenbr1.$vlanId
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Remove ifcfg-xenbr1.$vlanId
|
||||
rm /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId
|
||||
|
||||
# Try to remove bond1.$vlanId
|
||||
|
||||
vconfig rem bond1.$vlanId
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Remove ifcfg-bond1.$vlanId
|
||||
rm /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId
|
||||
|
||||
return 0
|
||||
|
||||
}
|
||||
|
||||
checkIfVlanExists() {
|
||||
local vlanId=$1
|
||||
|
||||
if [ "$vlanId" == "untagged" ]
|
||||
then
|
||||
# This VLAN should always exist, since the bridge is xenbr1, which is created during vsetup
|
||||
return 0
|
||||
fi
|
||||
|
||||
ifconfig bond1.$vlanId > /dev/null
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
ifconfig xenbr1.$vlanId > /dev/null
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ ! -f /etc/sysconfig/network-scripts/ifcfg-xenbr1.$vlanId ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ ! -f /etc/sysconfig/network-scripts/ifcfg-bond1.$vlanId ]
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
arpingVlan() {
|
||||
local vlanId=$1
|
||||
local vlanGateway=$2
|
||||
|
||||
# Change!!!
|
||||
return 0
|
||||
|
||||
success=1
|
||||
for i in $(seq 1 3)
|
||||
do
|
||||
arping -I xenbr1.$vlanId $vlanGateway > /dev/null
|
||||
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
success=0
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
return $success
|
||||
}
|
||||
|
||||
op=
|
||||
vlanId=
|
||||
vlanGateway=
|
||||
option=$@
|
||||
|
||||
while getopts 'o:v:g:' OPTION
|
||||
do
|
||||
case $OPTION in
|
||||
o) oflag=1
|
||||
op="$OPTARG"
|
||||
;;
|
||||
v) vflag=1
|
||||
vlanId="$OPTARG"
|
||||
;;
|
||||
g) gflag=1
|
||||
vlanGateway="$OPTARG"
|
||||
;;
|
||||
?) usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check that all arguments were passed in
|
||||
if [ "$oflag$vflag$gflag" != "111" ]
|
||||
then
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ "$op" == "add" ]
|
||||
then
|
||||
# Check if the vlan already exists, and exit with success if it does
|
||||
checkIfVlanExists $vlanId
|
||||
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Add the vlan
|
||||
addVlan $vlanId
|
||||
|
||||
# If the add fails then return failure
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ping the vlan
|
||||
arpingVlan $vlanId $vlanGateway
|
||||
|
||||
# If the ping fails then delete the vlan and return failure. Else, return success.
|
||||
if [ $? -gt 0 ]
|
||||
then
|
||||
deleteVlan $vlanId
|
||||
exit 1
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
if [ "$op" == "delete" ]
|
||||
then
|
||||
# Delete the vlan
|
||||
deleteVlan $vlanId
|
||||
|
||||
# Always exit with success
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -46,8 +46,6 @@ import org.apache.cloudstack.api.ApiConstants.VMDetails;
|
|||
import org.apache.cloudstack.api.BaseCmd;
|
||||
import org.apache.cloudstack.api.ResponseGenerator;
|
||||
import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd;
|
||||
import org.apache.cloudstack.region.PortableIp;
|
||||
import org.apache.cloudstack.region.PortableIpRange;
|
||||
import org.apache.cloudstack.api.response.AccountResponse;
|
||||
import org.apache.cloudstack.api.response.ApplicationLoadBalancerInstanceResponse;
|
||||
import org.apache.cloudstack.api.response.ApplicationLoadBalancerResponse;
|
||||
|
|
@ -143,6 +141,8 @@ import org.apache.cloudstack.api.response.VpnUsersResponse;
|
|||
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||
import org.apache.cloudstack.framework.jobs.AsyncJob;
|
||||
import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
|
||||
import org.apache.cloudstack.region.PortableIp;
|
||||
import org.apache.cloudstack.region.PortableIpRange;
|
||||
import org.apache.cloudstack.region.Region;
|
||||
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
|
||||
import org.apache.cloudstack.usage.Usage;
|
||||
|
|
@ -211,6 +211,7 @@ import com.cloud.network.Site2SiteVpnConnection;
|
|||
import com.cloud.network.Site2SiteVpnGateway;
|
||||
import com.cloud.network.VirtualRouterProvider;
|
||||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.network.VpnUserVO;
|
||||
import com.cloud.network.as.AutoScalePolicy;
|
||||
import com.cloud.network.as.AutoScaleVmGroup;
|
||||
import com.cloud.network.as.AutoScaleVmProfile;
|
||||
|
|
@ -219,6 +220,7 @@ import com.cloud.network.as.Condition;
|
|||
import com.cloud.network.as.ConditionVO;
|
||||
import com.cloud.network.as.Counter;
|
||||
import com.cloud.network.dao.IPAddressVO;
|
||||
import com.cloud.network.dao.LoadBalancerVO;
|
||||
import com.cloud.network.dao.NetworkVO;
|
||||
import com.cloud.network.dao.PhysicalNetworkVO;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
|
|
@ -228,6 +230,7 @@ import com.cloud.network.rules.HealthCheckPolicy;
|
|||
import com.cloud.network.rules.LoadBalancer;
|
||||
import com.cloud.network.rules.LoadBalancerContainer.Scheme;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.PortForwardingRuleVO;
|
||||
import com.cloud.network.rules.StaticNatRule;
|
||||
import com.cloud.network.rules.StickinessPolicy;
|
||||
import com.cloud.network.security.SecurityGroup;
|
||||
|
|
@ -776,6 +779,9 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
}
|
||||
lbResponse.setTags(tagResponses);
|
||||
|
||||
Network ntwk = ApiDBUtils.findNetworkById(loadBalancer.getNetworkId());
|
||||
lbResponse.setNetworkId(ntwk.getUuid());
|
||||
|
||||
lbResponse.setObjectName("loadbalancer");
|
||||
return lbResponse;
|
||||
}
|
||||
|
|
@ -3546,11 +3552,12 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
|
||||
} else if(usageRecord.getUsageType() == UsageTypes.LOAD_BALANCER_POLICY){
|
||||
//Load Balancer Policy ID
|
||||
usageRecResponse.setUsageId(usageRecord.getUsageId().toString());
|
||||
|
||||
LoadBalancerVO lb = _entityMgr.findByIdIncludingRemoved(LoadBalancerVO.class, usageRecord.getUsageId().toString());
|
||||
usageRecResponse.setUsageId(lb.getUuid());
|
||||
} else if(usageRecord.getUsageType() == UsageTypes.PORT_FORWARDING_RULE){
|
||||
//Port Forwarding Rule ID
|
||||
usageRecResponse.setUsageId(usageRecord.getUsageId().toString());
|
||||
PortForwardingRuleVO pf = _entityMgr.findByIdIncludingRemoved(PortForwardingRuleVO.class, usageRecord.getUsageId().toString());
|
||||
usageRecResponse.setUsageId(pf.getUuid());
|
||||
|
||||
} else if(usageRecord.getUsageType() == UsageTypes.NETWORK_OFFERING){
|
||||
//Network Offering Id
|
||||
|
|
@ -3561,7 +3568,8 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
|
||||
} else if(usageRecord.getUsageType() == UsageTypes.VPN_USERS){
|
||||
//VPN User ID
|
||||
usageRecResponse.setUsageId(usageRecord.getUsageId().toString());
|
||||
VpnUserVO vpnUser = _entityMgr.findByIdIncludingRemoved(VpnUserVO.class, usageRecord.getUsageId().toString());
|
||||
usageRecResponse.setUsageId(vpnUser.getUuid());
|
||||
|
||||
} else if(usageRecord.getUsageType() == UsageTypes.SECURITY_GROUP){
|
||||
//Security Group Id
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue