From 623e7d93a8c0439d1329ce032b6cb05d230f2f06 Mon Sep 17 00:00:00 2001 From: Naredula Janardhana Reddy Date: Mon, 20 Feb 2012 16:16:53 +0530 Subject: [PATCH 01/54] Bug 13964: Summary of changes: Added Hairpin Nat. - defined Harpin NAT function. - Called Hairpin NAT while adding/deleting port forwading and Static NAT rules. - added rules in IPtables config file, this will be iniated during bootup to forward New/established connectons from eth0 to eth0. --- .../debian/config/etc/iptables/iptables-router | 2 ++ .../systemvm/debian/config/root/firewall.sh | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/patches/systemvm/debian/config/etc/iptables/iptables-router b/patches/systemvm/debian/config/etc/iptables/iptables-router index 5ac162a7b85..e1972e3a12d 100644 --- a/patches/systemvm/debian/config/etc/iptables/iptables-router +++ b/patches/systemvm/debian/config/etc/iptables/iptables-router @@ -22,6 +22,8 @@ COMMIT -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o eth2 -j ACCEPT -A FORWARD -i eth2 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A FORWARD -i eth0 -o eth0 -m state --state NEW -j ACCEPT +-A FORWARD -i eth0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT COMMIT *mangle :PREROUTING ACCEPT [0:0] diff --git a/patches/systemvm/debian/config/root/firewall.sh b/patches/systemvm/debian/config/root/firewall.sh index 7cc9ab5a30a..4dd0e9eb6c6 100755 --- a/patches/systemvm/debian/config/root/firewall.sh +++ b/patches/systemvm/debian/config/root/firewall.sh @@ -48,6 +48,22 @@ ip_to_dev() { return 1 } +doHairpinNat () { + local vrGuestIPNetwork=$(sudo ip addr show dev eth0 | grep inet | grep eth0 | awk '{print $2}' ) + local vrGuestIP=$(echo $vrGuestIPNetwork | awk -F'/' '{print $1}') + + local publicIp=$1 + local prot=$2 + local port=$3 + local guestVmIp=$4 + local guestPort=$(echo $5 | sed 's/:/-/') + local op=$6 + logger -t cloud "$(basename $0): create HairPin entry : public ip=$publicIp \ + instance ip=$guestVmIp proto=$proto portRange=$guestPort op=$op" + + (sudo iptables -t nat $op PREROUTING -d $publicIp -i eth0 -p $prot --dport $port -j DNAT --to-destination $guestVmIp:$guestPort &>> $OUTFILE || [ "$op" == "-D" ]) && + (sudo iptables -t nat $op POSTROUTING -s $vrGuestIPNetwork -p $prot --dport $port -d $guestVmIp -j SNAT -o eth0 --to-source $vrGuestIP &>> $OUTFILE || [ "$op" == "-D" ]) +} #Port (address translation) forwarding for tcp or udp tcp_or_udp_entry() { @@ -78,6 +94,7 @@ tcp_or_udp_entry() { --destination-port $port -j MARK --set-mark $tableNo &>> $OUTFILE || [ "$op" == "-D" ]) && (sudo iptables -t mangle $op PREROUTING --proto $proto -i $dev -d $publicIp \ --destination-port $port -m state --state NEW -j CONNMARK --save-mark &>> $OUTFILE || [ "$op" == "-D" ]) && + (doHairpinNat $publicIp $proto $port $instIp $dport0 $op) && (sudo iptables -t nat $op OUTPUT --proto $proto -d $publicIp \ --destination-port $port -j DNAT \ --to-destination $instIp:$dport &>> $OUTFILE || [ "$op" == "-D" ]) && @@ -141,6 +158,7 @@ one_to_one_fw_entry() { (sudo iptables -t nat $op PREROUTING -i $dev -d $publicIp --proto $proto \ --destination-port $portRange -j DNAT \ --to-destination $instIp &>> $OUTFILE || [ "$op" == "-D" ]) && + (doHairpinNat $publicIp $proto $portRange $instIp $portRange $op) && (sudo iptables $op FORWARD -i $dev -o eth0 -d $instIp --proto $proto \ --destination-port $portRange -m state \ --state NEW -j ACCEPT &>> $OUTFILE ) From 5af6fbef83f4fafbc0658bb6dd960bfa74cc7906 Mon Sep 17 00:00:00 2001 From: Naredula Janardhana Reddy Date: Wed, 15 Feb 2012 11:31:47 +0530 Subject: [PATCH 02/54] Bug 13375: Summary of changes: - Fix the order of source nat ip's : Static Nat IP's will be on top of Router source nat IP's. means Static NAT ip will take higher preference when compare to router ip while picking ip for source nat. Reviewed-by: Abhi --- patches/systemvm/debian/config/root/ipassoc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/systemvm/debian/config/root/ipassoc.sh b/patches/systemvm/debian/config/root/ipassoc.sh index 0ea90004405..3fdc3f17d9f 100644 --- a/patches/systemvm/debian/config/root/ipassoc.sh +++ b/patches/systemvm/debian/config/root/ipassoc.sh @@ -214,7 +214,7 @@ add_snat() { local ipNoMask=$(echo $1 | awk -F'/' '{print $1}') logger -t cloud "$(basename $0):Added SourceNAT $pubIp on interface $ethDev" sudo iptables -t nat -D POSTROUTING -j SNAT -o $ethDev --to-source $ipNoMask ; - sudo iptables -t nat -I POSTROUTING -j SNAT -o $ethDev --to-source $ipNoMask ; + sudo iptables -t nat -A POSTROUTING -j SNAT -o $ethDev --to-source $ipNoMask ; return $? } remove_snat() { From e278eb674e8a57b692221b95fe1d8a5781702e07 Mon Sep 17 00:00:00 2001 From: Murali reddy Date: Mon, 20 Feb 2012 18:08:28 +0530 Subject: [PATCH 03/54] bug 13872: Implementation of Guest Network by JuniperSRX failed: NPE during the execution of IPAssoc Reviewed-by: Jana status 13872: resolved fixed --- core/src/com/cloud/network/resource/JuniperSrxResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/cloud/network/resource/JuniperSrxResource.java b/core/src/com/cloud/network/resource/JuniperSrxResource.java index 1fc5b1e9eef..3d680c29a39 100644 --- a/core/src/com/cloud/network/resource/JuniperSrxResource.java +++ b/core/src/com/cloud/network/resource/JuniperSrxResource.java @@ -622,7 +622,7 @@ public class JuniperSrxResource implements ServerResource { String guestVlanSubnet = NetUtils.getCidrSubNet(guestVlanGateway, cidrSize); Long publicVlanTag = null; - if (!ip.getVlanId().equals("untagged")) { + if (ip.getVlanId() != null && !ip.getVlanId().equals("untagged")) { try { publicVlanTag = Long.parseLong(ip.getVlanId()); } catch (Exception e) { From 176fadc5488e977dabfc7dbffd2b36d5dd83ac9f Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 15 Feb 2012 12:31:07 +0530 Subject: [PATCH 04/54] adding the integrity checker for simulator components Reviewed-By: Kishan (cherry picked from commit b6ecbd0ad6f705efdc1a514e9dd9a17e96df8415) --- agent-simulator/tomcatconf/components-simulator.xml.in | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/agent-simulator/tomcatconf/components-simulator.xml.in b/agent-simulator/tomcatconf/components-simulator.xml.in index 935925632da..c92c6420d4c 100755 --- a/agent-simulator/tomcatconf/components-simulator.xml.in +++ b/agent-simulator/tomcatconf/components-simulator.xml.in @@ -3,7 +3,14 @@ true - + + + + + + + + From a424429090e8912ee411a000561d4d65a7c66acf Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sat, 18 Feb 2012 19:59:57 +0530 Subject: [PATCH 05/54] Enable security groups in basic zones only (cherry picked from commit 7ea0ace472f863374c9a0b8559065a90190e6f61) --- tools/testClient/deployDataCenter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testClient/deployDataCenter.py b/tools/testClient/deployDataCenter.py index 3b94f5bc3dd..a0eeb67f0e6 100644 --- a/tools/testClient/deployDataCenter.py +++ b/tools/testClient/deployDataCenter.py @@ -179,7 +179,7 @@ class deployDataCenters(): vrconfigresponse = \ self.apiClient.configureVirtualRouterElement(vrconfig) - if zone.securitygroupenabled: + if zone.networktype == "Basic" and zone.securitygroupenabled: sgprovider = configGenerator.provider() sgprovider.name = "SecurityGroupProvider" zone.providers.append(sgprovider) From 0b9a3ddb2e1415f6b3cdf5687415cbaeefa4c52a Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Fri, 17 Feb 2012 13:54:50 +0530 Subject: [PATCH 06/54] fixing the case when multiple zones are added. enable the right VR element Reviewed-By: Kishan (cherry picked from commit 23357f3b17ea87ae51b9be06a1c19ec782a661a6) --- tools/testClient/deployDataCenter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/testClient/deployDataCenter.py b/tools/testClient/deployDataCenter.py index a0eeb67f0e6..bc78d87b86e 100644 --- a/tools/testClient/deployDataCenter.py +++ b/tools/testClient/deployDataCenter.py @@ -163,12 +163,12 @@ class deployDataCenters(): def configureProviders(self, phynetwrk, zone): pnetprov = listNetworkServiceProviders.listNetworkServiceProvidersCmd() pnetprov.physicalnetworkid = phynetwrk.id - pnetprov.state = "Enabled" + pnetprov.state = "Disabled" pnetprov.name = "VirtualRouter" - vrprov = self.apiClient.listNetworkServiceProviders(pnetprov) + pnetprovres = self.apiClient.listNetworkServiceProviders(pnetprov) vrprov = listVirtualRouterElements.listVirtualRouterElementsCmd() - vrprov.nspid = vrprov.id + vrprov.nspid = pnetprovres[0].id vrprovresponse = self.apiClient.listVirtualRouterElements(vrprov) vrprovid = vrprovresponse[0].id From d4a180f097de821b9552632b3c684ebf0fd9f0a7 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sat, 18 Feb 2012 22:12:28 +0530 Subject: [PATCH 07/54] integrity checker loaded as parted of extended components.xml --- agent-simulator/tomcatconf/components-simulator.xml.in | 7 ------- 1 file changed, 7 deletions(-) diff --git a/agent-simulator/tomcatconf/components-simulator.xml.in b/agent-simulator/tomcatconf/components-simulator.xml.in index c92c6420d4c..011bc71892b 100755 --- a/agent-simulator/tomcatconf/components-simulator.xml.in +++ b/agent-simulator/tomcatconf/components-simulator.xml.in @@ -4,13 +4,6 @@ true - - - - - - - From 1b8a23f5bec6833e45d1400688306c1a00b3737e Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sat, 18 Feb 2012 23:38:27 +0530 Subject: [PATCH 08/54] Multiple fixes to the testClient to accomodate further changes to 3.0 APIs reviewed-by: Kishan * Revert back to old guestCidrAddress * Add default traffic types * fixed typo when creating physical network, specifid wrong zone * correctly specifying the guest VLAN as part of updating physical network --- tools/testClient/deployDataCenter.py | 19 +- .../testClient/sandbox/simulator/sandbox.cfg | 308 +++--------------- tools/testClient/sandbox/simulator/setup.py | 5 +- 3 files changed, 62 insertions(+), 270 deletions(-) diff --git a/tools/testClient/deployDataCenter.py b/tools/testClient/deployDataCenter.py index bc78d87b86e..f867ee173ae 100644 --- a/tools/testClient/deployDataCenter.py +++ b/tools/testClient/deployDataCenter.py @@ -209,7 +209,13 @@ class deployDataCenters(): traffic_type = addTrafficType.addTrafficTypeCmd() traffic_type.physicalnetworkid = physical_network_id traffic_type.traffictype = traffictype - self.apiClient.addTrafficType(traffic_type) + return self.apiClient.addTrafficType(traffic_type) + + def enableZone(self, zoneid, allocation_state="Enabled"): + zoneCmd = updateZone.updateZoneCmd() + zoneCmd.id = zoneid + zoneCmd.allocationstate = allocation_state + return self.apiClient.updateZone(zoneCmd) def createZones(self, zones): for zone in zones: @@ -221,22 +227,19 @@ class deployDataCenters(): createzone.name = zone.name createzone.securitygroupenabled = zone.securitygroupenabled createzone.networktype = zone.networktype + createzone.guestcidraddress = zone.guestcidraddress zoneresponse = self.apiClient.createZone(createzone) zoneId = zoneresponse.id phynetwrk = self.createPhysicalNetwork(zone.name + "-pnet", \ - zoneId, zone.vlan) + zoneId) - if zone.networktype == "Advanced": - self.addTrafficTypes(phynetwrk.id, ["Guest", "Public", \ + self.addTrafficTypes(phynetwrk.id, ["Guest", "Public", \ "Management"]) - elif zone.networktype == "Basic": - self.addTrafficTypes(phynetwrk.id, ["Guest", "Public", \ - "Management", "Storage"]) self.configureProviders(phynetwrk, zone) - self.updatePhysicalNetwork(phynetwrk.id, "Enabled") + self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=zone.vlan) if zone.networktype == "Basic": listnetworkoffering = \ diff --git a/tools/testClient/sandbox/simulator/sandbox.cfg b/tools/testClient/sandbox/simulator/sandbox.cfg index 049787524af..ee87b0d1a75 100644 --- a/tools/testClient/sandbox/simulator/sandbox.cfg +++ b/tools/testClient/sandbox/simulator/sandbox.cfg @@ -1,273 +1,65 @@ { "zones": [ { - "name": "Sandbox-Simulator", + "name": "Sandbox-simulator", "guestcidraddress": "10.1.1.0/24", - "dns2": "10.223.110.254", - "dns1": "4.2.2.2", - "vlan": "100-300", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ], + "dns1": "10.147.28.6", + "vlan": "100-500", "ipranges": [ { - "startip": "172.1.2.2", - "endip": "172.1.2.200", + "startip": "172.2.1.2", + "endip": "172.2.1.252", "netmask": "255.255.255.0", "vlan": "30", - "gateway": "172.1.2.1" + "gateway": "172.2.1.1" } ], "networktype": "Advanced", "pods": [ { - "endip": "172.1.1.200", + "endip": "172.1.2.252", "name": "POD0", - "startip": "172.1.1.2", + "startip": "172.1.2.2", "netmask": "255.255.255.0", "clusters": [ { - "clustername": "POD1-CLUSTER1", - "hypervisor": "Simulator", + "clustername": "C0", + "hypervisor": "simulator", "hosts": [ { "username": "root", - "url": "http://sim/test-1", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-2", + "url": "http://sim", "password": "password" } ], "clustertype": "CloudManaged", "primaryStorages": [ { - "url": "nfs://172.16.24.32/export/path/1", - "name": "spool1" - } - ] - }, - { - "clustername": "POD1-CLUSTER2", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-3", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-4", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/2", - "name": "spool2" - } - ] - }, - { - "clustername": "POD1-CLUSTER3", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-5", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-6", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/3", - "name": "spool3" - } - ] - }, - { - "clustername": "POD1-CLUSTER4", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-7", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-8", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/4", - "name": "spool4" - } - ] - }, - { - "clustername": "POD1-CLUSTER5", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-9", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-10", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/5", - "name": "spool5" - } - ] - }, - { - "clustername": "POD1-CLUSTER6", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-11", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-12", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/6", - "name": "spool6" - } - ] - }, - { - "clustername": "POD1-CLUSTER7", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-13", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-14", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/7", - "name": "spool7" - } - ] - }, - { - "clustername": "POD1-CLUSTER8", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-15", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-16", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/8", - "name": "spool8" - } - ] - }, - { - "clustername": "POD1-CLUSTER9", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-17", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-18", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/9", - "name": "spool9" - } - ] - }, - { - "clustername": "POD1-CLUSTER10", - "hypervisor": "Simulator", - "hosts": [ - { - "username": "root", - "url": "http://sim/test-19", - "password": "password" - }, - { - "username": "root", - "url": "http://sim/test-20", - "password": "password" - } - ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://172.16.24.32/export/path/10", - "name": "spool10" + "url": "nfs://172.2.2.6:/export/home/primary", + "name": "PS0" } ] } ], - "gateway": "172.1.1.1" + "gateway": "172.1.2.1" } ], "internaldns1": "10.147.28.6", - "internaldns2": "10.223.110.254", "secondaryStorages": [ { - "url": "nfs://172.16.25.32/secondary/path" + "url": "nfs://172.2.2.6:/export/home/secondary" } ] } ], "dbSvr": { - "dbSvr": "10.147.28.40", + "dbSvr": "localhost", "passwd": "cloud", "db": "cloud", "port": 3306, @@ -285,61 +77,61 @@ ], "globalConfig": [ { - "name": "use.user.concentrated.pod.allocation", - "value": "false" + "name": "storage.cleanup.interval", + "value": "300" + }, + { + "name": "vm.op.wait.interval", + "value": "5" }, { "name": "default.page.size", "value": "10000" }, + { + "name": "instance.name", + "value": "QA" + }, + { + "name": "workers", + "value": "10" + }, { "name": "direct.agent.load.size", "value": "1000" }, + { + "name": "account.cleanup.interval", + "value": "600" + }, + { + "name": "guest.domain.suffix", + "value": "sandbox.simulator" + }, { "name": "expunge.delay", "value": "60" }, { "name": "vm.allocation.algorithm", - "value": "random" - }, - { - "name": "check.pod.cidrs", - "value": "false" - }, - { - "name": "instance.name", - "value": "SIMQA" - }, - { - "name": "workers", - "value": "10" - }, - { - "name": "vm.op.wait.interval", - "value": "5" - }, - { - "name": "guest.domain.suffix", - "value": "sandbox.simulator" + "value": "userdispersing" }, { "name": "expunge.interval", "value": "60" }, - { - "name": "linkLocalIp.nums", - "value": "10" - }, { "name": "expunge.workers", "value": "3" + }, + { + "name": "check.pod.cidrs", + "value": "true" } ], "mgtSvr": [ { - "mgtSvrIp": "10.147.28.40", + "mgtSvrIp": "localhost", "port": 8096 } ] diff --git a/tools/testClient/sandbox/simulator/setup.py b/tools/testClient/sandbox/simulator/setup.py index 3dda7d62a3b..507df4c84f4 100644 --- a/tools/testClient/sandbox/simulator/setup.py +++ b/tools/testClient/sandbox/simulator/setup.py @@ -31,10 +31,7 @@ def describeResources(config): z.name = 'Sandbox-%s'%(config.get('environment', 'hypervisor')) z.networktype = 'Advanced' z.guestcidraddress = '10.1.1.0/24' - - prov = provider() - prov.vlan = config.get('cloudstack','guest.vlan') - z.providers.append(prov) + z.vlan = config.get('cloudstack','guest.vlan') p = pod() p.name = 'POD0' From 1dfe656f2aee1057f6fed32a81aa9081fee6278a Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 20 Feb 2012 10:24:08 -0800 Subject: [PATCH 09/54] bug 13864: IP Address page - add new field Purpose (only shown in Basic zone) --- .../classes/resources/messages.properties | 3 +++ .../classes/resources/messages_ja.properties | 3 +++ ui/index.jsp | 3 ++- ui/scripts/network.js | 27 ++++++++++++++++--- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 45b46b284b4..63e9c9c0915 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -452,6 +452,9 @@ label.total.CPU=Total CPU label.total.memory=Total Memory label.total.storage=Total Storage +#after 2012-02-12 +label.purpose=Purpose + #new labels (end) ********************************************************************************************** diff --git a/client/WEB-INF/classes/resources/messages_ja.properties b/client/WEB-INF/classes/resources/messages_ja.properties index 5dfb3db092d..c3c0146682b 100644 --- a/client/WEB-INF/classes/resources/messages_ja.properties +++ b/client/WEB-INF/classes/resources/messages_ja.properties @@ -453,6 +453,9 @@ label.total.CPU=Total CPU label.total.memory=Total Memory label.total.storage=Total Storage +#after 2012-02-12 +label.purpose=目的 + #new labels (end) ********************************************************************************************** diff --git a/ui/index.jsp b/ui/index.jsp index 0dde35ca9a4..3e090b86a68 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -2836,6 +2836,7 @@ dictionary = { 'message.zone.creation.complete.would.you.like.to.enable.this.zone': '', 'message.please.add.at.lease.one.traffic.range': '', 'message.you.must.have.at.least.one.physical.network': '', -'message.please.select.a.different.public.and.management.network.before.removing': '' +'message.please.select.a.different.public.and.management.network.before.removing': '', +'label.purpose': '' }; diff --git a/ui/scripts/network.js b/ui/scripts/network.js index bddd7778208..c26e789e809 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -896,9 +896,8 @@ } }, zonename: { label: 'label.zone' }, - //vlanname: { label: 'VLAN' }, - iselastic: { label: 'label.elastic', converter: cloudStack.converters.toBooleanText }, - account: { label: 'label.account' }, + //vlanname: { label: 'VLAN' }, + virtualmachinedisplayname: { label: 'label.vm.name' }, state: { converter: function(str) { // For localization @@ -1320,6 +1319,25 @@ tabs: { details: { title: 'label.details', + + preFilter: function(args) { + var hiddenFields = []; + var zoneObj; + $.ajax({ + url: createURL("listZones&id=" + args.context.ipAddresses[0].zoneid), + dataType: "json", + async: false, + success: function(json) { + zoneObj = json.listzonesresponse.zone[0]; + } + }); + if(zoneObj.networktype == "Advanced") { + hiddenFields.push("iselastic"); + hiddenFields.push("purpose"); + } + return hiddenFields; + }, + fields: [ { ipaddress: { label: 'IP' } @@ -1333,7 +1351,8 @@ state: { label: 'label.state' }, issourcenat: { label: 'label.source.nat', converter: cloudStack.converters.toBooleanText }, isstaticnat: { label: 'label.static.nat', converter: cloudStack.converters.toBooleanText }, - iselastic: { label: 'label.elastic', converter: cloudStack.converters.toBooleanText }, + iselastic: { label: 'label.elastic', converter: cloudStack.converters.toBooleanText }, //(basic zone only) + purpose: { label: 'label.purpose' }, //(basic zone only) When an IP is elastic, the purpose it serves can be Lb or static nat. virtualmachinedisplayname: { label: 'label.vm.name' }, domain: { label: 'label.domain' }, account: { label: 'label.account' }, From 65d9b60d42fe0fda4254a98fad2bd5066a5057d5 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 20 Feb 2012 14:44:57 -0800 Subject: [PATCH 10/54] bug 13648: fix a bug in listView widget - $listView.length is 0 after calling $(window).trigger('cloudStack.fullRefresh'), calling $listView.listView will encounter an error when $listView.length is 0. --- ui/scripts/system.js | 106 +++++++++++++++------------- ui/scripts/ui/widgets/detailView.js | 24 ++++--- 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index c07e2ab1567..47f3a5ef93e 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -2169,16 +2169,17 @@ url: createURL("updateNetworkServiceProvider&id=" + nspMap["virtualRouter"].id + "&state=Enabled"), dataType: "json", success: function(json) { - var jid = json.updatenetworkserviceproviderresponse.jobid; - args.response.success( + var jid = json.updatenetworkserviceproviderresponse.jobid; + args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2199,16 +2200,17 @@ url: createURL("updateNetworkServiceProvider&id=" + nspMap["virtualRouter"].id + "&state=Disabled"), dataType: "json", success: function(json) { - var jid = json.updatenetworkserviceproviderresponse.jobid; - args.response.success( + var jid = json.updatenetworkserviceproviderresponse.jobid; + args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2368,12 +2370,13 @@ args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2398,12 +2401,13 @@ args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2589,13 +2593,14 @@ var jid = json.updatenetworkserviceproviderresponse.jobid; args.response.success( {_custom: - { - jobId: jid - } + { + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } + } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2619,13 +2624,14 @@ var jid = json.updatenetworkserviceproviderresponse.jobid; args.response.success( {_custom: - { - jobId: jid - } + { + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } + } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2828,12 +2834,13 @@ args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2858,12 +2865,13 @@ args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2957,12 +2965,13 @@ args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, @@ -2987,12 +2996,13 @@ args.response.success( {_custom: { - jobId: jid + jobId: jid, + getUpdatedItem: function(json) { + $(window).trigger('cloudStack.fullRefresh'); + } } } - ); - - $(window).trigger('cloudStack.fullRefresh'); + ); } }); }, diff --git a/ui/scripts/ui/widgets/detailView.js b/ui/scripts/ui/widgets/detailView.js index 12fe68679ce..cbddc2b3e83 100644 --- a/ui/scripts/ui/widgets/detailView.js +++ b/ui/scripts/ui/widgets/detailView.js @@ -8,18 +8,20 @@ var $newRow; var jsonObj = $row.data('json-obj'); - $listView.listView('replaceItem', { - $row: $row, - data: $.extend(jsonObj, newData), - after: function($newRow) { - $detailView.data('list-view-row', $newRow); - - setTimeout(function() { - $('.data-table').dataTable('selectRow', $newRow.index()); - }, 100); - } - }); + if($listView.length > 0 ) { //$listView.length is 0 after calling $(window).trigger('cloudStack.fullRefresh') + $listView.listView('replaceItem', { + $row: $row, + data: $.extend(jsonObj, newData), + after: function($newRow) { + $detailView.data('list-view-row', $newRow); + setTimeout(function() { + $('.data-table').dataTable('selectRow', $newRow.index()); + }, 100); + } + }); + } + // Refresh detail view context $.extend( $detailView.data('view-args').context[ From f2503d2c697106d5742ebc1579d43b16750a292c Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 20 Feb 2012 17:05:04 -0800 Subject: [PATCH 11/54] instance page - edit Instance - not pass displayname to API when displayname is equal to name. --- ui/scripts/instances.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js index 66f2aa63bf6..0faf58648cb 100644 --- a/ui/scripts/instances.js +++ b/ui/scripts/instances.js @@ -997,8 +997,10 @@ edit: { label: 'Edit', action: function(args) { - var array1 = []; - array1.push("&displayName=" + args.data.displayname); + var array1 = []; + if(args.data.displayname != args.context.instances[0].name) + array1.push("&displayName=" + args.data.displayname); + array1.push("&group=" + args.data.group); array1.push("&ostypeid=" + args.data.guestosid); //array1.push("&haenable=" + haenable); From 1d819e63b635728032a6056b75b6c241bd8f1446 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 20 Feb 2012 17:45:17 -0800 Subject: [PATCH 12/54] check in Japanese translation. --- .../classes/resources/messages_ja.properties | 2337 ++++++++--------- 1 file changed, 1168 insertions(+), 1169 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages_ja.properties b/client/WEB-INF/classes/resources/messages_ja.properties index c3c0146682b..fafbcd6f299 100644 --- a/client/WEB-INF/classes/resources/messages_ja.properties +++ b/client/WEB-INF/classes/resources/messages_ja.properties @@ -1,457 +1,456 @@ #new labels (begin) ********************************************************************************************** -state.Stopping=停止 -message.add.load.balancer.under.ip=ロードバランサのルールは、IPの下に追加されました。 +state.Stopping=停止しています +message.add.load.balancer.under.ip=負荷分散規則が次の IP アドレスに対して追加されました: message.select.instance=インスタンスを選択してください。 -label.select=選択する -label.select.vm.for.static.nat=スタティックNATのためにVMを選択します。 -label.select.instance=インスタンスを選択します。 -label.nat.port.range=NATのポート範囲 -label.static.nat.vm.details=スタティックNAT仮想マシンの詳細 -label.edit.lb.rule=LBルールを編集する -message.migrate.instance.to.host=別のホストにインスタンスを移行することを確認してください。 -label.migrate.instance.to.host=別のホストにインスタンスを移行する -message.migrate.instance.to.ps=別のプライマリ·ストレージにインスタンスを移行することを確認してください。 -label.migrate.instance.to.ps=別のプライマリストレージにインスタンスを移行する -label.corrections.saved=修正が保存され -message.installWizard.copy.whatIsSecondaryStorage=セカンダリストレージは、ゾーンに関連付けられており、それは次のように格納されてい:
  • テンプレート - OSイメージのVMを起動すると、インストール済みのアプリケーションなどの追加の構成情報を含めることができます使用することができます
  • ISOイメージ - ブートまたは非ブートできるOSイメージ
  • ディスクボリュームのスナップショット - データ復旧のために使用することができ、VMデータのコピーを保存したり、新しいテンプレートを作成する
-message.installWizard.copy.whatIsPrimaryStorage=プライマリストレージとセカンダリストレージ:CloudStack™クラウド·インフラストラクチャは、ストレージの2つのタイプを使用しています。これらの両方は、iSCSIまたはNFSサーバー、またはlocaldiskすることができます。

プライマリ·ストレージは、クラスタに関連付けられており、そのクラスタ内のホスト上で実行されているすべてのVMの各ゲストVMのディスクボリュームに格納されています。プライマリ·ストレージ·サーバーは通常、ホストの近くに位置しています。 -message.installWizard.copy.whatIsAHost=ホストは、単一のコンピュータです。ホストは、ゲスト仮想マシンを実行するコンピューティングリソースを提供しています。各ホストは、ゲストVMを(高度なインストレーション·ガイドで説明する特殊なケースであるベアメタルホストを除く)を管理するためにそれにインストールされているソフトウェアをハイパーバイザしています。たとえば、Linux KVM対応のサーバーは、Citrix XenServerサーバ、およびESXiサーバがホストです。基本インストールでは、我々は、XenServerを実行する単一ホストを使用します。

ホストはCloudStack™展開内で最小の組織単位です。ホストがクラスタ内に含まれている、クラスタは、ポッド内に含まれており、ポッドは、ゾーン内に含まれています。 -message.installWizard.copy.whatIsACluster=クラスタは、グループのホストにする方法を提供します。クラスタ内のホストはすべて同一のハードウェアを持っている、同じハイパーバイザー実行したのと同じサブネット上にあり、同じ共有ストレージにアクセスすることができます。仮想マシン·インスタンス(VMS)は、ユーザーにサービスを中断することなく、同じクラスタ内の別のホストからのライブ移行することができます。クラスタは、CloudStack内サード最大の組織単位™展開です。クラスタは、ポッド内に含まれており、ポッドは、ゾーン内に含まれています。

CloudStack™は、クラウドの展開で複数のクラスタを使用できますが、基本的なインストールのために、私達は1つのクラスタのみを必要としています。 -message.installWizard.copy.whatIsAPod=ポッドは、多くの場合、単一のラックを表しています。同じポッド内のホストが同じサブネット内にあります。

ポッドはCloudStack内で二番目に大きい組織単位™展開です。ポッドは、ゾーン内に含まれています。各ゾーンは、1つまたは複数のポッドを含めることができます。基本インストールでは、あなたのゾーンのひとつポッドを持っています。 -message.installWizard.copy.whatIsAZone=ゾーンはCloudStack内で最大の組織単位™展開です。それはデータセンター内の複数のゾーンを持つことが許されているが、ゾーンは、通常、単一のデータセンターに対応しています。ゾーンにインフラを整理することの利点は、物理的な分離と冗長性を提供することです。たとえば、各ゾーンは独自の電源とネットワークのアップリンクを持つことができ、ゾーンが広く(これは必須ではありませんが)地理的に分離することができます。 -message.installWizard.copy.whatIsCloudStack=CloudStack™は、プール·コンピューティング·リソースがサービス(IaaSの)雲のように、パブリック、プライベート、ハイブリッドインフラストラクチャを構築することがソフトウェアプラットフォームです。 CloudStack™は、ネットワーク、ストレージ、クラウドインフラストラクチャを構成する計算ノードを管理します。展開、管理、およびクラウドコンピューティング環境を構成するためにCloudStack™を使用しています。

コモディティ·ハードウェア上で実行されている個々の仮想マシンのイメージを超えて拡張すると、CloudStack™は、サービスとしての仮想データセンターを実現するためのターンキー·クラウド·インフラストラクチャ·ソフトウェア·スタックを提供します - マルチティアとマルチテナント型のクラウドを構築、デプロイ、および管理するために不可欠なすべてのコンポーネントを提供アプリケーション。オープンソースとプレミアムバージョンの両方がほぼ同じ機能を提供するオープンソースのバージョンでは、用意されています。 -message.installWizard.tooltip.addSecondaryStorage.path=あなたは上記で指定したサーバー上にあるエクスポートされたパス、 -message.installWizard.tooltip.addSecondaryStorage.nfsServer=セカンダリ·ストレージをホストしているNFSサーバのIPアドレス -message.installWizard.tooltip.addPrimaryStorage.path=(NFS)のNFSでは、これはサーバーからエクスポートされたパスです。パス(SharedMountPoint用)。 KVMでこれは、このプライマリ·ストレージがマウントされている場所は、各ホスト上のパスです。たとえば、 /mnt/primary。 -message.installWizard.tooltip.addPrimaryStorage.server=(NFS、iSCSI、またはPreSetup)のIPアドレスまたはストレージデバイスのDNS名。 -message.installWizard.tooltip.addPrimaryStorage.name=ストレージデバイスの名前を入力します。 -message.installWizard.tooltip.addHost.password=これは上記の名前のユーザのパスワード(XenServerのインストールから)です。 -message.installWizard.tooltip.addHost.username=通常ルート。 -message.installWizard.tooltip.addHost.hostname=DNS名またはホストのIPアドレス。 -message.installWizard.tooltip.addCluster.name=クラスタの名前。これは任意のテキストにすることができ、CloudStack使用されていません。 -message.installWizard.tooltip.addPod.reservedSystemEndIp=これはCloudStackは、セカンダリストレージの仮想マシンとコンソールのプロキシ仮想マシンを管理するために使用するプライベートネットワーク内のIP範囲です。これらのIPアドレスは、コンピューティング·サーバーと同じサブネットから取得されます。 -message.installWizard.tooltip.addPod.reservedSystemStartIp=これはCloudStackは、セカンダリストレージの仮想マシンとコンソールのプロキシ仮想マシンを管理するために使用するプライベートネットワーク内のIP範囲です。これらのIPアドレスは、コンピューティング·サーバーと同じサブネットから取得されます。 -message.installWizard.tooltip.addPod.reservedSystemNetmask=お客様が使用されるサブネットで使用中のマスク。 -message.installWizard.tooltip.addPod.reservedSystemGateway=そのポッド内のホストに対するゲートウェイ。 -message.installWizard.tooltip.addPod.name=ポッドの名前 -message.installWizard.tooltip.configureGuestTraffic.guestEndIp=このゾーンのゲストへの割り当てのために利用できるようになりますIPアドレスの範囲。つのNICが使用されている場合、これらのIPはポッドCIDR CIDRと同じである必要があります。 -message.installWizard.tooltip.configureGuestTraffic.guestStartIp=このゾーンのゲストへの割り当てのために利用できるようになりますIPアドレスの範囲。つのNICが使用されている場合、これらのIPはポッドCIDR CIDRと同じである必要があります。 -message.installWizard.tooltip.configureGuestTraffic.guestNetmask=ゲストが使用する必要があるサブネットで使用中のマスク -message.installWizard.tooltip.configureGuestTraffic.guestGateway=ゲストが使用するゲートウェイ -message.installWizard.tooltip.configureGuestTraffic.description=ネットワークの説明 -message.installWizard.tooltip.configureGuestTraffic.name=あなたのネットワークの名前 -message.installWizard.tooltip.addZone.internaldns2=これらは、ゾーン内のシステムのVMで使用するためのDNSサーバです。これらのDNSサーバーは、システムのVMのプライベート·ネットワーク·インタフェースを介してアクセスされます。あなたはポッドを提供するプライベートIPアドレスは、ここという名前のDNSサーバへのルートを持っている必要があります。 -message.installWizard.tooltip.addZone.internaldns1=これらは、ゾーン内のシステムのVMで使用するためのDNSサーバです。これらのDNSサーバーは、システムのVMのプライベート·ネットワーク·インタフェースを介してアクセスされます。あなたはポッドを提供するプライベートIPアドレスは、ここという名前のDNSサーバへのルートを持っている必要があります。 -message.installWizard.tooltip.addZone.dns2=これらは、ゾーン内のゲストVMで使用するためのDNSサーバです。これらのDNSサーバーは、後で追加され、パブリックネットワークを介してアクセスされます。ゾーンのパブリックIPアドレスは、ここで名前のDNSサーバへのルートを持っている必要があります。 -message.installWizard.tooltip.addZone.name=ゾーンの名前 -message.installWizard.tooltip.addZone.dns1=これらは、ゾーン内のゲストVMで使用するためのDNSサーバです。これらのDNSサーバーは、後で追加され、パブリックネットワークを介してアクセスされます。ゾーンのパブリックIPアドレスは、ここで名前のDNSサーバへのルートを持っている必要があります。 -message.setup.successful=雲のセットアップに成功! -label.may.continue=あなたは今継続することができます。 -error.installWizard.message=何かが間違っていた、元に戻ってすべてのエラーを訂正することができる -message.installWizard.now.building=今すぐあなたのクラウドを構築... -message.installWizard.click.retry=起動を再試行する]ボタンをクリックします。 -label.launch=起動する -label.installWizard.click.launch=起動ボタンをクリックします。 -label.congratulations=おめでとう! -label.installWizard.addSecondaryStorageIntro.subtitle=二次記憶装置とは何ですか? -label.installWizard.addSecondaryStorageIntro.title=のがセカンダリ·ストレージを追加してみましょう -label.installWizard.addPrimaryStorageIntro.subtitle=プライマリストレージとは何ですか? -label.installWizard.addPrimaryStorageIntro.title=のは、プライマリ·ストレージを追加してみましょう -label.installWizard.addHostIntro.subtitle=ホストとは何ですか? -label.installWizard.addHostIntro.title=のホストを追加してみましょう -label.installWizard.addClusterIntro.subtitle=クラスタとは何ですか? -label.installWizard.addClusterIntro.title=のクラスタを追加してみましょう -label.installWizard.addPodIntro.subtitle=ポッドとは何ですか? -label.installWizard.addPodIntro.title=のは、ポッドを追加してみましょう -label.installWizard.addZone.title=ゾーンを追加する -label.installWizard.addZoneIntro.subtitle=ゾーンとは何ですか? -label.installWizard.addZoneIntro.title=ゾーンを追加する -error.password.not.match=パスワードフィールドが一致しません -label.confirm.password=パスワードを確認 +label.select=選択 +label.select.vm.for.static.nat=静的 NAT 用 VM の選択 +label.select.instance=インスタンスの選択 +label.nat.port.range=NAT ポートの範囲 +label.static.nat.vm.details=静的 NAT VM の詳細 +label.edit.lb.rule=負荷分散規則の編集 +message.migrate.instance.to.host=別のホストにインスタンスを移行してもよろしいですか? +label.migrate.instance.to.host=別のホストへのインスタンスの移行 +message.migrate.instance.to.ps=別のプライマリ ストレージにインスタンスを移行してもよろしいですか? +label.migrate.instance.to.ps=別のプライマリ ストレージへのインスタンスの移行 +label.corrections.saved=接続が保存されました +message.installWizard.copy.whatIsSecondaryStorage=セカンダリ ストレージはゾーンと関連付けられ、次の項目を格納します。
  • テンプレート - VM の起動に使用できる OS イメージで、アプリケーションのインストールなど追加の構成を含めることができます。
  • ISO イメージ - 起動可能または起動不可の OS イメージです。
  • ディスク ボリュームのスナップショット - VM データの保存コピーです。データの復元または新しいテンプレートの作成に使用できます。
+message.installWizard.copy.whatIsPrimaryStorage=CloudStack™ のクラウド インフラストラクチャでは、プライマリ ストレージとセカンダリ ストレージの 2 種類のストレージを使用します。どちらのストレージにも、iSCSI、NFS サーバー、またはローカル ディスクを使用できます。

プライマリ ストレージはクラスターに関連付けられ、そのクラスター内のホストで動作するすべての VM の各ゲスト VM のディスク ボリュームを格納します。通常、プライマリ ストレージ サーバーはホストの近くに設置します。 +message.installWizard.copy.whatIsAHost=ホストは単一のコンピューターです。ホストは、ゲスト仮想マシンを実行するコンピューティング リソースを提供します。ベア メタル ホストを除いて、各ホストにはゲスト仮想マシンを管理するためのハイパーバイザー ソフトウェアをインストールします。ベア メタル ホストについては、『インストールガイド上級編』で特殊例として説明します。たとえば、KVM が有効な Linux サーバー、Citrix XenServer が動作するサーバー、および ESXi サーバーがホストです。基本インストールでは、XenServer を実行する単一のホストを使用します。

ホストは CloudStack™ 環境内の最小の組織単位です。ホストはクラスターに含まれ、クラスターはポッドに含まれ、ポッドはゾーンに含まれます。 +message.installWizard.copy.whatIsACluster=クラスターはホストをグループ化する方法です。1 つのクラスター内のホストはすべて同一のハードウェアから構成され、同じハイパーバイザーを実行し、同じサブネット上にあり、同じ共有ストレージにアクセスします。同じクラスター内のホスト間では、ユーザーへのサービスを中断せずに、仮想マシン インスタンスをライブ マイグレーションすることができます。クラスターは CloudStack™ 環境内の 3 番目に大きな組織単位です。クラスターはポッドに含まれ、ポッドはゾーンに含まれます。

CloudStack™ では 1 つのクラウド環境に複数のクラスターを持たせることができますが、基本インストールでは、クラスターは 1 つです。 +message.installWizard.copy.whatIsAPod=通常、1 つのポッドは単一のラックを表します。同じポッド内のホストは同じサブネット内にあります。

ポッドは CloudStack™ 環境内の 2 番目に大きな組織単位です。ポッドはゾーンに含まれます。各ゾーンは 1 つ以上のポッドを含むことができます。基本インストールでは、ゾーン内のポッドは 1 つです。 +message.installWizard.copy.whatIsAZone=ゾーンは CloudStack™ 環境内の最大の組織単位です。1 つのデータセンター内に複数のゾーンを持たせることはできますが、通常、ゾーンは単一のデータセンターに相当します。インフラストラクチャをゾーンに組織化すると、ゾーンを物理的に分離して冗長にすることができます。たとえば、各ゾーンに電源とネットワーク アップリンクを配備します。必須ではありませんが、ゾーンは遠隔地に分散することができます。 +message.installWizard.copy.whatIsCloudStack=CloudStack™ はコンピューティング リソースをプールするソフトウェア プラットフォームで、パブリック、プライベート、およびハイブリッドの Infrastructure as a Service (IaaS) クラウドを構築することができます。CloudStack™ を使用して、クラウド インフラストラクチャを構成するネットワーク、ストレージ、およびコンピューティング ノードを管理し、クラウド コンピューティング環境を展開、管理、および構成します。

コモディティ化したハードウェア上で動作する個別の仮想マシン イメージを超えて拡張する、CloudStack™ の簡単な設定で動作するクラウド インフラストラクチャのソフトウェア スタックにより、サービスとして仮想データセンターを、つまり多層型のマルチテナント クラウド アプリケーションを構築し、展開し、管理するために不可欠なコンポーネントがすべて提供されます。オープン ソース バージョンとプレミアム バージョンの両方が提供されますが、オープン ソース バージョンでもほとんどの機能を使用できます。 +message.installWizard.tooltip.addSecondaryStorage.path=上に指定したサーバーに存在する、エクスポートされたパスです。 +message.installWizard.tooltip.addSecondaryStorage.nfsServer=セカンダリ ストレージをホストする NFS サーバーの IP アドレスです。 +message.installWizard.tooltip.addPrimaryStorage.path=(NFS の場合) サーバーからエクスポートされたパスです。(SharedMountPoint の場合) パスです。KVM ではこのプライマリ ストレージがマウントされる各ホスト上のパスです。たとえば、/mnt/primary です。 +message.installWizard.tooltip.addPrimaryStorage.server=(NFS、iSCSI、または PreSetup の場合) ストレージ デバイスの IP アドレスまたは DNS 名です。 +message.installWizard.tooltip.addPrimaryStorage.name=ストレージ デバイスの名前です。 +message.installWizard.tooltip.addHost.password=XenServer 側で指定した、上のユーザー名に対するパスワードです。 +message.installWizard.tooltip.addHost.username=通常は root です。 +message.installWizard.tooltip.addHost.hostname=ホストの DNS 名または IP アドレスです。 +message.installWizard.tooltip.addCluster.name=クラスターの名前です。CloudStack で使用されていない、任意のテキストを指定できます。 +message.installWizard.tooltip.addPod.reservedSystemEndIp=これは、セカンダリ ストレージ VM およびコンソール プロキシ VM を管理するために CloudStack で使用する、プライベート ネットワーク内の IP アドレスの範囲です。これらの IP アドレスはコンピューティング サーバーと同じサブネットから割り当てます。 +message.installWizard.tooltip.addPod.reservedSystemStartIp=これは、セカンダリ ストレージ VM およびコンソール プロキシ VM を管理するために CloudStack で使用する、プライベート ネットワーク内の IP アドレスの範囲です。これらの IP アドレスはコンピューティング サーバーと同じサブネットから割り当てます。 +message.installWizard.tooltip.addPod.reservedSystemNetmask=ゲストの使用するサブネット上で使用されるネットマスクです。 +message.installWizard.tooltip.addPod.reservedSystemGateway=このポッド内のホストのゲートウェイです。 +message.installWizard.tooltip.addPod.name=ポッドの名前です。 +message.installWizard.tooltip.configureGuestTraffic.guestEndIp=このゾーンのゲストに割り当てることができる IP アドレスの範囲です。使用する NIC が 1 つの場合は、これらの IP アドレスはポッドの CIDR と同じ CIDR に含まれている必要があります。 +message.installWizard.tooltip.configureGuestTraffic.guestStartIp=このゾーンのゲストに割り当てることができる IP アドレスの範囲です。使用する NIC が 1 つの場合は、これらの IP アドレスはポッドの CIDR と同じ CIDR に含まれている必要があります。 +message.installWizard.tooltip.configureGuestTraffic.guestNetmask=ゲストの使用するサブネット上で使用されるネットマスクです。 +message.installWizard.tooltip.configureGuestTraffic.guestGateway=ゲストの使用するゲートウェイです。 +message.installWizard.tooltip.configureGuestTraffic.description=ネットワークの説明です。 +message.installWizard.tooltip.configureGuestTraffic.name=ネットワークの名前です。 +message.installWizard.tooltip.addZone.internaldns2=ゾーン内のシステム VM で使用する DNS サーバーです。これらの DNS サーバーは、システム VM のプライベート ネットワーク インターフェイスを介してアクセスされます。ポッドのプライベート IP アドレスから、ここで指定する DNS サーバーに通信できる必要があります。 +message.installWizard.tooltip.addZone.internaldns1=ゾーン内のシステム VM で使用する DNS サーバーです。これらの DNS サーバーは、システム VM のプライベート ネットワーク インターフェイスを介してアクセスされます。ポッドのプライベート IP アドレスから、ここで指定する DNS サーバーに通信できる必要があります。 +message.installWizard.tooltip.addZone.dns2=ゾーン内の VM で使用する DNS サーバーです。これらの DNS サーバーには、後で追加するパブリック ネットワーク経由でアクセスします。ゾーンのパブリック IP アドレスから、ここで指定するパブリック DNS サーバーに通信できる必要があります。 +message.installWizard.tooltip.addZone.name=ゾーンの名前です。 +message.installWizard.tooltip.addZone.dns1=ゾーン内の VM で使用する DNS サーバーです。これらの DNS サーバーには、後で追加するパブリック ネットワーク経由でアクセスします。ゾーンのパブリック IP アドレスから、ここで指定するパブリック DNS サーバーに通信できる必要があります。 +message.setup.successful=クラウドがセットアップされました。 +label.may.continue=続行できます。 +error.installWizard.message=問題が発生しました。戻ってエラーを修正できます。 +message.installWizard.now.building=クラウドを構築しています... +message.installWizard.click.retry=起動を再試行するにはボタンをクリックしてください。 +label.launch=起動 +label.installWizard.click.launch=[起動] をクリックしてください。 +label.congratulations=おめでとうございます。 +label.installWizard.addSecondaryStorageIntro.subtitle=セカンダリ ストレージについて +label.installWizard.addSecondaryStorageIntro.title=セカンダリ ストレージを追加しましょう +label.installWizard.addPrimaryStorageIntro.subtitle=プライマリ ストレージについて +label.installWizard.addPrimaryStorageIntro.title=プライマリ ストレージを追加しましょう +label.installWizard.addHostIntro.subtitle=ホストについて +label.installWizard.addHostIntro.title=ホストを追加しましょう +label.installWizard.addClusterIntro.subtitle=クラスターについて +label.installWizard.addClusterIntro.title=クラスターを追加しましょう +label.installWizard.addPodIntro.subtitle=ポッドについて +label.installWizard.addPodIntro.title=ポッドを追加しましょう +label.installWizard.addZone.title=ゾーンの追加 +label.installWizard.addZoneIntro.subtitle=ゾーンについて +label.installWizard.addZoneIntro.title=ゾーンを追加しましょう +error.password.not.match=パスワードが一致しません +label.confirm.password=パスワードの確認入力 message.change.password=パスワードを変更してください。 label.save.and.continue=保存して続行 -label.skip.guide=このガイドをスキップする前に、私はCloudStack使用している -label.continue.basic.install=基本的なインストールを続行し -label.introduction.to.cloudstack=CloudStack™するために導入 -label.what.is.cloudstack=CloudStack™ は何ですか? +label.skip.guide=CloudStack を使用したことがあるので、このガイドをスキップする +label.continue.basic.install=基本インストールを続行する +label.introduction.to.cloudstack=CloudStack™ の紹介 +label.what.is.cloudstack=CloudStack™ について label.hints=ヒント -label.installWizard.subtitle=このツアーでは、あなたのCloudStack™ のインストールを設定する際に役立ちます -label.continue=続ける -label.installWizard.title=こんにちは、CloudStack™ へようこそ。 +label.installWizard.subtitle=このガイド ツアーは CloudStack™ 環境のセットアップに役立ちます +label.continue=続行 +label.installWizard.title=CloudStack™ へようこそ label.agree=同意する label.license.agreement=ライセンス契約 -label.license.agreement.subtitle=インストールする前に、CloudStack™ ライセンスに同意してください。 -label.manage.resources=リソースを管理する -label.port.forwarding.policies=ポートフォワーディングのポリシー -label.load.balancing.policies=バランサポリシーをロードする +label.license.agreement.subtitle=インストールの前に CloudStack™ エンド ユーザー ライセンス契約に同意してください。 +label.manage.resources=リソースの管理 +label.port.forwarding.policies=ポート転送ポリシー +label.load.balancing.policies=負荷分散ポリシー label.networking.and.security=ネットワークとセキュリティ label.bandwidth=帯域幅 label.virtual.machines=仮想マシン label.compute.and.storage=コンピューティングとストレージ -label.task.completed=タスクが完了する -label.update.project.resources=プロジェクトリソースを更新 -label.remove.project.account=プロジェクト·アカウントを削除します。 -label.item.listing=アイテムリスト +label.task.completed=タスクが完了しました +label.update.project.resources=プロジェクト リソースの更新 +label.remove.project.account=プロジェクト アカウントの削除 +label.item.listing=項目一覧 message.select.item=項目を選択してください。 -label.removing=削除する +label.removing=削除しています label.invite=招待 -label.add.by=して追加 -label.max.vms=最大ユーザーのVM -label.max.public.ips=最大のパブリックIP -label.max.volumes=最大ボリューム -label.max.snapshots=最大スナップショット -label.max.templates=最大のテンプレート -label.project.dashboard=プロジェクトダッシュボード -label.remind.later=私に後で通知する -label.invited.accounts=招待アカウント -label.invite.to=への招待 -label.add.accounts.to=にアカウントを追加します。 -label.add.accounts=アカウントを追加する +label.add.by=追加単位 +label.max.vms=最大ユーザー VM 数 +label.max.public.ips=最大パブリック IP アドレス数 +label.max.volumes=最大ボリューム数 +label.max.snapshots=最大スナップショット数 +label.max.templates=最大テンプレート数 +label.project.dashboard=プロジェクト ダッシュボード +label.remind.later=再表示する +label.invited.accounts=招待済みアカウント +label.invite.to=招待: +label.add.accounts.to=アカウントの追加: +label.add.accounts=アカウントの追加 label.project.name=プロジェクト名 -label.create.project=プロジェクトを作成します。 +label.create.project=プロジェクトの作成 label.networks=ネットワーク -label.launch.vm=VMを起動します。 -label.new.vm=新しいVM +label.launch.vm=VM の起動 +label.new.vm=新しい VM label.previous=前 -label.add.to.group=グループに追加する -message.vm.review.launch=次の情報を確認して、仮想インスタンスが起動する前に、正しいことを確認してください。 -message.select.security.groups=新しいVMのセキュリティグループを選択してください。 -label.new=新しい +label.add.to.group=グループへの追加 +message.vm.review.launch=次の情報を参照して、仮想インスタンスが正しいことを確認してから起動してください。 +message.select.security.groups=新しい仮想マシンのセキュリティ グループを選択してください。 +label.new=新規 message.please.select.networks=仮想マシンのネットワークを選択してください。 -message.please.proceed=次のステップに進んでください。 -message.zone.no.network.selection=あなたが選択したゾーンは、ネットワークの選択の任意の選択肢を持っていません。 -label.no.thanks=遠慮します -label.my.templates=私のテンプレート -message.select.template=新しい仮想インスタンス用のテンプレートを選択してください。 -message.select.iso=新しい仮想インスタンスは、ISOを選択してください。 -message.template.desc=VMを起動するために使用することができ、OSイメージ -message.iso.desc=データやOSのブータブルメディアを含むディスクイメージ -label.select.iso.or.template=を選択し、ISOまたはテンプレート -message.select.a.zone=ゾーンは、通常、単一のデータセンターに対応しています。複数のゾーンは、物理的な隔離と冗長性を提供することにより、クラウドの信頼性を高める。 -label.select.a.zone=ゾーンを選択します -label.review=レビュー -label.select.a.template=テンプレートを選択します。 +message.please.proceed=次の手順に進んでください。 +message.zone.no.network.selection=選択したゾーンでは、ネットワークを選択できません。 +label.no.thanks=いいえ結構です +label.my.templates=マイ テンプレート +message.select.template=新しい仮想インスタンスのテンプレートを選択してください。 +message.select.iso=新しい仮想インスタンスの ISO を選択してください。 +message.template.desc=VM の起動に使用できる OS イメージ +message.iso.desc=データまたは OS 起動可能メディアを含むディスク イメージ +label.select.iso.or.template=ISO またはテンプレートの選択 +message.select.a.zone=ゾーンは通常、単一のデータセンターに相当します。複数のゾーンを設定し、物理的に分離して冗長性を持たせることにより、クラウドの信頼性を高めます。 +label.select.a.zone=ゾーンの選択 +label.review=確認 +label.select.a.template=テンプレートの選択 label.setup=セットアップ -state.Allocated=割り当てられた +state.Allocated=割り当て済み changed.item.properties=変更された項目のプロパティ -label.apply=適用される +label.apply=適用 label.default=デフォルト label.viewing=表示 -label.move.to.top=トップに移動 -label.move.up.row=1行上に移動 -label.move.down.row=1行下に移動 +label.move.to.top=最上位に移動 +label.move.up.row=1 行上に移動 +label.move.down.row=1 行下に移動 label.drag.new.position=新しい位置にドラッグ -label.order=オーダー +label.order=順序 label.no.data=表示するデータがありません -label.change.value=値を変更する -label.clear.list=一覧をクリアする -label.full.path=フルパス -message.add.domain=このドメインの下に作成するサブドメインを指定してください -message.delete.user=このユーザーを削除したいことを確認してください。 -message.enable.user=このユーザーを有効にしたいことを確認してください。 -message.disable.user=このユーザーを無効にしたいことを確認してください。 -message.generate.keys=このユーザーの新しい鍵を生成したいことを確認してください。 -message.update.resource.count=このアカウントのリソースカウントを更新することを確認してください。 -message.edit.account=編集( "-1"リソース作成の量に制限がないことを示します) -label.total.of.vm=VMの合計 -label.total.of.ip=IPアドレスの合計 -state.enabled=使用可能 -message.action.download.iso=このISOイメージをダウンロードすることを確認してください。 -message.action.download.template=このテンプレートをダウンロードすることを確認してください。 -label.destination.zone=宛先ゾーン +label.change.value=値の変更 +label.clear.list=一覧の消去 +label.full.path=フル パス +message.add.domain=このドメインに作成するサブドメインを指定してください。 +message.delete.user=このユーザーを削除してもよろしいですか? +message.enable.user=このユーザーを有効にしてもよろしいですか? +message.disable.user=このユーザーを無効にしてもよろしいですか? +message.generate.keys=このユーザーに新しいキーを生成してもよろしいですか? +message.update.resource.count=このアカウントのリソース数を更新してもよろしいですか? +message.edit.account=編集 ("-1" は、リソース作成の量に制限がないことを示します) +label.total.of.vm=VM 合計 +label.total.of.ip=IP アドレス合計 +state.enabled=有効 +message.action.download.iso=この ISO イメージをダウンロードしてもよろしいですか? +message.action.download.template=このテンプレートをダウンロードしてもよろしいですか? +label.destination.zone=コピー先ゾーン label.keyboard.type=キーボードの種類 -label.nic.adapter.type=NICアダプタの種類 -label.root.disk.controller=ルート·ディスク·コントローラ +label.nic.adapter.type=NIC アダプターの種類 +label.root.disk.controller=ルート ディスク コントローラー label.community=コミュニティ -label.remove.egress.rule=出力ルールを削除する -label.add.egress.rule=出力ルールを追加 -label.egress.rule=出力ルール -label.remove.ingress.rule=入力規則を削除する -label.delete.vpn.user=VPNユーザを削除します。 -label.add.vpn.user=VPNユーザを追加します。 -label.remove.pf=ポートフォワーディングルールを削除する -label.remove.vm.from.lb=ロード·バランサのルールからVMを削除します。 -label.add.vms.to.lb=バランサのルールをロードするためにVM(s)を追加する -label.add.vm=VMを追加します。 -label.remove.static.nat.rule=スタティックNATルールを削除します。 -label.remove.rule=ルールを削除する -label.add.static.nat.rule=スタティックNATルールを追加します。 -label.add.rule=ルールを追加します。 -label.configuration=設定 -message.disable.vpn=あなたは、VPNを無効にしてもよろしいですか? -label.disable.vpn=VPNを無効にします。 -message.enable.vpn=あなたがこのIPアドレスに対して有効になってVPNアクセスが必要であることを確認してください。 -label.enable.vpn=VPNを有効にする -message.acquire.new.ip=あなたはこのネットワークのネットのIPアドレスを取得したいことを確認してください。 +label.remove.egress.rule=送信規則の削除 +label.add.egress.rule=送信規則の追加 +label.egress.rule=送信規則 +label.remove.ingress.rule=受信規則の削除 +label.delete.vpn.user=VPN ユーザーの削除 +label.add.vpn.user=VPN ユーザーの追加 +label.remove.pf=ポート転送規則の削除 +label.remove.vm.from.lb=負荷分散規則からの VM の削除 +label.add.vms.to.lb=負荷分散規則への VM の追加 +label.add.vm=VM の追加 +label.remove.static.nat.rule=静的 NAT 規則の削除 +label.remove.rule=規則の削除 +label.add.static.nat.rule=静的 NAT 規則の追加 +label.add.rule=規則の追加 +label.configuration=構成 +message.disable.vpn=VPN を無効にしてもよろしいですか? +label.disable.vpn=VPN の無効化 +message.enable.vpn=この IP アドレスに対する VPN アクセスを有効にしてもよろしいですか? +label.enable.vpn=VPN の有効化 +message.acquire.new.ip=このネットワークのネット IP アドレスを取得してもよろしいですか? label.elastic=エラスティック -label.my.network=私のネットワーク -label.add.vms=VMを追加する -label.configure=設定する -label.stickiness=粘り +label.my.network=マイ ネットワーク +label.add.vms=VM の追加 +label.configure=構成 +label.stickiness=持続性 label.source=ソース label.least.connections=最小接続 label.round.robin=ラウンドロビン -label.network.domain.text=ネットワーク·ドメインのテキスト -label.restart.required=必要な再起動 -label.clean.up=クリーンアップ -message.restart.network=あなたは、ネットワークを再起動することを確認してください -label.restart.network=ネットワークを再起動します -label.edit.network.details=ネットワークの詳細を編集 -label.add.guest.network=ゲストネットワークを追加します。 -label.guest.networks=ゲストネットワーク -message.ip.address.changed=あなたのIPアドレスが変更されている場合があります。あなたは、リストをリフレッシュしたいですか?このケースでは、詳細ペインを閉じることに注意してください。 -state.BackingUp=バックアップ -state.BackedUp=バックアップ -label.done=行われ -label.vm.name=VMの名前 -message.migrate.volume=別のプライマリ·ストレージにボリュームを移行することを確認してください。 -label.migrate.volume=別のプライマリ·ストレージへのボリュームの移行 -message.create.template=あなたがテンプレートを作成してもよろしいですか? -label.create.template=テンプレートを作成する -message.download.volume.confirm=あなたはこのボリュームをダウンロードすることを確認してください。 -message.detach.disk=あなたは、このディスクをデタッチしてもよろしいですか? -state.ready=レディ -state.Ready=レディ -label.vm.display.name=VMの表示名 -label.select-view=ビューを選択します。 -label.local.storage=ローカルストレージ -label.direct.ips=直接IPアドレス -label.view.all=すべてを見る +label.network.domain.text=ネットワーク ドメイン テキスト +label.restart.required=再起動が必要です +label.clean.up=クリーン アップ +message.restart.network=ネットワークを再起動してもよろしいですか? +label.restart.network=ネットワークの再起動 +label.edit.network.details=ネットワークの詳細の編集 +label.add.guest.network=ゲスト ネットワークの追加 +label.guest.networks=ゲスト ネットワーク +message.ip.address.changed=お使いの IP アドレスが変更されている可能性があります。一覧を更新しますか? その場合は、詳細ペインが閉じることに注意してください。 +state.BackingUp=バックアップ中 +state.BackedUp=バックアップ済み +label.done=完了 +label.vm.name=VM 名 +message.migrate.volume=別のプライマリ ストレージにボリュームを移行してもよろしいですか? +label.migrate.volume=別のプライマリ ストレージへのボリュームの移行 +message.create.template=テンプレートを作成してもよろしいですか? +label.create.template=テンプレートの作成 +message.download.volume.confirm=このボリュームをダウンロードしてもよろしいですか? +message.detach.disk=このディスクをデタッチしてもよろしいですか? +state.ready=準備完了 +state.Ready=準備完了 +label.vm.display.name=VM 表示名 +label.select-view=ビューの選択 +label.local.storage=ローカル ストレージ +label.direct.ips=直接 IP アドレス +label.view.all=すべて表示 label.zone.details=ゾーンの詳細 message.alert.state.detected=アラート状態が検出されました -state.Starting=出発 -state.Expunging=抹消 -state.Creating=作成 -message.decline.invitation=このプロジェクトに招待を辞退してもよろしいですか? -label.decline.invitation=衰退への招待 -message.confirm.join.project=あなたはこのプロジェクトに参加したい確認してください。 -message.join.project=これで、プロジェクトに参加しています。プロジェクトを参照するビューをプロジェクトに切り替えてください。 -label.accept.project.invitation=プロジェクトへの招待を受け入れる +state.Starting=開始中 +state.Expunging=抹消中 +state.Creating=作成中 +message.decline.invitation=このプロジェクトへの招待を辞退してもよろしいですか? +label.decline.invitation=招待の辞退 +message.confirm.join.project=このプロジェクトに参加してもよろしいですか? +message.join.project=これで、プロジェクトに参加しました。プロジェクトを参照するにはプロジェクト ビューに切り替えてください。 +label.accept.project.invitation=プロジェクトへの招待の承諾 label.token=トークン -label.project.id=プロジェクトID -message.enter.token=あなたがあなたの招待状を電​​子メールで与えられているトークンを入力してください。 -label.enter.token=トークンを入力します。 -state.Accepted=受け入れ -state.Pending=ペンディング -state.Completed=完了する -state.Declined=減少しました +label.project.id=プロジェクト ID +message.enter.token=電子メールの招待状に記載されているトークンを入力してください。 +label.enter.token=トークンの入力 +state.Accepted=承諾済み +state.Pending=保留 +state.Completed=完了 +state.Declined=辞退 label.project=プロジェクト label.invitations=招待状 -label.delete.project=プロジェクトを削除します。 -message.delete.project=このプロジェクトを削除してもよろしいですか? -message.activate.project=あなたはこのプロジェクトをアクティブにしてもよろしいですか? -label.activate.project=プロジェクトをアクティブにする -label.suspend.project=プロジェクトを一時停止 -message.suspend.project=あなたはこのプロジェクトを中断してもよろしいですか? -state.Suspended=サスペンド -label.edit.project.details=プロジェクトの詳細を編集します。 +label.delete.project=プロジェクトの削除 +message.delete.project=このプロジェクトを削除してもよろしいですか? +message.activate.project=このプロジェクトをアクティブにしてもよろしいですか? +label.activate.project=プロジェクトのアクティブ化 +label.suspend.project=プロジェクトの一時停止 +message.suspend.project=このプロジェクトを一時停止してもよろしいですか? +state.Suspended=一時停止 +label.edit.project.details=プロジェクトの詳細の編集 label.new.project=新規プロジェクト state.Active=アクティブ -state.Disabled=無効にする +state.Disabled=無効 label.projects=プロジェクト -label.make.project.owner=アカウントのプロジェクトの所有者を作る -label.remove.project.account=プロジェクトからアカウントを削除する -message.project.invite.sent=ユーザーに送信される招待し、彼らが招待を受け入れた後、彼らがプロジェクトに追加されます -label.add.account.to.project=プロジェクトにアカウントを追加する -label.revoke.project.invite=招待を取り消す +label.make.project.owner=アカウントのプロジェクト所有者設定 +label.remove.project.account=アカウントのプロジェクトからの削除 +message.project.invite.sent=ユーザーに招待状が送信されました。ユーザーが招待を承諾すると、プロジェクトに追加されます。 +label.add.account.to.project=アカウントのプロジェクトへの追加 +label.revoke.project.invite=招待の取り消し label.project.invite=プロジェクトへの招待 -label.select.project=プロジェクトを選択します。 -message.no.projects=任意のプロジェクトを持っていません。
プロジェクトセクションから新しいものを作成してください。 -message.no.projects.adminOnly=任意のプロジェクトを持っていません。
新しいプロジェクトを作成するには、管理者にお問い合わせください。 -message.pending.projects.1=あなたは、プロジェクトへの招待を保留されている。 -message.pending.projects.2=表示するには、プロジェクトの項を参照してくださいし、ドロップダウンからの招待を選択します。 -message.instanceWizard.noTemplates=使用可能な任意のテンプレートを持っていません。インスタンスウィザードを互換性のあるテンプレートを追加してください、再起動します。 +label.select.project=プロジェクトの選択 +message.no.projects=プロジェクトがありません。
プロジェクト セクションから新しいプロジェクトを作成してください。 +message.no.projects.adminOnly=プロジェクトがありません。
管理者に新しいプロジェクトの作成を依頼してください。 +message.pending.projects.1=保留中のプロジェクト招待状があります。 +message.pending.projects.2=表示するにはプロジェクト セクションに移動して、一覧から招待状を選択します。 +message.instanceWizard.noTemplates=使用可能なテンプレートがありません。互換性のあるテンプレートを追加して、インスタンスウィザードを再起動してください。 label.view=ビュー -create.template.complete=テンプレートが正常に作成された -create.template.confirm=テンプレートを作成することを確認してください。 -create.template.notification=新しいテンプレートを作成する -create.template.success=新しいテンプレートが作成されています -instances.actions.reboot.label=再起動のインスタンス -label.filterBy=によるフィルタ -label.ok=[OK] -notification.reboot.instance=再起動のインスタンス -notification.start.instance=インスタンスを起動します。 -notification.stop.instance=インスタンスを停止します。 +create.template.complete=テンプレートが正常に作成されました。 +create.template.confirm=テンプレートを作成してもよろしいですか? +create.template.notification=新しいテンプレートを作成しています +create.template.success=新しいテンプレートの作成中です +instances.actions.reboot.label=インスタンスの再起動 +label.filterBy=フィルター項目 +label.ok=OK +notification.reboot.instance=インスタンスの再起動 +notification.start.instance=インスタンスの起動 +notification.stop.instance=インスタンスの停止 label.display.name=表示名 label.zone.name=ゾーン名 ui.listView.filters.all=すべて -ui.listView.filters.mine=鉱山 -state.Running=ランニング +ui.listView.filters.mine=自分のもの +state.Running=実行中 state.Stopped=停止 -state.Destroyed=破壊された +state.Destroyed=破棄済み state.Error=エラー -message.reset.password.warning.notPasswordEnabled=このインスタンスが作成されたテンプレートには、パスワードは有効ではありません -message.reset.password.warning.notStopped=インスタンスは、その現在のパスワードを変更しようとする前に停止する必要があります。 +message.reset.password.warning.notPasswordEnabled=このインスタンスの作成に使用されたテンプレートは、パスワード管理が有効ではありません。 +message.reset.password.warning.notStopped=現在のパスワードを変更する前にインスタンスを停止する必要があります。 label.notifications=通知 -label.default.view=デフォルトのビュー -label.project.view=プロジェクトビュー +label.default.view=デフォルト ビュー +label.project.view=プロジェクト ビュー -message.add.system.service.offering=新しいシステム·サービスの提供を追加するには、次のデータを記入してください。 -message.action.delete.system.service.offering=このシステムサービスの提供を削除することを確認してください。 -label.action.delete.system.service.offering=削除システムサービスの提供 -label.hypervisor.capabilities=機能をハイパーバイザ -label.hypervisor.version=のバージョンをハイパーバイザ -label.max.guest.limit=最大ゲストの制限 -label.add.network.offering=ネットワークの提供を追加します。 -label.supported.services=サポートされているサービス -label.service.capabilities=サービス機能 +message.add.system.service.offering=新しいシステム サービス オファリングを追加するために、次のデータを入力してください。 +message.action.delete.system.service.offering=このシステム サービス オファリングを削除してもよろしいですか? +label.action.delete.system.service.offering=システム サービス オファリングの削除 +label.hypervisor.capabilities=ハイパーバイザーの機能 +label.hypervisor.version=ハイパーバイザーのバージョン +label.max.guest.limit=最大ゲスト制限 +label.add.network.offering=ネットワーク オファリングの追加 +label.supported.services=サポートされるサービス +label.service.capabilities=サービスの機能 label.guest.type=ゲストの種類 -label.specify.IP.ranges=指定したIPの範囲 -label.conserve.mode=モードを節約 -label.created.by.system=システムによって作成され -label.menu.system.service.offerings=システムサービスの提供 -label.add.system.service.offering=システムサービスの提供を追加します。 -label.redundant.router.capability=Redundant router capability -label.supported.source.NAT.type=Supported Source NAT type -label.elastic.LB=Elastic LB -label.LB.isolation=LB isolation -label.elastic.IP=Elastic IP -label.network.label.display.for.blank.value=デフォルトゲートウェイを使用する -label.xen.traffic.label=XenServerのトラフィックのラベル -label.kvm.traffic.label=KVMトラフィックのラベル -label.vmware.traffic.label=VMwareのトラフィックのラベル -label.start.IP=IPアドレスの範囲を起動します。 -label.end.IP=終了IPアドレスの範囲 -label.remove.ip.range=IPアドレス範囲を削除します。 -label.ip.ranges=IP範囲 -label.start.vlan=スタートVLAN -label.end.vlan=エンドVLAN -label.broadcast.domain.range=ドメインの範囲をブロードキャスト -label.compute=計算 -message.add.guest.network=あなたがゲストネットワークを追加したいことを確認してください -label.subdomain.access=サブドメインアクセス -label.guest.start.ip=ゲストの開始IP -label.guest.end.ip=ゲストの終了IP -label.virtual.router=Virtual Router -label.physical.network.ID=物理的なネットワークID -label.destination.physical.network.id=先の物理的なネットワークID +label.specify.IP.ranges=IP アドレスの範囲の指定 +label.conserve.mode=節約モード +label.created.by.system=システム作成 +label.menu.system.service.offerings=システム サービス オファリング +label.add.system.service.offering=システム サービス オファリングの追加 +label.redundant.router.capability=冗長ルーター機能 +label.supported.source.NAT.type=サポートされる送信元 NAT の種類 +label.elastic.LB=エラスティック負荷分散 +label.LB.isolation=負荷分散分離 +label.elastic.IP=エラスティック IP アドレス +label.network.label.display.for.blank.value=デフォルト ゲートウェイの使用 +label.xen.traffic.label=XenServer トラフィックのラベル +label.kvm.traffic.label=KVM トラフィックのラベル +label.vmware.traffic.label=VMware トラフィックのラベル +label.start.IP=開始 IP アドレス +label.end.IP=終了 IP アドレス +label.remove.ip.range=IP アドレスの範囲の削除 +label.ip.ranges=IP アドレスの範囲 +label.start.vlan=開始 VLAN +label.end.vlan=終了 VLAN +label.broadcast.domain.range=ブロードキャスト ドメインの範囲 +label.compute=コンピューティング +message.add.guest.network=ゲスト ネットワークを追加してもよろしいですか? +label.subdomain.access=サブドメイン アクセス +label.guest.start.ip=ゲストの開始 IP アドレス +label.guest.end.ip=ゲストの終了 IP アドレス +label.virtual.router=仮想ルーター +label.physical.network.ID=物理ネットワーク ID +label.destination.physical.network.id=ブリッジ先物理ネットワーク ID label.dhcp=DHCP -label.destroy.router=ルータを破壊する -message.confirm.destroy.router=このルータを破壊することを確認してください -label.change.service.offering=サービス·オファリングを変更する -label.view.console=コンソールを表示する +label.destroy.router=ルーターの破棄 +message.confirm.destroy.router=このルーターを破棄してもよろしいですか? +label.change.service.offering=サービス オファリングの変更 +label.view.console=コンソールの表示 label.redundant.state=冗長状態 -label.enable.provider=プロバイダを有効にする -message.confirm.enable.provider=このプロバイダを有効にしたいことを確認してください -label.disable.provider=プロバイダを無効にする -message.confirm.disable.provider=このプロバイダを無効にしたいことを確認してください -label.shutdown.provider=シャットダウン·プロバイダー -message.confirm.shutdown.provider=このプロバイダをシャットダウンすることを確認してください +label.enable.provider=プロバイダーの有効化 +message.confirm.enable.provider=このプロバイダーを有効にしてもよろしいですか? +label.disable.provider=プロバイダーの無効化 +message.confirm.disable.provider=このプロバイダーを無効にしてもよろしいですか? +label.shutdown.provider=プロバイダーのシャットダウン +message.confirm.shutdown.provider=このプロバイダーをシャットダウンしてもよろしいですか? label.netScaler=NetScaler -label.add.new.NetScaler=新しいNetScalerを追加する -number.of.retries=再試行の回数 +label.add.new.NetScaler=新しい NetScaler の追加 label.capacity=容量 -label.dedicated=専用の +label.dedicated=専用 label.f5=F5 -label.add.new.F5=新しいF5キーを追加する +label.add.new.F5=新しい F5 の追加 label.srx=SRX label.providers=プロバイダー -label.add.new.SRX=新しいSRXを追加します。 +label.add.new.SRX=新しい SRX の追加 label.timeout=タイムアウト -label.public.network=パブリックネットワーク -label.private.network=プライベートネットワーク -label.enable.swift=スウィフトを有効にする -confirm.enable.swift=スウィフトのサポートを有効にするには、次の情報を入力してください。 -message.after.enable.swift=スウィフトは、設定されています。注:このページを出るときは、もう一度再構成するスウィフトにはできません。 +label.public.network=パブリック ネットワーク +label.private.network=プライベート ネットワーク +label.enable.swift=Swift の有効化 +confirm.enable.swift=Swift のサポートを有効にするには、次の情報を入力してください。 +message.after.enable.swift=Swift が構成されました。注: このページを閉じると、Swift を再構成することはできません。 label.key=キー -label.delete.NetScaler=削除NetScalerは -message.confirm.delete.NetScaler=あなたがNetScalerを削除したいことを確認してください -label.delete.F5=削除F5 -message.confirm.delete.F5=F5キーを削除したいことを確認してください -label.delete.SRX=削除SRX -message.confirm.delete.SRX=あなたはSRXを削除したいことを確認してください +label.delete.NetScaler=NetScaler の削除 +message.confirm.delete.NetScaler=NetScaler を削除してもよろしいですか? +label.delete.F5=F5 の削除 +message.confirm.delete.F5=F5 を削除してもよろしいですか? +label.delete.SRX=SRX の削除 +message.confirm.delete.SRX=SRX を削除してもよろしいですか? label.pods=ポッド label.pod.name=ポッド名 -label.reserved.system.gateway=予約システムのゲートウェイ -label.reserved.system.netmask=予約システムのネットマスク -label.start.reserved.system.IP=予約システムのIPを起動します。 -label.end.reserved.system.IP=最後の予約システムのIP -label.clusters=クラスタ -label.cluster.name=クラスタ名 -label.host.MAC=ホストのMAC -label.agent.username=エージェントのユーザー名 -label.agent.password=エージェントのパスワード -message.confirm.action.force.reconnect=このホストを再接続を強制することを確認してください。 +label.reserved.system.gateway=予約済みシステム ゲートウェイ +label.reserved.system.netmask=予約済みシステム ネットマスク +label.start.reserved.system.IP=予約済み開始システム IP アドレス +label.end.reserved.system.IP=予約済み終了システム IP アドレス +label.clusters=クラスター +label.cluster.name=クラスター名 +label.host.MAC=ホストの MAC +label.agent.username=エージェント ユーザー名 +label.agent.password=エージェント パスワード +message.confirm.action.force.reconnect=このホストを強制再接続してもよろしいですか? label.resource.state=リソースの状態 -label.LUN.number=LUN # -message.confirm.remove.IP.range=あなたがこのIPアドレス範囲の削除を希望することを確認してください。 -message.tooltip.zone.name=ゾーンの名前を入力します。 -message.tooltip.dns.1=ゾーン内のVMで使用するためにDNSサーバーの名前を指定します。ゾーンのパブリックIPアドレスは、このサーバへのルートを持っている必要があります。 -message.tooltip.dns.2=ゾーン内のVMで使用するための二次DNSサーバー名を指定します。ゾーンのパブリックIPアドレスは、このサーバへのルートを持っている必要があります -message.tooltip.internal.dns.1=ゾーン内のCloudStack内部システムのVMによって使用されるDNSサーバーの名前を指定します。ポッド用のプライベートIPアドレスはこのサーバへのルートを持っている必要があります。 -message.tooltip.internal.dns.2=ゾーン内のCloudStack内部システムのVMによって使用されるDNSサーバーの名前を指定します。ポッド用のプライベートIPアドレスはこのサーバへのルートを持っている必要があります。 -message.tooltip.network.domain=ゲストVMによってアクセスされるネットワーク用のカスタムドメイン名を作成するDNSサフィックスです。 -message.tooltip.pod.name=このポッドの名前を入力します。 -message.tooltip.reserved.system.gateway=ポッド内のホストに対するゲートウェイ。 -message.tooltip.reserved.system.netmask=ポッドサブネットを定義するネットワーク接頭辞。 CIDR表記を使用しています。 -message.creating.zone=ゾーンを作成する -message.creating.physical.networks=物理的なネットワークを作成する -message.configuring.physical.networks=物理的なネットワークを構成する -message.adding.Netscaler.device=NetScalerのデバイスを追加する -message.creating.pod=ポッドを作成する -message.configuring.public.traffic=公共交通を構成する -message.configuring.storage.traffic=ストレージ·トラフィックの設定 -message.configuring.guest.traffic=ゲストのトラフィックを設定する -message.creating.cluster=クラスタの作成 -message.adding.host=ホストを追加する -message.creating.primary.storage=プライマリ·ストレージを作成する -message.creating.secondary.storage=セカンダリ·ストレージを作成する -message.Zone.creation.complete=完全なゾーンの作成 -message.enabling.zone=Enabling zone -error.something.went.wrong.please.correct.the.following=Something went wrong; please correct the following -error.could.not.enable.zone=Could not enable zone -message.zone.creation.complete.would.you.like.to.enable.this.zone=Zone creation complete. Would you like to enable this zone? -message.please.add.at.lease.one.traffic.range=Please add at lease one traffic range. -message.you.must.have.at.least.one.physical.network=You must have at least one physical network -message.please.select.a.different.public.and.management.network.before.removing=Please select a different public and management network before removing +label.LUN.number=LUN 番号 +message.confirm.remove.IP.range=この IP アドレスの範囲を削除してもよろしいですか? +message.tooltip.zone.name=ゾーンの名前です。 +message.tooltip.dns.1=ゾーン内の VM で使用する DNS サーバーの名前です。ゾーンのパブリック IP アドレスから、このサーバーに通信できる必要があります。 +message.tooltip.dns.2=ゾーン内の VM で使用する 2 番目の DNS サーバーの名前です。ゾーンのパブリック IP アドレスから、このサーバーに通信できる必要があります。 +message.tooltip.internal.dns.1=ゾーン内の CloudStack 内部システム VM で使用する DNS サーバーの名前です。ポッドのプライベート IP アドレスから、このサーバーに通信できる必要があります。 +message.tooltip.internal.dns.2=ゾーン内の CloudStack 内部システム VM で使用する DNS サーバーの名前です。ポッドのプライベート IP アドレスから、このサーバーに通信できる必要があります。 +message.tooltip.network.domain=DNS サフィックスです。このサフィックスからゲスト VM でアクセスするネットワークのカスタム ドメイン名が作成されます。 +message.tooltip.pod.name=このポッドの名前です。 +message.tooltip.reserved.system.gateway=ポッド内のホストのゲートウェイです。 +message.tooltip.reserved.system.netmask=ポッドのサブネットを定義するネットワーク プレフィックスです。CIDR 表記を使用します。 +message.creating.zone=ゾーンを作成しています +message.creating.physical.networks=物理ネットワークを作成しています +message.configuring.physical.networks=物理ネットワークを構成しています +message.adding.Netscaler.device=Netscaler デバイスを追加しています +message.creating.pod=ポッドを作成しています +message.configuring.public.traffic=パブリック トラフィックを構成しています +message.configuring.storage.traffic=ストレージ トラフィックを構成しています +message.configuring.guest.traffic=ゲスト トラフィックを構成しています +message.creating.cluster=クラスターを作成しています +message.adding.host=ホストを追加しています +message.creating.primary.storage=プライマリ ストレージを作成しています +message.creating.secondary.storage=セカンダリ ストレージを作成しています +message.Zone.creation.complete=ゾーンが作成されました +message.enabling.zone=ゾーンを有効にしています +error.something.went.wrong.please.correct.the.following=問題が発生しました。次の内容を修正してください +error.could.not.enable.zone=ゾーンを有効にできませんでした +message.zone.creation.complete.would.you.like.to.enable.this.zone=ゾーンが作成されました。このゾーンを有効にしてもよろしいですか? +message.please.add.at.lease.one.traffic.range=少なくとも 1 つトラフィックの範囲を追加してください。 +message.you.must.have.at.least.one.physical.network=少なくとも 1 つ物理ネットワークが必要です +message.please.select.a.different.public.and.management.network.before.removing=削除の前に異なるパブリックおよび管理ネットワークを選択してください。 -label.zone.type=Zone Type -label.setup.zone=Setup Zone -label.setup.network=Setup Network -label.add.resources=Add Resources -label.launch=Launch -label.set.up.zone.type=Set up zone type -message.please.select.a.configuration.for.your.zone=Please select a configuration for your zone. -message.desc.basic.zone=Provide a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering) -label.basic=Basic -message.desc.advanced.zone=For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or load balancer support. -label.advanced=Advanced -message.desc.zone=A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone. -label.physical.network=Physical Network -label.public.traffic=Public traffic -label.guest.traffic=Guest Traffic -label.storage.traffic=Storage Traffic -message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the management server. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.

Drag and drop one or more traffic types onto each physical network. -label.add.physical.network=Add physical network -label.traffic.types=Traffic Types -label.management=Management -label.guest=Guest -label.please.specify.netscaler.info=Please specify Netscaler info -message.public.traffic.in.advanced.zone=Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.

Provide at lease one range of IP addresses for internet traffic. -message.public.traffic.in.basic.zone=Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire additional IPs to implement static NAT between their instances and the public IP. -message.add.pod.during.zone.creation=Each zone must contain in one or more pods, and we will add the first pod now. A pod contains hosts and primary storage servers, which you will add in a later step. First, configure a range of reserved IP addresses for CloudStack's internal management traffic. The reserved IP range must be unique for each zone in the cloud. -message.guest.traffic.in.advanced.zone=Guest network traffic is communication between end-user virtual machines. Specify a range of VLAN IDs to carry guest traffic for each physical network. -message.guest.traffic.in.basic.zone=Guest network traffic is communication between end-user virtual machines. Specify a range of IP addresses that CloudStack can assign to guest VMs. Make sure this range does not overlap the reserved system IP range. -message.storage.traffic=Traffic between CloudStack's internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs. Please configure storage traffic here. -message.desc.cluster=Each pod must contain one or more clusters, and we will add the first cluster now. A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Each cluster consists of one or more hosts and one or more primary storage servers. -message.desc.host=Each cluster must contain at lease one host (computer) for guest VMs to run on, and we will add the first host now. For a host to function in CloudStack, you must install hypervisor software on the host, assign an IP address to the host, and ensure the host is connected to the CloudStack management server.

Give the host's DNS or IP address, the user name (usually root) and password, and any labels you use to categorize hosts. -message.desc.primary.storage=Each cluster must contain one or more primary storage servers, and we will add the first one now. Primary storage contains the disk volumes for all the VMs running on hosts in the cluster. Use any standards-compliant protocol that is supported by the underlying hypervisor. -message.desc.secondary.storage=Each zone must have at lease one NFS or secondary storage server, and we will add the first one now. Secondary storage stores VM templates, ISO images, and VM disk volume snapshots. This server must be available to all hosts in the zone.

Provide the IP address and exported path. -label.launch.zone=Launch zone -message.please.wait.while.zone.is.being.created=Please wait while your zone is being created; this may take a while... +label.zone.type=ゾーンの種類 +label.setup.zone=ゾーンのセットアップ +label.setup.network=ネットワークのセットアップ +label.add.resources=リソースの追加 +label.launch=起動 +label.set.up.zone.type=ゾーンの種類のセットアップ +message.please.select.a.configuration.for.your.zone=ゾーンの構成を選択してください。 +message.desc.basic.zone=各 VM インスタンスに IP アドレスがネットワークから直接割り当てられる、単一のネットワークを提供します。セキュリティ グループ (発信元 IP アドレスのフィルター) のようなレイヤー 3 レベルの方法でゲストを分離できます。 +label.basic=基本 +message.desc.advanced.zone=より洗練されたネットワーク技術をサポートします。このネットワーク モデルを選択すると、より柔軟にゲストのネットワークを定義し、ファイアウォール、VPN、負荷分散装置のサポートのようなカスタマイズしたネットワーク オファリングを提供できます。 +label.advanced=詳細 +message.desc.zone=ゾーンは CloudStack 環境内の最大の組織単位で、通常、単一のデータセンターに相当します。ゾーンによって物理的な分離と冗長性が提供されます。ゾーンは 1 つ以上のポッド (各ポッドはホストとプライマリ ストレージ サーバーから構成されます) と、ゾーン内のすべてのポッドで共有されるセカンダリ ストレージ サーバーから構成されます。 +label.physical.network=物理ネットワーク +label.public.traffic=パブリック トラフィック +label.guest.traffic=ゲスト トラフィック +label.storage.traffic=ストレージ トラフィック +message.setup.physical.network.during.zone.creation=拡張ゾーンを追加するときは、1 つ以上の物理ネットワークをセットアップする必要があります。各ネットワークは管理サーバー上の 1 つの NIC に対応します。各物理ネットワークでは、組み合わせに制限がありますが、1 つ以上の種類のトラフィックを通信できます。

各物理ネットワークに対してトラフィックの種類をドラッグアンドドロップしてください。 +label.add.physical.network=物理ネットワークの追加 +label.traffic.types=トラフィックの種類 +label.management=管理 +label.guest=ゲスト +label.please.specify.netscaler.info=Netscaler 情報を指定してください +message.public.traffic.in.advanced.zone=クラウド内の VM がインターネットにアクセスすると、パブリック トラフィックが生成されます。このために、一般にアクセス可能な IP アドレスを割り当てる必要があります。エンド ユーザーは CloudStack のユーザー インターフェイスを使用してこれらの IP アドレスを取得し、ゲスト ネットワークとパブリック ネットワークの間に NAT を実装することができます。

インターネット トラフィックのために、少なくとも 1 つ IP アドレスの範囲を入力してください。 +message.public.traffic.in.basic.zone=クラウド内の VM がインターネットにアクセスするかインターネット経由でクライアントにサービスを提供すると、パブリック トラフィックが生成されます。このために、一般にアクセス可能な IP アドレスを割り当てる必要があります。インスタンスを作成すると、ゲスト IP アドレスのほかにこのパブリック IP アドレスの範囲からアドレスが 1 つインスタンスに割り当てられます。パブリック IP アドレスとゲスト IP アドレスの間に、静的な 1 対 1 の NAT が自動的にセットアップされます。エンド ユーザーは CloudStack のユーザー インターフェイスを使用して追加の IP アドレスを取得し、インスタンスとパブリック IP アドレスの間に静的 NAT を実装することもできます。 +message.add.pod.during.zone.creation=各ゾーンには 1 つ以上のポッドが必要です。今ここで最初のポッドを追加します。ポッドはホストとプライマリ ストレージ サーバーから構成されますが、これらは後の手順で追加します。最初に、CloudStack の内部管理トラフィックのために IP アドレスの範囲を予約します。IP アドレスの範囲は、クラウド内の各ゾーンで重複しないように予約する必要があります。 +message.guest.traffic.in.advanced.zone=ゲスト ネットワーク トラフィックは、エンド ユーザーの仮想マシン間の通信です。各物理ネットワークのゲスト トラフィックを通信するための VLAN ID の範囲を指定してください。 +message.guest.traffic.in.basic.zone=ゲスト ネットワーク トラフィックは、エンド ユーザーの仮想マシン間の通信です。CloudStack でゲスト VM に割り当てられる IP アドレスの範囲を指定してください。この範囲が予約済みのシステム IP アドレスの範囲と重複しないように注意してください。 +message.storage.traffic=ホストや CloudStack システム VM など、管理サーバーと通信する CloudStack の内部リソース間のトラフィックです。ここでストレージ トラフィックを構成してください。 +message.desc.cluster=各ポッドには 1 つ以上のクラスターが必要です。今ここで最初のクラスターを追加します。クラスターはホストをグループ化する方法です。1 つのクラスター内のホストはすべて同一のハードウェアから構成され、同じハイパーバイザーを実行し、同じサブネット上にあり、同じ共有ストレージにアクセスします。各クラスターは 1 つ以上のホストと 1 つ以上のプライマリ ストレージ サーバーから構成されます。 +message.desc.host=各クラスターには少なくとも 1 つ、ゲスト VM を実行するためのホスト (コンピューター) が必要です。今ここで最初のホストを追加します。CloudStack でホストを機能させるには、ホストにハイパーバイザーをインストールして IP アドレスを割り当て、ホストが CloudStack 管理サーバーに接続していることを確認します。

ホストの DNS 名または IP アドレス、ユーザー名 (通常は root) とパスワード、およびホストの分類に使用するラベルを入力してください。 +message.desc.primary.storage=各クラスターには少なくとも 1 つ、プライマリ ストレージ サーバーが必要です。今ここで最初のサーバーを追加します。プライマリ ストレージは、クラスター内のホスト上で動作するすべての VM のディスク ボリュームを格納します。基礎となるハイパーバイザーでサポートされる、標準に準拠したプロトコルを使用してください。 +message.desc.secondary.storage=各ゾーンには少なくとも 1 つ、NFS つまりセカンダリ ストレージ サーバーが必要です。今ここで最初のサーバーを追加します。セカンダリ ストレージは VM テンプレート、ISO イメージ、およびVM ディスク ボリュームのスナップショットを格納します。このサーバーはゾーン内のすべてのホストで使用できる必要があります。

IP アドレスとエクスポートされたパスを入力してください。 +label.launch.zone=ゾーンの起動 +message.please.wait.while.zone.is.being.created=ゾーンが作成されるまでしばらくお待ちください... -label.load.balancing=ロード·バランシング; -label.static.nat.enabled=Static NAT Enabled -label.zones=Zones -label.view.more=View more -label.number.of.zones=Number of Zones -label.number.of.pods=Number of Pods -label.number.of.clusters=Number of Clusters -label.number.of.hosts=Number of Hosts -label.total.hosts=Total Hosts -label.total.CPU=Total CPU -label.total.memory=Total Memory -label.total.storage=Total Storage +label.load.balancing=負荷分散 +label.static.nat.enabled=静的 NAT 有効 +label.zones=ゾーン +label.view.more=さらに表示 +label.number.of.zones=ゾーン数 +label.number.of.pods=ポッド数 +label.number.of.clusters=クラスター数 +label.number.of.hosts=ホスト数 +label.total.hosts=ホスト合計 +label.total.CPU=CPU 合計 +label.total.memory=メモリ合計 +label.total.storage=ストレージ合計 #after 2012-02-12 label.purpose=目的 @@ -460,860 +459,860 @@ label.purpose=目的 -label.action.migrate.router=ルータを移行する -label.action.migrate.router.processing=ルータの移行.... -message.migrate.router.confirm=あなたがするようにルータを移行したいホストを確認してください。 -label.migrate.router.to=にルータを移行する +label.action.migrate.router=ルーターの移行 +label.action.migrate.router.processing=ルーターを移行しています... +message.migrate.router.confirm=ルーターの移行先は次のホストでよろしいですか? +label.migrate.router.to=ルーターの移行: -label.action.migrate.systemvm=システムVMを移行する -label.action.migrate.systemvm.processing=システムのVMを移行.... -message.migrate.systemvm.confirm=あなたがシステムのVMを移行するホストを確認してください。 -label.migrate.systemvm.to=システムVMへの移行 +label.action.migrate.systemvm=システムVM の移行 +label.action.migrate.systemvm.processing=システム VM を移行しています... +message.migrate.systemvm.confirm=システム VM の移行先は次のホストでよろしいですか? +label.migrate.systemvm.to=システム VM の移行: -mode=モードの -side.by.side=サイドからサイド -inline=インライン +mode=モード +side.by.side=並列 +inline=直列 -extractable=抽出可能な +extractable=抽出可能 label.ocfs2=OCFS2 -label.action.edit.host=ホストを編集する +label.action.edit.host=ホストの編集 network.rate=ネットワーク速度 -ICMP.type=ICMPタイプ -ICMP.code=ICMPコード +ICMP.type=ICMP の種類 +ICMP.code=ICMP コード image.directory=画像ディレクトリ -label.action.create.template.from.vm=VMからのテンプレートを作成する -label.action.create.template.from.volume=ボリュームからのテンプレートを作成する +label.action.create.template.from.vm=VM からのテンプレート作成 +label.action.create.template.from.volume=ボリュームからのテンプレート作成 -message.vm.create.template.confirm=テンプレートの作成は自動的にVMを再起動します。 +message.vm.create.template.confirm=テンプレートを作成すると VM が自動的に再起動されます。 -label.action.manage.cluster=クラスタ管理 -message.action.manage.cluster=クラスタを管理登録してもよろしいですか? -label.action.manage.cluster.processing=クラスタを管理登録しています.... +label.action.manage.cluster=クラスターの管理 +message.action.manage.cluster=クラスターを管理対象にしてもよろしいですか? +label.action.manage.cluster.processing=クラスターを管理対象に登録しています... -label.action.unmanage.cluster=非管理対象クラスタ -message.action.unmanage.cluster=クラスタを非管理対象にしてもよろしいですか? -label.action.unmanage.cluster.processing=クラスタを非管理対象にしています.... +label.action.unmanage.cluster=管理対象外のクラスター +message.action.unmanage.cluster=クラスターを管理対象から外してもよろしいですか? +label.action.unmanage.cluster.processing=クラスターを管理対象から登録解除しています... -label.allocation.state=アロケーション状態 -managed.state=管理された状態 +label.allocation.state=割り当て状態 +managed.state=管理対象状態 label.default.use=デフォルト使用 -label.host.tags=ホストタグ +label.host.tags=ホスト タグ label.cidr=CIDR -label.cidr.list=ソースCIDR +label.cidr.list=発信元 CIDR -label.storage.tags=ストレージタグ +label.storage.tags=ストレージ タグ -label.redundant.router=冗長化ルータ +label.redundant.router=冗長ルーター label.is.redundant.router=冗長 force.delete=強制削除 -force.delete.domain.warning=警告:このオプションを選択すると、すべての子ドメインおよび関連するすべてのアカウントとそのリソースは削除されます。 +force.delete.domain.warning=警告: このオプションを選択すると、すべての子ドメインおよび関連するすべてのアカウントとそのリソースが削除されます。 -force.remove=強制削除 -force.remove.host.warning=警告:このオプションを選択すると、実行中のすべての仮想マシンを強制的に停止して、クラスタからホストを削除します。 +force.remove=強制解除 +force.remove.host.warning=警告: このオプションを選択すると、実行中のすべての仮想マシンが強制的に停止され、クラスターからこのホストが強制的に解除されます。 force.stop=強制停止 -force.stop.instance.warning=警告:このインスタンスの停止を強制すると、あなたの最後のオプションでなければなりません。それは、データの損失だけでなく、仮想マシンの状態の一貫性のない動作が発生する可能性があります。 +force.stop.instance.warning=警告: インスタンスの強制停止は、最終手段にしてください。データを損失するだけでなく、仮想マシンの動作が一貫しなくなる可能性があります。 label.PreSetup=PreSetup -label.SR.name=SR名-ラベル -label.SharedMountPoint = SharedMountPoint +label.SR.name = SR 名ラベル +label.SharedMountPoint=SharedMountPoint label.clvm=CLVM -label.volgroup=Volume Group -label.VMFS.datastore=VMFSデータストア +label.volgroup=ボリューム グループ +label.VMFS.datastore=VMFS データストア -label.network.device=ネットワークデバイス -label.add.network.device=ネットワークデバイス追加 -label.network.device.type=ネットワークデバイスの種類 -label.DHCP.server.type=DHCPサーバの種類 -label.Pxe.server.type=PXEサーバの種類 -label.PING.storage.IP=PING対象ストレージのIPアドレス -label.PING.dir=PING対象ディレクトリ -label.TFTP.dir=TFTP対象ディレクトリ -label.PING.CIFS.username=PING CIFS ユーザ名 +label.network.device=ネットワーク デバイス +label.add.network.device=ネットワーク デバイスの追加 +label.network.device.type=ネットワーク デバイスの種類 +label.DHCP.server.type=DHCP サーバーの種類 +label.Pxe.server.type=PXE サーバーの種類 +label.PING.storage.IP=PING 対象のストレージ IP アドレス +label.PING.dir=PING ディレクトリ +label.TFTP.dir=TFTP ディレクトリ +label.PING.CIFS.username=PING CIFS ユーザー名 label.PING.CIFS.password=PING CIFS パスワード -label.CPU.cap=CPU Cap +label.CPU.cap=CPU 制限 -label.network.domain=ネットワークドメイン -label.action.enable.zone=ゾーン有効化 -label.action.enable.zone.processing=ゾーンを有効化しています.... -message.action.enable.zone=このゾーンを有効にすることを確認してください。 -label.action.disable.zone=ゾーン無効化 -label.action.disable.zone.processing=ゾーンを無効化しています.... -message.action.disable.zone=このゾーンを無効にすることを確認してください。 +label.action.enable.zone=ゾーンの有効化 +label.action.enable.zone.processing=ゾーンを有効にしています... +message.action.enable.zone=このゾーンを有効にしてもよろしいですか? +label.action.disable.zone=ゾーンの無効化 +label.action.disable.zone.processing=ゾーンを無効にしています... +message.action.disable.zone=このゾーンを無効にしてもよろしいですか? -label.action.enable.pod=Pod有効化 -label.action.enable.pod.processing=Podを有効化しています.... -message.action.enable.pod=このPodを有効にすることを確認してください。 -label.action.disable.pod=Pod無効化 -label.action.disable.pod.processing=Podを無効化しています.... -message.action.disable.pod=このPodを無効にすることを確認してください。 +label.action.enable.pod=ポッドの有効化 +label.action.enable.pod.processing=ポッドを有効にしています... +message.action.enable.pod=このポッドを有効にしてもよろしいですか? +label.action.disable.pod=ポッドの無効化 +label.action.disable.pod.processing=ポッドを無効にしています... +message.action.disable.pod=このポッドを無効にしてもよろしいですか? -label.action.enable.cluster=クラスタ有効化 -label.action.enable.cluster.processing=クラスタを有効化しています.... -message.action.enable.cluster=このクラスタを有効にすることを確認してください。 -label.action.disable.cluster=クラスタ無効化 -label.action.disable.cluster.processing=クラスタを無効化しています.... -message.action.disable.cluster=このクラスタを無効にすることを確認してください。 +label.action.enable.cluster=クラスターの有効化 +label.action.enable.cluster.processing=クラスターを有効にしています... +message.action.enable.cluster=クラスターを有効にしてもよろしいですか? +label.action.disable.cluster=クラスターの無効化 +label.action.disable.cluster.processing=クラスターを無効にしています... +message.action.disable.cluster=クラスターを無効にしてもよろしいですか? -label.account =アカウント -label.account.id =アカウントID -label.account.name =アカウント名 -label.account.specific =アカウント固有 -label.accounts =アカウント -label.acquire.new.ip =新規IPアドレス取得 -label.show.ingress.rule=イングレスルールを表示する -label.hide.ingress.rule=イングレスルールを表示しない -label.action.attach.disk.processing =ディスクをアタッチしています.... -label.action.attach.disk=ディスクをアタッチ -label.action.attach.iso.processing =ISOをアタッチしています.... -label.action.attach.iso= ISOをアタッチ -label.action.cancel.maintenance.mode =メンテナンスモードをキャンセル -label.action.cancel.maintenance.mode.processing =メンテナンスモードをキャンセルしています.... -label.action.change.password =パスワード変更 -label.action.change.service =サービス変更 -label.action.change.service.processingは=サービスを変更しています.... -label.action.copy.ISO =ISOコピー -label.action.copy.ISO.processing =ISOをコピーしています.... -label.action.copy.template =テンプレートコピー -label.action.copy.template.processing =テンプレートをコピーしています.... -label.action.create.template =テンプレート作成 -label.action.create.template.processing =テンプレートを作成しています.... -label.action.create.vm.processing= VMを作成しています.... -label.action.create.vm=VM作成 -label.action.create.volume.processing =ボリュームを作成しています.... -label.action.create.volume=ボリューム作成 -label.action.delete.IP.range =IPアドレス範囲削除 -label.action.delete.IP.range.processing=IPアドレス範囲を削除しています.... -label.action.delete.ISO =ISO削除 -label.action.delete.ISO.processing=ISOを削除しています.... -label.action.delete.account =アカウント削除 -label.action.delete.account.processing=アカウントを削除しています.... -label.action.delete.cluster =クラスタ削除 -label.action.delete.cluster.processing=クラスタを削除しています.... -label.action.delete.disk.offering =ディスクオファリング削除 -label.action.delete.disk.offering.processing=ディスクオファリングを削除しています.... +label.account.id=アカウント ID +label.account.name=アカウント名 +label.account.specific=アカウント固有 +label.account=アカウント +label.accounts=アカウント +label.acquire.new.ip=新しい IP アドレスの取得 +label.show.ingress.rule=受信規則の表示 +label.hide.ingress.rule=受信規則を隠す +label.action.attach.disk.processing=ディスクをアタッチしています... +label.action.attach.disk=ディスクのアタッチ +label.action.attach.iso.processing=ISO をアタッチしています... +label.action.attach.iso=ISO のアタッチ +label.action.cancel.maintenance.mode.processing=保守モードをキャンセルしています... +label.action.cancel.maintenance.mode=保守モードのキャンセル +label.action.change.password=パスワードの変更 +label.action.change.service.processing=サービスを変更しています... +label.action.change.service=サービスの変更 +label.action.copy.ISO.processing=ISO をコピーしています... +label.action.copy.ISO=ISO のコピー +label.action.copy.template.processing=テンプレートをコピーしています... +label.action.copy.template=テンプレートのコピー +label.action.create.template.processing=テンプレートを作成しています... +label.action.create.template=テンプレートの作成 +label.action.create.vm.processing=VM を作成しています... +label.action.create.vm=VM の作成 +label.action.create.volume.processing=ボリュームを作成しています... +label.action.create.volume=ボリュームの作成 +label.action.delete.IP.range.processing=IP アドレスの範囲を削除しています... +label.action.delete.IP.range=IP アドレスの範囲の削除 +label.action.delete.ISO.processing=ISO を削除しています... +label.action.delete.ISO=ISO の削除 +label.action.delete.account.processing=アカウントを削除しています... +label.action.delete.account=アカウントの削除 +label.action.delete.cluster.processing=クラスターを削除しています... +label.action.delete.cluster=クラスターの削除 +label.action.delete.disk.offering.processing=ディスク オファリングを削除しています... +label.action.delete.disk.offering=ディスク オファリングの削除 -label.action.update.resource.count=アップデートリソースカウント -label.action.update.resource.count.processing=リソースのカウントを更新.... +label.action.update.resource.count=リソース数の更新 +label.action.update.resource.count.processing=リソース数を更新しています... -label.action.delete.domain =ドメイン削除 -label.action.delete.domain.processing=ドメインを削除しています.... -label.action.delete.firewall =ファイアウォール削除 -label.action.delete.firewall.processing=ファイアウォールを削除しています.... -label.action.delete.ingress.rule =イングレスルール削除 -label.action.delete.ingress.rule.processing=イングレスルールを削除しています.... -label.action.delete.load.balancer =ロードバランサ削除 -label.action.delete.load.balancer.processing=ロードバランサを削除しています... -label.action.edit.network=ネットワークを編集する -label.action.delete.network =ネットワーク削除 -label.action.delete.network.processing=ネットワークを削除しています.... -label.action.delete.pod =Pod削除 -label.action.delete.pod.processing=Podを削除しています.... -label.action.delete.primary.storage =プライマリストレージ削除 -label.action.delete.primary.storage.processing =プライマリストレージを削除しています.... -label.action.delete.secondary.storage =セカンダリストレージ削除 -label.action.delete.secondary.storage.processing =セカンダリストレージを削除しています.... -label.action.delete.security.group =セキュリティグループ削除 -label.action.delete.security.group.processing=セキュリティグループを削除しています.... -label.action.delete.service.offering =サービスオファリングを削除 -label.action.delete.service.offering.processing=サービスオファリングを削除しています.... -label.action.delete.snapshot =スナップショット削除 -label.action.delete.snapshot.processing=スナップショットを削除しています.... -label.action.delete.template =テンプレート削除 -label.action.delete.template.processing =テンプレートを削除しています.... -label.action.delete.user =ユーザ削除 -label.action.delete.user.processing =ユーザを削除しています.... -label.action.delete.volume =ボリューム削除 -label.action.delete.volume.processing =ボリュームを削除しています.... -label.action.delete.zone =Zone削除 -label.action.delete.zone.processing=Zoneを削除しています.... -label.action.destroy.instance =インスタンス破棄 -label.action.destroy.instance.processing =インスタンスを破棄しています.... -label.action.destroy.systemvm.processing=システムVMを破棄しています.... -label.action.destroy.systemvm=システムVM破棄 -label.action.detach.disk =ディスクをデタッチ -label.action.detach.disk.processing =ディスクをデタッチしています.... -label.action.detach.iso =ISOをデタッチ -label.action.detach.iso.processing =ISOをデタッチしています.... -label.action.disable.account =アカウント無効化 -label.action.disable.account.processing =アカウントを無効化しています.... -label.action.disable.static.NAT =スタティックNAT無効化 -label.action.disable.static.NAT.processing =スタティックNATを無効化しています.... -label.action.disable.user =ユーザ無効化 -label.action.disable.user.processing =ユーザを無効化しています.... -label.action.download.ISO =ISOダウンロード -label.action.download.template =テンプレートダウンロード -label.action.download.volume =ボリュームダウンロード -label.action.download.volume.processing =ボリュームをダウンロードしています.... -label.action.edit.ISO=ISO編集 -label.action.edit.account=アカウント編集 -label.action.edit.disk.offering=ディスクオファリング編集 -label.action.edit.domain=ドメイン編集 -label.action.edit.global.setting=グローバル設定編集 -label.action.edit.instance=インスタンス編集 -label.action.edit.network.offering=ネットワークオファリング編集 -label.action.edit.pod=Pod編集 -label.action.edit.primary.storage=プライマリストレージ編集 -label.action.edit.resource.limits =リソース制限編集 -label.action.edit.service.offering=サービスオファリング編集 -label.action.edit.template=テンプレート編集 -label.action.edit.user=ユーザ編集 -label.action.edit.zone=Zone編集 -label.action.enable.account =アカウント有効化 -label.action.enable.account.processing =アカウントを有効にしています.... -label.action.enable.maintenance.mode =メンテナンスモードに移行 -label.action.enable.maintenance.mode.processing =メンテナンスモードに移行しています.... -label.action.enable.static.NAT =スタティックNAT有効化 -label.action.enable.static.NAT.processing =スタティックNATを有効化しています.... -label.action.enable.user =ユーザ有効化 -label.action.enable.user.processing =ユーザを有効化しています.... -label.action.force.reconnect.processing =再接続しています.... +label.action.delete.domain=ドメインの削除 +label.action.delete.domain.processing=ドメインを削除しています... + +label.action.delete.firewall.processing=ファイアウォールを削除しています... +label.action.delete.firewall=ファイアウォール規則の削除 +label.action.delete.ingress.rule.processing=受信規則を削除しています... +label.action.delete.ingress.rule=受信規則の削除 +label.action.delete.load.balancer.processing=負荷分散装置を削除しています... +label.action.delete.load.balancer=負荷分散規則の削除 +label.action.edit.network.processing=ネットワークを編集しています... +label.action.edit.network=ネットワークの編集 +label.action.delete.network.processing=ネットワークを削除しています... +label.action.delete.network=ネットワークの削除 +label.action.delete.pod.processing=ポッドを削除しています... +label.action.delete.pod=ポッドの削除 +label.action.delete.primary.storage.processing=プライマリ ストレージを削除しています... +label.action.delete.primary.storage=プライマリ ストレージの削除 +label.action.delete.secondary.storage.processing=セカンダリ ストレージを削除しています... +label.action.delete.secondary.storage=セカンダリ ストレージの削除 +label.action.delete.security.group.processing=セキュリティ グループを削除しています... +label.action.delete.security.group=セキュリティ グループの削除 +label.action.delete.service.offering.processing=サービス オファリングを削除しています... +label.action.delete.service.offering=サービス オファリングの削除 +label.action.delete.snapshot.processing=スナップショットを削除しています... +label.action.delete.snapshot=スナップショットの削除 +label.action.delete.template.processing=テンプレートを削除しています... +label.action.delete.template=テンプレートの削除 +label.action.delete.user.processing=ユーザーを削除しています... +label.action.delete.user=ユーザーの削除 +label.action.delete.volume.processing=ボリュームを削除しています... +label.action.delete.volume=ボリュームの削除 +label.action.delete.zone.processing=ゾーンを削除しています... +label.action.delete.zone=ゾーンの削除 +label.action.destroy.instance.processing=インスタンスを破棄しています... +label.action.destroy.instance=インスタンスの破棄 +label.action.destroy.systemvm.processing=システム VM を破棄しています... +label.action.destroy.systemvm=システム VM の破棄 +label.action.detach.disk.processing=ディスクをデタッチしています... +label.action.detach.disk=ディスクのデタッチ +label.action.detach.iso.processing=ISO をデタッチしています... +label.action.detach.iso=ISO のデタッチ +label.action.disable.account.processing=アカウントを無効にしています... +label.action.disable.account=アカウントの無効 +label.action.disable.static.NAT.processing=静的 NAT を無効にしています... +label.action.disable.static.NAT=静的 NAT の無効化 +label.action.disable.user.processing=ユーザーを無効にしています... +label.action.disable.user=ユーザーの無効化 +label.action.download.ISO=ISO のダウンロード +label.action.download.template=テンプレートのダウンロード +label.action.download.volume.processing=ボリュームをダウンロードしています... +label.action.download.volume=ボリュームのダウンロード +label.action.edit.ISO=ISO の編集 +label.action.edit.account=アカウントの編集 +label.action.edit.disk.offering=ディスク オファリングの編集 +label.action.edit.domain=ドメインの編集 +label.action.edit.global.setting=グローバル設定の編集 +label.action.edit.instance=インスタンスの編集 +label.action.edit.network.offering=ネットワーク オファリングの編集 +label.action.edit.pod=ポッドの編集 +label.action.edit.primary.storage=プライマリ ストレージの編集 +label.action.edit.resource.limits=リソース制限の編集 +label.action.edit.service.offering=サービス オファリングの編集 +label.action.edit.template=テンプレートの編集 +label.action.edit.user=ユーザーの編集 +label.action.edit.zone=ゾーンの編集 +label.action.enable.account.processing=アカウントを有効にしています... +label.action.enable.account=アカウントの有効化 +label.action.enable.maintenance.mode.processing=保守モードを有効にしています... +label.action.enable.maintenance.mode=保守モードの有効化 +label.action.enable.static.NAT.processing=静的 NAT を有効にしています... +label.action.enable.static.NAT=静的 NAT の有効化 +label.action.enable.user.processing=ユーザーを有効にしています... +label.action.enable.user=ユーザーの有効化 +label.action.force.reconnect.processing=再接続しています... label.action.force.reconnect=強制再接続 -label.action.generate.keys =キー生成 -label.action.generate.keys.processing =キーを生成しています.... -label.action.lock.account =アカウントロック -label.action.lock.account.processing =アカウントをロックしています.... -label.action.migrate.instance=インスタンス移行 -label.action.migrate.instance.processing = インスタンスを移行しています.... -label.action.reboot.instance =インスタンス再起動 -label.action.reboot.instance.processing =インスタンスを再起動しています.... -label.action.reboot.router =ルータ再起動 -label.action.reboot.router.processing =ルータを再起動しています.... -label.action.reboot.systemvm =システムVM再起動 -label.action.reboot.systemvm.processing =システムVMを再起動しています.... -label.action.recurring.snapshot =定期スナップショット -label.action.release.ip =IPアドレス解放 -label.action.release.ip.processing =IPアドレスを解放しています.... -label.action.remove.host.processing =ホストを削除しています.... -label.action.remove.host=ホスト削除 -label.action.reset.password =パスワードリセット -label.action.reset.password.processing =パスワードをリセットしています.... -label.action.resource.limits =リソース制限 -label.action.restore.instance.processing =インスタンスをリストアしています.... -label.action.restore.instance=インスタンスリストア -label.action.start.instance =インスタンス起動 -label.action.start.instance.processing=インスタンスを起動しています.... -label.action.start.router =ルータ起動 -label.action.start.router.processing=ルータを起動しています.... -label.action.start.systemvm =システムVM開始 -label.action.start.systemvm.processing=はシステムVMを起動しています.... -label.action.stop.instance =インスタンス停止 -label.action.stop.instance.processing =インスタンスを停止しています.... -label.action.stop.router =ルータ停止 -label.action.stop.router.processing =ルータを停止しています.... -label.action.stop.systemvm =システムVM停止 -label.action.stop.systemvm.processing =システムVMを指定しています.... -label.action.take.snapshot.processing=スナップショットを作成しています.... -label.action.take.snapshot=スナップショット作成 -label.action.update.OS.preference = OS優先設定アップデート -label.action.update.OS.preference.processing =OS優先設定をアップデートしています.... -label.actions =アクション -label.active.sessions =アクティブセッション -label.add =追加 -label.add.account =アカウント追加 -label.add.by.cidr=CIDR毎追加 -label.add.by.group =グループ毎追加 -label.add.cluster =クラスタ追加 -label.add.direct.iprange =ダイレクトIPアドレス範囲追加 -label.add.disk.offering =ディスクオファリング追加 -label.add.domain =ドメイン追加 -label.add.firewall =ファイアウォール追加 -label.add.host = ホスト追加 -label.add.ingress.rule =イングレスルール追加 -label.add.ip.range =IPアドレス範囲追加 -label.add.iso =ISO追加 -label.add.load.balancer =ロードバランサ追加 -label.add.more=その他追加 -label.add.network =ネットワーク追加 -label.add.pod =Pod追加 -label.add.primary.storage=プライマリストレージ追加 -label.add.secondary.storage=セカンダリストレージ追加 -label.add.security.group =セキュリティグループ追加 -label.add.service.offering =サービスオファリング追加 -label.add.template =テンプレート追加 -label.add.user =ユーザ追加 -label.add.vlan = VLAN追加 -label.add.volume=ボリューム追加 -label.add.zone =Zone追加 -label.adding =追加 -label.adding.cluster =クラスタ追加 -label.adding.failed =追加失敗 -label.adding.pod =Pod追加 -label.adding.processing=追加しています.... -label.adding.succeeded=追加成功 -label.adding.user =ユーザ追加 -label.adding.zone =Zone追加 -label.additional.networks =追加ネットワーク -label.admin =管理者 -label.admin.accounts =管理者アカウント -label.advanced =アドバンス -label.advanced.mode =アドバンスモード -label.advanced.search =アドバンス検索 +label.action.generate.keys.processing=キーを生成しています... +label.action.generate.keys=キーの生成 +label.action.lock.account.processing=アカウントをロックしています... +label.action.lock.account=アカウントのロック +label.action.migrate.instance=インスタンスの移行 +label.action.migrate.instance.processing=インスタンスを移行しています... +label.action.reboot.instance.processing=インスタンスを再起動しています... +label.action.reboot.instance=インスタンスの再起動 +label.action.reboot.router.processing=ルーターを再起動しています... +label.action.reboot.router=ルーターの再起動 +label.action.reboot.systemvm.processing=システム VM を再起動しています... +label.action.reboot.systemvm=システム VM の再起動 +label.action.recurring.snapshot=定期スナップショット +label.action.release.ip.processing=IP アドレスを解放しています... +label.action.release.ip=IP アドレスの解放 +label.action.remove.host.processing=ホストを削除しています... +label.action.remove.host=ホストの削除 +label.action.reset.password.processing=パスワードをリセットしています... +label.action.reset.password=パスワードのリセット +label.action.resource.limits=リソース制限 +label.action.restore.instance.processing=インスタンスを復元しています... +label.action.restore.instance=インスタンスの復元 +label.action.start.instance.processing=インスタンスを起動しています... +label.action.start.instance=インスタンスの起動 +label.action.start.router.processing=ルーターを起動しています... +label.action.start.router=ルーターの起動 +label.action.start.systemvm.processing=システム VM を起動しています... +label.action.start.systemvm=システム VM の起動 +label.action.stop.instance.processing=インスタンスを停止しています... +label.action.stop.instance=インスタンスの停止 +label.action.stop.router.processing=ルーターを停止しています... +label.action.stop.router=ルーターの停止 +label.action.stop.systemvm.processing=システム VM を停止しています... +label.action.stop.systemvm=システム VM の停止 +label.action.take.snapshot.processing=スナップショットを作成しています.... +label.action.take.snapshot=スナップショットの作成 +label.action.update.OS.preference.processing=OS 基本設定を更新しています... +label.action.update.OS.preference=OS 基本設定の更新 +label.actions=操作 +label.active.sessions=アクティブなセッション +label.add.account=アカウントの追加 +label.add.by.cidr=CIDR で追加 +label.add.by.group=グループで追加 +label.add.cluster=クラスターの追加 +label.add.direct.iprange=直接 IP アドレスの範囲の追加 +label.add.disk.offering=ディスク オファリングの追加 +label.add.domain=ドメインの追加 +label.add.firewall=ファイアウォール規則の追加 +label.add.host=ホストの追加 +label.add.ingress.rule=受信規則の追加 +label.add.ip.range=IP アドレスの範囲の追加 +label.add.iso=ISO の追加 +label.add.load.balancer=負荷分散装置の追加 +label.add.more=そのほかの項目の追加 +label.add.network=ネットワークの追加 +label.add.pod=ポッドの追加 +label.add.primary.storage=プライマリ ストレージの追加 +label.add.secondary.storage=セカンダリ ストレージの追加 +label.add.security.group=セキュリティ グループの追加 +label.add.service.offering=サービス オファリングの追加 +label.add.template=テンプレートの追加 +label.add.user=ユーザーの追加 +label.add.vlan=VLAN の追加 +label.add.volume=ボリュームの追加 +label.add.zone=ゾーンの追加 +label.add=追加 +label.adding.cluster=クラスターを追加しています +label.adding.failed=追加できませんでした +label.adding.pod=ポッドを追加しています +label.adding.processing=追加しています... +label.adding.succeeded=追加しました +label.adding.user=ユーザーを追加しています +label.adding.zone=ゾーンを追加しています +label.adding=追加しています +label.additional.networks=追加のネットワーク +label.admin.accounts=管理者アカウント +label.admin=管理者 +label.advanced.mode=詳細モード +label.advanced.search=高度な検索 +label.advanced=詳細 label.alert=アラート -label.algorithm =アルゴリズム -label.allocated=割り当て -label.api.key = APIキー -label.assign.to.load.balancer =ロードバランサにインスタンスを割り当てています +label.algorithm=アルゴリズム +label.allocated=割り当て済み +label.api.key=API キー +label.assign.to.load.balancer=負荷分散装置にインスタンスを割り当てています label.assign=割り当て -label.associated.network.id =関連ネットワークID -label.attached.iso=アタッチされたISO -label.availability =アベイラビリティ -label.availability.zone =アベイラビリティZone -label.available.public.ips =使用可能パブリックIPアドレス -label.available=可能 -label.back =戻る -label.basic.mode =基本モード -label.bootable =ブータブル -label.broadcast.domain.type =ブロードキャストドメイン種類 +label.associated.network.id=関連づけられたネットワーク ID +label.attached.iso=アタッチされた ISO +label.availability.zone=利用可能ゾーン +label.availability=可用性 +label.available.public.ips=使用できるパブリック IP アドレス +label.available=使用可能 +label.back=戻る +label.basic.mode=基本モード +label.bootable=起動可能 +label.broadcast.domain.type=ブロードキャスト ドメインの種類 label.by.account=アカウント -label.by.availability =アベイラビリティ +label.by.availability=可用性 label.by.domain=ドメイン label.by.end.date=終了日 -label.by.level =レベル -label.by.pod=Pod -label.by.role =ロール +label.by.level=レベル +label.by.pod=ポッド +label.by.role=役割 label.by.start.date=開始日 -label.by.state =状態 -label.by.traffic.type =トラフィックタイプ -label.by.type.id=タイプID -label.by.type=タイプ +label.by.state=状態 +label.by.traffic.type=トラフィックの種類 +label.by.type.id=種類 ID +label.by.type=種類 label.by.zone=ゾーン -label.bytes.received =受信バイト数 -label.bytes.sent =送信バイト数 -label.cancel =キャンセル +label.bytes.received=受信バイト +label.bytes.sent=送信バイト +label.cancel=キャンセル label.certificate=証明書 -label.privatekey=PKCS#8秘密鍵 -label.domain.suffix=DNSドメインサフィックス(例:xyz.com) -label.character =キャラクタ -label.cidr.account = CIDRまたはアカウント/セキュリティグループ -label.close =閉じる -label.cloud.console=CloudStack管理コンソール -label.cloud.managed = Cloud.com 管理 -label.cluster =クラスタ -label.cluster.type =クラスタ種類 -label.code =コード +label.privatekey=PKC#8 秘密キー +label.domain.suffix=DNS ドメイン サフィックス (例: xyz.com) +label.character=文字 +label.cidr.account=CIDR またはアカウント/セキュリティ グループ +label.close=閉じる +label.cloud.console=クラウド管理コンソール +label.cloud.managed=Cloud.com による管理 +label.cluster.type=クラスターの種類 +label.cluster=クラスター +label.code=コード label.confirmation=確認 -label.cpu = CPU -label.cpu.allocated = CPU割り当て -label.cpu.allocated.for.VMs=VMへのCPU割り当て -label.cpu.mhz =CPU(MHz) -label.cpu.utilized=CPU利用率 -label.created=作成日付 -label.cross.zones =クロスZone -label.custom.disk.size =ディスクサイズ変更 -label.daily =毎日 -label.data.disk.offering=データディスクオファリング -label.date =日付 -label.day.of.month =日(月毎) -label.day.of.week =日(週毎) -label.delete =削除 -label.deleting.failed =削除失敗 -label.deleting.processing=削除しています.... -label.description =説明 -label.detaching.disk =ディスクをデタッチ +label.cpu.allocated.for.VMs=VM に割り当て済みの CPU +label.cpu.allocated=割り当て済みの CPU +label.cpu.mhz=CPU (MHz 単位) +label.cpu.utilized=CPU 使用率 +label.cpu=CPU +label.created=作成日時 +label.cross.zones=クロス ゾーン +label.custom.disk.size=カスタム ディスク サイズ +label.daily=毎日 +label.data.disk.offering=データ ディスク オファリング +label.date=日付 +label.day.of.month=毎月指定日 +label.day.of.week=毎週指定日 +label.delete=削除 +label.deleting.failed=削除できませんでした +label.deleting.processing=削除しています... +label.description=説明 +label.detaching.disk=ディスクをデタッチしています label.details=詳細 -label.device.id =デバイスID +label.device.id=デバイス ID label.disabled=無効 -label.disabling.vpn.access =VPNアクセスを無効化しています -label.disk.allocated =ディスク割り当て -label.disk.offering =ディスクオファリング -label.disk.size =ディスクサイズ -label.disk.size.gb =ディスクサイズ(GB単位) -label.disk.total =総ディスク容量 -label.disk.volume =ディスクボリューム -label.display.text =表示テキスト -label.dns.1 = DNS1 -label.dns.2 = DNS2 -label.domain =ドメイン -label.domain.admin =ドメイン管理者 -label.domain.id =ドメインID -label.domain.name =ドメイン名 -label.double.quotes.are.not.allowed =二重引用符は使用できません +label.disabling.vpn.access=VPN アクセスを無効にしています +label.disk.allocated=割り当て済みのディスク +label.disk.offering=ディスク オファリング +label.disk.size.gb=ディスク サイズ (GB 単位) +label.disk.size=ディスク サイズ +label.disk.total=ディスク合計 +label.disk.volume=ディスク ボリューム +label.display.text=表示テキスト +label.dns.1=DNS 1 +label.dns.2=DNS 2 +label.domain.admin=ドメイン管理者 +label.domain.id=ドメイン ID +label.domain.name=ドメイン名 +label.domain=ドメイン +label.double.quotes.are.not.allowed=二重引用符は使用できません label.download.progress=ダウンロードの進捗状況 -label.edit =編集 -label.email =メールアドレス -label.enabling.vpn =VPN有効化 -label.enabling.vpn.access =VPNアクセスを有効化しています -label.end.port =終了ポート -label.endpoint.or.operation =エンドポイントまたは操作 -label.error =エラー -label.error.code =エラーコード -label.esx.host = ESX/ESXiのホスト -label.example =例 +label.edit=編集 +label.email=電子メール +label.enabling.vpn.access=VPN アクセスを有効にしています +label.enabling.vpn=VPN を有効にしています +label.end.port=終了ポート +label.endpoint.or.operation=エンドポイントまたは操作 +label.error.code=エラー コード +label.error=エラー +label.esx.host=ESX/ESXi ホスト +label.example=例 label.failed=失敗 -label.featured =おすすめ -label.firewall =ファイアウォール -label.first.name = 名 -label.format =フォーマット -label.friday =金曜日 -label.full=フル -label.gateway =ゲートウェイ -label.general.alerts =一般的なアラート -label.generating.url =URLを生成しています -label.generating.url =URLを生成しています -label.go.step.2 = 2に進みます -label.go.step.3 = 3に進みます -label.go.step.4 = 4に進みます -label.go.step.5 = 5に進みます -label.group =グループ -label.group.optional =グループ(オプション) -label.guest.cidr =ゲストCIDR -label.guest.gateway =ゲストゲートウェイ -label.guest.ip =ゲストIPアドレス -label.guest.ip.range =ゲストIPアドレス範囲 -label.guest.netmask =ゲストネットマスク -label.ha.enabled = HA有効 -label.help =ヘルプ -label.host =ホスト -label.host.alerts =ホストのアラート -label.host.name =ホスト名 -label.hosts =ホスト -label.hourly =毎時 -label.hypervisor =ハイパーバイザ -label.hypervisor.type =ハイパーバイザ種類 -label.id = ID -label.info =情報 -label.ingress.rule = イングレスルール -label.initiated.by =イニシエータ -label.instance =インスタンス -label.instance.limits =インスタンス制限 -label.instance.name =インスタンス名 -label.instances =インスタンス -label.internal.dns.1 =内部DNS1 -label.internal.dns.2 =内部DNS2 -label.interval.type =間隔種別 -label.invalid.integer =無効な整数 -label.invalid.number =無効な番号 -label.ip = IPアドレス -label.ip.address = IPアドレス -label.ip.allocations = IPアドレス割り当て -label.ip.limits =パブリックIPアドレス制限 -label.ip.or.fqdn = IPアドレスまたはFQDN -label.ip.range = IPアドレス範囲 -label.ips = IPアドレス +label.featured=おすすめ +label.firewall=ファイアウォール +label.first.name=名 +label.format=形式 +label.friday=金曜日 +label.full=完全 +label.gateway=ゲートウェイ +label.general.alerts=一般アラート +label.generating.url=URL を生成しています +label.go.step.2=手順 2 に進む +label.go.step.3=手順 3 に進む +label.go.step.4=手順 4 に進む +label.go.step.5=手順 5 に進む +label.group.optional=グループ (オプション) +label.group=グループ +label.guest.cidr=ゲスト CIDR +label.guest.gateway=ゲスト ゲートウェイ +label.guest.ip.range=ゲスト IP アドレスの範囲 +label.guest.ip=ゲスト IP アドレス +label.guest.netmask=ゲスト ネットマスク +label.ha.enabled=高可用性有効 +label.help=ヘルプ +label.host.alerts=ホスト アラート +label.host.name=ホスト名 +label.host=ホスト +label.hosts=ホスト +label.hourly=毎時 +label.hypervisor.type=ハイパーバイザーの種類 +label.hypervisor=ハイパーバイザー +label.id=ID +label.info=情報 +label.ingress.rule=受信規則 +label.initiated.by=開始ユーザー +label.instance.limits=インスタンス制限 +label.instance.name=インスタンス名 +label.instance=インスタンス +label.instances=インスタンス +label.internal.dns.1=内部 DNS 1 +label.internal.dns.2=内部 DNS 2 +label.interval.type=間隔の種類 +label.invalid.integer=無効な整数 +label.invalid.number=無効な数 +label.ip.address=IP アドレス +label.ip.allocations=IP アドレスの割り当て +label.ip.limits=パブリック IP アドレスの制限 +label.ip.or.fqdn=IP アドレスまたは FQDN +label.ip.range=IP アドレスの範囲 +label.ip=IP +label.ips=IP label.is.default=デフォルト label.is.shared=共有 label.is.system=システム -label.iscsi =iSCSI -label.iso.boot=ISOブート +label.iscsi=iSCSI +label.iso.boot=ISO 起動 label.iso=ISO label.isolation.mode=分離モード -label.keep =保持 -label.lang.chinese =中国語(簡体字) -label.lang.english =英語 +label.keep=維持 +label.lang.chinese=簡体字中国語 +label.lang.english=英語 label.lang.japanese=日本語 label.lang.spanish=スペイン語 -label.last.disconnected =最終ログイン -label.last.name =姓 -label.level =レベル -label.linklocal.ip=リンクローカルIPアドレス -label.load.balancer = ロードバランサ -label.loading =読み込んでいます -label.local =ローカル -label.login =ログイン -label.logout =ログアウト -label.lun = LUN -label.manage =管理 -label.maximum =最大 -label.memory =メモリ -label.memory.allocated=メモリ割り当て -label.memory.mb =メモリ(MB) -label.memory.total =メモリ合計 -label.memory.used =メモリ使用 -label.menu.accounts =アカウント -label.menu.alerts =アラート -label.menu.all.accounts =すべてのアカウント -label.menu.all.instances =すべてのインスタンス -label.menu.community.isos =コミュニティISO -label.menu.community.templates =コミュニティテンプレート -label.menu.configuration =構成 -label.menu.dashboard =ダッシュボード -label.menu.destroyed.instances =破棄されたインスタンス -label.menu.disk.offerings =ディスクオファリング -label.menu.domains =ドメイン -label.menu.events =イベント -label.menu.featured.isos =フィーチャーISO -label.menu.featured.templates =フィーチャーテンプレート -label.menu.global.settings =グローバル設定 -label.menu.instances =インスタンス -label.menu.ipaddresses = IPアドレス -label.menu.isos = ISO -label.menu.my.accounts =マイアカウント -label.menu.my.instances =マイインスタンス -label.menu.my.isos =マイISO -label.menu.my.templates =マイテンプレート -label.menu.network =ネットワーク -label.menu.network.offerings =ネットワークオファリング -label.menu.physical.resources =物理リソース -label.menu.running.instances=実行中インスタンス -label.menu.security.groups =セキュリティグループ -label.menu.service.offerings =サービスオファリング -label.menu.snapshots =スナップショット -label.menu.stopped.instances =停止インスタンス -label.menu.storage =ストレージ -label.menu.system =システム -label.menu.system.vms =システムVM -label.menu.templates =テンプレート -label.menu.virtual.appliances =仮想アプライアンス -label.menu.virtual.resources =仮想リソース -label.menu.volumes =ボリューム -label.migrate.instance.to=インスタンス移行先 -label.minimum =最小 -label.minute.past.hour =分 -label.monday =月曜日 -label.monthly =毎月 -label.more.templates =その他のテンプレート -label.my.account =マイアカウント -label.name =名前 -label.name.optional =名(オプション) -label.netmask =ネットマスク -label.network =ネットワーク -label.network.desc =ネットワーク説明 -label.network.domain =ネットワークドメイン -label.network.id =ネットワークID -label.network.name =ネットワーク名 -label.network.offering =ネットワークオファリング -label.network.offering.display.text =ネットワークオファリング表示テキスト -label.network.offering.id =ネットワークオファリングID -label.network.offering.name =ネットワークオファリング名 -label.network.rate =ネットワークレート -label.network.read =ネットワーク受信量 -label.network.type =ネットワークタイプ -label.network.write =ネットワーク送信量 -label.new.password =新しいパスワード -label.next =次 -label.nfs = NFS -label.nfs.server = NFSサーバ -label.nfs.storage = NFSストレージ -label.nics =NIC -label.no =いいえ -label.no.actions =使用可能アクションはありません -label.no.alerts =最近のアラートはありません -label.no.errors =最近のエラーはありません -label.no.isos =利用可能はISOはありません -label.no.items =使用可能なアイテムはありません -label.no.security.groups =利用可能なセキュリティグループはありません -label.no.thanks =必要ありません +label.last.disconnected=最終切断日時 +label.last.name=姓 +label.level=レベル +label.linklocal.ip=リンク ローカル IP アドレス +label.load.balancer=負荷分散装置 +label.loading=ロードしています +label.local=ローカル +label.login=ログオン +label.logout=ログオフ +label.lun=LUN +label.manage=管理 +label.maximum=最大 +label.memory.allocated=割り当て済みのメモリ +label.memory.mb=メモリ (MB 単位) +label.memory.total=メモリ合計 +label.memory.used=メモリ使用量 +label.memory=メモリ +label.menu.accounts=アカウント +label.menu.alerts=アラート +label.menu.all.accounts=すべてのアカウント +label.menu.all.instances=すべてのインスタンス +label.menu.community.isos=コミュニティ ISO +label.menu.community.templates=コミュニティ テンプレート +label.menu.configuration=構成 +label.menu.dashboard=ダッシュボード +label.menu.destroyed.instances=破棄されたインスタンス +label.menu.disk.offerings=ディスク オファリング +label.menu.domains=ドメイン +label.menu.events=イベント +label.menu.featured.isos=おすすめの ISO +label.menu.featured.templates=おすすめのテンプレート +label.menu.global.settings=グローバル設定 +label.menu.instances=インスタンス +label.menu.ipaddresses=IP アドレス +label.menu.isos=ISO +label.menu.my.accounts=マイ アカウント +label.menu.my.instances=マイ インスタンス +label.menu.my.isos=マイ ISO +label.menu.my.templates=マイ テンプレート +label.menu.network.offerings=ネットワーク オファリング +label.menu.network=ネットワーク +label.menu.physical.resources=物理リソース +label.menu.running.instances=実行中のインスタンス +label.menu.security.groups=セキュリティ グループ +label.menu.service.offerings=サービス オファリング +label.menu.snapshots=スナップショット +label.menu.stopped.instances=停止されたインスタンス +label.menu.storage=ストレージ +label.menu.system.vms=システム VM +label.menu.system=システム +label.menu.templates=テンプレート +label.menu.virtual.appliances=仮想アプライアンス +label.menu.virtual.resources=仮想リソース +label.menu.volumes=ボリューム +label.migrate.instance.to=インスタンスの移行: +label.minimum=最小 +label.minute.past.hour=分 (毎時) +label.monday=月曜日 +label.monthly=毎月 +label.more.templates=そのほかのテンプレート +label.my.account=マイ アカウント +label.name.optional=名前 (オプション) +label.name=名前 +label.netmask=ネットマスク +label.network.desc=ネットワークの説明 +label.network.domain=ネットワーク ドメイン +label.network.id=ネットワーク ID +label.network.name=ネットワーク名 +label.network.offering.display.text=ネットワーク オファリング表示テキスト +label.network.offering.id=ネットワーク オファリング ID +label.network.offering.name=ネットワーク オファリング名 +label.network.offering=ネットワーク オファリング +label.network.rate=ネットワーク速度 +label.network.read=ネットワークの読み取り +label.network.type=ネットワークの種類 +label.network.write=ネットワークの書き込み +label.network=ネットワーク +label.new.password=新しいパスワード +label.next=次へ +label.nfs.server=NFS サーバー +label.nfs.storage=NFS ストレージ +label.nfs=NFS +label.nics=NIC +label.no.actions=実行できる操作はありません +label.no.alerts=最近のアラートはありません +label.no.errors=最近のエラーはありません +label.no.isos=使用できる ISO はありません +label.no.items=使用できる項目はありません +label.no.security.groups=使用できるセキュリティ グループはありません +label.no.thanks=いいえ結構です +label.no=いいえ label.none=なし -label.not.found=が見つかりません -label.num.cpu.cores= CPUコア数 +label.not.found=見つかりません +label.num.cpu.cores=CPU コア数 label.numretries=再試行回数 -label.offer.ha =HA -label.optional =オプション -label.os.preference = OS優先設定 -label.os.type = OSタイプ -label.owned.public.ips =割り当て済みパブリックIPアドレス -label.owner.account =所有者アカウント +label.offer.ha=高可用性の提供 +label.optional=オプション +label.os.preference=OS 基本設定 +label.os.type=OS の種類 +label.owned.public.ips=所有するパブリック IP アドレス +label.owner.account=所有者アカウント label.owner.domain=所有者ドメイン -label.parent.domain =親ドメイン -label.password =パスワード -label.password.enabled = パスワード有効 -label.path =パス +label.parent.domain=親ドメイン +label.password.enabled=パスワード管理有効 +label.password=パスワード +label.path=パス label.please.wait=お待ちください -label.pod =Pod -label.port.forwarding =ポート転送 -label.port.range =ポート範囲 -label.prev =前のページ -label.primary.allocated=プライマリストレージ割り当て -label.primary.network =プライマリネットワーク -label.primary.storage =プライマリストレージ -label.primary.used=プライマリストレージ使用量 -label.private.interface =プライベートインタフェイス -label.private.ip =プライベートIPアドレス -label.private.ip.range =プライベートIPアドレス範囲 -label.private.ips =プライベートIPアドレス -label.private.port =プライベートポート -label.private.zone =プライベートZone -label.protocol =プロトコル -label.protocol =プロトコル -label.public =パブリック -label.public.interface =パブリックインタフェイス -label.public.ip =パブリックIPアドレス -label.public.ips =パブリックIPアドレス -label.public.port =パブリックポート -label.public.zone =パブリックZone -label.recent.errors =最近のエラー -label.refresh =リフレッシュ -label.related =関連 -label.remove.from.load.balancer =ロードバランサからインスタンスを削除しています -label.removing.user =ユーザ削除 +label.pod=ポッド +label.port.forwarding=ポート転送 +label.port.range=ポートの範囲 +label.prev=戻る +label.primary.allocated=割り当て済みのプライマリ ストレージ +label.primary.network=プライマリ ネットワーク +label.primary.storage=プライマリ ストレージ +label.primary.used=プライマリ ストレージ使用量 +label.private.interface=プライベート インターフェイス +label.private.ip.range=プライベート IP アドレスの範囲 +label.private.ip=プライベート IP アドレス +label.private.ips=プライベート IP アドレス +label.private.port=プライベート ポート +label.private.zone=プライベート ゾーン +label.protocol=プロトコル +label.public.interface=パブリック インターフェイス +label.public.ip=パブリック IP アドレス +label.public.ips=パブリック IP アドレス +label.public.port=パブリック ポート +label.public.zone=パブリック ゾーン +label.public=パブリック +label.recent.errors=最近のエラー +label.refresh=更新 +label.related=関連 +label.remove.from.load.balancer=負荷分散装置からインスタンスを削除しています +label.removing.user=ユーザーを削除しています label.required=必須 -label.reserved.system.ip =予約済みシステムIPアドレス -label.resource =リソース -label.resource.limits =リソース制限 -label.resources =リソース -label.role =ロール -label.root.disk.offering=ルートディスクオファリング -label.running.vms= 実行中VM -label.saturday =土曜日 -label.save =保存 -label.saving.processingに=保存しています.... -label.scope =スコープ -label.search =検索 -label.secondary.storage =セカンダリストレージ -label.secondary.used=セカンダリストレージ使用量 -label.secret.key =秘密鍵 -label.security.group =セキュリティグループ -label.security.group.name =セキュリティグループ名 -label.security.groups =セキュリティグループ -label.security.groups.enabled=セキュリティグループ有効 -label.sent =送信 -label.server =サーバ -label.service.offering =サービスオファリング -label.session.expired=セッション期限切れ -label.shared =共有 -label.size =サイズ -label.snapshot =スナップショット -label.snapshot.limits =スナップショット制限 -label.snapshot.name =スナップショット名 -label.snapshot.s =スナップショット -label.snapshot.schedule=スナップショットスケジュール -label.snapshots =スナップショット -label.source.nat =ソースNAT -label.specify.vlan = VLAN指定 -label.start.port =開始ポート -label.state =状態 -label.static.nat =スタティックNAT -label.static.nat.to =スタティックNAT先 -label.statistics =統計 -label.status =ステータス -label.step.1 =ステップ1 -label.step.1.title =ステップ1:テンプレートを選択してください -label.step.2 =ステップ2 -label.step.2.title =ステップ2:サービスオファリング -label.step.3 =ステップ3 -label.step.3.title =ステップ3:ディスクオファリングを選択してください -label.step.4 =ステップ4 -label.step.4.title =ステップ4:ネットワーク -label.step.5 =ステップ5 -label.step.5.title =ステップ5:確認 -label.stopped.vms =停止VM -label.storage =ストレージ -label.storage.type =ストレージ種類 -label.submit =送信 -label.submitted.by = [送信者:] +label.reserved.system.ip=予約済みシステム IP アドレス +label.resource.limits=リソース制限 +label.resource=リソース +label.resources=リソース +label.role=役割 +label.root.disk.offering=ルート ディスク オファリング +label.running.vms=実行中の VM +label.saturday=土曜日 +label.save=保存 +label.saving.processing=保存しています... +label.scope=スコープ +label.search=検索 +label.secondary.storage=セカンダリ ストレージ +label.secondary.used=セカンダリ ストレージ使用量 +label.secret.key=秘密キー +label.security.group.name=セキュリティ グループ名 +label.security.group=セキュリティ グループ +label.security.groups.enabled=セキュリティ グループ有効 +label.security.groups=セキュリティ グループ +label.sent=送信済み +label.server=サーバー +label.service.offering=サービス オファリング +label.system.service.offering=システム サービス オファリング +label.session.expired=セッションの有効期限が切れました +label.shared=共有 +label.size=サイズ +label.snapshot.limits=スナップショット制限 +label.snapshot.name=スナップショット名 +label.snapshot.s=スナップショット +label.snapshot.schedule=定期スナップショットのセットアップ +label.snapshot=スナップショット +label.snapshots=スナップショット +label.source.nat=送信元 NAT +label.specify.vlan=VLAN の指定 +label.start.port=開始ポート +label.state=状態 +label.static.nat.to=静的 NAT の設定先: +label.static.nat=静的 NAT +label.statistics=統計 +label.status=状態 +label.step.1.title=手順 1. テンプレートの選択 +label.step.1=手順 1 +label.step.2.title=手順 2. サービス オファリング +label.step.2=手順 2 +label.step.3.title=手順 3. ディスク オファリングの選択 +label.step.3=手順 3 +label.step.4.title=手順 4. ネットワーク +label.step.4=手順 4 +label.step.5.title=手順 5. 確認 +label.step.5=手順 5 +label.stopped.vms=停止された VM +label.storage.type=ストレージの種類 +label.storage=ストレージ +label.submit=送信 +label.submitted.by=[送信ユーザー: ] label.succeeded=成功 -label.sunday =日曜日 -label.system.capacity =システム全体の容量 -label.system.vm =システムVM -label.system.vm.type =システムVM種類 -label.system.vm.type =システムVM種類 -label.system.vms =システムVM -label.tagged=タグ -label.tags =タグ -label.target.iqn =ターゲットIQN -label.template =テンプレート -label.template.limits =テンプレート制限 -label.theme.default =デフォルトテーマ -label.theme.grey =カスタム - グレー -label.theme.lightblue=カスタム - ライトブルー -label.thursday =木曜日 -label.time =時間 +label.sunday=日曜日 +label.system.capacity=システム容量 +label.system.vm.type=システム VM の種類 +label.system.vm=システム VM +label.system.vms=システム VM +label.tagged=タグあり +label.tags=タグ +label.target.iqn=ターゲット IQN +label.template.limits=テンプレート制限 +label.template=テンプレート +label.theme.default=デフォルト テーマ +label.theme.grey=カスタム - グレー +label.theme.lightblue=カスタム - ライト ブルー +label.thursday=木曜日 label.time.zone=タイムゾーン -label.timeout.in.second=タイムアウト(秒) -label.timezone =タイムゾーン -label.total.cpu=CPUの合計 -label.total.vms =VMの合計 -label.traffic.type =トラフィックタイプ -label.tuesday =火曜日 -label.type =タイプ -label.type.id =タイプID -label.unavailable =使用不可 +label.time=時間 +label.timeout.in.second = タイムアウト (秒) +label.timezone=タイムゾーン +label.total.cpu=CPU 合計 +label.total.vms=VM 合計 +label.traffic.type=トラフィックの種類 +label.tuesday=火曜日 +label.type.id=種類 ID +label.type=種類 +label.unavailable=使用不能 label.unlimited=無制限 label.untagged=タグなし -label.update.ssl =SSL証明書更新 -label.update.ssl.cert =SSL証明書更新 -label.updating=更新しています -label.url =URL -label.usage.interface =使用インタフェイス -label.used=使用 -label.user =ユーザ -label.username =ユーザ名 -label.users =ユーザ -label.value =値 -label.vcenter.cluster =vCenterクラスタ -label.vcenter.datacenter =vCenterデータセンタ -label.vcenter.datastore =vCenterデータストア -label.vcenter.host =vCenterホスト -label.vcenter.password =vCenterパスワード -label.vcenter.username =vCenterユーザ名 -label.version =バージョン -label.virtual.appliance =仮想アプライアンス -label.virtual.appliances =仮想アプライアンス -label.virtual.network =仮想ネットワーク -label.vlan = VLAN -label.vlan.id = VLAN ID -label.vlan.range = VLAN ID範囲 -label.vm.add =インスタンス追加 -label.vm.destroy =破棄 -label.vm.reboot =再起動 -label.vm.start =開始 -label.vm.stop =停止 -label.vmfs =VMFS -label.vms = VM -label.volume =ボリューム -label.volume.limits =ボリューム制限 -label.volume.name =ボリューム名 -label.volumes =ボリューム -label.vpn = VPN -label.vsphere.managed = vSphere管理 -label.waiting =お待ちください -label.warn =警告 -label.wednesday =水曜日 -label.weekly =毎週 +label.update.ssl.cert=SSL 証明書の更新 +label.update.ssl=SSL 証明書の更新 +label.updating=更新しています +label.url=URL +label.usage.interface=使用状況測定インターフェイス +label.used=使用中 +label.user=ユーザー +label.username=ユーザー名 +label.users=ユーザー +label.value=値 +label.vcenter.cluster=vCenter クラスター +label.vcenter.datacenter=vCenter データセンター +label.vcenter.datastore=vCenter データストア +label.vcenter.host=vCenter ホスト +label.vcenter.password=vCenter パスワード +label.vcenter.username=vCenter ユーザー名 +label.version=バージョン +label.virtual.appliance=仮想アプライアンス +label.virtual.appliances=仮想アプライアンス +label.virtual.network=仮想ネットワーク +label.vlan.id=VLAN ID +label.vlan.range=VLAN の範囲 +label.vlan=VLAN +label.vm.add=インスタンスの追加 +label.vm.destroy=破棄 +label.vm.reboot=再起動 +label.vm.start=起動 +label.vm.stop=停止 +label.vmfs=VMFS +label.vms=VM +label.volume.limits=ボリューム制限 +label.volume.name=ボリューム名 +label.volume=ボリューム +label.volumes=ボリューム +label.vpn=VPN +label.vsphere.managed=vSphere による管理 +label.waiting=待機しています +label.warn=警告 +label.wednesday=水曜日 +label.weekly=毎週 label.welcome.cloud.console=管理コンソールへようこそ label.welcome=ようこそ -label.yes =はい -label.zone =Zone -label.zone.id =Zone ID -label.zone.step.1.title =ステップ1:ネットワーク選択 -label.zone.step.2.title =ステップ2:Zone追加 -label.zone.step.3.title =ステップ3:Pod追加 -label.zone.step.4.title =ステップ4:IPアドレス範囲追加 -label.zone.wide =Zone全体 +label.yes=はい +label.zone.id=ゾーン ID +label.zone.step.1.title=手順 1. ネットワークの選択 +label.zone.step.2.title=手順 2. ゾーンの追加 +label.zone.step.3.title=手順 3. ポッドの追加 +label.zone.step.4.title=手順 4. IP アドレス範囲の追加 +label.zone.wide=ゾーン全体 +label.zone=ゾーン #Messages -message.acquire.public.ip =新しいIPアドレスを取得するZoneを選択してください。 -message.action.cancel.maintenance=あなたのホストはメンテナンスのために正常にキャンセルされました。このプロセスは数分かかることがあります。 -message.action.cancel.maintenance.mode=メンテナンスをキャンセルしてもよろしいですか? -message.action.delete.ISO.for.all.zones= そのISOは全てのZoneで使用されます。全てのZoneから削除してもよろしいですか? -message.action.delete.ISO=ISOを削除してもよろしいですか? -message.action.delete.cluster=クラスタを削除してもよろしいですか? -message.action.delete.disk.offering=ディスクオファリングを削除してもよろしいですか? -message.action.delete.domain=ドメインを削除してもよろしいですか? -message.action.delete.external.firewall=この外部ファイアウォールを削除してもよろしいですか? 警告:同じ外部ファイアウォールの再度追加を計画している場合は、デバイスの使用状況データをリセットする必要があります。 -message.action.delete.external.load.balancer=この外部ロードバランサを削除してもよろしいですか? 警告:同じ外部ロードバランサの再度追加を計画している場合は、デバイスの使用状況データをリセットする必要があります。 -message.action.delete.ingress.rule=イングレスルールを削除してもよろしいですか? -message.action.delete.network=ネットワークを削除してもよろしいですか? -message.action.delete.pod=Podを削除してもよろしいですか? -message.action.delete.primary.storage=プライマリストレージを削除してもよろしいですか? -message.action.delete.secondary.storage=セカンダリストレージを削除してもよろしいですか? -message.action.delete.security.group=セキュリティグループを削除してもよろしいですか? -message.action.delete.service.offering=サービスオファリングを削除してもよろしいですか? -message.action.delete.snapshot=スナップショットを削除してもよろしいですか? -message.action.delete.template.for.all.zonesは=テンプレートは全てのゾーンで使用されます。すべてのゾーンから削除してもよろしいですか? -message.action.delete.template=テンプレートを削除してもよろしいですか? -message.action.delete.volume=ボリュームを削除してもよろしいですか? -message.action.delete.zone=Zoneを削除してもよろしいですか? -message.action.destroy.instance=インスタンスを破棄してもよろしいですか? -message.action.destroy.systemvm=システムVMを破棄してもよろしいですか? -message.action.disable.static.NAT=スタティックNATを無効化してもよろしいですか? -message.action.enable.maintenanceは=ホストはメンテナンスの準備を行っています。この処理には数分かかることがあります。(ホスト上のVMの数によって異なります) -message.action.force.reconnect=ホストは再接続を行っています。このプロセスは数分かかることがあります。 -message.action.force.reconnect=ホストに強制的に再接続してもよろしいですか? -message.action.host.enable.maintenance.mode =メンテナンスモードを有効にすると、ホスト上で実行中のすべてのインスタンスを他の使用可能なホストへライブマイグレーションする原因となります。 -message.action.instance.reset.password=この仮想マシンのルートパスワードを変更してもよろしいですか? -message.action.primarystorage.enable.maintenance.mode =警告:プライマリストレージをメンテナンスモードにすると、そのプライマリストレージ上のボリュームを使用している全てのVMが停止します。このまま続けてもよろしいですか? -message.action.reboot.instance=インスタンスを再起動してもよろしいですか? -message.action.reboot.router=ルータを再起動してもよろしいですか? -message.action.reboot.systemvm=システムVMを再起動してもよろしいですか? -message.action.release.ip=IPアドレスを解放してもよろしいですか? -message.action.remove.host=クラスタ内の最後に残った唯一のホストを削除して、再インストールすると、作業環境およびデータベースが破壊され、VMゲストが使用できなくなります。 -message.action.restore.instance=インスタンスをリストアしてもよろしいですか? -message.action.start.instance=インスタンスを起動してもよろしいですか? -message.action.start.router=ルータを起動してもよろしいですか? -message.action.start.systemvm=システムVMを起動してもよろしいですか? -message.action.stop.instance=インスタンスを停止してもよろしいですか? -message.action.stop.router=ルータを停止してもよろしいですか? -message.action.stop.systemvm=システムVMを停止してもよろしいですか? -message.action.take.snapshot=スナップショットを作成してもよろしいですか? -message.add.cluster.zone=Zone にクラスタで管理されたハイパーバイザを追加 -message.add.cluster=Zone , Pod にクラスタで管理されたハイパーバイザを追加 -message.add.disk.offering=新しいディスクオファリングを追加するために、次のパラメータを指定してください -message.add.firewall=Zoneにファイアウォールを追加 -message.add.host=新しいホストを追加するために、次のパラメータを指定してください -message.add.ip.range.direct.network=Zone のダイレクトネットワークに新しいIPアドレス範囲を追加 -message.add.ip.range.to.pod=

Pod にIPアドレス範囲を追加

-message.add.ip.range=Zone内のパブリックネットワークにIPアドレス範囲を追加 -message.add.load.balancer=Zoneにロードバランサを追加 -message.add.network=Zone に新しいネットワークを追加 -message.add.pod=Zone に新しいPodを追加 -message.add.primary.storage=Zone , Pod に新しいプライマリストレージを追加 -message.add.primary=新しいプライマリストレージを追加するために、次のパラメータを指定してください -message.add.secondary.storage=Zone に新しいストレージを追加 -message.add.service.offering =新しいサービスオファリングを追加するために、次のデータを入力してください。 -message.add.template=新しいテンプレートを作成するために、次のデータを入力してください。 -message.add.volume=新しいボリュームを追加するために、次のデータを入力してください。 -message.additional.networks.desc=仮想インスタンスが接続する追加ネットワークを選択してください。 -message.advanced.mode.desc=VLANサポートを有効化したい場合はこのネットワークモデルを選択してください。このネットワークモデルは、管理者が最もフレキシブルにネットワークオファリングを定義できるモデルで、ダイレクトネットワークと仮想ネットワークをサポートし、ファイアウォール、VPN、またはロードバランサ等を提供することができます。 -message.advanced.security.group=ゲストVMのアイソレーションを提供するためにセキュリティグループを使用する場合はこのオプションを選択してください。 -message.advanced.virtual=ゲストVMのアイソレーションを提供するためにゾーン全体のVLANを使用する場合はこのオプションを選択してください。 -message.allow.vpn.access=VPNアクセスを許可するユーザのユーザ名とパスワードを入力してください。 -message.attach.iso.confirm=仮想インスタンスにISOファイルをアタッチしてもよろしいですか? -message.attach.volume=新しいボリュームをアタッチするために、次のデータを入力してください。Windowsベースの仮想マシンにディスクボリュームをアタッチする場合、接続されたディスクを確認するためにインスタンスの再起動が必要です。 -message.basic.mode.desc=VLANサポートが必要でない場合はこのネットワークモデルを選択してください。このネットワークモデルの下で作成されたすべての仮想インスタンスには安全に分離されたネットワークとセキュリティグループからダイレクトにIPアドレスが割り当てられます。 -message.change.offering.confirmは=仮想インスタンスのサービスオファリングを変更してもよろしいですか? -message.copy.iso.confirm=ISOをコピーしてもよろしいですか? -message.copy.template =テンプレート XXXをZoneからコピーしてもよろしいですか? -message.create.template.vm =テンプレートからVMを作成してもよろしいですか? -message.create.template.volume=ディスクボリュームのテンプレートを作成する前に、以下の情報を指定してください。テンプレートの作成は、ボリュームのサイズに応じて数分からより長い間隔で設定可能です。 +message.acquire.public.ip=新しい IP アドレスを取得するゾーンを選択してください。 +message.action.cancel.maintenance.mode=この保守をキャンセルしてもよろしいですか? +message.action.cancel.maintenance=ホストの保守は正常にキャンセルされました。この処理には数分かかる可能性があります。 +message.action.delete.ISO.for.all.zones=その ISO はすべてのゾーンで使用されています。すべてのゾーンから削除してもよろしいですか? +message.action.delete.ISO=この ISO を削除してもよろしいですか? +message.action.delete.cluster=このクラスターを削除してもよろしいですか? +message.action.delete.disk.offering=このディスク オファリングを削除してもよろしいですか? +message.action.delete.domain=このドメインを削除してもよろしいですか? +message.action.delete.external.firewall=この外部ファイアウォールを削除してもよろしいですか? 警告: 同じ外部ファイアウォールを再度追加する予定である場合は、デバイスの使用状況データをリセットする必要があります。 +message.action.delete.external.load.balancer=この外部負荷分散装置を削除してもよろしいですか? 警告: 同じ外部負荷分散装置を再度追加する予定である場合は、デバイスの使用状況データをリセットする必要があります。 +message.action.delete.ingress.rule=この受信規則を削除してもよろしいですか? +message.action.delete.network=このネットワークを削除してもよろしいですか? +message.action.delete.pod=このポッドを削除してもよろしいですか? +message.action.delete.primary.storage=このプライマリ ストレージを削除してもよろしいですか? +message.action.delete.secondary.storage=このセカンダリ ストレージを削除してもよろしいですか? +message.action.delete.security.group=このセキュリティ グループを削除してもよろしいですか? +message.action.delete.service.offering=このサービス オファリングを削除してもよろしいですか? +message.action.delete.snapshot=このスナップショットを削除してもよろしいですか? +message.action.delete.template.for.all.zones=そのテンプレートはすべてのゾーンで使用されています。すべてのゾーンから削除してもよろしいですか? +message.action.delete.template=このテンプレートを削除してもよろしいですか? +message.action.delete.volume=このボリュームを削除してもよろしいですか? +message.action.delete.zone=このゾーンを削除してもよろしいですか? +message.action.destroy.instance=このインスタンスを破棄してもよろしいですか? +message.action.destroy.systemvm=このシステム VM を破棄してもよろしいですか? +message.action.disable.static.NAT=静的 NAT を無効にしてもよろしいですか? +message.action.enable.maintenance=ホストを保守する準備ができました。このホスト上の VM 数によっては、この処理には数分以上かかる可能性があります。 +message.action.force.reconnect=ホストは強制的に再接続しました。この処理には数分かかる可能性があります。 +message.action.host.enable.maintenance.mode=保守モードを有効にすると、このホストで実行中のすべてのインスタンスがほかの使用できるホストにライブ マイグレーションされます。 +message.action.instance.reset.password=この仮想マシンのルート パスワードを変更してもよろしいですか? +message.action.primarystorage.enable.maintenance.mode=警告: プライマリ ストレージを保守モードにすると、そのストレージ上のボリュームを使用するすべての VM が停止します。続行してもよろしいですか? +message.action.reboot.instance=このインスタンスを再起動してもよろしいですか? +message.action.reboot.router=このルーターを再起動してもよろしいですか? +message.action.reboot.systemvm=このシステム VM を再起動してもよろしいですか? +message.action.release.ip=この IP アドレスを解放してもよろしいですか? +message.action.remove.host=クラスター内に最後まで残った唯一のホストを削除して再インストールすると、ホスト上の作業環境およびデータベースが破棄され、VM ゲストが使用できなくなります。 +message.action.restore.instance=このインスタンスを復元してもよろしいですか? +message.action.start.instance=このインスタンスを起動してもよろしいですか? +message.action.start.router=このルーターを起動してもよろしいですか? +message.action.start.systemvm=このシステム VM を起動してもよろしいですか? +message.action.stop.instance=このインスタンスを停止してもよろしいですか? +message.action.stop.router=このルーターを停止してもよろしいですか? +message.action.stop.systemvm=このシステム VM を停止してもよろしいですか? +message.action.take.snapshot=このボリュームのスナップショットを作成してもよろしいですか? +message.add.cluster.zone=ゾーン にハイパーバイザーで管理されるクラスターを追加します +message.add.cluster=ゾーン のポッド にハイパーバイザーで管理されるクラスターを追加します +message.add.disk.offering=新しいディスク オファリングを追加するために、次のパラメーターを指定してください。 +message.add.firewall=ゾーンにファイアウォールを追加します +message.add.host=新しいホストを追加するために、次のパラメーターを指定してください。 +message.add.ip.range.direct.network=ゾーン の直接ネットワークに新しい IP アドレスの範囲を追加します +message.add.ip.range.to.pod=

ポッド に IP アドレスの範囲を追加します

+message.add.ip.range=ゾーンのパブリック ネットワークに IP アドレスの範囲を追加します +message.add.load.balancer=ゾーンに負荷分散装置を追加します +message.add.network=ゾーン に新しいネットワークを追加します +message.add.pod=ゾーン に新しいポッドを追加します +message.add.primary.storage=ゾーン のポッド に新しいプライマリ ストレージを追加します +message.add.primary=新しいプライマリ ストレージを追加するために、次のパラメーターを指定してください。 +message.add.secondary.storage=ゾーン に新しいストレージを追加します +message.add.service.offering=新しいサービス オファリングを追加するために、次のデータを入力してください。 +message.add.template=新しいテンプレートを作成するために、次のデータを入力してください。 +message.add.volume=新しいボリュームを追加するために、次のデータを入力してください。 +message.additional.networks.desc=仮想インスタンスが接続する追加のネットワークを選択してください。 +message.advanced.mode.desc=VLAN サポートを有効にする場合は、このネットワーク モデルを選択してください。このモデルでは最も柔軟にカスタム ネットワーク オファリングを提供でき、ファイアウォール、VPN、負荷分散装置のサポートのほかに、直接ネットワークと仮想ネットワークも有効にすることができます。 +message.advanced.security.group=ゲスト VM を分離するためにセキュリティ グループを使用する場合は、このオプションを選択してください。 +message.advanced.virtual=ゲスト VM を分離するためにゾーン全体の VLAN を使用する場合は、このオプションを選択してください。 +message.allow.vpn.access=VPN アクセスを許可するユーザーのユーザー名とパスワードを入力してください。 +message.attach.iso.confirm=この仮想インスタンスに ISO ファイルをアタッチしてもよろしいですか? +message.attach.volume=新しいボリュームをアタッチするために、次のデータを入力してください。Windows ベースの仮想マシンにディスク ボリュームをアタッチする場合は、アタッチしたディスクを認識するためにインスタンスを再起動する必要があります。 +message.basic.mode.desc=VLAN サポートが不要である場合は、このネットワーク モデルを選択してください。このネットワーク モデルで作成されるすべての仮想インスタンスにネットワークから直接 IP アドレスが割り当てられ、セキュリティ グループを使用してセキュリティと分離が提供されます。 +message.change.offering.confirm=この仮想インスタンスのサービス オファリングを変更してもよろしいですか? +message.copy.iso.confirm=ISO を次の場所にコピーしてもよろしいですか? +message.copy.template=ゾーン からテンプレート XXX を次の場所にコピーします: +message.create.template.vm=テンプレート から仮想マシンを作成します +message.create.template.volume=ディスク ボリューム のテンプレートを作成する前に、次の情報を指定してください。ボリューム サイズによっては、テンプレートの作成には数分以上かかる可能性があります。 message.delete.account=このアカウントを削除してもよろしいですか? -message.detach.iso.confirm=仮想インスタンスからISOをデタッチしてもよろしいですか? -message.disable.account=このアカウントを無効にしてもよろしいですか? アカウントを無効にすることにより、このアカウントのすべてのユーザーはクラウドリソースにアクセスできなくなります。実行中のすべての仮想マシンはすぐにシャットダウンされます。 -message.disable.vpn.access=VPNアクセスを無効にしてもよろしいですか? -message.download.ISO=ISOをダウンロードするために00000をクリックしてください。 -message.download.template=テンプレートをダウンロードするために00000をクリックしてください。 -message.download.volume=ボリュームをダウンロードするために00000をクリックしてください。 -message.edit.confirm="保存" をクリックする前に変更内容を確認してください -message.edit.limits =以下のリソースへの制限を指定してください。"-1"はリソースの生成に制限がないことを示しています。 -message.enable.account=このアカウントを有効にしてもよろしいですか? -message.enable.vpn.access = 現在、VPNはこのIPアドレスに対して無効になっています。VPNアクセスを有効にしますか? -message.enable.vpn= 現在、VPNアクセスは有効ではありません。ここををクリックするとVPNが有効になります。 -message.enabled.vpn.ip.sec =IPSec事前共有キーは、 -message.enabled.vpn=現在、VPNアクセスは有効になっています。次のIP経由でアクセスすることができます -message.launch.vm.on.private.networkは=あなた自身の専用のプライベートネットワーク上のインスタンスを起動したいですか? -message.lock.account=このアカウントをロックしてもよろしいですか? アカウントをロックすると、このアカウントのすべてのユーザーはクラウドリソースを管理することができなくなります。既存のリソースにはアクセスすることができます。 -message.migrate.instance.confirm=インスタンスを移行するホストを確認してください。 -message.new.user =アカウントに新しいユーザーを追加するために、次の情報を設定してください -message.no.network.support =選択されたハイパーバイザ、vSphereには追加ネットワーク機能がありません。手順5に進んでください。 -message.no.network.support.configuration.not.true=セキュリティグループが有効なゾーンが無いため、追加のネットワーク機能はありません。手順5に進んでください。 -message.number.clusters=

# -- クラスタ

-message.number.hosts=

# -- ホスト

-message.number.pods=

# -- Pod

-message.number.storage=

# -- プライマリストレージ

-message.number.zones=

# -- Zone

-message.remove.vpn.access=次のユーザからのVPNアクセスを削除してもよろしいですか? -message.restart.mgmt.server=新しい設定を有効にするために、管理サーバ(複数可)を再起動してください。 -message.security.group.usage=全ての該当するセキュリティグループを選択するには、 Ctrlキーを押しながらクリックしてください。 -message.snapshot.schedule =以下のオプションからポリシーを適用することにより、定期的なスナップショットのスケジュールを設定できます。 -message.step.1.continue=テンプレートまたはISOを選択して続行してください -message.step.1.desc=新しい仮想インスタンス用のテンプレートを選択してください。ISOがインストールされているブランクのテンプレートを選択することもできます。 -message.step.2.continue=サービスオファリングを選択して続行してください -message.step.2.desc = -message.step.3.continue=ディスクオファリングを選択して続行してください -message.step.3.desc = -message.step.4.continue=少なくとも1つのネットワークを選択して続行してください -message.step.4.desc=仮想インスタンスに接続するプライマリネットワークを選択してください。 -message.update.os.preference=このホストの優先OS設定を選択してください。同様の設定を持つすべてのインスタンスはこのホストへ優先的に割り当てられます。 -message.update.ssl=各コンソールプロキシの仮想インスタンスを更新するためのX.509に準拠したSSL証明書を提出してください: -message.virtual.network.desc=アカウント用の専用仮想ネットワークです。ブロードキャストドメインはVLAN内に置かれ、すべてのパブリックネットワークへのアクセスは仮想ルータによってルーティングされます。 -message.volume.create.template.confirm=このディスクボリューム用のテンプレートを作成してもよろしいですか?テンプレートの作成はボリュームのサイズに応じて数分~より長い間隔で指定できます。 -message.zone.step.1.desc=Zoneのネットワークモデルを選択してください。 -message.zone.step.2.desc=新しいZoneを追加するために、次の情報を入力してください。 -message.zone.step.3.desc=新しいPodを追加するために、次の情報を入力してください。 -message.apply.snapshot.policy=現在のスナップショットのポリシーを更新しました。 -message.disable.snapshot.policy=現在のスナップショットのポリシーを無効にしました。 -message.action.change.service.warning=サービスの提供を変更する前にインスタンスを停止する必要があります。 -message.action.reset.password.warning=パスワードを変更する前にインスタンスを停止する必要があります。 -message.action.reset.password.off=インスタンスはこの機能をサポートしていません。 +message.detach.iso.confirm=この仮想インスタンスから ISO ファイルをデタッチしてもよろしいですか? +message.disable.account=このアカウントを無効にしてもよろしいですか? アカウントを無効にすることにより、このアカウントのすべてのユーザーがクラウド リソースにアクセスできなくなります。実行中のすべての仮想マシンは今すぐにシャットダウンされます。 +message.disable.vpn.access=VPN アクセスを無効にしてもよろしいですか? +message.download.ISO=ISO をダウンロードするには
00000 をクリックします +message.download.template=テンプレートをダウンロードするには 00000 をクリックします +message.download.volume=ボリュームをダウンロードするには 00000 をクリックします +message.edit.confirm=[保存] をクリックする前に変更内容を確認してください。 +message.edit.limits=次のリソースに制限を指定してください。「-1」は、リソース作成に制限がないことを示します。 +message.enable.account=このアカウントを有効にしてもよろしいですか? +message.enable.vpn.access=現在この IP アドレスに対する VPN は無効です。VPN アクセスを有効にしてもよろしいですか? +message.enabled.vpn.ip.sec=IPSec 事前共有キー: +message.enabled.vpn=現在、VPN アクセスが有効になっています。次の IP アドレス経由でアクセスできます。 +message.launch.vm.on.private.network=プライベートな専用ネットワークでインスタンスを起動しますか? +message.lock.account=このアカウントをロックしてもよろしいですか? アカウントをロックすることにより、このアカウントのすべてのユーザーがクラウド リソースを管理できなくなります。その後も既存のリソースにはアクセスできます。 +message.migrate.instance.confirm=仮想インスタンスの移行先は次のホストでよろしいですか? +message.new.user=アカウントに新しいユーザーを追加するために、次の情報を指定してください。 +message.no.network.support.configuration.not.true=セキュリティ グループが有効なゾーンが無いため、追加のネットワーク機能はありません。手順 5. に進んでください。 +message.no.network.support=ハイパーバイザーとして vSphere を選択しましたが、このハイパーバイザーに追加のネットワーク機能はありません。手順 5. に進んでください。 +message.number.clusters=

クラスター

+message.number.hosts=

ホスト

+message.number.pods=

ポッド

+message.number.storage=

プライマリ ストレージ ボリューム

+message.number.zones=

ゾーン

+message.remove.vpn.access=次のユーザーから VPN アクセスを削除してもよろしいですか? +message.restart.mgmt.server=新しい設定を有効にするために、管理サーバーを再起動してください。 +message.security.group.usage=該当するセキュリティ グループをすべて選択するには、Ctrl キーを押しながらクリックしてください。 +message.snapshot.schedule=次の使用できるオプションから選択してポリシーの基本設定を適用することにより、定期スナップショットのスケジュールをセットアップできます。 +message.step.1.continue=続行するにはテンプレートまたは ISO を選択してください +message.step.1.desc=新しい仮想インスタンス用のテンプレートを選択してください。ISO をインストールできる空白のテンプレートを選択することもできます。 +message.step.2.continue=続行するにはサービス オファリングを選択してください +message.step.2.desc= +message.step.3.continue=続行するにはディスク オファリングを選択してください +message.step.3.desc= +message.step.4.continue=続行するにはネットワークを少なくとも 1 つ選択してください +message.step.4.desc=仮想インスタンスが接続するプライマリ ネットワークを選択してください。 +message.update.os.preference=このホストの OS 基本設定を選択してください。同様の基本設定を持つすべての仮想インスタンスは、別のホストを選択する前にまずこのホストに割り当てられます。 +message.update.ssl=各コンソール プロキシの仮想インスタンスで更新する、X.509 準拠の新しい SSL 証明書を送信してください: +message.virtual.network.desc=アカウントの専用仮想ネットワークです。ブロードキャスト ドメインは VLAN 内に配置され、パブリック ネットワークへのアクセスはすべて仮想ルーターによってルーティングされます。 +message.volume.create.template.confirm=このディスク ボリュームのテンプレートを作成してもよろしいですか? ボリューム サイズによっては、テンプレートの作成には数分以上かかる可能性があります。 +message.zone.step.1.desc=ゾーンのネットワーク モデルを選択してください。 +message.zone.step.2.desc=新しいゾーンを追加するために、次の情報を入力してください。 +message.zone.step.3.desc=新しいポッドを追加するために、次の情報を入力してください。 +message.apply.snapshot.policy=現在のスナップショット ポリシーを更新しました。 +message.disable.snapshot.policy=現在のスナップショット ポリシーを無効にしました。 +message.action.change.service.warning.for.instance=現在のサービス オファリングを変更する前にインスタンスを停止する必要があります。 +message.action.change.service.warning.for.router=現在のサービス オファリングを変更する前にルーターを停止する必要があります。 +message.action.reset.password.warning=現在のパスワードを変更する前にインスタンスを停止する必要があります。 +message.action.reset.password.off=インスタンスは現在この機能をサポートしていません。 #Errors -error.login=ユーザ名/パスワードが記録と一致しません -error.menu.select=アイテムが選択されていないためアクションを実行することができません -error.mgmt.server.inaccessible=Management Serverにアクセスできません。後で、もう一度やり直してください -error.session.expired=セッション有効期限が切れています -error.unresolved.internet.name=名前解決に失敗しました +error.login=ユーザー名/パスワードが記録と一致しません。 +error.menu.select=項目が選択されていないため操作を実行できません。 +error.mgmt.server.inaccessible=管理サーバーにアクセスできません。後で再実行してください。 +error.session.expired=セッションの有効期限が切れました。 +error.unresolved.internet.name=インターネット名を解決できません。 + + From 904825479f5f90aa744d8c1e0c797218a0280d91 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 20 Feb 2012 20:07:30 -0800 Subject: [PATCH 13/54] property files: move labels that have been translated out of "new labels" area. --- client/WEB-INF/classes/resources/messages.properties | 8 +++++--- client/WEB-INF/classes/resources/messages_ja.properties | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 63e9c9c0915..c64ccc7498d 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -1,4 +1,9 @@ #new labels (begin) ********************************************************************************************** + + +#new labels (end) ************************************************************************************************ + + state.Stopping=Stopping message.add.load.balancer.under.ip=The load balancer rule has been added under IP: message.select.instance=Please select an instance. @@ -451,11 +456,8 @@ label.total.hosts=Total Hosts label.total.CPU=Total CPU label.total.memory=Total Memory label.total.storage=Total Storage - -#after 2012-02-12 label.purpose=Purpose -#new labels (end) ********************************************************************************************** diff --git a/client/WEB-INF/classes/resources/messages_ja.properties b/client/WEB-INF/classes/resources/messages_ja.properties index fafbcd6f299..2bb4dc10cd0 100644 --- a/client/WEB-INF/classes/resources/messages_ja.properties +++ b/client/WEB-INF/classes/resources/messages_ja.properties @@ -1,4 +1,9 @@ #new labels (begin) ********************************************************************************************** + + +#new labels (end) ************************************************************************************************ + + state.Stopping=停止しています message.add.load.balancer.under.ip=負荷分散規則が次の IP アドレスに対して追加されました: message.select.instance=インスタンスを選択してください。 @@ -451,11 +456,8 @@ label.total.hosts=ホスト合計 label.total.CPU=CPU 合計 label.total.memory=メモリ合計 label.total.storage=ストレージ合計 - -#after 2012-02-12 label.purpose=目的 -#new labels (end) ********************************************************************************************** From 8213a2e225ce2a5ad8c58b1f4ddcb3793ffb3904 Mon Sep 17 00:00:00 2001 From: abhi Date: Tue, 21 Feb 2012 10:06:44 +0530 Subject: [PATCH 14/54] bug 13884: fixing spell vm.destroy.forcestop --- server/src/com/cloud/configuration/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index 6a071bb4790..adea2ad2acd 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -212,7 +212,7 @@ public enum Config { CapacitySkipcountingHours("Advanced", ManagementServer.class, Integer.class, "capacity.skipcounting.hours", "3600", "Time (in seconds) to wait before release VM's cpu and memory when VM in stopped state", null), VmStatsInterval("Advanced", ManagementServer.class, Integer.class, "vm.stats.interval", "60000", "The interval (in milliseconds) when vm stats are retrieved from agents.", null), VmTransitionWaitInterval("Advanced", ManagementServer.class, Integer.class, "vm.tranisition.wait.interval", "3600", "Time (in seconds) to wait before taking over a VM in transition state", null), - VmDestroyForcestop("Advanced", ManagementServer.class, Boolean.class, "vm.destory.forcestop", "false", "On destory, force-stop takes this value ", null), + VmDestroyForcestop("Advanced", ManagementServer.class, Boolean.class, "vm.destroy.forcestop", "false", "On destroy, force-stop takes this value ", null), ControlCidr("Advanced", ManagementServer.class, String.class, "control.cidr", "169.254.0.0/16", "Changes the cidr for the control network traffic. Defaults to using link local. Must be unique within pods", null), ControlGateway("Advanced", ManagementServer.class, String.class, "control.gateway", "169.254.0.1", "gateway for the control network traffic", null), From 4e9b312bf26a97fe3e5db5e7ff6b0c8030a48e51 Mon Sep 17 00:00:00 2001 From: Murali reddy Date: Tue, 21 Feb 2012 22:04:37 +0530 Subject: [PATCH 15/54] bug 13855: F5 - Hold time paramS for sticky policies are not getting programmed in F5 - configuring unique persistence profile for each LB rule with sticky method applied - removing source based sticky method for source based LB method which is not supported by F5 --- .../network/resource/F5BigIpResource.java | 50 +++++++++++++++++-- .../F5ExternalLoadBalancerElement.java | 6 +-- 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/core/src/com/cloud/network/resource/F5BigIpResource.java b/core/src/com/cloud/network/resource/F5BigIpResource.java index 27745aedd2f..e904117919d 100644 --- a/core/src/com/cloud/network/resource/F5BigIpResource.java +++ b/core/src/com/cloud/network/resource/F5BigIpResource.java @@ -27,8 +27,11 @@ import iControl.CommonVirtualServerDefinition; import iControl.Interfaces; import iControl.LocalLBLBMethod; import iControl.LocalLBNodeAddressBindingStub; +import iControl.LocalLBPersistenceMode; import iControl.LocalLBPoolBindingStub; import iControl.LocalLBProfileContextType; +import iControl.LocalLBProfilePersistenceBindingStub; +import iControl.LocalLBProfileULong; import iControl.LocalLBVirtualServerBindingStub; import iControl.LocalLBVirtualServerVirtualServerPersistence; import iControl.LocalLBVirtualServerVirtualServerProfile; @@ -78,6 +81,7 @@ import com.cloud.host.Host; import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType; import com.cloud.resource.ServerResource; import com.cloud.utils.NumbersUtil; +import com.cloud.utils.Pair; import com.cloud.utils.exception.ExecutionException; import com.cloud.utils.net.NetUtils; @@ -128,6 +132,7 @@ public class F5BigIpResource implements ServerResource { private NetworkingSelfIPBindingStub _selfIpApi; private NetworkingRouteDomainBindingStub _routeDomainApi; private SystemConfigSyncBindingStub _configSyncApi; + private LocalLBProfilePersistenceBindingStub _persistenceProfileApi; private String _objectNamePathSep = "-"; private String _routeDomainIdentifier = "%"; @@ -614,6 +619,7 @@ public class F5BigIpResource implements ServerResource { _selfIpApi = _interfaces.getNetworkingSelfIP(); _routeDomainApi = _interfaces.getNetworkingRouteDomain(); _configSyncApi = _interfaces.getSystemConfigSync(); + _persistenceProfileApi = _interfaces.getLocalLBProfilePersistence(); } catch (Exception e) { throw new ExecutionException("Failed to log in to BigIp appliance due to " + e.getMessage()); } @@ -635,9 +641,28 @@ public class F5BigIpResource implements ServerResource { if ((stickyPolicies != null) && (stickyPolicies.length > 0) && (stickyPolicies[0] != null)){ StickinessPolicyTO stickinessPolicy = stickyPolicies[0]; if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName())) { - _virtualServerApi.add_persistence_profile(genStringArray(virtualServerName), genPersistenceProfile("cookie")); - } else if (StickinessMethodType.SourceBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName())) { - _virtualServerApi.add_persistence_profile(genStringArray(virtualServerName), genPersistenceProfile("source_addr")); + + String[] profileNames = genStringArray("Cookie-profile-" + virtualServerName); + if (!persistenceProfileExists(profileNames[0])) { + LocalLBPersistenceMode[] lbPersistenceMode = new iControl.LocalLBPersistenceMode[1]; + lbPersistenceMode[0] = iControl.LocalLBPersistenceMode.PERSISTENCE_MODE_COOKIE; + _persistenceProfileApi.create(profileNames, lbPersistenceMode); + _virtualServerApi.add_persistence_profile(genStringArray(virtualServerName), genPersistenceProfile(profileNames[0])); + } + + List> paramsList = stickinessPolicy.getParams(); + for(Pair param : paramsList) { + if ("holdtime".equalsIgnoreCase(param.first())) { + long timeout = 180; //F5 default + if (param.second() != null) { + timeout = Long.parseLong(param.second()); + } + LocalLBProfileULong[] cookieTimeout = new LocalLBProfileULong[1]; + cookieTimeout[0] = new LocalLBProfileULong(); + cookieTimeout[0].setValue(timeout); + _persistenceProfileApi.set_cookie_expiration(profileNames, cookieTimeout); + } + } } } else { _virtualServerApi.remove_all_persistence_profiles(genStringArray(virtualServerName)); @@ -697,7 +722,24 @@ public class F5BigIpResource implements ServerResource { throw new ExecutionException(e.getMessage()); } } - + + private boolean persistenceProfileExists(String profileName) throws ExecutionException { + try { + String[] persistenceProfileArray = _persistenceProfileApi.get_list(); + if (persistenceProfileArray == null) { + return false; + } + for (String profile: persistenceProfileArray) { + if (profile.equalsIgnoreCase(profileName)) { + return true; + } + } + return false; + } catch (RemoteException e) { + throw new ExecutionException(e.getMessage()); + } + } + private iControl.CommonVirtualServerDefinition[] genVirtualServerDefinition(String name, LbProtocol protocol, String srcIp, long srcPort) { CommonVirtualServerDefinition vsDefs[] = {new CommonVirtualServerDefinition()}; vsDefs[0].setName(name); diff --git a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 676f2b53c8a..0590298810c 100644 --- a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -213,11 +213,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan List methodList = new ArrayList(); method = new LbStickinessMethod(StickinessMethodType.LBCookieBased, "This is cookie based sticky method, can be used only for http"); methodList.add(method); - method.addParam("holdtime", false, "time period for which persistence is in effect.", false); - - method = new LbStickinessMethod(StickinessMethodType.SourceBased, "This is source based sticky method, can be used for any type of protocol."); - methodList.add(method); - method.addParam("holdtime", false, "time period for which persistence is in effect.", false); + method.addParam("holdtime", false, "time period (in seconds) for which persistence is in effect.", false); Gson gson = new Gson(); String stickyMethodList = gson.toJson(methodList); From 4dea695e097a35736a3ce4f124b714d0e28d6489 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 21 Feb 2012 10:02:23 -0800 Subject: [PATCH 16/54] bug 13871: use perzone and peraccount (no spaces in values) when compare source nat capabilities status 13871: resolved fixed Reviewed-by: Chiradeep Vittal --- .../src/com/cloud/configuration/ConfigurationManagerImpl.java | 4 ++-- .../network/element/JuniperSRXExternalFirewallElement.java | 2 +- .../src/com/cloud/network/element/VirtualRouterElement.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 6468a7bebf7..b31c6a1dd83 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3213,7 +3213,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura boolean perAccount = value.contains("peraccount"); boolean perZone = value.contains("perzone"); if ((perAccount && perZone) || (!perAccount && !perZone)) { - throw new InvalidParameterValueException("Either perAccount or perZone source NAT type can be specified for " + Capability.SupportedSourceNatTypes.getName()); + throw new InvalidParameterValueException("Either peraccount or perzone source NAT type can be specified for " + Capability.SupportedSourceNatTypes.getName()); } } else if (capability == Capability.RedundantRouter) { boolean enabled = value.contains("true"); @@ -3311,7 +3311,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura boolean sharedSourceNat = false; boolean redundantRouter = false; if ((sourceNatServiceCapabilityMap != null) && (!sourceNatServiceCapabilityMap.isEmpty())) { - String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes.getName()); + String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes); if (sourceNatType != null) { _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.SupportedSourceNatTypes, sourceNatType); sharedSourceNat = sourceNatType.contains("perzone"); diff --git a/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 37f07d72b26..d40ad6cd4b8 100644 --- a/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -286,7 +286,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan Map sourceNatCapabilities = new HashMap(); // Specifies that this element supports either one source NAT rule per account, or no source NAT rules at all; // in the latter case a shared interface NAT rule will be used - sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, "per account, per zone"); + sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, "peraccount, perzone"); capabilities.put(Service.SourceNat, sourceNatCapabilities); // Specifies that port forwarding rules are supported by this element diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index c84b4e20a90..3766c16694e 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -521,7 +521,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl capabilities.put(Service.Gateway, null); Map sourceNatCapabilities = new HashMap(); - sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, "per account"); + sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, "peraccount"); sourceNatCapabilities.put(Capability.RedundantRouter, "true"); capabilities.put(Service.SourceNat, sourceNatCapabilities); From 11e4ded9851492429d0f5f0fd0883ca9deaa3cda Mon Sep 17 00:00:00 2001 From: kishan Date: Tue, 21 Feb 2012 23:39:20 +0530 Subject: [PATCH 17/54] Bug 13619: Throw exception when not traffic sentinel host is not available. Update last_collection timestamp when atleast 1 IP has nonzero bytes Status 13619: resolved fixed Reviewed-By: Nitin --- .../network/resource/TrafficSentinelResource.java | 4 +++- .../com/cloud/network/NetworkUsageManagerImpl.java | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/src/com/cloud/network/resource/TrafficSentinelResource.java b/core/src/com/cloud/network/resource/TrafficSentinelResource.java index 23ce64b0def..18e33d0a3f3 100644 --- a/core/src/com/cloud/network/resource/TrafficSentinelResource.java +++ b/core/src/com/cloud/network/resource/TrafficSentinelResource.java @@ -229,11 +229,13 @@ public class TrafficSentinelResource implements ServerResource { in.close(); } catch (MalformedURLException e1) { s_logger.info("Invalid Traffic Sentinel URL",e1); + throw new ExecutionException(e1.getMessage()); } catch (IOException e) { s_logger.debug("Error in direct network usage accounting",e); + throw new ExecutionException(e.getMessage()); } } catch (Exception e) { - s_logger.error(e); + s_logger.debug(e); throw new ExecutionException(e.getMessage()); } return answer; diff --git a/server/src/com/cloud/network/NetworkUsageManagerImpl.java b/server/src/com/cloud/network/NetworkUsageManagerImpl.java index fd8c7c11a83..2501ca1cadd 100755 --- a/server/src/com/cloud/network/NetworkUsageManagerImpl.java +++ b/server/src/com/cloud/network/NetworkUsageManagerImpl.java @@ -372,8 +372,8 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta } List collectedStats = new ArrayList(); - - //Get usage for Ips for which were assigned for the entire duration + + //Get usage for Ips which were assigned for the entire duration if(fullDurationIpUsage.size() > 0){ DirectNetworkUsageCommand cmd = new DirectNetworkUsageCommand(IpList, lastCollection, now); DirectNetworkUsageAnswer answer = (DirectNetworkUsageAnswer) _agentMgr.easySend(host.getId(), cmd); @@ -381,6 +381,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta String details = (answer != null) ? answer.getDetails() : "details unavailable"; String msg = "Unable to get network usage stats from " + host.getId() + " due to: " + details + "."; s_logger.error(msg); + return false; } else { for(UsageIPAddressVO usageIp : fullDurationIpUsage){ String publicIp = usageIp.getAddress(); @@ -403,7 +404,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta } } - //Get usage for Ips for which were assigned for part of the duration period + //Get usage for Ips which were assigned for part of the duration period for(UsageIPAddressVO usageIp : IpPartialUsage){ IpList = new ArrayList() ; IpList.add(usageIp.getAddress()); @@ -413,6 +414,7 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta String details = (answer != null) ? answer.getDetails() : "details unavailable"; String msg = "Unable to get network usage stats from " + host.getId() + " due to: " + details + "."; s_logger.error(msg); + return false; } else { String publicIp = usageIp.getAddress(); long[] bytesSentRcvd = answer.get(publicIp); @@ -434,6 +436,10 @@ public class NetworkUsageManagerImpl implements NetworkUsageManager, ResourceSta } } + if(collectedStats.size() == 0){ + s_logger.debug("No new direct network stats. No need to persist"); + return false; + } //Persist all the stats and last_collection time in a single transaction Transaction txn = Transaction.open(Transaction.CLOUD_DB); try { From 12b79da6c207071eac02fcfc496e5a4b11922383 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 21 Feb 2012 10:38:40 -0800 Subject: [PATCH 18/54] bug 13903: return vm's hostName as a displayName when displayName is null in bunch of api responses status 13903: resolved fixed Reviewed-by: Kelven Yang --- .../api/commands/ListNetworkOfferingsCmd.java | 11 +- .../com/cloud/api/response/IsoVmResponse.java | 146 ------------------ .../src/com/cloud/api/ApiResponseHelper.java | 25 ++- .../ConfigurationManagerImpl.java | 5 + 4 files changed, 34 insertions(+), 153 deletions(-) delete mode 100755 api/src/com/cloud/api/response/IsoVmResponse.java diff --git a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java index 692f923abeb..98ffe270d91 100644 --- a/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java +++ b/api/src/com/cloud/api/commands/ListNetworkOfferingsCmd.java @@ -84,11 +84,12 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { @Parameter(name=ApiConstants.SOURCE_NAT_SUPPORTED, type=CommandType.BOOLEAN, description="true if need to list only netwok offerings where source nat is supported, false otherwise") private Boolean sourceNatSupported; - - @Parameter(name=ApiConstants.SPECIFY_IP_RANGES, type=CommandType.BOOLEAN, description="true if need to list only network offerings which support specifying ip ranges") private Boolean specifyIpRanges; + @Parameter(name=ApiConstants.TAGS, type=CommandType.STRING, description="list network offerings by tags", length=4096) + private String tags; + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -149,7 +150,11 @@ public class ListNetworkOfferingsCmd extends BaseListCmd { return specifyIpRanges; } - ///////////////////////////////////////////////////// + public String getTags() { + return tags; + } + + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @Override diff --git a/api/src/com/cloud/api/response/IsoVmResponse.java b/api/src/com/cloud/api/response/IsoVmResponse.java deleted file mode 100755 index 1da14f9fdd7..00000000000 --- a/api/src/com/cloud/api/response/IsoVmResponse.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. - * - * This software is licensed under the GNU General Public License v3 or later. - * - * It is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -package com.cloud.api.response; - -import com.cloud.api.IdentityProxy; -import com.cloud.serializer.Param; -import com.google.gson.annotations.SerializedName; - -public class IsoVmResponse extends BaseResponse { - @SerializedName("id") @Param(description="the ISO ID") - private IdentityProxy id = new IdentityProxy("vm_template"); - - @SerializedName("name") @Param(description="the ISO name") - private String name; - - @SerializedName("displaytext") @Param(description="the ISO display text") - private String displayText; - - @SerializedName("bootable") @Param(description="true if the ISO is bootable, false otherwise") - private Boolean bootable; - - @SerializedName("isfeatured") @Param(description="true if this template is a featured template, false otherwise") - private Boolean featured; - - @SerializedName("ostypeid") @Param(description="the ID of the OS type for this template.") - private IdentityProxy osTypeId = new IdentityProxy("guest_os"); - - @SerializedName("ostypename") @Param(description="the name of the OS type for this template.") - private String osTypeName; - - @SerializedName("virtualmachineid") @Param(description="id of the virtual machine") - private IdentityProxy virtualMachineId = new IdentityProxy("vm_instance"); - - @SerializedName("vmname") @Param(description="name of the virtual machine") - private String virtualMachineName; - - @SerializedName("vmdisplayname") @Param(description="display name of the virtual machine") - private String virtualMachineDisplayName; - - @SerializedName("vmstate") @Param(description="state of the virtual machine") - private String virtualMachineState; - - - public Long getOsTypeId() { - return osTypeId.getValue(); - } - - public void setOsTypeId(Long osTypeId) { - this.osTypeId.setValue(osTypeId); - } - - public String getOsTypeName() { - return osTypeName; - } - - public void setOsTypeName(String osTypeName) { - this.osTypeName = osTypeName; - } - - public Long getId() { - return id.getValue(); - } - - public void setId(Long id) { - this.id.setValue(id); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDisplayText() { - return displayText; - } - - public void setDisplayText(String displayText) { - this.displayText = displayText; - } - - public Boolean isBootable() { - return bootable; - } - - public void setBootable(Boolean bootable) { - this.bootable = bootable; - } - - public Boolean isFeatured() { - return featured; - } - - public void setFeatured(Boolean featured) { - this.featured = featured; - } - - public Long getVirtualMachineId() { - return virtualMachineId.getValue(); - } - - public void setVirtualMachineId(Long virtualMachineId) { - this.virtualMachineId.setValue(virtualMachineId); - } - - public String getVirtualMachineName() { - return virtualMachineName; - } - - public void setVirtualMachineName(String virtualMachineName) { - this.virtualMachineName = virtualMachineName; - } - - public String getVirtualMachineDisplayName() { - return virtualMachineDisplayName; - } - - public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { - this.virtualMachineDisplayName = virtualMachineDisplayName; - } - - public String getVirtualMachineState() { - return virtualMachineState; - } - - public void setVirtualMachineState(String virtualMachineState) { - this.virtualMachineState = virtualMachineState; - } -} diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 0049a44cec0..b55273c1e11 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -727,7 +727,11 @@ public class ApiResponseHelper implements ResponseGenerator { UserVm vm = ApiDBUtils.findUserVmById(ipAddress.getAssociatedWithVmId()); ipResponse.setVirtualMachineId(vm.getId()); ipResponse.setVirtualMachineName(vm.getHostName()); - ipResponse.setVirtualMachineDisplayName(vm.getDisplayName()); + if (vm.getDisplayName() != null) { + ipResponse.setVirtualMachineDisplayName(vm.getDisplayName()); + } else { + ipResponse.setVirtualMachineDisplayName(vm.getHostName()); + } } ipResponse.setAssociatedNetworkId(ipAddress.getAssociatedWithNetworkId()); @@ -972,7 +976,11 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setVirtualMachineName(vm.getHostName()); UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); if (userVm != null) { - volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); + if (userVm.getDisplayName() != null) { + volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); + } else { + volResponse.setVirtualMachineDisplayName(userVm.getHostName()); + } volResponse.setVirtualMachineState(vm.getState().toString()); } else { s_logger.error("User Vm with Id: " + instanceId + " does not exist for volume " + volume.getId()); @@ -1175,7 +1183,12 @@ public class ApiResponseHelper implements ResponseGenerator { if (vm != null) { response.setVirtualMachineId(vm.getId()); response.setVirtualMachineName(vm.getHostName()); - response.setVirtualMachineDisplayName(vm.getDisplayName()); + + if (vm.getDisplayName() != null) { + response.setVirtualMachineDisplayName(vm.getDisplayName()); + } else { + response.setVirtualMachineDisplayName(vm.getHostName()); + } } } FirewallRule.State state = fwRule.getState(); @@ -1203,7 +1216,11 @@ public class ApiResponseHelper implements ResponseGenerator { if (vm != null) {// vm might be destroyed response.setVirtualMachineId(vm.getId()); response.setVirtualMachineName(vm.getHostName()); - response.setVirtualMachineDisplayName(vm.getDisplayName()); + if (vm.getDisplayName() != null) { + response.setVirtualMachineDisplayName(vm.getDisplayName()); + } else { + response.setVirtualMachineDisplayName(vm.getHostName()); + } } } FirewallRule.State state = fwRule.getState(); diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index b31c6a1dd83..d9c94dab2f3 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3391,6 +3391,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String guestIpType = cmd.getGuestIpType(); List supportedServicesStr = cmd.getSupportedServices(); Object specifyIpRanges = cmd.getSpecifyIpRanges(); + String tags = cmd.getTags(); if (zoneId != null) { zone = getZone(zoneId); @@ -3483,6 +3484,10 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (id != null) { sc.addAnd("id", SearchCriteria.Op.EQ, id); } + + if (tags != null) { + sc.addAnd("tags", SearchCriteria.Op.EQ, tags); + } List offerings = _networkOfferingDao.search(sc, searchFilter); Boolean sourceNatSupported = cmd.getSourceNatSupported(); From c63e353385b925f6dc6dccd9845b0f9d39ebdad0 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 11:25:10 -0800 Subject: [PATCH 19/54] Don't show header bar for listView-in-detailView --- ui/css/cloudstack3.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index c6cfc47e524..374363e89bb 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -2040,6 +2040,9 @@ div.detail-group.actions td { .detail-view .ui-tabs-panel div.toolbar { width: 768px; + background: none; + border: none; + margin-top: 8px; } .project-view div.toolbar { From fc4c5f106fbd4015947e67bfcda91bb51d1f9894 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 11:35:24 -0800 Subject: [PATCH 20/54] bug 13731 Add scrollbars and reduce width of tree view, to prevent large subdomain lists from being unselectable --- ui/css/cloudstack3.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css index 374363e89bb..21f5150106e 100644 --- a/ui/css/cloudstack3.css +++ b/ui/css/cloudstack3.css @@ -6102,7 +6102,8 @@ label.error { /*Tree view*/ .tree-view { - height: 100%; + width: 24%; + height: 98%; overflow: auto; } From 0682f3411b4e47a3a3affd4ec5eabd78b190d38d Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Tue, 21 Feb 2012 11:36:31 -0800 Subject: [PATCH 21/54] bug 13636: add 'dedicated' checkbox back to Add F5 dialog. --- ui/scripts/system.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 47f3a5ef93e..f8cd8f3e6a7 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -2524,12 +2524,12 @@ capacity: { label: 'label.capacity', validation: { required: false, number: true } + }, + dedicated: { + label: 'label.dedicated', + isBoolean: true, + isChecked: false } - // dedicated: { - // label: 'label.dedicated', - // isBoolean: true, - // isChecked: false - // } } }, action: function(args) { @@ -3951,12 +3951,12 @@ capacity: { label: 'label.capacity', validation: { required: false, number: true } + }, + dedicated: { + label: 'label.dedicated', + isBoolean: true, + isChecked: false } - // dedicated: { - // label: 'label.dedicated', - // isBoolean: true, - // isChecked: false - // } } }, action: function(args) { From d0612151d81482818a4451aaaf99f84aabaabfb8 Mon Sep 17 00:00:00 2001 From: kishan Date: Wed, 22 Feb 2012 01:13:47 +0530 Subject: [PATCH 22/54] Bug 13823: Throw network conflict expection when LB rules conflict Status 13823: resolved fixed Reviewed-By: Nitin --- .../com/cloud/network/lb/LoadBalancingRulesManagerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 660b5aeec61..21efb5923fa 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -728,6 +728,9 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa result = createLoadBalancer(lb, openFirewall); } catch (Exception ex) { s_logger.warn("Failed to create load balancer due to ", ex); + if (ex instanceof NetworkRuleConflictException) { + throw (NetworkRuleConflictException) ex; + } } finally { if (result == null && ip != null) { s_logger.debug("Releasing elastic IP address " + ip + " as corresponding lb rule failed to create"); From 17b34f4678ae301c918b6f64301e677548405a1c Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 12:31:48 -0800 Subject: [PATCH 23/54] bug 13866 Display public IP on VM details panel if static NAT is enabled for that VM status 13866: resolved fixed --- ui/scripts/instances.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js index 0faf58648cb..bb2bcacf963 100644 --- a/ui/scripts/instances.js +++ b/ui/scripts/instances.js @@ -1485,6 +1485,11 @@ else { hiddenFields = ["hypervisor"]; } + + if (!args.context.instances[0].publicip) { + hiddenFields.push('publicip'); + } + return hiddenFields; }, @@ -1493,6 +1498,7 @@ id: { label: 'label.id', isEditable: false }, displayname: { label: 'label.display.name', isEditable: true }, state: { label: 'label.state', isEditable: false }, + publicip: { label: 'label.public.ip', isEditable: false }, zonename: { label: 'label.zone.name', isEditable: false }, hypervisor: { label: 'label.hypervisor', isEditable: false }, templatename: { label: 'label.template', isEditable: false }, From 1ca561272431cd4f1711e540c8193f41d01f5af3 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 12:56:53 -0800 Subject: [PATCH 24/54] bug 13719 Change 'management server'->'hypervisor' in physical network description status 13719: resolved fixed --- client/WEB-INF/classes/resources/messages.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index c64ccc7498d..ed3e6105ee9 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -425,7 +425,7 @@ label.physical.network=Physical Network label.public.traffic=Public traffic label.guest.traffic=Guest Traffic label.storage.traffic=Storage Traffic -message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the management server. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.

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

Drag and drop one or more traffic types onto each physical network. label.add.physical.network=Add physical network label.traffic.types=Traffic Types label.management=Management From d41ad93f0ff8dbe73579dbab13022f5ef9b754b8 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Tue, 21 Feb 2012 13:20:43 -0800 Subject: [PATCH 25/54] bug 13808: unpack OVA if OVF file does not exist (don't rely on template installation script to unpack it for us). Reviewed-By: Edison --- .../manager/VmwareStorageManagerImpl.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/core/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java b/core/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java index b699cbc31e7..61d21bdc7df 100644 --- a/core/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java +++ b/core/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java @@ -124,7 +124,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { copyTemplateFromSecondaryToPrimary(hyperHost, primaryStorageDatastoreMo, secondaryStorageUrl, - mountPoint, templateUuidName); + mountPoint, templateName, templateUuidName); } else { s_logger.info("Template " + templateName + " has already been setup, skip the template setup process in primary storage"); } @@ -410,9 +410,11 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { return new CreateVolumeFromSnapshotAnswer(cmd, success, details, newVolumeName); } - + + // templateName: name in secondary storage + // templateUuid: will be used at hypervisor layer private void copyTemplateFromSecondaryToPrimary(VmwareHypervisorHost hyperHost, DatastoreMO datastoreMo, String secondaryStorageUrl, - String templatePathAtSecondaryStorage, String templateName) throws Exception { + String templatePathAtSecondaryStorage, String templateName, String templateUuid) throws Exception { s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage @@ -425,30 +427,45 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { templateName + "." + ImageFormat.OVA.getFileExtension(); String srcFileName = getOVFFilePath(srcOVAFileName); - if(srcFileName == null) { + if(srcFileName == null) { + Script command = new Script("tar", 0, s_logger); + command.add("--no-same-owner"); + command.add("-xf", srcOVAFileName); + command.setWorkDir(secondaryMountPoint + "/" + templatePathAtSecondaryStorage); + s_logger.info("Executing command: " + command.toString()); + String result = command.execute(); + if(result != null) { + String msg = "Unable to unpack snapshot OVA file at: " + srcOVAFileName; + s_logger.error(msg); + throw new Exception(msg); + } + } + + srcFileName = getOVFFilePath(srcOVAFileName); + if(srcFileName == null) { String msg = "Unable to locate OVF file in template package directory: " + srcOVAFileName; s_logger.error(msg); throw new Exception(msg); } - String vmName = templateName; + String vmName = templateUuid; hyperHost.importVmFromOVF(srcFileName, vmName, datastoreMo, "thin"); VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName); if(vmMo == null) { String msg = "Failed to import OVA template. secondaryStorage: " + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage - + ", templateName: " + templateName; + + ", templateName: " + templateName + ", templateUuid: " + templateUuid; s_logger.error(msg); throw new Exception(msg); } if(vmMo.createSnapshot("cloud.template.base", "Base snapshot", false, false)) { - vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, templateName); + vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_UUID, templateUuid); vmMo.markAsTemplate(); } else { vmMo.destroy(); - String msg = "Unable to create base snapshot for template: " + templateName; + String msg = "Unable to create base snapshot for template, templateName: " + templateName + ", templateUuid: " + templateUuid; s_logger.error(msg); throw new Exception(msg); } From 9d954fa8152fd0315346a622a7ec116f822629da Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 13:44:20 -0800 Subject: [PATCH 26/54] bug 13675 Hide unused text fields for ICMP vs TCP selection --- ui/scripts/network.js | 7 +++++++ ui/scripts/ui/widgets/multiEdit.js | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index c26e789e809..18c5aefe652 100644 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1473,11 +1473,18 @@ }); if ($(this).val() == 'icmp') { + $icmpFields.show(); $icmpFields.attr('disabled', false); $otherFields.attr('disabled', 'disabled'); + $otherFields.hide(); + $otherFields.parent().find('label.error').hide(); } else { + $otherFields.show(); + $otherFields.parent().find('label.error').hide(); $otherFields.attr('disabled', false); $icmpFields.attr('disabled', 'disabled'); + $icmpFields.hide(); + $icmpFields.parent().find('label.error').hide(); } }); diff --git a/ui/scripts/ui/widgets/multiEdit.js b/ui/scripts/ui/widgets/multiEdit.js index c884d2e883a..baf32f8c458 100644 --- a/ui/scripts/ui/widgets/multiEdit.js +++ b/ui/scripts/ui/widgets/multiEdit.js @@ -670,7 +670,7 @@ var $range = $('
').addClass('range').appendTo($td); $(field.range).each(function() { - $('') + var $input = $('') .attr({ name: this, type: 'text' @@ -680,9 +680,11 @@ .appendTo( $('
').addClass('range-item').appendTo($range) ); + + if (field.isDisabled) $input.hide(); }); } else { - $('') + var $input = $('') .attr({ name: fieldName, type: field.isPassword ? 'password' : 'text' @@ -690,6 +692,8 @@ .addClass(!field.isOptional ? 'required' : null) .attr('disabled', field.isDisabled ? 'disabled' : false) .appendTo($td); + + if (field.isDisabled) $input.hide(); } } else if (field.custom) { $('
').addClass('button add-vm custom-action') From cc80211957737c20456f857e84dde5f9850b8180 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 13:47:55 -0800 Subject: [PATCH 27/54] bug 13908: Fix localization label --- ui/index.jsp | 1 + ui/scripts/accounts.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/index.jsp b/ui/index.jsp index 3e090b86a68..311dc4b9b07 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -1614,6 +1614,7 @@ diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 3adc8853940..91103df0e70 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1075,7 +1075,7 @@ array1.push("&tags=" + args.context.physicalNetworks[0].tags); } else { - alert("Network offerings is not available until you specify tags for this physical network"); + alert(dictionary['error.please.specify.physical.network.tags']); return; } } From 760c62eb15405fa36f361b4d2abefe55dddb308a Mon Sep 17 00:00:00 2001 From: prachi Date: Tue, 21 Feb 2012 16:46:53 -0800 Subject: [PATCH 48/54] Bug 13224 - Network Usage - Netscaler - External device is being queried multiple times (up to 8 times) whenever the Network Usage task is run. Reviewed-by: Kishan Changes: - Separated out the External Network Usage task from the ExternalLBDeviceMgr because ExternalLbDeviceMgrImpl :: start() was getting multiple times during management server satrtup. The reason for this is that this is the baseclass for F5 and NetScalarElement. - This caused us to schedule the ExternalNetworkUsageTask multiple times - Also we have LBRulesMgr calling this ExternalLbDeviceMgrImpl by creating an instance of this class which is declared abstract - Hence having a separate implementation to manage the network usage stats should solve this. --- .../DefaultComponentLibrary.java | 4 +- .../ExternalLoadBalancerDeviceManager.java | 7 - ...ExternalLoadBalancerDeviceManagerImpl.java | 398 ------------- .../ExternalLoadBalancerUsageManager.java | 36 ++ .../ExternalLoadBalancerUsageManagerImpl.java | 546 ++++++++++++++++++ .../lb/LoadBalancingRulesManagerImpl.java | 6 +- 6 files changed, 587 insertions(+), 410 deletions(-) create mode 100644 server/src/com/cloud/network/ExternalLoadBalancerUsageManager.java create mode 100644 server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 5ae6226fd5b..6f0b0f07367 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -72,7 +72,7 @@ import com.cloud.keystore.KeystoreDaoImpl; import com.cloud.keystore.KeystoreManagerImpl; import com.cloud.maint.UpgradeManagerImpl; import com.cloud.maint.dao.AgentUpgradeDaoImpl; -import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl; +import com.cloud.network.ExternalLoadBalancerUsageManagerImpl; import com.cloud.network.NetworkManagerImpl; import com.cloud.network.StorageNetworkManagerImpl; import com.cloud.network.dao.ExternalFirewallDeviceDaoImpl; @@ -388,7 +388,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addManager("ElasticLoadBalancerManager", ElasticLoadBalancerManagerImpl.class); addManager("SwiftManager", SwiftManagerImpl.class); addManager("StorageNetworkManager", StorageNetworkManagerImpl.class); - addManager("ExternalLoadBalancerDeviceManager", ExternalLoadBalancerDeviceManagerImpl.class); + addManager("ExternalLoadBalancerUsageManager", ExternalLoadBalancerUsageManagerImpl.class); addManager("HA Manager", HighAvailabilityManagerImpl.class); } diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java index 075e94b21a3..6614d8455d7 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManager.java @@ -101,11 +101,4 @@ public interface ExternalLoadBalancerDeviceManager extends Manager{ public boolean manageGuestNetworkWithExternalLoadBalancer(boolean add, Network guestConfig) throws ResourceUnavailableException, InsufficientCapacityException; - /** - * updates the network usage stats for a LB rule, associated with an external LB device, that is being revoked as part of Delete LB rule or release IP actions - * @param loadBalancerRuleId - */ - public void updateExternalLoadBalancerNetworkUsageStats(long loadBalancerRuleId); - - } diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 86822b781c2..9a05e575dc9 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -25,19 +25,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import javax.ejb.Local; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; -import com.cloud.agent.api.ExternalNetworkResourceUsageAnswer; -import com.cloud.agent.api.ExternalNetworkResourceUsageCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupExternalLoadBalancerCommand; import com.cloud.agent.api.routing.CreateLoadBalancerApplianceCommand; @@ -108,28 +102,22 @@ import com.cloud.resource.UnableDeleteHostException; import com.cloud.server.api.response.ExternalLoadBalancerResponse; import com.cloud.user.Account; import com.cloud.user.AccountManager; -import com.cloud.user.AccountVO; -import com.cloud.user.UserStatisticsVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.Inject; -import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.exception.ExecutionException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.UrlUtil; -import com.cloud.vm.DomainRouterVO; import com.cloud.vm.Nic.ReservationStrategy; import com.cloud.vm.Nic.State; import com.cloud.vm.NicVO; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; -@Local(value = { ExternalLoadBalancerDeviceManager.class }) public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase implements ExternalLoadBalancerDeviceManager, ResourceStateAdapter { @Inject @@ -189,8 +177,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase @Inject protected HostPodDao _podDao = null; - ScheduledExecutorService _executor; - private int _externalNetworkStatsInterval; private long _defaultLbCapacity; private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalLoadBalancerDeviceManagerImpl.class); @@ -1005,11 +991,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); - _externalNetworkStatsInterval = NumbersUtil.parseInt(_configDao.getValue(Config.ExternalNetworkStatsInterval.key()), 300); - if (_externalNetworkStatsInterval > 0) { - _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("ExternalNetworkMonitor")); - } - _defaultLbCapacity = NumbersUtil.parseLong(_configDao.getValue(Config.DefaultExternalLoadBalancerCapacity.key()), 50); _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this); return true; @@ -1017,9 +998,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase @Override public boolean start() { - if (_externalNetworkStatsInterval > 0) { - _executor.scheduleAtFixedRate(new ExternalLoadBalancerDeviceNetworkUsageTask(), _externalNetworkStatsInterval, _externalNetworkStatsInterval, TimeUnit.SECONDS); - } return true; } @@ -1028,382 +1006,6 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return true; } - protected class ExternalLoadBalancerDeviceNetworkUsageTask implements Runnable { - - public ExternalLoadBalancerDeviceNetworkUsageTask() { - - } - - @Override - public void run() { - GlobalLock scanLock = GlobalLock.getInternLock("ExternalLoadBalancerDeviceManagerImpl"); - try { - if (scanLock.lock(20)) { - try { - runExternalLoadBalancerNetworkUsageTask(); - } finally { - scanLock.unlock(); - } - } - } catch (Exception e) { - s_logger.warn("Problems while getting external load balancer device usage", e); - } finally { - scanLock.releaseRef(); - } - } - - private void runExternalLoadBalancerNetworkUsageTask() { - s_logger.debug("External load balancer devices stats collector is running..."); - - for (DataCenterVO zone : _dcDao.listAll()) { - List domainRoutersInZone = _routerDao.listByDataCenter(zone.getId()); - if (domainRoutersInZone == null) { - continue; - } - Map lbDeviceUsageAnswerMap = new HashMap(); - List accountsProcessed = new ArrayList(); - - for (DomainRouterVO domainRouter : domainRoutersInZone) { - long accountId = domainRouter.getAccountId(); - - if (accountsProcessed.contains(new Long(accountId))) { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Networks for Account " + accountId + " are already processed for external network usage, so skipping usage check."); - } - continue; - } - - long zoneId = zone.getId(); - - List networksForAccount = _networkDao.listBy(accountId, zoneId, Network.GuestType.Isolated); - if (networksForAccount == null) { - continue; - } - - for (NetworkVO network : networksForAccount) { - if (!_networkMgr.networkIsConfiguredForExternalNetworking(zoneId, network.getId())) { - s_logger.debug("Network " + network.getId() + " is not configured for external networking, so skipping usage check."); - continue; - } - - ExternalLoadBalancerDeviceVO lbDeviceVO = getExternalLoadBalancerForNetwork(network); - if (lbDeviceVO == null) { - continue; - } - - // Get network stats from the external load balancer - ExternalNetworkResourceUsageAnswer lbAnswer = null; - HostVO externalLoadBalancer = _hostDao.findById(lbDeviceVO.getHostId()); - if (externalLoadBalancer != null) { - Long lbDeviceId = new Long(externalLoadBalancer.getId()); - if (!lbDeviceUsageAnswerMap.containsKey(lbDeviceId)) { - ExternalNetworkResourceUsageCommand cmd = new ExternalNetworkResourceUsageCommand(); - lbAnswer = (ExternalNetworkResourceUsageAnswer) _agentMgr.easySend(externalLoadBalancer.getId(), cmd); - if (lbAnswer == null || !lbAnswer.getResult()) { - String details = (lbAnswer != null) ? lbAnswer.getDetails() : "details unavailable"; - String msg = "Unable to get external load balancer stats for " + zone.getName() + " due to: " + details + "."; - s_logger.error(msg); - continue; - } - lbDeviceUsageAnswerMap.put(lbDeviceId, lbAnswer); - } else { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Reusing usage Answer for device id " + lbDeviceId + "for Network " + network.getId()); - } - lbAnswer = lbDeviceUsageAnswerMap.get(lbDeviceId); - } - } - - AccountVO account = _accountDao.findById(accountId); - if (account == null) { - s_logger.debug("Skipping stats update for account with ID " + accountId); - continue; - } - - if (!manageStatsEntries(true, accountId, zoneId, network, externalLoadBalancer, lbAnswer)) { - continue; - } - - manageStatsEntries(false, accountId, zoneId, network, externalLoadBalancer, lbAnswer); - } - - accountsProcessed.add(new Long(accountId)); - } - } - } - - private boolean updateBytes(UserStatisticsVO userStats, long newCurrentBytesSent, long newCurrentBytesReceived) { - long oldNetBytesSent = userStats.getNetBytesSent(); - long oldNetBytesReceived = userStats.getNetBytesReceived(); - long oldCurrentBytesSent = userStats.getCurrentBytesSent(); - long oldCurrentBytesReceived = userStats.getCurrentBytesReceived(); - String warning = "Received an external network stats byte count that was less than the stored value. Zone ID: " + userStats.getDataCenterId() + ", account ID: " + userStats.getAccountId() + "."; - - userStats.setCurrentBytesSent(newCurrentBytesSent); - if (oldCurrentBytesSent > newCurrentBytesSent) { - s_logger.warn(warning + "Stored bytes sent: " + oldCurrentBytesSent + ", new bytes sent: " + newCurrentBytesSent + "."); - userStats.setNetBytesSent(oldNetBytesSent + oldCurrentBytesSent); - } - - userStats.setCurrentBytesReceived(newCurrentBytesReceived); - if (oldCurrentBytesReceived > newCurrentBytesReceived) { - s_logger.warn(warning + "Stored bytes received: " + oldCurrentBytesReceived + ", new bytes received: " + newCurrentBytesReceived + "."); - userStats.setNetBytesReceived(oldNetBytesReceived + oldCurrentBytesReceived); - } - - return _userStatsDao.update(userStats.getId(), userStats); - } - - // Creates a new stats entry for the specified parameters, if one doesn't already exist. - private boolean createStatsEntry(long accountId, long zoneId, long networkId, String publicIp, long hostId) { - HostVO host = _hostDao.findById(hostId); - UserStatisticsVO userStats = _userStatsDao.findBy(accountId, zoneId, networkId, publicIp, hostId, host.getType().toString()); - if (userStats == null) { - return (_userStatsDao.persist(new UserStatisticsVO(accountId, zoneId, publicIp, hostId, host.getType().toString(), networkId)) != null); - } else { - return true; - } - } - - // Updates an existing stats entry with new data from the specified usage answer. - private boolean updateStatsEntry(long accountId, long zoneId, long networkId, String publicIp, long hostId, ExternalNetworkResourceUsageAnswer answer) { - AccountVO account = _accountDao.findById(accountId); - DataCenterVO zone = _dcDao.findById(zoneId); - NetworkVO network = _networkDao.findById(networkId); - HostVO host = _hostDao.findById(hostId); - String statsEntryIdentifier = "account " + account.getAccountName() + ", zone " + zone.getName() + ", network ID " + networkId + ", host ID " + host.getName(); - - long newCurrentBytesSent = 0; - long newCurrentBytesReceived = 0; - - if (publicIp != null) { - long[] bytesSentAndReceived = null; - statsEntryIdentifier += ", public IP: " + publicIp; - - if (host.getType().equals(Host.Type.ExternalLoadBalancer) && externalLoadBalancerIsInline(host)) { - // Look up stats for the guest IP address that's mapped to the public IP address - InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(publicIp); - - if (mapping != null) { - NicVO nic = _nicDao.findById(mapping.getNicId()); - String loadBalancingIpAddress = nic.getIp4Address(); - bytesSentAndReceived = answer.ipBytes.get(loadBalancingIpAddress); - - if (bytesSentAndReceived != null) { - bytesSentAndReceived[0] = 0; - } - } - } else { - bytesSentAndReceived = answer.ipBytes.get(publicIp); - } - - if (bytesSentAndReceived == null) { - s_logger.debug("Didn't get an external network usage answer for public IP " + publicIp); - } else { - newCurrentBytesSent += bytesSentAndReceived[0]; - newCurrentBytesReceived += bytesSentAndReceived[1]; - } - } else { - URI broadcastURI = network.getBroadcastUri(); - if (broadcastURI == null) { - s_logger.debug("Not updating stats for guest network with ID " + network.getId() + " because the network is not implemented."); - return true; - } else { - long vlanTag = Integer.parseInt(broadcastURI.getHost()); - long[] bytesSentAndReceived = answer.guestVlanBytes.get(String.valueOf(vlanTag)); - - if (bytesSentAndReceived == null) { - s_logger.warn("Didn't get an external network usage answer for guest VLAN " + vlanTag); - } else { - newCurrentBytesSent += bytesSentAndReceived[0]; - newCurrentBytesReceived += bytesSentAndReceived[1]; - } - } - } - - UserStatisticsVO userStats; - try { - userStats = _userStatsDao.lock(accountId, zoneId, networkId, publicIp, hostId, host.getType().toString()); - } catch (Exception e) { - s_logger.warn("Unable to find user stats entry for " + statsEntryIdentifier); - return false; - } - - if (updateBytes(userStats, newCurrentBytesSent, newCurrentBytesReceived)) { - s_logger.debug("Successfully updated stats for " + statsEntryIdentifier); - return true; - } else { - s_logger.debug("Failed to update stats for " + statsEntryIdentifier); - return false; - } - } - - private boolean createOrUpdateStatsEntry(boolean create, long accountId, long zoneId, long networkId, String publicIp, long hostId, ExternalNetworkResourceUsageAnswer answer) { - if (create) { - return createStatsEntry(accountId, zoneId, networkId, publicIp, hostId); - } else { - return updateStatsEntry(accountId, zoneId, networkId, publicIp, hostId, answer); - } - } - - /* - * Creates/updates all necessary stats entries for an account and zone. - * Stats entries are created for source NAT IP addresses, static NAT rules, port forwarding rules, and load - * balancing rules - */ - private boolean manageStatsEntries(boolean create, long accountId, long zoneId, Network network, - HostVO externalLoadBalancer, ExternalNetworkResourceUsageAnswer lbAnswer) { - String accountErrorMsg = "Failed to update external network stats entry. Details: account ID = " + accountId; - Transaction txn = Transaction.open(Transaction.CLOUD_DB); - try { - txn.start(); - String networkErrorMsg = accountErrorMsg + ", network ID = " + network.getId(); - - // If an external load balancer is added, manage one entry for each load balancing rule in this network - if (externalLoadBalancer != null && lbAnswer != null) { - List loadBalancers = _loadBalancerDao.listByNetworkId(network.getId()); - for (LoadBalancerVO loadBalancer : loadBalancers) { - String publicIp = _networkMgr.getIp(loadBalancer.getSourceIpAddressId()).getAddress().addr(); - if (!createOrUpdateStatsEntry(create, accountId, zoneId, network.getId(), publicIp, externalLoadBalancer.getId(), lbAnswer)) { - throw new ExecutionException(networkErrorMsg + ", load balancing rule public IP = " + publicIp); - } - } - } - return txn.commit(); - } catch (Exception e) { - s_logger.warn("Exception: ", e); - txn.rollback(); - return false; - } finally { - txn.close(); - } - } - } - - @Override - public void updateExternalLoadBalancerNetworkUsageStats(long loadBalancerRuleId){ - - LoadBalancerVO lb = _loadBalancerDao.findById(loadBalancerRuleId); - if(lb == null){ - if(s_logger.isDebugEnabled()){ - s_logger.debug("Cannot update usage stats, LB rule is not found"); - } - return; - } - long networkId = lb.getNetworkId(); - Network network = _networkDao.findById(networkId); - if(network == null){ - if(s_logger.isDebugEnabled()){ - s_logger.debug("Cannot update usage stats, Network is not found"); - } - return; - } - ExternalLoadBalancerDeviceVO lbDeviceVO = getExternalLoadBalancerForNetwork(network); - if (lbDeviceVO == null) { - if(s_logger.isDebugEnabled()){ - s_logger.debug("Cannot update usage stats, No external LB device found"); - } - return; - } - - // Get network stats from the external load balancer - ExternalNetworkResourceUsageAnswer lbAnswer = null; - HostVO externalLoadBalancer = _hostDao.findById(lbDeviceVO.getHostId()); - if (externalLoadBalancer != null) { - ExternalNetworkResourceUsageCommand cmd = new ExternalNetworkResourceUsageCommand(); - lbAnswer = (ExternalNetworkResourceUsageAnswer) _agentMgr.easySend(externalLoadBalancer.getId(), cmd); - if (lbAnswer == null || !lbAnswer.getResult()) { - String details = (lbAnswer != null) ? lbAnswer.getDetails() : "details unavailable"; - String msg = "Unable to get external load balancer stats for network" + networkId + " due to: " + details + "."; - s_logger.error(msg); - return; - } - } - - long accountId = lb.getAccountId(); - AccountVO account = _accountDao.findById(accountId); - if (account == null) { - s_logger.debug("Skipping stats update for external LB for account with ID " + accountId); - return; - } - - String publicIp = _networkMgr.getIp(lb.getSourceIpAddressId()).getAddress().addr(); - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - String statsEntryIdentifier = "account " + account.getAccountName() + ", zone " + zone.getName() + ", network ID " + networkId + ", host ID " + externalLoadBalancer.getName(); - - long newCurrentBytesSent = 0; - long newCurrentBytesReceived = 0; - - if (publicIp != null) { - long[] bytesSentAndReceived = null; - statsEntryIdentifier += ", public IP: " + publicIp; - - if (externalLoadBalancer.getType().equals(Host.Type.ExternalLoadBalancer) && externalLoadBalancerIsInline(externalLoadBalancer)) { - // Look up stats for the guest IP address that's mapped to the public IP address - InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(publicIp); - - if (mapping != null) { - NicVO nic = _nicDao.findById(mapping.getNicId()); - String loadBalancingIpAddress = nic.getIp4Address(); - bytesSentAndReceived = lbAnswer.ipBytes.get(loadBalancingIpAddress); - - if (bytesSentAndReceived != null) { - bytesSentAndReceived[0] = 0; - } - } - } else { - bytesSentAndReceived = lbAnswer.ipBytes.get(publicIp); - } - - if (bytesSentAndReceived == null) { - s_logger.debug("Didn't get an external network usage answer for public IP " + publicIp); - } else { - newCurrentBytesSent += bytesSentAndReceived[0]; - newCurrentBytesReceived += bytesSentAndReceived[1]; - } - - UserStatisticsVO userStats; - final Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - userStats = _userStatsDao.lock(accountId, zone.getId(), networkId, publicIp, externalLoadBalancer.getId(), externalLoadBalancer.getType().toString()); - - if(userStats != null){ - long oldNetBytesSent = userStats.getNetBytesSent(); - long oldNetBytesReceived = userStats.getNetBytesReceived(); - long oldCurrentBytesSent = userStats.getCurrentBytesSent(); - long oldCurrentBytesReceived = userStats.getCurrentBytesReceived(); - String warning = "Received an external network stats byte count that was less than the stored value. Zone ID: " + userStats.getDataCenterId() + ", account ID: " + userStats.getAccountId() + "."; - - userStats.setCurrentBytesSent(newCurrentBytesSent); - if (oldCurrentBytesSent > newCurrentBytesSent) { - s_logger.warn(warning + "Stored bytes sent: " + oldCurrentBytesSent + ", new bytes sent: " + newCurrentBytesSent + "."); - userStats.setNetBytesSent(oldNetBytesSent + oldCurrentBytesSent); - } - - userStats.setCurrentBytesReceived(newCurrentBytesReceived); - if (oldCurrentBytesReceived > newCurrentBytesReceived) { - s_logger.warn(warning + "Stored bytes received: " + oldCurrentBytesReceived + ", new bytes received: " + newCurrentBytesReceived + "."); - userStats.setNetBytesReceived(oldNetBytesReceived + oldCurrentBytesReceived); - } - - if (_userStatsDao.update(userStats.getId(), userStats)) { - s_logger.debug("Successfully updated stats for " + statsEntryIdentifier); - } else { - s_logger.debug("Failed to update stats for " + statsEntryIdentifier); - } - }else { - s_logger.warn("Unable to find user stats entry for " + statsEntryIdentifier); - } - - txn.commit(); - }catch (final Exception e) { - txn.rollback(); - throw new CloudRuntimeException("Problem getting stats after reboot/stop ", e); - } - } - } - @Override public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] cmd) { // TODO Auto-generated method stub diff --git a/server/src/com/cloud/network/ExternalLoadBalancerUsageManager.java b/server/src/com/cloud/network/ExternalLoadBalancerUsageManager.java new file mode 100644 index 00000000000..0d75d439984 --- /dev/null +++ b/server/src/com/cloud/network/ExternalLoadBalancerUsageManager.java @@ -0,0 +1,36 @@ +/** + * * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved +* + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.cloud.network; + +import com.cloud.utils.component.Manager; + +/* ExternalLoadBalancerUsageManager implements a periodic task that retrieves and updates the network usage stats from all external load balancer devices. + */ + +public interface ExternalLoadBalancerUsageManager extends Manager{ + + /** + * updates the network usage stats for a LB rule, associated with an external LB device, that is being revoked as part of Delete LB rule or release IP actions + * @param loadBalancerRuleId + */ + public void updateExternalLoadBalancerNetworkUsageStats(long loadBalancerRuleId); + + +} diff --git a/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java new file mode 100644 index 00000000000..488f64aaac3 --- /dev/null +++ b/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java @@ -0,0 +1,546 @@ +package com.cloud.network; + +import java.net.URI; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import com.cloud.agent.AgentManager; +import com.cloud.agent.api.ExternalNetworkResourceUsageAnswer; +import com.cloud.agent.api.ExternalNetworkResourceUsageCommand; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.HostPodDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.host.DetailVO; +import com.cloud.host.Host; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.host.dao.HostDetailsDao; +import com.cloud.network.dao.ExternalFirewallDeviceDao; +import com.cloud.network.dao.ExternalLoadBalancerDeviceDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.InlineLoadBalancerNicMapDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkExternalFirewallDao; +import com.cloud.network.dao.NetworkExternalLoadBalancerDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.rules.dao.PortForwardingRulesDao; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.resource.ResourceManager; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountVO; +import com.cloud.user.UserStatisticsVO; +import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.UserStatisticsDao; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.component.Inject; +import com.cloud.utils.concurrency.NamedThreadFactory; +import com.cloud.utils.db.GlobalLock; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.exception.ExecutionException; +import com.cloud.vm.DomainRouterVO; +import com.cloud.vm.NicVO; +import com.cloud.vm.dao.DomainRouterDao; +import com.cloud.vm.dao.NicDao; + +@Local(value = { ExternalLoadBalancerUsageManager.class }) +public class ExternalLoadBalancerUsageManagerImpl implements ExternalLoadBalancerUsageManager { + + String _name; + @Inject + NetworkExternalLoadBalancerDao _networkExternalLBDao; + @Inject + ExternalLoadBalancerDeviceDao _externalLoadBalancerDeviceDao; + @Inject + HostDao _hostDao; + @Inject + DataCenterDao _dcDao; + @Inject + NetworkManager _networkMgr; + @Inject + InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; + @Inject + NicDao _nicDao; + @Inject + AgentManager _agentMgr; + @Inject + ResourceManager _resourceMgr; + @Inject + IPAddressDao _ipAddressDao; + @Inject + VlanDao _vlanDao; + @Inject + NetworkOfferingDao _networkOfferingDao; + @Inject + AccountDao _accountDao; + @Inject + PhysicalNetworkDao _physicalNetworkDao; + @Inject + PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; + @Inject + AccountManager _accountMgr; + @Inject + UserStatisticsDao _userStatsDao; + @Inject + NetworkDao _networkDao; + @Inject + DomainRouterDao _routerDao; + @Inject + LoadBalancerDao _loadBalancerDao; + @Inject + PortForwardingRulesDao _portForwardingRulesDao; + @Inject + ConfigurationDao _configDao; + @Inject + HostDetailsDao _hostDetailDao; + @Inject + NetworkExternalLoadBalancerDao _networkLBDao; + @Inject + NetworkServiceMapDao _ntwkSrvcProviderDao; + @Inject + NetworkExternalFirewallDao _networkExternalFirewallDao; + @Inject + ExternalFirewallDeviceDao _externalFirewallDeviceDao; + @Inject + protected HostPodDao _podDao = null; + + ScheduledExecutorService _executor; + private int _externalNetworkStatsInterval; + private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalLoadBalancerUsageManagerImpl.class); + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _externalNetworkStatsInterval = NumbersUtil.parseInt(_configDao.getValue(Config.ExternalNetworkStatsInterval.key()), 300); + if (_externalNetworkStatsInterval > 0) { + _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("ExternalNetworkMonitor")); + } + return true; + + } + + @Override + public boolean start() { + if (_externalNetworkStatsInterval > 0) { + _executor.scheduleAtFixedRate(new ExternalLoadBalancerDeviceNetworkUsageTask(), _externalNetworkStatsInterval, _externalNetworkStatsInterval, TimeUnit.SECONDS); + } + return true; + } + + @Override + public boolean stop() { + return true; + } + + @Override + public String getName() { + return _name; + } + + private ExternalLoadBalancerDeviceVO getExternalLoadBalancerForNetwork(Network network) { + NetworkExternalLoadBalancerVO lbDeviceForNetwork = _networkExternalLBDao.findByNetworkId(network.getId()); + if (lbDeviceForNetwork != null) { + long lbDeviceId = lbDeviceForNetwork.getExternalLBDeviceId(); + ExternalLoadBalancerDeviceVO lbDeviceVo = _externalLoadBalancerDeviceDao.findById(lbDeviceId); + assert (lbDeviceVo != null); + return lbDeviceVo; + } + return null; + } + + private boolean externalLoadBalancerIsInline(HostVO externalLoadBalancer) { + DetailVO detail = _hostDetailDao.findDetail(externalLoadBalancer.getId(), "inline"); + return (detail != null && detail.getValue().equals("true")); + } + + @Override + public void updateExternalLoadBalancerNetworkUsageStats(long loadBalancerRuleId){ + + LoadBalancerVO lb = _loadBalancerDao.findById(loadBalancerRuleId); + if(lb == null){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Cannot update usage stats, LB rule is not found"); + } + return; + } + long networkId = lb.getNetworkId(); + Network network = _networkDao.findById(networkId); + if(network == null){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Cannot update usage stats, Network is not found"); + } + return; + } + ExternalLoadBalancerDeviceVO lbDeviceVO = getExternalLoadBalancerForNetwork(network); + if (lbDeviceVO == null) { + if(s_logger.isDebugEnabled()){ + s_logger.debug("Cannot update usage stats, No external LB device found"); + } + return; + } + + // Get network stats from the external load balancer + ExternalNetworkResourceUsageAnswer lbAnswer = null; + HostVO externalLoadBalancer = _hostDao.findById(lbDeviceVO.getHostId()); + if (externalLoadBalancer != null) { + ExternalNetworkResourceUsageCommand cmd = new ExternalNetworkResourceUsageCommand(); + lbAnswer = (ExternalNetworkResourceUsageAnswer) _agentMgr.easySend(externalLoadBalancer.getId(), cmd); + if (lbAnswer == null || !lbAnswer.getResult()) { + String details = (lbAnswer != null) ? lbAnswer.getDetails() : "details unavailable"; + String msg = "Unable to get external load balancer stats for network" + networkId + " due to: " + details + "."; + s_logger.error(msg); + return; + } + } + + long accountId = lb.getAccountId(); + AccountVO account = _accountDao.findById(accountId); + if (account == null) { + s_logger.debug("Skipping stats update for external LB for account with ID " + accountId); + return; + } + + String publicIp = _networkMgr.getIp(lb.getSourceIpAddressId()).getAddress().addr(); + DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); + String statsEntryIdentifier = "account " + account.getAccountName() + ", zone " + zone.getName() + ", network ID " + networkId + ", host ID " + externalLoadBalancer.getName(); + + long newCurrentBytesSent = 0; + long newCurrentBytesReceived = 0; + + if (publicIp != null) { + long[] bytesSentAndReceived = null; + statsEntryIdentifier += ", public IP: " + publicIp; + + if (externalLoadBalancer.getType().equals(Host.Type.ExternalLoadBalancer) && externalLoadBalancerIsInline(externalLoadBalancer)) { + // Look up stats for the guest IP address that's mapped to the public IP address + InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(publicIp); + + if (mapping != null) { + NicVO nic = _nicDao.findById(mapping.getNicId()); + String loadBalancingIpAddress = nic.getIp4Address(); + bytesSentAndReceived = lbAnswer.ipBytes.get(loadBalancingIpAddress); + + if (bytesSentAndReceived != null) { + bytesSentAndReceived[0] = 0; + } + } + } else { + bytesSentAndReceived = lbAnswer.ipBytes.get(publicIp); + } + + if (bytesSentAndReceived == null) { + s_logger.debug("Didn't get an external network usage answer for public IP " + publicIp); + } else { + newCurrentBytesSent += bytesSentAndReceived[0]; + newCurrentBytesReceived += bytesSentAndReceived[1]; + } + + UserStatisticsVO userStats; + final Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + userStats = _userStatsDao.lock(accountId, zone.getId(), networkId, publicIp, externalLoadBalancer.getId(), externalLoadBalancer.getType().toString()); + + if(userStats != null){ + long oldNetBytesSent = userStats.getNetBytesSent(); + long oldNetBytesReceived = userStats.getNetBytesReceived(); + long oldCurrentBytesSent = userStats.getCurrentBytesSent(); + long oldCurrentBytesReceived = userStats.getCurrentBytesReceived(); + String warning = "Received an external network stats byte count that was less than the stored value. Zone ID: " + userStats.getDataCenterId() + ", account ID: " + userStats.getAccountId() + "."; + + userStats.setCurrentBytesSent(newCurrentBytesSent); + if (oldCurrentBytesSent > newCurrentBytesSent) { + s_logger.warn(warning + "Stored bytes sent: " + oldCurrentBytesSent + ", new bytes sent: " + newCurrentBytesSent + "."); + userStats.setNetBytesSent(oldNetBytesSent + oldCurrentBytesSent); + } + + userStats.setCurrentBytesReceived(newCurrentBytesReceived); + if (oldCurrentBytesReceived > newCurrentBytesReceived) { + s_logger.warn(warning + "Stored bytes received: " + oldCurrentBytesReceived + ", new bytes received: " + newCurrentBytesReceived + "."); + userStats.setNetBytesReceived(oldNetBytesReceived + oldCurrentBytesReceived); + } + + if (_userStatsDao.update(userStats.getId(), userStats)) { + s_logger.debug("Successfully updated stats for " + statsEntryIdentifier); + } else { + s_logger.debug("Failed to update stats for " + statsEntryIdentifier); + } + }else { + s_logger.warn("Unable to find user stats entry for " + statsEntryIdentifier); + } + + txn.commit(); + }catch (final Exception e) { + txn.rollback(); + throw new CloudRuntimeException("Problem getting stats after reboot/stop ", e); + } + } + } + + protected class ExternalLoadBalancerDeviceNetworkUsageTask implements Runnable { + + public ExternalLoadBalancerDeviceNetworkUsageTask() { + + } + + @Override + public void run() { + GlobalLock scanLock = GlobalLock.getInternLock("ExternalLoadBalancerUsageManagerImpl"); + try { + if (scanLock.lock(20)) { + try { + runExternalLoadBalancerNetworkUsageTask(); + } finally { + scanLock.unlock(); + } + } + } catch (Exception e) { + s_logger.warn("Problems while getting external load balancer device usage", e); + } finally { + scanLock.releaseRef(); + } + } + + private void runExternalLoadBalancerNetworkUsageTask() { + s_logger.debug("External load balancer devices stats collector is running..."); + + for (DataCenterVO zone : _dcDao.listAll()) { + List domainRoutersInZone = _routerDao.listByDataCenter(zone.getId()); + if (domainRoutersInZone == null) { + continue; + } + Map lbDeviceUsageAnswerMap = new HashMap(); + List accountsProcessed = new ArrayList(); + + for (DomainRouterVO domainRouter : domainRoutersInZone) { + long accountId = domainRouter.getAccountId(); + + if (accountsProcessed.contains(new Long(accountId))) { + if (s_logger.isTraceEnabled()) { + s_logger.trace("Networks for Account " + accountId + " are already processed for external network usage, so skipping usage check."); + } + continue; + } + + long zoneId = zone.getId(); + + List networksForAccount = _networkDao.listBy(accountId, zoneId, Network.GuestType.Isolated); + if (networksForAccount == null) { + continue; + } + + for (NetworkVO network : networksForAccount) { + if (!_networkMgr.networkIsConfiguredForExternalNetworking(zoneId, network.getId())) { + s_logger.debug("Network " + network.getId() + " is not configured for external networking, so skipping usage check."); + continue; + } + + ExternalLoadBalancerDeviceVO lbDeviceVO = getExternalLoadBalancerForNetwork(network); + if (lbDeviceVO == null) { + continue; + } + + // Get network stats from the external load balancer + ExternalNetworkResourceUsageAnswer lbAnswer = null; + HostVO externalLoadBalancer = _hostDao.findById(lbDeviceVO.getHostId()); + if (externalLoadBalancer != null) { + Long lbDeviceId = new Long(externalLoadBalancer.getId()); + if (!lbDeviceUsageAnswerMap.containsKey(lbDeviceId)) { + ExternalNetworkResourceUsageCommand cmd = new ExternalNetworkResourceUsageCommand(); + lbAnswer = (ExternalNetworkResourceUsageAnswer) _agentMgr.easySend(externalLoadBalancer.getId(), cmd); + if (lbAnswer == null || !lbAnswer.getResult()) { + String details = (lbAnswer != null) ? lbAnswer.getDetails() : "details unavailable"; + String msg = "Unable to get external load balancer stats for " + zone.getName() + " due to: " + details + "."; + s_logger.error(msg); + continue; + } + lbDeviceUsageAnswerMap.put(lbDeviceId, lbAnswer); + } else { + if (s_logger.isTraceEnabled()) { + s_logger.trace("Reusing usage Answer for device id " + lbDeviceId + "for Network " + network.getId()); + } + lbAnswer = lbDeviceUsageAnswerMap.get(lbDeviceId); + } + } + + AccountVO account = _accountDao.findById(accountId); + if (account == null) { + s_logger.debug("Skipping stats update for account with ID " + accountId); + continue; + } + + if (!manageStatsEntries(true, accountId, zoneId, network, externalLoadBalancer, lbAnswer)) { + continue; + } + + manageStatsEntries(false, accountId, zoneId, network, externalLoadBalancer, lbAnswer); + } + + accountsProcessed.add(new Long(accountId)); + } + } + } + + private boolean updateBytes(UserStatisticsVO userStats, long newCurrentBytesSent, long newCurrentBytesReceived) { + long oldNetBytesSent = userStats.getNetBytesSent(); + long oldNetBytesReceived = userStats.getNetBytesReceived(); + long oldCurrentBytesSent = userStats.getCurrentBytesSent(); + long oldCurrentBytesReceived = userStats.getCurrentBytesReceived(); + String warning = "Received an external network stats byte count that was less than the stored value. Zone ID: " + userStats.getDataCenterId() + ", account ID: " + userStats.getAccountId() + "."; + + userStats.setCurrentBytesSent(newCurrentBytesSent); + if (oldCurrentBytesSent > newCurrentBytesSent) { + s_logger.warn(warning + "Stored bytes sent: " + oldCurrentBytesSent + ", new bytes sent: " + newCurrentBytesSent + "."); + userStats.setNetBytesSent(oldNetBytesSent + oldCurrentBytesSent); + } + + userStats.setCurrentBytesReceived(newCurrentBytesReceived); + if (oldCurrentBytesReceived > newCurrentBytesReceived) { + s_logger.warn(warning + "Stored bytes received: " + oldCurrentBytesReceived + ", new bytes received: " + newCurrentBytesReceived + "."); + userStats.setNetBytesReceived(oldNetBytesReceived + oldCurrentBytesReceived); + } + + return _userStatsDao.update(userStats.getId(), userStats); + } + + // Creates a new stats entry for the specified parameters, if one doesn't already exist. + private boolean createStatsEntry(long accountId, long zoneId, long networkId, String publicIp, long hostId) { + HostVO host = _hostDao.findById(hostId); + UserStatisticsVO userStats = _userStatsDao.findBy(accountId, zoneId, networkId, publicIp, hostId, host.getType().toString()); + if (userStats == null) { + return (_userStatsDao.persist(new UserStatisticsVO(accountId, zoneId, publicIp, hostId, host.getType().toString(), networkId)) != null); + } else { + return true; + } + } + + // Updates an existing stats entry with new data from the specified usage answer. + private boolean updateStatsEntry(long accountId, long zoneId, long networkId, String publicIp, long hostId, ExternalNetworkResourceUsageAnswer answer) { + AccountVO account = _accountDao.findById(accountId); + DataCenterVO zone = _dcDao.findById(zoneId); + NetworkVO network = _networkDao.findById(networkId); + HostVO host = _hostDao.findById(hostId); + String statsEntryIdentifier = "account " + account.getAccountName() + ", zone " + zone.getName() + ", network ID " + networkId + ", host ID " + host.getName(); + + long newCurrentBytesSent = 0; + long newCurrentBytesReceived = 0; + + if (publicIp != null) { + long[] bytesSentAndReceived = null; + statsEntryIdentifier += ", public IP: " + publicIp; + + if (host.getType().equals(Host.Type.ExternalLoadBalancer) && externalLoadBalancerIsInline(host)) { + // Look up stats for the guest IP address that's mapped to the public IP address + InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(publicIp); + + if (mapping != null) { + NicVO nic = _nicDao.findById(mapping.getNicId()); + String loadBalancingIpAddress = nic.getIp4Address(); + bytesSentAndReceived = answer.ipBytes.get(loadBalancingIpAddress); + + if (bytesSentAndReceived != null) { + bytesSentAndReceived[0] = 0; + } + } + } else { + bytesSentAndReceived = answer.ipBytes.get(publicIp); + } + + if (bytesSentAndReceived == null) { + s_logger.debug("Didn't get an external network usage answer for public IP " + publicIp); + } else { + newCurrentBytesSent += bytesSentAndReceived[0]; + newCurrentBytesReceived += bytesSentAndReceived[1]; + } + } else { + URI broadcastURI = network.getBroadcastUri(); + if (broadcastURI == null) { + s_logger.debug("Not updating stats for guest network with ID " + network.getId() + " because the network is not implemented."); + return true; + } else { + long vlanTag = Integer.parseInt(broadcastURI.getHost()); + long[] bytesSentAndReceived = answer.guestVlanBytes.get(String.valueOf(vlanTag)); + + if (bytesSentAndReceived == null) { + s_logger.warn("Didn't get an external network usage answer for guest VLAN " + vlanTag); + } else { + newCurrentBytesSent += bytesSentAndReceived[0]; + newCurrentBytesReceived += bytesSentAndReceived[1]; + } + } + } + + UserStatisticsVO userStats; + try { + userStats = _userStatsDao.lock(accountId, zoneId, networkId, publicIp, hostId, host.getType().toString()); + } catch (Exception e) { + s_logger.warn("Unable to find user stats entry for " + statsEntryIdentifier); + return false; + } + + if (updateBytes(userStats, newCurrentBytesSent, newCurrentBytesReceived)) { + s_logger.debug("Successfully updated stats for " + statsEntryIdentifier); + return true; + } else { + s_logger.debug("Failed to update stats for " + statsEntryIdentifier); + return false; + } + } + + private boolean createOrUpdateStatsEntry(boolean create, long accountId, long zoneId, long networkId, String publicIp, long hostId, ExternalNetworkResourceUsageAnswer answer) { + if (create) { + return createStatsEntry(accountId, zoneId, networkId, publicIp, hostId); + } else { + return updateStatsEntry(accountId, zoneId, networkId, publicIp, hostId, answer); + } + } + + /* + * Creates/updates all necessary stats entries for an account and zone. + * Stats entries are created for source NAT IP addresses, static NAT rules, port forwarding rules, and load + * balancing rules + */ + private boolean manageStatsEntries(boolean create, long accountId, long zoneId, Network network, + HostVO externalLoadBalancer, ExternalNetworkResourceUsageAnswer lbAnswer) { + String accountErrorMsg = "Failed to update external network stats entry. Details: account ID = " + accountId; + Transaction txn = Transaction.open(Transaction.CLOUD_DB); + try { + txn.start(); + String networkErrorMsg = accountErrorMsg + ", network ID = " + network.getId(); + + // If an external load balancer is added, manage one entry for each load balancing rule in this network + if (externalLoadBalancer != null && lbAnswer != null) { + List loadBalancers = _loadBalancerDao.listByNetworkId(network.getId()); + for (LoadBalancerVO loadBalancer : loadBalancers) { + String publicIp = _networkMgr.getIp(loadBalancer.getSourceIpAddressId()).getAddress().addr(); + if (!createOrUpdateStatsEntry(create, accountId, zoneId, network.getId(), publicIp, externalLoadBalancer.getId(), lbAnswer)) { + throw new ExecutionException(networkErrorMsg + ", load balancing rule public IP = " + publicIp); + } + } + } + return txn.commit(); + } catch (Exception e) { + s_logger.warn("Exception: ", e); + txn.rollback(); + return false; + } finally { + txn.close(); + } + } + } +} diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 3ea045dfbee..ffbb35d329c 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -52,8 +52,8 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.ExternalLoadBalancerDeviceManager; import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.ExternalLoadBalancerUsageManager; import com.cloud.network.IPAddressVO; import com.cloud.network.IpAddress; import com.cloud.network.LBStickinessPolicyVO; @@ -161,7 +161,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa @Inject ConfigurationManager _configMgr; @Inject - ExternalLoadBalancerDeviceManager _externalLBMgr; + ExternalLoadBalancerUsageManager _externalLBUsageMgr; @Inject NetworkServiceMapDao _ntwkSrvcDao; @@ -637,7 +637,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa NetworkVO network = _networkDao.findById(lb.getNetworkId()); if (network != null) { if (_networkMgr.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { - _externalLBMgr.updateExternalLoadBalancerNetworkUsageStats(loadBalancerId); + _externalLBUsageMgr.updateExternalLoadBalancerNetworkUsageStats(loadBalancerId); } } From 2992c608c4cd1d0e1a777cff6f63b468116fb55e Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Tue, 21 Feb 2012 17:50:09 -0800 Subject: [PATCH 49/54] bug 13919: do includingRemoved Nic search when remove firewall rules during the vm expunge status 13919: resolved fixed Reviewed-by: Sheng Yang --- .../commands/CreateIpForwardingRuleCmd.java | 2 +- .../commands/ListIpForwardingRulesCmd.java | 2 +- .../com/cloud/network/rules/RulesService.java | 2 +- .../VirtualNetworkApplianceManagerImpl.java | 2 +- .../com/cloud/network/rules/RulesManager.java | 2 +- .../cloud/network/rules/RulesManagerImpl.java | 25 +++++++++++-------- 6 files changed, 20 insertions(+), 15 deletions(-) diff --git a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java index 859144f775f..1d3d38c86c6 100644 --- a/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java +++ b/api/src/com/cloud/api/commands/CreateIpForwardingRuleCmd.java @@ -124,7 +124,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta result = result && _rulesService.applyStaticNatRules(ipAddressId, UserContext.current().getCaller()); rule = _entityMgr.findById(FirewallRule.class, getEntityId()); - StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule); + StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false); IpForwardingRuleResponse fwResponse = _responseGenerator.createIpForwardingRuleResponse(staticNatRule); fwResponse.setResponseName(getCommandName()); this.setResponseObject(fwResponse); diff --git a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java index e064c5bdec4..692f341845a 100644 --- a/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java +++ b/api/src/com/cloud/api/commands/ListIpForwardingRulesCmd.java @@ -87,7 +87,7 @@ public class ListIpForwardingRulesCmd extends BaseListProjectAndAccountResources ListResponse response = new ListResponse(); List ipForwardingResponses = new ArrayList(); for (FirewallRule rule : result) { - StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule); + StaticNatRule staticNatRule = _rulesService.buildStaticNatRule(rule, false); IpForwardingRuleResponse resp = _responseGenerator.createIpForwardingRuleResponse(staticNatRule); if (resp != null) { ipForwardingResponses.add(resp); diff --git a/api/src/com/cloud/network/rules/RulesService.java b/api/src/com/cloud/network/rules/RulesService.java index 55439632be3..c91b1263bbe 100644 --- a/api/src/com/cloud/network/rules/RulesService.java +++ b/api/src/com/cloud/network/rules/RulesService.java @@ -77,7 +77,7 @@ public interface RulesService { boolean applyStaticNatRules(long ipAdddressId, Account caller) throws ResourceUnavailableException; - StaticNatRule buildStaticNatRule(FirewallRule rule); + StaticNatRule buildStaticNatRule(FirewallRule rule, boolean forRevoke); List getSourceCidrs(long ruleId); diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 070e6a2b611..f0a4ae690bb 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1882,7 +1882,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (!staticNatFirewallRules.isEmpty()) { List staticNatRules = new ArrayList(); for (FirewallRule rule : staticNatFirewallRules) { - staticNatRules.add(_rulesMgr.buildStaticNatRule(rule)); + staticNatRules.add(_rulesMgr.buildStaticNatRule(rule, false)); } createApplyStaticNatRulesCommands(staticNatRules, router, cmds); } diff --git a/server/src/com/cloud/network/rules/RulesManager.java b/server/src/com/cloud/network/rules/RulesManager.java index 4d1cb113f35..3b3e6a1277b 100644 --- a/server/src/com/cloud/network/rules/RulesManager.java +++ b/server/src/com/cloud/network/rules/RulesManager.java @@ -33,7 +33,7 @@ public interface RulesManager extends RulesService { boolean applyPortForwardingRules(long ipAddressId, boolean continueOnError, Account caller); - boolean applyStaticNatRules(long sourceIpId, boolean continueOnError, Account caller); + boolean applyStaticNatRulesForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke); boolean applyPortForwardingRulesForNetwork(long networkId, boolean continueOnError, Account caller); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 38458404842..a8fb6894d61 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -495,7 +495,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { boolean success = false; if (apply) { - success = applyStaticNatRules(rule.getSourceIpAddressId(), true, caller); + success = applyStaticNatRulesForIp(rule.getSourceIpAddressId(), true, caller, true); } else { success = true; } @@ -563,7 +563,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { // apply rules for all ip addresses for (Long ipId : ipsToReprogram) { s_logger.debug("Applying static nat rules for ip address id=" + ipId + " as a part of vm expunge"); - if (!applyStaticNatRules(ipId, true, _accountMgr.getSystemAccount())) { + if (!applyStaticNatRulesForIp(ipId, true, _accountMgr.getSystemAccount(), true)) { success = false; s_logger.warn("Failed to apply static nat rules for ip id=" + ipId); } @@ -654,7 +654,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } @Override - public boolean applyStaticNatRules(long sourceIpId, boolean continueOnError, Account caller) { + public boolean applyStaticNatRulesForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke) { List rules = _firewallDao.listByIpAndPurpose(sourceIpId, Purpose.StaticNat); List staticNatRules = new ArrayList(); @@ -664,7 +664,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } for (FirewallRule rule : rules) { - staticNatRules.add(buildStaticNatRule(rule)); + staticNatRules.add(buildStaticNatRule(rule, forRevoke)); } if (caller != null) { @@ -722,7 +722,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } for (FirewallRuleVO rule : rules) { - staticNatRules.add(buildStaticNatRule(rule)); + staticNatRules.add(buildStaticNatRule(rule, false)); } try { @@ -833,7 +833,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { @Override @ActionEvent(eventType = EventTypes.EVENT_NET_RULE_ADD, eventDescription = "applying static nat rule", async = true) public boolean applyStaticNatRules(long ipId, Account caller) throws ResourceUnavailableException { - if (!applyStaticNatRules(ipId, false, caller)) { + if (!applyStaticNatRulesForIp(ipId, false, caller, false)) { throw new CloudRuntimeException("Failed to apply static nat rule"); } return true; @@ -869,7 +869,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { success = success && applyPortForwardingRules(ipId, true, caller); // revoke all all static nat rules - success = success && applyStaticNatRules(ipId, true, caller); + success = success && applyStaticNatRulesForIp(ipId, true, caller, true); // revoke static nat for the ip address success = success && applyStaticNatForIp(ipId, false, caller, true); @@ -1112,15 +1112,20 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } @Override - public StaticNatRule buildStaticNatRule(FirewallRule rule) { + public StaticNatRule buildStaticNatRule(FirewallRule rule, boolean forRevoke) { IpAddress ip = _ipAddressDao.findById(rule.getSourceIpAddressId()); FirewallRuleVO ruleVO = _firewallDao.findById(rule.getId()); if (ip == null || !ip.isOneToOneNat() || ip.getAssociatedWithVmId() == null) { throw new InvalidParameterValueException("Source ip address of the rule id=" + rule.getId() + " is not static nat enabled"); } - - String dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), rule.getNetworkId()); + + String dstIp; + if (forRevoke) { + dstIp = _networkMgr.getIpInNetworkIncludingRemoved(ip.getAssociatedWithVmId(), rule.getNetworkId()); + } else { + dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), rule.getNetworkId()); + } return new StaticNatRuleImpl(ruleVO, dstIp); } From 240dabea4b2e03c48ba0fe123ebdbb4f34c4f6e5 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Tue, 21 Feb 2012 18:53:28 -0800 Subject: [PATCH 50/54] Navigation organizational changes -Rename 'System' -> 'Infrastructure' -Rename 'service offering' -> 'compute offering' (including all associated labels) -Rename 'Configuration' -> 'Service Offerings' -Move hypervisor capabilities under global settings -Rename 'Compute' -> 'Compute and storage' --- .../classes/resources/messages.properties | 9 +- ui/index.jsp | 11 +- ui/scripts/configuration.js | 104 +--------- ui/scripts/globalSettings.js | 178 ++++++++++++++---- ui/scripts/instances.js | 4 +- ui/scripts/system.js | 8 +- 6 files changed, 166 insertions(+), 148 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index 3262e1c7206..95cf862a0bc 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -1,4 +1,9 @@ #new labels (begin) ********************************************************************************************** +label.add.compute.offering=Add compute offering +label.compute.offering=Compute offering +label.compute.offerings=Compute offerings +label.select.offering=Select offering +label.menu.infrastructure=Infrastructure label.sticky.tablesize=Table size label.sticky.expire=Expires label.sticky.cookie-name=Cookie name @@ -317,7 +322,7 @@ label.guest.type=Guest Type label.specify.IP.ranges=Specify IP ranges label.conserve.mode=Conserve mode label.created.by.system=Created by system -label.menu.system.service.offerings=System Service Offerings +label.menu.system.service.offerings=System Offerings label.add.system.service.offering=Add System Service Offering label.redundant.router.capability=Redundant router capability label.supported.source.NAT.type=Supported Source NAT type @@ -1254,7 +1259,7 @@ message.add.pod=Add a new pod for zone , pod message.add.primary=Please specify the following parameters to add a new primary storage message.add.secondary.storage=Add a new storage for zone -message.add.service.offering=Please fill in the following data to add a new service offering. +message.add.service.offering=Please fill in the following data to add a new compute offering. message.add.template=Please enter the following data to create your new template message.add.volume=Please fill in the following data to add a new volume. message.additional.networks.desc=Please select additional network(s) that your virtual instance will be connected to. diff --git a/ui/index.jsp b/ui/index.jsp index c87b699b5c2..59dfa4dd203 100644 --- a/ui/index.jsp +++ b/ui/index.jsp @@ -68,7 +68,7 @@
  • 1
  • 2
  • -
  • 3
  • +
  • 3
  • 4
  • 5
  • 6
  • @@ -260,7 +260,7 @@
    -
    +
    @@ -362,7 +362,7 @@
    - +
    @@ -1614,6 +1614,11 @@